<?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>146156</bug_id>
          
          <creation_ts>2015-06-19 13:16:28 -0700</creation_ts>
          <short_desc>JetStream should include a JavaScript version of the CDx real-time benchmark</short_desc>
          <delta_ts>2015-06-19 16:51:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1103376</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-19 13:16:28 -0700</bug_when>
    <thetext>JetStream tries to emphasize latency.  Our current latency testing story involves code load tests, short-running tests that offer only small opportunities for warm-up, and tests that measure performance above the 95th percentile.

In academia, there is a test that was used a lot for Real Time Java.  It&apos;s called CDx.  It&apos;s a simple aircraft collision detection simulation.  It was used in my dissertation and some of my academic papers, and I was one of the co-authors of this original test.  Here&apos;s the benchmark URL:

https://www.cs.purdue.edu/sss/projects/cdx/

Here are some of the publications based on this benchmark:

https://www.cs.purdue.edu/sss/projects/cdx/publications/

CDx is meant to be easy to implement in different languages.  It has a C implementation, for example.  We should port it to JavaScript, add it to JetStream as a 95th percentile worst-case test, and retire whatever SunSpider test is least useful (probably cordic, since it&apos;s so tiny).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103387</commentid>
    <comment_count>1</comment_count>
      <attachid>255221</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-19 13:32:18 -0700</bug_when>
    <thetext>Created attachment 255221
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103389</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-19 13:35:10 -0700</bug_when>
    <thetext>Attachment 255221 did not pass style-queue:


ERROR: PerformanceTests/JetStream/cdjs/motion.js:61:  Line contains tab character.  [whitespace/tab] [5]
ERROR: PerformanceTests/JetStream/cdjs/motion.js:62:  Line contains tab character.  [whitespace/tab] [5]
ERROR: PerformanceTests/JetStream/cdjs/motion.js:63:  Line contains tab character.  [whitespace/tab] [5]
ERROR: PerformanceTests/JetStream/cdjs/motion.js:64:  Line contains tab character.  [whitespace/tab] [5]
ERROR: PerformanceTests/JetStream/cdjs/motion.js:65:  Line contains tab character.  [whitespace/tab] [5]
ERROR: PerformanceTests/JetStream/cdjs/motion.js:66:  Line contains tab character.  [whitespace/tab] [5]
ERROR: PerformanceTests/JetStream/cdjs/motion.js:67:  Line contains tab character.  [whitespace/tab] [5]
ERROR: PerformanceTests/JetStream/cdjs/motion.js:68:  Line contains tab character.  [whitespace/tab] [5]
ERROR: PerformanceTests/JetStream/cdjs/motion.js:69:  Line contains tab character.  [whitespace/tab] [5]
ERROR: PerformanceTests/JetStream/cdjs/motion.js:70:  Line contains tab character.  [whitespace/tab] [5]
ERROR: PerformanceTests/JetStream/cdjs/motion.js:71:  Line contains tab character.  [whitespace/tab] [5]
ERROR: PerformanceTests/JetStream/cdjs/motion.js:72:  Line contains tab character.  [whitespace/tab] [5]
ERROR: PerformanceTests/JetStream/cdjs/motion.js:73:  Line contains tab character.  [whitespace/tab] [5]
ERROR: PerformanceTests/JetStream/cdjs/motion.js:74:  Line contains tab character.  [whitespace/tab] [5]
ERROR: PerformanceTests/JetStream/cdjs/motion.js:75:  Line contains tab character.  [whitespace/tab] [5]
ERROR: PerformanceTests/JetStream/cdjs/motion.js:76:  Line contains tab character.  [whitespace/tab] [5]
ERROR: PerformanceTests/JetStream/cdjs/motion.js:77:  Line contains tab character.  [whitespace/tab] [5]
ERROR: PerformanceTests/JetStream/cdjs/motion.js:78:  Line contains tab character.  [whitespace/tab] [5]
ERROR: PerformanceTests/JetStream/cdjs/motion.js:79:  Line contains tab character.  [whitespace/tab] [5]
ERROR: PerformanceTests/JetStream/cdjs/motion.js:80:  Line contains tab character.  [whitespace/tab] [5]
ERROR: PerformanceTests/JetStream/cdjs/motion.js:81:  Line contains tab character.  [whitespace/tab] [5]
ERROR: PerformanceTests/JetStream/cdjs/motion.js:82:  Line contains tab character.  [whitespace/tab] [5]
ERROR: PerformanceTests/JetStream/cdjs/reduce_collision_set.js:103:  Line contains tab character.  [whitespace/tab] [5]
ERROR: PerformanceTests/JetStream/cdjs/reduce_collision_set.js:105:  Line contains tab character.  [whitespace/tab] [5]
ERROR: PerformanceTests/JetStream/cdjs/reduce_collision_set.js:106:  Line contains tab character.  [whitespace/tab] [5]
ERROR: PerformanceTests/JetStream/cdjs/reduce_collision_set.js:108:  Line contains tab character.  [whitespace/tab] [5]
ERROR: PerformanceTests/JetStream/cdjs/reduce_collision_set.js:109:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 27 in 23 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103393</commentid>
    <comment_count>3</comment_count>
      <attachid>255221</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-06-19 13:41:45 -0700</bug_when>
    <thetext>Comment on attachment 255221
the patch

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

r=me

&gt; PerformanceTests/JetStream/cdjs/motion.js:94
&gt; +        var b = 2 * init1.minus(init2).dot(vec1.minus(vec2));
&gt; +        
&gt; +        // c = -r^2 + (I2 - I1)^T * (I2 - I1)
&gt; +        var c = -radius * radius + init2.minus(init1).squaredMagnitude();
&gt; +        
&gt; +        var discr = b * b - 4 * a * c;
&gt; +        if (discr &lt; 0)
&gt; +            return null;
&gt; +        
&gt; +        var v1 = (-b - Math.sqrt(discr)) / (2 * a);
&gt; +        var v2 = (-b + Math.sqrt(discr)) / (2 * a);

This indentation looks off.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103478</commentid>
    <comment_count>4</comment_count>
      <attachid>255244</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-19 16:27:26 -0700</bug_when>
    <thetext>Created attachment 255244
patch for landing

I think I got rid of all of those tabs that were messing up indentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103494</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-19 16:51:41 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/185780</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255221</attachid>
            <date>2015-06-19 13:32:18 -0700</date>
            <delta_ts>2015-06-19 16:27:26 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>86522</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODU3NjMpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNCBAQAorMjAxNS0wNi0xOSAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEpldFN0cmVhbSBzaG91
bGQgaW5jbHVkZSBhIEphdmFTY3JpcHQgdmVyc2lvbiBvZiB0aGUgQ0R4IHJlYWwtdGltZSBiZW5j
aG1hcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
NjE1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBhZGRzIGEgSmF2YVNjcmlwdCBwb3J0IG9mIHRoZSBDRHggcmVhbC10aW1lIGJl
bmNobWFyayB0byBKZXRTdHJlYW0sIGFuZCByZXRpcmVzCisgICAgICAgIHRoZSBjb3JkaWMgdGVz
dCBiZWNhdXNlIGl0IHdhcyBwcmV2aW91c2x5IHRoZSBzbWFsbGVzdCBhbmQgcHJvYmFibHkgbGVh
c3QgaW50ZXJlc3RpbmcuCisgICAgICAgIAorICAgICAgICBUaGUgbmV3IHRlc3QsICJjZGpzIiwg
aXMgbW9zdGx5IGEgZmFpdGhmdWwgcmV3cml0ZSBvZiB0aGUgSmF2YSBjb2RlIGludG8gSmF2YVNj
cmlwdC4KKyAgICAgICAgSSBnb3QgdGhlIEphdmEgY29kZSBmcm9tIGh0dHBzOi8vd3d3LmNzLnB1
cmR1ZS5lZHUvc3NzL3Byb2plY3RzL2NkeC8uCisgICAgICAgIAorICAgICAgICBUaGVyZSBhcmUg
c29tZSBkaWZmZXJlbmNlczoKKyAgICAgICAgCisgICAgICAgIC0gSXQgdXNlcyBSZWRCbGFja1Ry
ZWUncyBmb3IgYWxsIHNldHMgYW5kIG1hcHMgcmF0aGVyIHRoYW4gaGFzaHRhYmxlcy4gVGhpcyBp
cyBjbGVhcmx5CisgICAgICAgICAgbW9yZSBpbiB0aGUgc3Bpcml0IG9mIHJlYWwtdGltZSB0aGFu
IHRoZSBDRHggYmVuY2htYXJrLiBGV0lXLCBDRHggdXNlZCB0byB1c2UgdHJlZXMKKyAgICAgICAg
ICBhbmQgSSBkb24ndCBrbm93IHdoeSB0aGF0IGNoYW5nZWQgaW4gdGhlIGxhdGVzdCB2ZXJzaW9u
LgorICAgICAgICAKKyAgICAgICAgLSBDRGpzIGRvZXNuJ3QgYXR0ZW1wdCB0byBhdm9pZCBtZW1v
cnkgYWxsb2NhdGlvbnMsIHVubGlrZSB0aGUgcmVhbC10aW1lIEphdmEgdmVyc2lvbi4KKyAgICAg
ICAgICBJIHdyb3RlIHRoZSBjb2RlIHRoYXQgSSB3YW50ZWQgdG8gd3JpdGUgZm9yIGFlc3RoZXRp
Y3MsIHJhdGhlciB0aGFuIHRoZSBjb2RlIHRoYXQgSQorICAgICAgICAgIHdvdWxkIGhhdmUgd3Jp
dHRlbiBpZiBJIHRyaWVkIHRvIHdyaXRlIHRoZSBmYXN0ZXN0IGNvZGUgcG9zc2libGUuIEFnYWlu
LCBJIGJlbGlldmUKKyAgICAgICAgICB0aGF0IHRoaXMgaXMgaW4gdGhlIHNwaXJpdCBvZiBDRGog
LSBpdCdzIG1lYW50IHRvIHRlc3Qgd2hhdCB3b3VsZCBoYXBwZW4gaWYgeW91IHdyb3RlCisgICAg
ICAgICAgcmVhbC10aW1leSBzdHVmZiBpbiBhIGhpZ2ggbGV2ZWwgbGFuZ3VhZ2UgYW5kIGFjdHVh
bGx5IHRvb2sgYWR2YW50YWdlIG9mIHRoYXQKKyAgICAgICAgICBsYW5ndWFnZSB0byBiZSBtb3Jl
IHByb2R1Y3RpdmUuCisgICAgICAgIAorICAgICAgICBUaGUgdGVzdCBzY29yZSByZWZsZWN0cyB0
aGUgYXZlcmFnZSBsYXRlbmN5IG9mIHRoZSB3b3JzdCAxMCBzYW1wbGVzIG91dCBvZiAyMDAgc2Ft
cGxlcy4KKyAgICAgICAgVGhlIHNpbXVsYXRpb24gdXNlcyAxMDAwIGFpcmNyYWZ0LCBmbHlpbmcg
YWxvbmcgcGF0aHMgdGhhdCByZXN1bHQgaW4gc29tZSBkZXRlY3RlZAorICAgICAgICBjb2xsaXNp
b25zIGV2ZXJ5IG9uY2UgaW4gYSB3aGlsZS4gVGhlIGJlbmNobWFyayB2YWxpZGF0ZXMgaXRzIHJl
c3VsdHMgYnkgY2hlY2tpbmcgdGhlCisgICAgICAgIHRvdGFsIG51bWJlciBvZiBjb2xsaXNpb25z
IGRldGVjdGVkLgorICAgICAgICAKKyAgICAgICAgQXBhcnQgZnJvbSB0aGUgaW50ZWdyYXRpb24g
aW50byB0aGUgSmV0U3RyZWFtIGhhcm5lc3MsIHRoZSBDRGpzIGRpcmVjdG9yeSBjb250YWlucyBh
CisgICAgICAgIGZ1bGx5IHNlbGYtY29udGFpbmVkIGJlbmNobWFyayB0aGF0IGNvdWxkIGJlIHJ1
biBlaXRoZXIgaW4gdGhlIGpzYyBzaGVsbCBvciBpbiBicm93c2VyLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBuZXcgY29kZSB1c2VzIHRoZSBzYW1lIDMtY2xhdXNlIEJTRCBsaWNlbnNlIGFzIHRo
ZSBQdXJkdWUgY29kZSwgYW5kIGdpdmVzCisgICAgICAgIGF0dHJpYnV0aW9uIHRvIFB1cmR1ZSBp
biBhbG1vc3QgYWxsIGZpbGVzLiBJIGJlbGlldmUgdGhhdCBpcyBhcHByb3ByaWF0ZSBzaW5jZSBJ
IHdyb3RlCisgICAgICAgIG1vc3Qgb2YgdGhlIEpTIGZpbGVzIGJ5IGxvb2tpbmcgYXQgdGhlIFB1
cmR1ZSBKYXZhIGNvZGUgYW5kIHRyYXNjcmliaW5nIHRvIEphdmFTY3JpcHQuCisgICAgICAgIElu
IHNvbWUgY2FzZXMsIEkgZXZlbiBjb3B5LXBhc3RlZCB0aGUgSmF2YSBjb2RlLCBsaWtlIHRoZSBj
b21wbGljYXRlZCBtYXRoIGZvcgorICAgICAgICBmb3VyLWRpbWVuc2lvbmFsIGludGVyc2VjdGlv
bnMgYW5kIHZveGVsIGhhc2hpbmcuCisKKyAgICAgICAgKiBKZXRTdHJlYW0vQ0Rqc1NldHVwLmpz
OiBBZGRlZC4KKyAgICAgICAgKiBKZXRTdHJlYW0vT2N0YW5lMlNldHVwLmpzOgorICAgICAgICAq
IEpldFN0cmVhbS9SZWZlcmVuY2UuanM6CisgICAgICAgICogSmV0U3RyZWFtL2NkanM6IEFkZGVk
LgorICAgICAgICAqIEpldFN0cmVhbS9jZGpzL2JlbmNobWFyay5qczogQWRkZWQuCisgICAgICAg
IChiZW5jaG1hcmspOgorICAgICAgICAqIEpldFN0cmVhbS9jZGpzL2NhbGxfc2lnbi5qczogQWRk
ZWQuCisgICAgICAgIChDYWxsU2lnbik6CisgICAgICAgIChDYWxsU2lnbi5wcm90b3R5cGUuY29t
cGFyZVRvKToKKyAgICAgICAgKENhbGxTaWduLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAgICAg
ICogSmV0U3RyZWFtL2NkanMvY29sbGlzaW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKENvbGxpc2lv
bik6CisgICAgICAgIChDb2xsaXNpb24ucHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKiBK
ZXRTdHJlYW0vY2Rqcy9jb2xsaXNpb25fZGV0ZWN0b3IuanM6IEFkZGVkLgorICAgICAgICAoQ29s
bGlzaW9uRGV0ZWN0b3IpOgorICAgICAgICAoQ29sbGlzaW9uRGV0ZWN0b3IucHJvdG90eXBlLmhh
bmRsZU5ld0ZyYW1lLmdldCBmb3IpOgorICAgICAgICAoQ29sbGlzaW9uRGV0ZWN0b3IucHJvdG90
eXBlLmhhbmRsZU5ld0ZyYW1lKToKKyAgICAgICAgKiBKZXRTdHJlYW0vY2Rqcy9jb25zdGFudHMu
anM6IEFkZGVkLgorICAgICAgICAqIEpldFN0cmVhbS9jZGpzL21haW4uaHRtbDogQWRkZWQuCisg
ICAgICAgICogSmV0U3RyZWFtL2NkanMvbWFpbi5qczogQWRkZWQuCisgICAgICAgICogSmV0U3Ry
ZWFtL2NkanMvbW90aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKE1vdGlvbik6CisgICAgICAgIChN
b3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKE1vdGlvbi5wcm90b3R5cGUuZGVs
dGEpOgorICAgICAgICAoTW90aW9uLnByb3RvdHlwZS5maW5kSW50ZXJzZWN0aW9uKToKKyAgICAg
ICAgKiBKZXRTdHJlYW0vY2Rqcy9tb3Rpb25fdGVzdC5qczogQWRkZWQuCisgICAgICAgIChjaGVj
a0RvZXNJbnRlcnNlY3QpOgorICAgICAgICAoY2hlY2tEb2VzTm90SW50ZXJzZWN0KToKKyAgICAg
ICAgKG1ha2VNb3Rpb24pOgorICAgICAgICAqIEpldFN0cmVhbS9jZGpzL3JlZF9ibGFja190cmVl
LmpzOiBBZGRlZC4KKyAgICAgICAgKFJlZEJsYWNrVHJlZSk6CisgICAgICAgIChSZWRCbGFja1Ry
ZWUuKToKKyAgICAgICAgKiBKZXRTdHJlYW0vY2Rqcy9yZWRfYmxhY2tfdHJlZV90ZXN0LmpzOiBB
ZGRlZC4KKyAgICAgICAgKHRlc3QpOgorICAgICAgICAodGVzdC4pOgorICAgICAgICAqIEpldFN0
cmVhbS9jZGpzL3JlZHVjZV9jb2xsaXNpb25fc2V0LmpzOiBBZGRlZC4KKyAgICAgICAgKGRyYXdN
b3Rpb25PblZveGVsTWFwKToKKyAgICAgICAgKGRyYXdNb3Rpb25PblZveGVsTWFwLik6CisgICAg
ICAgICguZ2V0IHJlZHVjZUNvbGxpc2lvblNldCk6CisgICAgICAgICogSmV0U3RyZWFtL2NkanMv
cmVkdWNlX2NvbGxpc2lvbl9zZXRfdGVzdC5qczogQWRkZWQuCisgICAgICAgIChtYWtlTW90aW9u
KToKKyAgICAgICAgKGtleXMpOgorICAgICAgICAodGVzdCk6CisgICAgICAgICogSmV0U3RyZWFt
L2NkanMvc2ltdWxhdG9yLmpzOiBBZGRlZC4KKyAgICAgICAgKFNpbXVsYXRvcik6CisgICAgICAg
IChTaW11bGF0b3IucHJvdG90eXBlLnNpbXVsYXRlKToKKyAgICAgICAgKiBKZXRTdHJlYW0vY2Rq
cy91dGlsLmpzOiBBZGRlZC4KKyAgICAgICAgKGNvbXBhcmVOdW1iZXJzKToKKyAgICAgICAgKGF2
ZXJhZ2VBYm92ZVBlcmNlbnRpbGUpOgorICAgICAgICAoY3VycmVudFRpbWUpOgorICAgICAgICAo
ZWxzZS5jdXJyZW50VGltZSk6CisgICAgICAgICogSmV0U3RyZWFtL2NkanMvdmVjdG9yXzJkLmpz
OiBBZGRlZC4KKyAgICAgICAgKFZlY3RvcjJEKToKKyAgICAgICAgKFZlY3RvcjJELnByb3RvdHlw
ZS5wbHVzKToKKyAgICAgICAgKFZlY3RvcjJELnByb3RvdHlwZS5taW51cyk6CisgICAgICAgIChW
ZWN0b3IyRC5wcm90b3R5cGUudG9TdHJpbmcpOgorICAgICAgICAoVmVjdG9yMkQucHJvdG90eXBl
LmNvbXBhcmVUbyk6CisgICAgICAgICogSmV0U3RyZWFtL2NkanMvdmVjdG9yXzNkLmpzOiBBZGRl
ZC4KKyAgICAgICAgKFZlY3RvcjNEKToKKyAgICAgICAgKFZlY3RvcjNELnByb3RvdHlwZS5wbHVz
KToKKyAgICAgICAgKFZlY3RvcjNELnByb3RvdHlwZS5taW51cyk6CisgICAgICAgIChWZWN0b3Iz
RC5wcm90b3R5cGUuZG90KToKKyAgICAgICAgKFZlY3RvcjNELnByb3RvdHlwZS5zcXVhcmVkTWFn
bml0dWRlKToKKyAgICAgICAgKFZlY3RvcjNELnByb3RvdHlwZS5tYWduaXR1ZGUpOgorICAgICAg
ICAoVmVjdG9yM0QucHJvdG90eXBlLnRpbWVzKToKKyAgICAgICAgKFZlY3RvcjNELnByb3RvdHlw
ZS5hczJEKToKKyAgICAgICAgKFZlY3RvcjNELnByb3RvdHlwZS50b1N0cmluZyk6CisgICAgICAg
ICogSmV0U3RyZWFtL2NyZWF0ZS5yYjoKKyAgICAgICAgKiBKZXRTdHJlYW0vaW5kZXgtVEVNUExB
VEUuaHRtbDoKKyAgICAgICAgKiBKZXRTdHJlYW0vc3Vuc3BpZGVyL2NvcmRpYy5qczogUmVtb3Zl
ZC4KKwogMjAxNS0wNi0xNyAgSmF2aWVyIEZlcm5hbmRleiAgPGpmZXJuYW5kZXpAaWdhbGlhLmNv
bT4KIAogICAgICAgICBbQ1NTIEdyaWQgTGF5b3V0XSBXZSBzaG91bGQgYWRkIHBlcmZvcm1hbmNl
IHRlc3RzIGZvciBzdHJldGNoaW5nIGxvZ2ljCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbS9DRGpzU2V0dXAuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0vQ0Rqc1NldHVwLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0vQ0Rqc1NldHVwLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8vIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKy8vIGFyZSBtZXQ6CisvLyAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorLy8gMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKy8vICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisv
LworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworLy8gQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisvLyBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisv
LyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKy8vIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKy8vIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisvLyBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKy8vIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisvLyBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorLy8g
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorLy8gVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCit2YXIg
Q0Rqc0ZpbGVzID0gWworICAgICJjb25zdGFudHMuanMiLAorICAgICJ1dGlsLmpzIiwKKyAgICAi
cmVkX2JsYWNrX3RyZWUuanMiLAorICAgICJjYWxsX3NpZ24uanMiLAorICAgICJ2ZWN0b3JfMmQu
anMiLAorICAgICJ2ZWN0b3JfM2QuanMiLAorICAgICJtb3Rpb24uanMiLAorICAgICJyZWR1Y2Vf
Y29sbGlzaW9uX3NldC5qcyIsCisgICAgInNpbXVsYXRvci5qcyIsCisgICAgImNvbGxpc2lvbi5q
cyIsCisgICAgImNvbGxpc2lvbl9kZXRlY3Rvci5qcyIsCisgICAgImJlbmNobWFyay5qcyIKK107
CisKK3ZhciBjb2RlID0gIiI7Citmb3IgKHZhciBpID0gMDsgaSA8IENEanNGaWxlcy5sZW5ndGg7
ICsraSkKKyAgICBjb2RlICs9ICI8c2NyaXB0IHNyYz1cIkNEanMvIiArIENEanNGaWxlc1tpXSAr
ICJcIj48L3NjcmlwdD5cbiI7Citjb2RlICs9ICI8c2NyaXB0PlxuIjsKK2NvZGUgKz0gImNvbnNv
bGUubG9nKFwicnVubmluZy4uLlwiKTtcbiI7Citjb2RlICs9ICJ2YXIgX19yZXN1bHQgPSBiZW5j
aG1hcmsoKTtcbiI7Citjb2RlICs9ICJjb25zb2xlLmxvZyhcImdvdCByZXN1bHQ6IFwiICsgX19y
ZXN1bHQpO1xuIjsKK2NvZGUgKz0gInRvcC5KZXRTdHJlYW0ucmVwb3J0UmVzdWx0KF9fcmVzdWx0
KTtcbiI7Citjb2RlICs9ICI8L3NjcmlwdD4iOworCitjb25zb2xlLmxvZygiY29kZSA9ICIgKyBj
b2RlKTsKKworSmV0U3RyZWFtLmFkZFBsYW4oeworICAgIG5hbWU6ICJjZGpzIiwKKyAgICBiZW5j
aG1hcmtzOiBbeworICAgICAgICBuYW1lOiAiY2RqcyIsCisgICAgICAgIGNhdGVnb3J5OiAiTGF0
ZW5jeSIsCisgICAgICAgIHVuaXQ6ICJtcyIKKyAgICB9XSwKKyAgICBjb2RlOiBjb2RlCit9KTsK
KwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vT2N0YW5lMlNldHVwLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtL09jdGFuZTJTZXR1cC5qcwkocmV2
aXNpb24gMTg1NzU3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vT2N0YW5lMlNldHVw
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNCwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLwogLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAv
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQ5LDcgKzQ5LDcgQEAgZm9yICh2YXIgaSA9IDA7IGkgPCBPY3RhbmUy
U3VpdGVzLmxlbmd0aAogICAgIGlmIChzdWl0ZS5sYXRlbmN5KSB7CiAgICAgICAgIG15QmVuY2ht
YXJrcy5wdXNoKHsKICAgICAgICAgICAgIG5hbWU6IHN1aXRlLm5hbWUgKyAiLWxhdGVuY3kiLAot
ICAgICAgICAgICAgcHJlZml4OiAiJnNpZ21hOyA9ICIsCisgICAgICAgICAgICB1bml0OiAibXMi
LAogICAgICAgICAgICAgY2F0ZWdvcnk6ICJMYXRlbmN5IgogICAgICAgICB9KTsKICAgICB9Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9SZWZlcmVuY2UuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vUmVmZXJlbmNlLmpzCShyZXZpc2lvbiAxODU3
NTcpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9SZWZlcmVuY2UuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vCiAvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIC8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjUsNyArMjUsNiBAQCBKZXRTdHJlYW0uYWRkUmVmZXJlbmNlcyh7CiAgICAgIjNkLWN1YmUi
OiA3LjMsCiAgICAgIjNkLXJheXRyYWNlIjogOC4wNSwKICAgICAiYmFzZTY0IjogNC4yLAotICAg
ICJjb3JkaWMiOiAzLAogICAgICJjcnlwdG8tYWVzIjogNi42LAogICAgICJjcnlwdG8tbWQ1Ijog
MywKICAgICAiY3J5cHRvLXNoYTEiOiAyLjA1LApAQCAtNjUsNSArNjQsNiBAQCBKZXRTdHJlYW0u
YWRkUmVmZXJlbmNlcyh7CiAgICAgInpsaWIiOiA4ODcuNjY2NjY2NjY2NjY2LAogICAgICJ0eXBl
c2NyaXB0IjogMTE0OS45OTk5OTk5OTk5OTkzLAogICAgICJsdWEiOiAyOTg1OCwKKyAgICAiY2Rq
cyI6IDE0LAogICAgICJnZW9tZWFuIjogMzEuNTU2NDUxNzA0NDcyMTU2LAogfSk7CkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jcmVhdGUucmIKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0vY3JlYXRlLnJiCShyZXZpc2lvbiAxODU3NTcpCisrKyBQZXJm
b3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jcmVhdGUucmIJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDcgQEAKIHJlcXVpcmUgInBhdGhuYW1lIgogcmVxdWlyZSAic2hlbGx3b3JkcyIKIAotVkVS
U0lPTiA9ICIxLjEtYWxwaGExIgorVkVSU0lPTiA9ICIxLjEtYWxwaGEyIgogRElSRUNUT1JZX05B
TUUgPSAiSmV0U3RyZWFtLSN7VkVSU0lPTn0iCiAKIHJhaXNlIHVubGVzcyBzeXN0ZW0oInJtIC1y
ZiAiICsgRElSRUNUT1JZX05BTUUpCkBAIC0zNCw3ICszNCw3IEBAIHJhaXNlIHVubGVzcyBzeXN0
ZW0oIm1rZGlyIC1wICIgKyBESVJFQ1QKIHJhaXNlIHVubGVzcyBzeXN0ZW0oIm1rZGlyIC1wICN7
RElSRUNUT1JZX05BTUV9L3N1bnNwaWRlciIpCiByYWlzZSB1bmxlc3Mgc3lzdGVtKCJta2RpciAt
cCAje0RJUkVDVE9SWV9OQU1FfS9zb3VyY2VzIikKIHJhaXNlIHVubGVzcyBzeXN0ZW0oImNwIHN1
bnNwaWRlci8qLmpzICN7RElSRUNUT1JZX05BTUV9L3N1bnNwaWRlciIpCi1yYWlzZSB1bmxlc3Mg
c3lzdGVtKCJjcCAtciBKZXRTdHJlYW0uY3NzIEpldFN0cmVhbURyaXZlci5qcyBMTFZNLXRlc3Qt
c3VpdGUtTElDRU5TRS50eHQgc2ltcGxlIE9jdGFuZTIgT2N0YW5lMlNldHVwLmpzIFNpbXBsZVNl
dHVwLmpzIFN1blNwaWRlclNldHVwLmpzIE9jdGFuZSBPY3RhbmVTZXR1cC5qcyBSZWZlcmVuY2Uu
anMgVGVzdGluZ1NldHVwLmpzIEpldFN0cmVhbS1Mb2dvLnBuZyBKZXRTdHJlYW0tTG9nb0AyeC5w
bmcgU3dvb3NoLnBuZyBTd29vc2hAMngucG5nICIgKyBESVJFQ1RPUllfTkFNRSkKK3JhaXNlIHVu
bGVzcyBzeXN0ZW0oImNwIC1yIEpldFN0cmVhbS5jc3MgSmV0U3RyZWFtRHJpdmVyLmpzIExMVk0t
dGVzdC1zdWl0ZS1MSUNFTlNFLnR4dCBzaW1wbGUgT2N0YW5lMiBPY3RhbmUyU2V0dXAuanMgU2lt
cGxlU2V0dXAuanMgU3VuU3BpZGVyU2V0dXAuanMgT2N0YW5lIE9jdGFuZVNldHVwLmpzIENEanNT
ZXR1cC5qcyBDRGpzIFJlZmVyZW5jZS5qcyBUZXN0aW5nU2V0dXAuanMgSmV0U3RyZWFtLUxvZ28u
cG5nIEpldFN0cmVhbS1Mb2dvQDJ4LnBuZyBTd29vc2gucG5nIFN3b29zaEAyeC5wbmcgIiArIERJ
UkVDVE9SWV9OQU1FKQogCiBkZWYgZGV0ZW1wbGF0aXplKGJhc2VuYW1lKQogICAgIEZpbGUub3Bl
bihESVJFQ1RPUllfTkFNRSArICIvI3tiYXNlbmFtZX0uaHRtbCIsICJ3IikgewpAQCAtMTE2LDYg
KzExNiw3IEBAIHRyYW5zZmVyU291cmNlKCJjb2RlLWZpcnN0LWxvYWQiLCAiT2N0YW4KIHRyYW5z
ZmVyU291cmNlKCJib3gyZCIsICJPY3RhbmUyL2JveDJkLmpzIikKIHRyYW5zZmVyU291cmNlKCJ6
bGliIiwgIk9jdGFuZTIvemxpYi5qcyIsICJPY3RhbmUyL3psaWItZGF0YS5qcyIpCiB0cmFuc2Zl
clNvdXJjZSgidHlwZXNjcmlwdCIsICJPY3RhbmUyL3R5cGVzY3JpcHQuanMiLCAiT2N0YW5lMi90
eXBlc2NyaXB0LWNvbXBpbGVyLmpzIiwgIk9jdGFuZTIvdHlwZXNjcmlwdC1pbnB1dC5qcyIpCit0
cmFuc2ZlclNvdXJjZSgiY2RqcyIsICJDRGpzL2NvbnN0YW50cy5qcyIsICJDRGpzL3V0aWwuanMi
LCAiQ0Rqcy9yZWRfYmxhY2tfdHJlZS5qcyIsICJDRGpzL2NhbGxfc2lnbi5qcyIsICJDRGpzL3Zl
Y3Rvcl8yZC5qcyIsICJDRGpzL3ZlY3Rvcl8zZC5qcyIsICJDRGpzL21vdGlvbi5qcyIsICJDRGpz
L3JlZHVjZV9jb2xsaXNpb25fc2V0LmpzIiwgIkNEanMvc2ltdWxhdG9yLmpzIiwgIkNEanMvY29s
bGlzaW9uLmpzIiwgIkNEanMvY29sbGlzaW9uX2RldGVjdG9yLmpzIiwgIkNEanMvYmVuY2htYXJr
LmpzIikKIAogcHV0cyAiWW91IGNhbiBub3cgcnVuIEpldFN0cmVhbSBieSBuYXZpZ2F0aW5nIHRv
IGZpbGU6Ly8iICsgKFBhdGhuYW1lLm5ldyhESVJFQ1RPUllfTkFNRSkgKyAiaW5kZXguaHRtbCIp
LnJlYWxwYXRoLnRvX3MKIApJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vaW5kZXgt
VEVNUExBVEUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9p
bmRleC1URU1QTEFURS5odG1sCShyZXZpc2lvbiAxODU3NTcpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0pldFN0cmVhbS9pbmRleC1URU1QTEFURS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0
OCw3IEBACiAgICAgPHNjcmlwdCBzcmM9IlNpbXBsZVNldHVwLmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHNyYz0iT2N0YW5lU2V0dXAuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJP
Y3RhbmUyU2V0dXAuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJDRGpzU2V0dXAuanMi
Pjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJSZWZlcmVuY2UuanMiPjwvc2NyaXB0PgogPC9o
ZWFkPgogPGJvZHkgb25sb2FkPSJpbml0aWFsaXplKCkiPgpJbmRleDogUGVyZm9ybWFuY2VUZXN0
cy9KZXRTdHJlYW0vY2Rqcy9iZW5jaG1hcmsuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VU
ZXN0cy9KZXRTdHJlYW0vY2Rqcy9iZW5jaG1hcmsuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3Jt
YW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL2JlbmNobWFyay5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDgwIEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxMCwgUHVyZHVlIFVuaXZlcnNp
dHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUgbWV0OgorLy8gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisvLyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICogTmVpdGhlciB0aGUgbmFtZSBvZiB0
aGUgUHVyZHVlIFVuaXZlcnNpdHkgbm9yIHRoZQorLy8gICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKy8vICAgIGRl
cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorLy8gCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisvLyBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorLy8gV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorLy8gRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUgTElBQkxFIEZPUiBBTlkKKy8vIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisvLyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisvLyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
Ky8vIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworLy8gU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
K2Z1bmN0aW9uIGJlbmNobWFyaygpIHsKKyAgICB2YXIgdmVyYm9zaXR5ID0gMDsKKyAgICB2YXIg
bnVtQWlyY3JhZnQgPSAxMDAwOworICAgIHZhciBudW1GcmFtZXMgPSAyMDA7CisgICAgdmFyIGV4
cGVjdGVkQ29sbGlzaW9ucyA9IDE0NDg0OworICAgIHZhciBwZXJjZW50aWxlID0gOTU7CisKKyAg
ICB2YXIgc2ltdWxhdG9yID0gbmV3IFNpbXVsYXRvcihudW1BaXJjcmFmdCk7CisgICAgdmFyIGRl
dGVjdG9yID0gbmV3IENvbGxpc2lvbkRldGVjdG9yKCk7CisgICAgdmFyIGxhc3RUaW1lID0gY3Vy
cmVudFRpbWUoKTsKKyAgICB2YXIgcmVzdWx0cyA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbnVtRnJhbWVzOyArK2kpIHsKKyAgICAgICAgdmFyIHRpbWUgPSBpIC8gMTA7CisgICAgICAg
IAorICAgICAgICB2YXIgY29sbGlzaW9ucyA9IGRldGVjdG9yLmhhbmRsZU5ld0ZyYW1lKHNpbXVs
YXRvci5zaW11bGF0ZSh0aW1lKSk7CisgICAgICAgIAorICAgICAgICB2YXIgYmVmb3JlID0gbGFz
dFRpbWU7CisgICAgICAgIHZhciBhZnRlciA9IGN1cnJlbnRUaW1lKCk7CisgICAgICAgIGxhc3RU
aW1lID0gYWZ0ZXI7CisgICAgICAgIHZhciByZXN1bHQgPSB7CisgICAgICAgICAgICB0aW1lOiBh
ZnRlciAtIGJlZm9yZSwKKyAgICAgICAgICAgIG51bUNvbGxpc2lvbnM6IGNvbGxpc2lvbnMubGVu
Z3RoCisgICAgICAgIH07CisgICAgICAgIGlmICh2ZXJib3NpdHkgPj0gMikKKyAgICAgICAgICAg
IHJlc3VsdC5jb2xsaXNpb25zID0gY29sbGlzaW9uczsKKyAgICAgICAgcmVzdWx0cy5wdXNoKHJl
c3VsdCk7CisgICAgfQorCisgICAgaWYgKHZlcmJvc2l0eSA+PSAxKSB7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIHN0
cmluZyA9ICJGcmFtZSAiICsgaSArICI6ICIgKyByZXN1bHRzW2ldLnRpbWUgKyAiIG1zLiI7Cisg
ICAgICAgICAgICBpZiAocmVzdWx0c1tpXS5udW1Db2xsaXNpb25zKQorICAgICAgICAgICAgICAg
IHN0cmluZyArPSAiICgiICsgcmVzdWx0c1tpXS5udW1Db2xsaXNpb25zICsgIiBjb2xsaXNpb25z
LikiOworICAgICAgICAgICAgcHJpbnQoc3RyaW5nKTsKKyAgICAgICAgICAgIGlmICh2ZXJib3Np
dHkgPj0gMiAmJiByZXN1bHRzW2ldLmNvbGxpc2lvbnMubGVuZ3RoKQorICAgICAgICAgICAgICAg
IHByaW50KCIgICAgQ29sbGlzaW9uczogIiArIHJlc3VsdHNbaV0uY29sbGlzaW9ucyk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBDaGVjayByZXN1bHRzLgorICAgIHZhciBhY3R1YWxDb2xs
aXNpb25zID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyArK2kp
CisgICAgICAgIGFjdHVhbENvbGxpc2lvbnMgKz0gcmVzdWx0c1tpXS5udW1Db2xsaXNpb25zOwor
ICAgIGlmIChhY3R1YWxDb2xsaXNpb25zICE9IGV4cGVjdGVkQ29sbGlzaW9ucykgeworICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBudW1iZXIgb2YgY29sbGlzaW9uczogIiArIGFjdHVhbENv
bGxpc2lvbnMgKyAiIChleHBlY3RlZCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVj
dGVkQ29sbGlzaW9ucyArICIpIik7CisgICAgfQorCisgICAgLy8gRmluZCB0aGUgd29yc3QgNSUg
CisgICAgdmFyIHRpbWVzID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxl
bmd0aDsgKytpKQorICAgICAgICB0aW1lcy5wdXNoKHJlc3VsdHNbaV0udGltZSk7CisgICAgCisg
ICAgcmV0dXJuIGF2ZXJhZ2VBYm92ZVBlcmNlbnRpbGUodGltZXMsIHBlcmNlbnRpbGUpOworfQpJ
bmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vY2Rqcy9jYWxsX3NpZ24uanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vY2Rqcy9jYWxsX3NpZ24uanMJKHJl
dmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL2NhbGxfc2lnbi5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMDEt
MjAxMCwgUHVyZHVlIFVuaXZlcnNpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gCisvLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorLy8gICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8v
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisvLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisvLyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICog
TmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgUHVyZHVlIFVuaXZlcnNpdHkgbm9yIHRoZQorLy8gICAg
bmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMKKy8vICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8gCisvLyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5ECisvLyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorLy8gV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorLy8gRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUgTElBQkxF
IEZPUiBBTlkKKy8vIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisvLyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisv
LyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKy8vIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworLy8gU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKK2Z1bmN0aW9uIENhbGxTaWduKHZhbHVlKSB7CisgICAgdGhp
cy5fdmFsdWUgPSB2YWx1ZTsKK30KKworQ2FsbFNpZ24ucHJvdG90eXBlLmNvbXBhcmVUbyA9IGZ1
bmN0aW9uKG90aGVyKSB7CisgICAgcmV0dXJuIHRoaXMuX3ZhbHVlLmxvY2FsZUNvbXBhcmUob3Ro
ZXIuX3ZhbHVlKTsKK30KKworQ2FsbFNpZ24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24o
KSB7CisgICAgcmV0dXJuIHRoaXMuX3ZhbHVlOworfQorCkluZGV4OiBQZXJmb3JtYW5jZVRlc3Rz
L0pldFN0cmVhbS9jZGpzL2NvbGxpc2lvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRl
c3RzL0pldFN0cmVhbS9jZGpzL2NvbGxpc2lvbi5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtL2NkanMvY29sbGlzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzQgQEAKKy8vIENvcHlyaWdodCAoYykgMjAwMS0yMDEwLCBQdXJkdWUgVW5pdmVyc2l0
eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyAKKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZSBtZXQ6CisvLyAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKy8vICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRo
ZSBQdXJkdWUgVW5pdmVyc2l0eSBub3IgdGhlCisvLyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworLy8gICAgZGVy
aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisvLyAKKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKy8vIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisvLyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisvLyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFCTEUgRk9SIEFOWQorLy8gRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKy8vIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKy8vIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
Ly8gT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisvLyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
ZnVuY3Rpb24gQ29sbGlzaW9uKGFpcmNyYWZ0LCBwb3NpdGlvbikgeworICAgIHRoaXMuYWlyY3Jh
ZnQgPSBhaXJjcmFmdDsKKyAgICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb247Cit9CisKK0NvbGxp
c2lvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gIkNvbGxp
c2lvbigiICsgdGhpcy5haXJjcmFmdCArICIgYXQgIiArIHRoaXMucG9zaXRpb24gKyAiKSI7Cit9
OworCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL2NvbGxpc2lvbl9kZXRl
Y3Rvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL2Nv
bGxpc2lvbl9kZXRlY3Rvci5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0
U3RyZWFtL2NkanMvY29sbGlzaW9uX2RldGVjdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzQgQEAKKy8vIENvcHlyaWdodCAoYykgMjAwMS0yMDEwLCBQdXJkdWUgVW5pdmVyc2l0eS4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyAKKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBt
ZXQ6CisvLyAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKy8vICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBQ
dXJkdWUgVW5pdmVyc2l0eSBub3IgdGhlCisvLyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworLy8gICAgZGVyaXZl
ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisvLyAKKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKy8vIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisvLyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisvLyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFCTEUgRk9SIEFOWQorLy8gRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKy8vIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKy8vIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorLy8g
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisvLyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnVu
Y3Rpb24gQ29sbGlzaW9uRGV0ZWN0b3IoKSB7CisgICAgdGhpcy5fc3RhdGUgPSBuZXcgUmVkQmxh
Y2tUcmVlKCk7Cit9CisKK0NvbGxpc2lvbkRldGVjdG9yLnByb3RvdHlwZS5oYW5kbGVOZXdGcmFt
ZSA9IGZ1bmN0aW9uKGZyYW1lKSB7CisgICAgdmFyIG1vdGlvbnMgPSBbXTsKKyAgICB2YXIgc2Vl
biA9IG5ldyBSZWRCbGFja1RyZWUoKTsKKyAgICAKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZy
YW1lLmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBhaXJjcmFmdCA9IGZyYW1lW2ldOworICAg
ICAgICAKKyAgICAgICAgdmFyIG9sZFBvc2l0aW9uID0gdGhpcy5fc3RhdGUucHV0KGFpcmNyYWZ0
LmNhbGxzaWduLCBhaXJjcmFmdC5wb3NpdGlvbik7CisgICAgICAgIHZhciBuZXdQb3NpdGlvbiA9
IGFpcmNyYWZ0LnBvc2l0aW9uOworICAgICAgICBzZWVuLnB1dChhaXJjcmFmdC5jYWxsc2lnbiwg
dHJ1ZSk7CisgICAgICAgIAorICAgICAgICBpZiAoIW9sZFBvc2l0aW9uKSB7CisgICAgICAgICAg
ICAvLyBUcmVhdCBuZXdseSBpbnRyb2R1Y2VkIGFpcmNyYWZ0IGFzIGlmIHRoZXkgd2VyZSBzdGF0
aW9uYXJ5LgorICAgICAgICAgICAgb2xkUG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgbW90aW9ucy5wdXNoKG5ldyBNb3Rpb24oYWlyY3JhZnQuY2Fs
bHNpZ24sIG9sZFBvc2l0aW9uLCBuZXdQb3NpdGlvbikpOworICAgIH0KKyAgICAKKyAgICAvLyBS
ZW1vdmUgYWlyY3JhZnQgdGhhdCBhcmUgbm8gbG9uZ2VyIHByZXNlbnQuCisgICAgdmFyIHRvUmVt
b3ZlID0gW107CisgICAgdGhpcy5fc3RhdGUuZm9yRWFjaChmdW5jdGlvbihjYWxsc2lnbiwgcG9z
aXRpb24pIHsKKyAgICAgICAgaWYgKCFzZWVuLmdldChjYWxsc2lnbikpCisgICAgICAgICAgICB0
b1JlbW92ZS5wdXNoKGNhbGxzaWduKTsKKyAgICB9KTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHRvUmVtb3ZlLmxlbmd0aDsgKytpKQorICAgICAgICB0aGlzLl9zdGF0ZS5yZW1vdmUodG9SZW1v
dmVbaV0pOworICAgIAorICAgIHZhciBhbGxSZWR1Y2VkID0gcmVkdWNlQ29sbGlzaW9uU2V0KG1v
dGlvbnMpOworICAgIHZhciBjb2xsaXNpb25zID0gW107CisgICAgZm9yICh2YXIgcmVkdWN0aW9u
SW5kZXggPSAwOyByZWR1Y3Rpb25JbmRleCA8IGFsbFJlZHVjZWQubGVuZ3RoOyArK3JlZHVjdGlv
bkluZGV4KSB7CisgICAgICAgIHZhciByZWR1Y2VkID0gYWxsUmVkdWNlZFtyZWR1Y3Rpb25JbmRl
eF07CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVkdWNlZC5sZW5ndGg7ICsraSkgewor
ICAgICAgICAgICAgdmFyIG1vdGlvbjEgPSByZWR1Y2VkW2ldOworICAgICAgICAgICAgZm9yICh2
YXIgaiA9IGkgKyAxOyBqIDwgcmVkdWNlZC5sZW5ndGg7ICsraikgeworICAgICAgICAgICAgICAg
IHZhciBtb3Rpb24yID0gcmVkdWNlZFtqXTsKKyAgICAgICAgICAgICAgICB2YXIgY29sbGlzaW9u
ID0gbW90aW9uMS5maW5kSW50ZXJzZWN0aW9uKG1vdGlvbjIpOworICAgICAgICAgICAgICAgIGlm
IChjb2xsaXNpb24pCisgICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbnMucHVzaChuZXcgQ29s
bGlzaW9uKFttb3Rpb24xLmNhbGxzaWduLCBtb3Rpb24yLmNhbGxzaWduXSwgY29sbGlzaW9uKSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIGNvbGxp
c2lvbnM7Cit9OwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vY2Rqcy9jb25zdGFu
dHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vY2Rqcy9jb25z
dGFudHMuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpz
L2NvbnN0YW50cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0IEBACisvLyBDb3B5cmln
aHQgKGMpIDIwMDEtMjAxMCwgUHVyZHVlIFVuaXZlcnNpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorLy8gICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8v
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKy8vICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisvLyAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorLy8gICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgUHVyZHVlIFVuaXZlcnNpdHkgbm9y
IHRoZQorLy8gICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKy8vICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8gCisvLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5ECisvLyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorLy8gV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorLy8gRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xE
RVIgQkUgTElBQkxFIEZPUiBBTlkKKy8vIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisvLyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisvLyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKy8vIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisv
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworLy8gU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3ZhciBDb25zdGFudHMgPSB7fTsKK0Nv
bnN0YW50cy5NSU5fWCA9IDA7CitDb25zdGFudHMuTUlOX1kgPSAwOworQ29uc3RhbnRzLk1BWF9Y
ID0gMTAwMDsKK0NvbnN0YW50cy5NQVhfWSA9IDEwMDA7CitDb25zdGFudHMuTUlOX1ogPSAwOwor
Q29uc3RhbnRzLk1BWF9aID0gMTA7CitDb25zdGFudHMuUFJPWElNSVRZX1JBRElVUyA9IDE7CitD
b25zdGFudHMuR09PRF9WT1hFTF9TSVpFID0gQ29uc3RhbnRzLlBST1hJTUlUWV9SQURJVVMgKiAy
OwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vY2Rqcy9tYWluLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vY2Rqcy9tYWluLmh0bWwJKHJldmlz
aW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL21haW4uaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACis8IS0tCisgQ29weXJpZ2h0IChjKSAyMDAxLTIw
MTAsIFB1cmR1ZSBVbml2ZXJzaXR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgCisgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZSBtZXQ6CisgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRo
ZSBQdXJkdWUgVW5pdmVyc2l0eSBub3IgdGhlCisgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgICBkZXJpdmVk
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAKKyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVCBIT0xERVIgQkUgTElBQkxFIEZPUiBBTlkKKyBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLT4KKworPGh0bWw+Cis8aGVhZD4KKzx0aXRs
ZT5DRGpzPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJjb25zdGFudHMuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9InV0aWwuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlZF9ibGFja190cmVl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJjYWxsX3NpZ24uanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9InZlY3Rvcl8yZC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0idmVjdG9yXzNk
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJtb3Rpb24uanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9InJlZHVjZV9jb2xsaXNpb25fc2V0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJz
aW11bGF0b3IuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImNvbGxpc2lvbi5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iY29sbGlzaW9uX2RldGVjdG9yLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJiZW5jaG1hcmsuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyAgICBmdW5jdGlvbiBy
dW5UZXN0KCkgeworICAgICAgICB2YXIgcmVzdWx0ID0gYmVuY2htYXJrKCk7CisgICAgICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQtc3VtbWFyeSIpLmlubmVySFRNTCA9ICJBdmVy
YWdlIHdvcnN0IGNhc2U6ICIgKyByZXN1bHQ7CisgICAgfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxoMT5DRGpzPC9oMT4KKzxwPgorICA8ZGl2IGlkPSJyZXN1bHQtc3VtbWFyeSI+PC9k
aXY+CisgIDxkaXY+PGEgaHJlZj0iamF2YXNjcmlwdDpydW5UZXN0KCkiPlN0YXJ0IFRlc3Q8L2E+
PC9kaXY+Cis8L3A+Cis8L2JvZHk+Cis8L2h0bWw+CisKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMv
SmV0U3RyZWFtL2NkanMvbWFpbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pl
dFN0cmVhbS9jZGpzL21haW4uanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pl
dFN0cmVhbS9jZGpzL21haW4uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLy8g
Q29weXJpZ2h0IChjKSAyMDAxLTIwMTAsIFB1cmR1ZSBVbml2ZXJzaXR5LiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIAorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKy8vICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisvLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisvLyAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorLy8gICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKy8vICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFB1cmR1ZSBVbml2ZXJz
aXR5IG5vciB0aGUKKy8vICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisvLyAgICBkZXJpdmVkIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vIAor
Ly8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorLy8gQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKy8vIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKy8vIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgSE9MREVSIEJFIExJQUJMRSBGT1IgQU5ZCisvLyBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworLy8gKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworLy8gTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisvLyBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKy8vIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitsb2FkKCJjb25zdGFudHMu
anMiKTsKK2xvYWQoInV0aWwuanMiKTsKK2xvYWQoInJlZF9ibGFja190cmVlLmpzIik7Citsb2Fk
KCJjYWxsX3NpZ24uanMiKTsKK2xvYWQoInZlY3Rvcl8yZC5qcyIpOworbG9hZCgidmVjdG9yXzNk
LmpzIik7Citsb2FkKCJtb3Rpb24uanMiKTsKK2xvYWQoInJlZHVjZV9jb2xsaXNpb25fc2V0Lmpz
Iik7Citsb2FkKCJzaW11bGF0b3IuanMiKTsKK2xvYWQoImNvbGxpc2lvbi5qcyIpOworbG9hZCgi
Y29sbGlzaW9uX2RldGVjdG9yLmpzIik7Citsb2FkKCJiZW5jaG1hcmsuanMiKTsKKwordmFyIHJl
c3VsdCA9IGJlbmNobWFyaygpOworCitwcmludCgiQXZlcmFnZSB3b3JzdCBjYXNlOiAiICsgcmVz
dWx0ICsgIiBtcy4iKTsKKwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vY2Rqcy9t
b3Rpb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vY2Rqcy9t
b3Rpb24uanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpz
L21vdGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNiBAQAorLy8gQ29weXJpZ2h0
IChjKSAyMDAxLTIwMTAsIFB1cmR1ZSBVbml2ZXJzaXR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IAorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKy8vICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisvLyAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorLy8gICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKy8vICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFB1cmR1ZSBVbml2ZXJzaXR5IG5vciB0
aGUKKy8vICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzCisvLyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vIAorLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORAorLy8gQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKy8vIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKy8vIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVS
IEJFIExJQUJMRSBGT1IgQU5ZCisvLyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworLy8gKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworLy8gTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisvLyBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKy8vIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmdW5jdGlvbiBNb3Rpb24oY2FsbHNpZ24s
IHBvc09uZSwgcG9zVHdvKSB7CisgICAgdGhpcy5jYWxsc2lnbiA9IGNhbGxzaWduOworICAgIHRo
aXMucG9zT25lID0gcG9zT25lOworICAgIHRoaXMucG9zVHdvID0gcG9zVHdvOworfQorCitNb3Rp
b24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuICJNb3Rpb24o
IiArIHRoaXMuY2FsbHNpZ24gKyAiIGZyb20gIiArIHRoaXMucG9zT25lICsgIiB0byAiICsgdGhp
cy5wb3NUd28gKyAiKSI7Cit9OworCitNb3Rpb24ucHJvdG90eXBlLmRlbHRhID0gZnVuY3Rpb24o
KSB7CisgICAgcmV0dXJuIHRoaXMucG9zVHdvLm1pbnVzKHRoaXMucG9zT25lKTsKK307CisKK01v
dGlvbi5wcm90b3R5cGUuZmluZEludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKG90aGVyKSB7CisgICAg
dmFyIGluaXQxID0gdGhpcy5wb3NPbmU7CisgICAgdmFyIGluaXQyID0gb3RoZXIucG9zT25lOwor
ICAgIHZhciB2ZWMxID0gdGhpcy5kZWx0YSgpOworICAgIHZhciB2ZWMyID0gb3RoZXIuZGVsdGEo
KTsKKyAgICB2YXIgcmFkaXVzID0gQ29uc3RhbnRzLlBST1hJTUlUWV9SQURJVVM7CisgICAgCisg
ICAgLy8gdGhpcyB0ZXN0IGlzIG5vdCBnZW9tZXRyaWNhbCAzLWQgaW50ZXJzZWN0aW9uIHRlc3Qs
IGl0IHRha2VzIHRoZSBmYWN0IHRoYXQgdGhlIGFpcmNyYWZ0IG1vdmUKKyAgICAvLyBpbnRvIGFj
Y291bnQgOyBzbyBpdCBpcyBtb3JlIGxpa2UgYSA0ZCB0ZXN0CisgICAgLy8gKGl0IGFzc3VtZXMg
dGhhdCBib3RoIG9mIHRoZSBhaXJjcmFmdCBoYXZlIGEgY29uc3RhbnQgc3BlZWQgb3ZlciB0aGUg
dGVzdGVkIGludGVydmFsKQorICAgIAorICAgIC8vIHdlIHRodXMgaGF2ZSB0d28gcG9pbnRzLCBl
YWNoIG9mIHRoZW0gbW92aW5nIG9uIGl0cyBsaW5lIHNlZ21lbnQgYXQgY29uc3RhbnQgc3BlZWQg
OyB3ZSBhcmUgbG9va2luZworICAgIC8vIGZvciB0aW1lcyB3aGVuIHRoZSBkaXN0YW5jZSBiZXR3
ZWVuIHRoZXNlIHR3byBwb2ludHMgaXMgc21hbGxlciB0aGFuIHIgCisgICAgCisgICAgLy8gdmVj
MSBpcyB2ZWN0b3Igb2YgYWlyY3JhZnQgMQorICAgIC8vIHZlYzIgaXMgdmVjdG9yIG9mIGFpcmNy
YWZ0IDIKKyAgICAKKyAgICAvLyBhID0gKFYyIC0gVjEpXlQgKiAoVjIgLSBWMSkKKyAgICB2YXIg
YSA9IHZlYzIubWludXModmVjMSkuc3F1YXJlZE1hZ25pdHVkZSgpOworICAgIAorICAgIGlmIChh
ICE9IDApIHsKKwkvLyB3ZSBhcmUgZmlyc3QgbG9va2luZyBmb3IgaW5zdGFuY2VzIG9mIHRpbWUg
d2hlbiB0aGUgcGxhbmVzIGFyZSBleGFjdGx5IHIgZnJvbSBlYWNoIG90aGVyCisJLy8gYXQgbGVh
c3Qgb25lIHBsYW5lIGlzIG1vdmluZyA7IGlmIHRoZSBwbGFuZXMgYXJlIG1vdmluZyBpbiBwYXJh
bGxlbCwgdGhleSBkbyBub3QgaGF2ZSBjb25zdGFudCBzcGVlZAorCQorCS8vIGlmIHRoZSBwbGFu
ZXMgYXJlIG1vdmluZyBpbiBwYXJhbGxlbCwgdGhlbgorCS8vICAgaWYgdGhlIGZhc3RlciBzdGFy
dHMgYmVoaW5kIHRoZSBzbG93ZXIsIHdlIGNhbiBoYXZlIDIsIDEsIG9yIDAgc29sdXRpb25zCisJ
Ly8gICBpZiB0aGUgZmFzdGVyIHBsYW5lIHN0YXJ0cyBpbiBmcm9udCBvZiB0aGUgc2xvd2VyLCB3
ZSBjYW4gaGF2ZSAwIG9yIDEgc29sdXRpb25zCisJCisJLy8gaWYgdGhlIHBsYW5lcyBhcmUgbm90
IG1vdmluZyBpbiBwYXJhbGxlbCwgdGhlbgorCQorCQorCS8vIHBvaW50IFAxID0gSTEgKyB2VjEK
KwkvLyBwb2ludCBQMiA9IEkyICsgdlYyCisJLy8gICAtIGxvb2tpbmcgZm9yIHYsIHN1Y2ggdGhh
dCBkaXN0KFAxLFAyKSA9IHx8IFAxIC0gUDIgfHwgPSByCisJCisJLy8gaXQgZm9sbG93cyB0aGF0
IHx8IFAxIC0gUDIgfHwgPSBzcXJ0KCA8IFAxLVAyLCBQMS1QMiA+ICkKKwkvLyAgIDAgPSAtcl4y
ICsgPCBQMSAtIFAyLCBQMSAtIFAyID4KKwkvLyAgZnJvbSBwcm9wZXJ0aWVzIG9mIGRvdCBwcm9k
dWN0CisJLy8gICAwID0gLXJeMiArIDxJMS1JMixJMS1JMj4gKyB2ICogMjxJMS1JMiwgVjEtVjI+
ICsgdl4yICo8VjEtVjIsVjEtVjI+CisJLy8gICBzbyB3ZSBjYWxjdWxhdGUgYSwgYiwgYyAtIGFu
ZCBzb2x2ZSB0aGUgcXVhZHJhdGljIGVxdWF0aW9uCisJLy8gICAwID0gYyArIGJ2ICsgYXZeMgor
CQorCS8vIGIgPSAyICogPEkxLUkyLCBWMS1WMj4KKyAgICAgICAgCisgICAgICAgIHZhciBiID0g
MiAqIGluaXQxLm1pbnVzKGluaXQyKS5kb3QodmVjMS5taW51cyh2ZWMyKSk7CisgICAgICAgIAor
ICAgICAgICAvLyBjID0gLXJeMiArIChJMiAtIEkxKV5UICogKEkyIC0gSTEpCisgICAgICAgIHZh
ciBjID0gLXJhZGl1cyAqIHJhZGl1cyArIGluaXQyLm1pbnVzKGluaXQxKS5zcXVhcmVkTWFnbml0
dWRlKCk7CisgICAgICAgIAorICAgICAgICB2YXIgZGlzY3IgPSBiICogYiAtIDQgKiBhICogYzsK
KyAgICAgICAgaWYgKGRpc2NyIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAg
ICAKKyAgICAgICAgdmFyIHYxID0gKC1iIC0gTWF0aC5zcXJ0KGRpc2NyKSkgLyAoMiAqIGEpOwor
ICAgICAgICB2YXIgdjIgPSAoLWIgKyBNYXRoLnNxcnQoZGlzY3IpKSAvICgyICogYSk7CisgICAg
ICAgIAorICAgICAgICBpZiAodjEgPD0gdjIgJiYgKCh2MSA8PSAxICYmIDEgPD0gdjIpIHx8Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgKHYxIDw9IDAgJiYgMCA8PSB2MikgfHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAoMCA8PSB2MSAmJiB2MiA8PSAxKSkpIHsKKyAgICAgICAgICAgIC8v
IFBpY2sgYSBnb29kICJ0aW1lIiBhdCB3aGljaCB0byByZXBvcnQgdGhlIGNvbGxpc2lvbi4KKyAg
ICAgICAgICAgIHZhciB2OworICAgICAgICAgICAgaWYgKHYxIDw9IDApIHsKKyAgICAgICAgICAg
ICAgICAvLyBUaGUgY29sbGlzaW9uIHN0YXJ0ZWQgYmVmb3JlIHRoaXMgZnJhbWUuIFJlcG9ydCBp
dCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZyYW1lLgorICAgICAgICAgICAgICAgIHYgPSAwOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgY29sbGlzaW9uIHN0YXJ0
ZWQgZHVyaW5nIHRoaXMgZnJhbWUuIFJlcG9ydCBpdCBhdCB0aGF0IG1vbWVudC4KKyAgICAgICAg
ICAgICAgICB2ID0gdjE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IHZhciByZXN1bHQxID0gaW5pdDEucGx1cyh2ZWMxLnRpbWVzKHYpKTsKKyAgICAgICAgICAgIHZh
ciByZXN1bHQyID0gaW5pdDIucGx1cyh2ZWMyLnRpbWVzKHYpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3VsdDEucGx1cyhyZXN1bHQyKS50aW1lcygwLjUpOwor
ICAgICAgICAgICAgaWYgKHJlc3VsdC54ID49IENvbnN0YW50cy5NSU5fWCAmJgorICAgICAgICAg
ICAgICAgIHJlc3VsdC54IDw9IENvbnN0YW50cy5NQVhfWCAmJgorICAgICAgICAgICAgICAgIHJl
c3VsdC55ID49IENvbnN0YW50cy5NSU5fWSAmJgorICAgICAgICAgICAgICAgIHJlc3VsdC55IDw9
IENvbnN0YW50cy5NQVhfWSAmJgorICAgICAgICAgICAgICAgIHJlc3VsdC56ID49IENvbnN0YW50
cy5NSU5fWiAmJgorICAgICAgICAgICAgICAgIHJlc3VsdC56IDw9IENvbnN0YW50cy5NQVhfWikK
KyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgCisgICAgLy8gdGhlIHBsYW5lcyBoYXZlIHRo
ZSBzYW1lIHNwZWVkcyBhbmQgYXJlIG1vdmluZyBpbiBwYXJhbGxlbCAob3IgdGhleSBhcmUgbm90
IG1vdmluZyBhdCBhbGwpCisgICAgLy8gdGhleSAgdGh1cyBoYXZlIHRoZSBzYW1lIGRpc3RhbmNl
IGFsbCB0aGUgdGltZSA7IHdlIGNhbGN1bGF0ZSBpdCBmcm9tIHRoZSBpbml0aWFsIHBvaW50Cisg
ICAgCisgICAgLy8gZGlzdCA9IHx8IGkyIC0gaTEgfHwgPSBzcXJ0KCAgKCBpMiAtIGkxICleVCAq
ICggaTIgLSBpMSApICkKKyAgICAKKyAgICB2YXIgZGlzdCA9IGluaXQyLm1pbnVzKGluaXQxKS5t
YWduaXR1ZGUoKTsKKyAgICBpZiAoZGlzdCA8PSByYWRpdXMpCisgICAgICAgIHJldHVybiBpbml0
MS5wbHVzKGluaXQyKS50aW1lcygwLjUpOworICAgIAorICAgIHJldHVybiBudWxsOworfTsKKwpJ
bmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vY2Rqcy9tb3Rpb25fdGVzdC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL21vdGlvbl90ZXN0Lmpz
CShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vY2Rqcy9tb3Rpb25f
dGVzdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkzIEBACisvLyBDb3B5cmlnaHQgKGMp
IDIwMDEtMjAxMCwgUHVyZHVlIFVuaXZlcnNpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gCisv
LyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorLy8gICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKy8vICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisvLyAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
Ly8gICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgUHVyZHVlIFVuaXZlcnNpdHkgbm9yIHRoZQor
Ly8gICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMKKy8vICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8gCisvLyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5ECisvLyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorLy8gV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
Ly8gRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUg
TElBQkxFIEZPUiBBTlkKKy8vIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisvLyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisvLyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKy8vIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworLy8gU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2xvYWQoImNvbnN0YW50cy5qcyIpOworbG9hZCgi
dXRpbC5qcyIpOworbG9hZCgiY2FsbF9zaWduLmpzIik7Citsb2FkKCJ2ZWN0b3JfMmQuanMiKTsK
K2xvYWQoInZlY3Rvcl8zZC5qcyIpOworbG9hZCgibW90aW9uLmpzIik7CisKK3ZhciBlcHNpbG9u
ID0gMC4wMDAwMDE7CisKK2Z1bmN0aW9uIGNoZWNrRG9lc0ludGVyc2VjdChtb3Rpb25PbmUsIG1v
dGlvblR3bywgZXhwZWN0ZWQpIHsKKyAgICBwcmludChtb3Rpb25PbmUgKyAiIGFuZCAiICsgbW90
aW9uVHdvICsgIjoiKTsKKyAgICB2YXIgYWN0dWFsID0gbW90aW9uT25lLmZpbmRJbnRlcnNlY3Rp
b24obW90aW9uVHdvKTsKKyAgICBpZiAoIWFjdHVhbCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJXYXMgc3VwcG9zZWQgdG8gaW50ZXJzZWN0IGF0ICIgKyBleHBlY3RlZCArICIgYnV0IGRpZG4n
dCIpOworICAgIAorICAgIHZhciBkZWx0YSA9IGFjdHVhbC5taW51cyhleHBlY3RlZCkubWFnbml0
dWRlKCk7CisgICAgaWYgKGRlbHRhID4gZXBzaWxvbikgeworICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoIldhcyBzdXBwb3NlZCB0byBpbnRlcnNlY3QgYXQgIiArIGV4cGVjdGVkICsgIiBidXQgaW50
ZXJzZWN0ZWQgYXQgIiArCisgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWwgKyAiLCB3aGlj
aCBpcyAiICsgZGVsdGEgKyAiIGF3YXkiKTsKKyAgICB9CisgICAgCisgICAgcHJpbnQoIiAgICBJ
bnRlcnNlY3RlZCBhdCAiICsgYWN0dWFsICsgIiwgd2hpY2ggaXMgIiArIGRlbHRhICsgIiBhd2F5
IGZyb20gIiArIGV4cGVjdGVkICsgIi4iKTsKK30KKworZnVuY3Rpb24gY2hlY2tEb2VzTm90SW50
ZXJzZWN0KG1vdGlvbk9uZSwgbW90aW9uVHdvKSB7CisgICAgcHJpbnQobW90aW9uT25lICsgIiBh
bmQgIiArIG1vdGlvblR3byArICI6Iik7CisgICAgdmFyIGFjdHVhbCA9IG1vdGlvbk9uZS5maW5k
SW50ZXJzZWN0aW9uKG1vdGlvblR3byk7CisgICAgaWYgKGFjdHVhbCkKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJXYXMgbm90IHN1cHBvc2VkIHRvIGludGVyc2VjdCBidXQgaW50ZXJzZWN0ZWQg
YXQgIiArIGFjdHVhbCk7CisgICAgCisgICAgcHJpbnQoIiAgICBObyBpbnRlcnNlY3Rpb24sIGFz
IGV4cGVjdGVkLiIpOworfQorCit2YXIgbWFrZU1vdGlvbiA9IChmdW5jdGlvbigpIHsKKyAgICB2
YXIgY291bnRlciA9IDA7CisgICAgcmV0dXJuIGZ1bmN0aW9uKHgxLCB5MSwgejEsIHgyLCB5Miwg
ejIpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBNb3Rpb24obmV3IENhbGxTaWduKCJmb28iICsgKCsr
Y291bnRlcikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVmVjdG9yM0QoeDEsIHkx
LCB6MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IzRCh4MiwgeTIsIHoy
KSk7CisgICAgfQorfSkoKTsKKworY2hlY2tEb2VzTm90SW50ZXJzZWN0KAorICAgIG1ha2VNb3Rp
b24oMCwgMCwgMCwgMTAsIDAsIDApLAorICAgIG1ha2VNb3Rpb24oMCwgMTAsIDAsIDEwLCAxMCwg
MCkpOworCitjaGVja0RvZXNOb3RJbnRlcnNlY3QoCisgICAgbWFrZU1vdGlvbigwLCAwLCAwLCAx
MCwgMCwgMCksCisgICAgbWFrZU1vdGlvbigwLCAxICsgZXBzaWxvbiwgMCwgMTAsIDEgKyBlcHNp
bG9uLCAwKSk7CisKK2NoZWNrRG9lc0ludGVyc2VjdCgKKyAgICBtYWtlTW90aW9uKDAsIDAsIDAs
IDEwLCAwLCAwKSwKKyAgICBtYWtlTW90aW9uKDAsIDEsIDAsIDEwLCAxLCAwKSwKKyAgICBuZXcg
VmVjdG9yM0QoMCwgMC41LCAwKSk7CisKK2NoZWNrRG9lc0ludGVyc2VjdCgKKyAgICBtYWtlTW90
aW9uKDAsIDAsIDAsIDEwLCAwLCAwKSwKKyAgICBtYWtlTW90aW9uKDAsIDEwLCAwLCAxMCwgMCwg
MCksCisgICAgbmV3IFZlY3RvcjNEKDksIDAuNSwgMCkpOworCitjaGVja0RvZXNJbnRlcnNlY3Qo
CisgICAgbWFrZU1vdGlvbigwLCAwLCAwLCA5LjUsIDAsIDApLAorICAgIG1ha2VNb3Rpb24oMCwg
MTAsIDAsIDkuNjUsIDAuMzUsIDApLAorICAgIG5ldyBWZWN0b3IzRCg4LjkzOTgzMDcyMjQ0NjE3
OCwgMC40OTUwNzIyNDY5MTM1NDQyMywgMCkpOworCisvLyBGSVhNRTogQWRkIG1vcmUgdGVzdHMg
aGVyZS4gU2FkbHksIHRoZSBvcmlnaW5hbCBKYXZhIGNvZGUgZm9yIHRoaXMgYmVuY2htYXJrIGhh
ZCBhbiBleHRlbnNpdmUKKy8vIEpVbml0IHRlc3Qgc3VpdGUgZm9yIGludGVyc2VjdGlvbnMsIGJ1
dCB0aGlzIGRpZG4ndCBnZXQgaW5jbHVkZWQgaW4gYW55IG9mIHRoZSByZWxlYXNlcyBhbmQgSSBu
bworLy8gbG9uZ2VyIGhhdmUgYWNjZXNzIHRvIHRoZSBvcmlnaW5hbCBDVlMgcmVwb3NpdG9yeSAo
eWVzLCBDVlMpLgpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vY2Rqcy9yZWRfYmxh
Y2tfdHJlZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpz
L3JlZF9ibGFja190cmVlLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0vY2Rqcy9yZWRfYmxhY2tfdHJlZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQw
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCit2YXIgUmVkQmxhY2tUcmVlID0gKGZ1bmN0aW9uKCl7CisgICAgZnVuY3Rpb24gY29t
cGFyZShhLCBiKSB7CisgICAgICAgIHJldHVybiBhLmNvbXBhcmVUbyhiKTsKKyAgICB9CisgICAg
CisgICAgZnVuY3Rpb24gdHJlZU1pbmltdW0oeCkgeworICAgICAgICB3aGlsZSAoeC5sZWZ0KQor
ICAgICAgICAgICAgeCA9IHgubGVmdDsKKyAgICAgICAgcmV0dXJuIHg7CisgICAgfQorICAgIAor
ICAgIGZ1bmN0aW9uIHRyZWVNYXhpbXVtKHgpIHsKKyAgICAgICAgd2hpbGUgKHgucmlnaHQpCisg
ICAgICAgICAgICB4ID0geC5yaWdodDsKKyAgICAgICAgcmV0dXJuIHg7CisgICAgfQorICAgIAor
ICAgIGZ1bmN0aW9uIE5vZGUoa2V5LCB2YWx1ZSkgeworICAgICAgICB0aGlzLmtleSA9IGtleTsK
KyAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOworICAgICAgICB0aGlzLmxlZnQgPSBudWxsOwor
ICAgICAgICB0aGlzLnJpZ2h0ID0gbnVsbDsKKyAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsOwor
ICAgICAgICB0aGlzLmNvbG9yID0gInJlZCI7CisgICAgfQorICAgIAorICAgIE5vZGUucHJvdG90
eXBlLnN1Y2Nlc3NvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgeCA9IHRoaXM7CisgICAg
ICAgIGlmICh4LnJpZ2h0KQorICAgICAgICAgICAgcmV0dXJuIHRyZWVNaW5pbXVtKHgucmlnaHQp
OworICAgICAgICB2YXIgeSA9IHgucGFyZW50OworICAgICAgICB3aGlsZSAoeSAmJiB4ID09IHku
cmlnaHQpIHsKKyAgICAgICAgICAgIHggPSB5OworICAgICAgICAgICAgeSA9IHkucGFyZW50Owor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB5OworICAgIH07CisgICAgCisgICAgTm9kZS5wcm90
b3R5cGUucHJlZGVjZXNzb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHggPSB0aGlzOwor
ICAgICAgICBpZiAoeC5sZWZ0KQorICAgICAgICAgICAgcmV0dXJuIHRyZWVNYXhpbXVtKHgubGVm
dCk7CisgICAgICAgIHZhciB5ID0geC5wYXJlbnQ7CisgICAgICAgIHdoaWxlICh5ICYmIHggPT0g
eS5sZWZ0KSB7CisgICAgICAgICAgICB4ID0geTsKKyAgICAgICAgICAgIHkgPSB5LnBhcmVudDsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4geTsKKyAgICB9OworICAgIAorICAgIE5vZGUucHJv
dG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmtleSAr
ICI9PiIgKyB0aGlzLnZhbHVlICsgIiAoIiArIHRoaXMuY29sb3IgKyAiKSI7CisgICAgfTsKKyAg
ICAKKyAgICBmdW5jdGlvbiBSZWRCbGFja1RyZWUoKSB7CisgICAgICAgIHRoaXMuX3Jvb3QgPSBu
dWxsOworICAgIH0KKyAgICAKKyAgICBSZWRCbGFja1RyZWUucHJvdG90eXBlLnB1dCA9IGZ1bmN0
aW9uKGtleSwgdmFsdWUpIHsKKyAgICAgICAgdmFyIGluc2VydGlvblJlc3VsdCA9IHRoaXMuX3Ry
ZWVJbnNlcnQoa2V5LCB2YWx1ZSk7CisgICAgICAgIGlmICghaW5zZXJ0aW9uUmVzdWx0LmlzTmV3
RW50cnkpCisgICAgICAgICAgICByZXR1cm4gaW5zZXJ0aW9uUmVzdWx0Lm9sZFZhbHVlOworICAg
ICAgICB2YXIgeCA9IGluc2VydGlvblJlc3VsdC5uZXdOb2RlOworICAgICAgICAKKyAgICAgICAg
d2hpbGUgKHggIT0gdGhpcy5fcm9vdCAmJiB4LnBhcmVudC5jb2xvciA9PSAicmVkIikgeworICAg
ICAgICAgICAgaWYgKHgucGFyZW50ID09IHgucGFyZW50LnBhcmVudC5sZWZ0KSB7CisgICAgICAg
ICAgICAgICAgdmFyIHkgPSB4LnBhcmVudC5wYXJlbnQucmlnaHQ7CisgICAgICAgICAgICAgICAg
aWYgKHkgJiYgeS5jb2xvciA9PSAicmVkIikgeworICAgICAgICAgICAgICAgICAgICAvLyBDYXNl
IDEKKyAgICAgICAgICAgICAgICAgICAgeC5wYXJlbnQuY29sb3IgPSAiYmxhY2siOworICAgICAg
ICAgICAgICAgICAgICB5LmNvbG9yID0gImJsYWNrIjsKKyAgICAgICAgICAgICAgICAgICAgeC5w
YXJlbnQucGFyZW50LmNvbG9yID0gInJlZCI7CisgICAgICAgICAgICAgICAgICAgIHggPSB4LnBh
cmVudC5wYXJlbnQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHggPT0geC5wYXJlbnQucmlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IENhc2UgMgorICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHgucGFyZW50OworICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5fbGVmdFJvdGF0ZSh4KTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAvLyBDYXNlIDMKKyAgICAgICAgICAgICAgICAgICAgeC5w
YXJlbnQuY29sb3IgPSAiYmxhY2siOworICAgICAgICAgICAgICAgICAgICB4LnBhcmVudC5wYXJl
bnQuY29sb3IgPSAicmVkIjsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmlnaHRSb3RhdGUo
eC5wYXJlbnQucGFyZW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIC8vIFNhbWUgYXMgInRoZW4iIGNsYXVzZSB3aXRoICJyaWdodCIg
YW5kICJsZWZ0IiBleGNoYW5nZWQuCisgICAgICAgICAgICAgICAgdmFyIHkgPSB4LnBhcmVudC5w
YXJlbnQubGVmdDsKKyAgICAgICAgICAgICAgICBpZiAoeSAmJiB5LmNvbG9yID09ICJyZWQiKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIENhc2UgMQorICAgICAgICAgICAgICAgICAgICB4LnBh
cmVudC5jb2xvciA9ICJibGFjayI7CisgICAgICAgICAgICAgICAgICAgIHkuY29sb3IgPSAiYmxh
Y2siOworICAgICAgICAgICAgICAgICAgICB4LnBhcmVudC5wYXJlbnQuY29sb3IgPSAicmVkIjsK
KyAgICAgICAgICAgICAgICAgICAgeCA9IHgucGFyZW50LnBhcmVudDsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSB4LnBhcmVudC5sZWZ0KSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXNlIDIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHggPSB4LnBhcmVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JpZ2h0Um90
YXRlKHgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIENh
c2UgMworICAgICAgICAgICAgICAgICAgICB4LnBhcmVudC5jb2xvciA9ICJibGFjayI7CisgICAg
ICAgICAgICAgICAgICAgIHgucGFyZW50LnBhcmVudC5jb2xvciA9ICJyZWQiOworICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9sZWZ0Um90YXRlKHgucGFyZW50LnBhcmVudCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0aGlz
Ll9yb290LmNvbG9yID0gImJsYWNrIjsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAg
ICAKKyAgICBSZWRCbGFja1RyZWUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKGtleSkgewor
ICAgICAgICB2YXIgeiA9IHRoaXMuX2ZpbmROb2RlKGtleSk7CisgICAgICAgIGlmICgheikKKyAg
ICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAKKyAgICAgICAgLy8gWSBpcyB0aGUgbm9k
ZSB0byBiZSB1bmxpbmtlZCBmcm9tIHRoZSB0cmVlLgorICAgICAgICB2YXIgeTsKKyAgICAgICAg
aWYgKCF6LmxlZnQgfHwgIXoucmlnaHQpCisgICAgICAgICAgICB5ID0gejsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgeSA9IHouc3VjY2Vzc29yKCk7CisKKyAgICAgICAgLy8gWSBpcyBndWFy
YW50ZWVkIHRvIGJlIG5vbi1udWxsIGF0IHRoaXMgcG9pbnQuCisgICAgICAgIHZhciB4OworICAg
ICAgICBpZiAoeS5sZWZ0KQorICAgICAgICAgICAgeCA9IHkubGVmdDsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeCA9IHkucmlnaHQ7CisgICAgICAgIAorICAgICAgICAvLyBYIGlzIHRoZSBj
aGlsZCBvZiB5IHdoaWNoIG1pZ2h0IHBvdGVudGlhbGx5IHJlcGxhY2UgeSBpbiB0aGUgdHJlZS4g
WCBtaWdodCBiZSBudWxsIGF0CisgICAgICAgIC8vIHRoaXMgcG9pbnQuCisgICAgICAgIHZhciB4
UGFyZW50OworICAgICAgICBpZiAoeCkgeworICAgICAgICAgICAgeC5wYXJlbnQgPSB5LnBhcmVu
dDsKKyAgICAgICAgICAgIHhQYXJlbnQgPSB4LnBhcmVudDsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICB4UGFyZW50ID0geS5wYXJlbnQ7CisgICAgICAgIGlmICgheS5wYXJlbnQpCisgICAg
ICAgICAgICB0aGlzLl9yb290ID0geDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAo
eSA9PSB5LnBhcmVudC5sZWZ0KQorICAgICAgICAgICAgICAgIHkucGFyZW50LmxlZnQgPSB4Owor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHkucGFyZW50LnJpZ2h0ID0geDsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHkgIT0geikgeworICAgICAgICAgICAgaWYg
KHkuY29sb3IgPT0gImJsYWNrIikKKyAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVGaXh1cCh4
LCB4UGFyZW50KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgeS5wYXJlbnQgPSB6LnBhcmVu
dDsKKyAgICAgICAgICAgIHkuY29sb3IgPSB6LmNvbG9yOworICAgICAgICAgICAgeS5sZWZ0ID0g
ei5sZWZ0OworICAgICAgICAgICAgeS5yaWdodCA9IHoucmlnaHQ7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmICh6LmxlZnQpCisgICAgICAgICAgICAgICAgei5sZWZ0LnBhcmVudCA9IHk7
CisgICAgICAgICAgICBpZiAoei5yaWdodCkKKyAgICAgICAgICAgICAgICB6LnJpZ2h0LnBhcmVu
dCA9IHk7CisgICAgICAgICAgICBpZiAoei5wYXJlbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAo
ei5wYXJlbnQubGVmdCA9PSB6KQorICAgICAgICAgICAgICAgICAgICB6LnBhcmVudC5sZWZ0ID0g
eTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHoucGFyZW50LnJp
Z2h0ID0geTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHRoaXMuX3Jvb3Qg
PSB5OworICAgICAgICB9IGVsc2UgaWYgKHkuY29sb3IgPT0gImJsYWNrIikKKyAgICAgICAgICAg
IHRoaXMuX3JlbW92ZUZpeHVwKHgsIHhQYXJlbnQpOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IHoudmFsdWU7CisgICAgfTsKKyAgICAKKyAgICBSZWRCbGFja1RyZWUucHJvdG90eXBlLmdldCA9
IGZ1bmN0aW9uKGtleSkgeworICAgICAgICB2YXIgbm9kZSA9IHRoaXMuX2ZpbmROb2RlKGtleSk7
CisgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICBy
ZXR1cm4gbm9kZS52YWx1ZTsKKyAgICB9OworICAgIAorICAgIFJlZEJsYWNrVHJlZS5wcm90b3R5
cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CisgICAgICAgIGlmICghdGhpcy5fcm9v
dCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZm9yICh2YXIgY3VycmVudCA9IHRyZWVN
aW5pbXVtKHRoaXMuX3Jvb3QpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC5zdWNjZXNzb3Io
KSkKKyAgICAgICAgICAgIGNhbGxiYWNrKGN1cnJlbnQua2V5LCBjdXJyZW50LnZhbHVlKTsKKyAg
ICB9OworICAgIAorICAgIFJlZEJsYWNrVHJlZS5wcm90b3R5cGUuYXNBcnJheSA9IGZ1bmN0aW9u
KCkgeworICAgICAgICB2YXIgcmVzdWx0ID0gW107CisgICAgICAgIHRoaXMuZm9yRWFjaChmdW5j
dGlvbihrZXksIHZhbHVlKSB7CisgICAgICAgICAgICByZXN1bHQucHVzaCh7a2V5OiBrZXksIHZh
bHVlOiB2YWx1ZX0pOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
OworICAgIAorICAgIFJlZEJsYWNrVHJlZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgdmFyIHJlc3VsdCA9ICJbIjsKKyAgICAgICAgdmFyIGZpcnN0ID0gdHJ1ZTsK
KyAgICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgICAgICAgICAg
IGlmIChmaXJzdCkKKyAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiLCAiOworICAgICAgICAgICAgcmVzdWx0
ICs9IGtleSArICI9PiIgKyB2YWx1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1
bHQgKyAiXSI7CisgICAgfTsKKyAgICAKKyAgICBSZWRCbGFja1RyZWUucHJvdG90eXBlLl9maW5k
Tm9kZSA9IGZ1bmN0aW9uKGtleSkgeworICAgICAgICBmb3IgKHZhciBjdXJyZW50ID0gdGhpcy5f
cm9vdDsgY3VycmVudDspIHsKKyAgICAgICAgICAgIHZhciBjb21wYXJpc29uUmVzdWx0ID0gY29t
cGFyZShrZXksIGN1cnJlbnQua2V5KTsKKyAgICAgICAgICAgIGlmICghY29tcGFyaXNvblJlc3Vs
dCkKKyAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDsKKyAgICAgICAgICAgIGlmIChjb21w
YXJpc29uUmVzdWx0IDwgMCkKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5sZWZ0
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnJp
Z2h0OworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisgICAgCisgICAg
UmVkQmxhY2tUcmVlLnByb3RvdHlwZS5fdHJlZUluc2VydCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUp
IHsKKyAgICAgICAgdmFyIHkgPSBudWxsOworICAgICAgICB2YXIgeCA9IHRoaXMuX3Jvb3Q7Cisg
ICAgICAgIHdoaWxlICh4KSB7CisgICAgICAgICAgICB5ID0geDsKKyAgICAgICAgICAgIHZhciBj
b21wYXJpc29uUmVzdWx0ID0ga2V5LmNvbXBhcmVUbyh4LmtleSk7CisgICAgICAgICAgICBpZiAo
Y29tcGFyaXNvblJlc3VsdCA8IDApCisgICAgICAgICAgICAgICAgeCA9IHgubGVmdDsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGNvbXBhcmlzb25SZXN1bHQgPiAwKQorICAgICAgICAgICAgICAgIHgg
PSB4LnJpZ2h0OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIG9sZFZh
bHVlID0geC52YWx1ZTsKKyAgICAgICAgICAgICAgICB4LnZhbHVlID0gdmFsdWU7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHtpc05ld0VudHJ5OmZhbHNlLCBvbGRWYWx1ZTpvbGRWYWx1ZX07Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIHogPSBuZXcgTm9kZShrZXksIHZh
bHVlKTsKKyAgICAgICAgei5wYXJlbnQgPSB5OworICAgICAgICBpZiAoIXkpCisgICAgICAgICAg
ICB0aGlzLl9yb290ID0gejsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoa2V5LmNv
bXBhcmVUbyh5LmtleSkgPCAwKQorICAgICAgICAgICAgICAgIHkubGVmdCA9IHo7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgeS5yaWdodCA9IHo7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHtpc05ld0VudHJ5OnRydWUsIG5ld05vZGU6en07CisgICAgfTsKKyAgICAKKyAg
ICBSZWRCbGFja1RyZWUucHJvdG90eXBlLl9sZWZ0Um90YXRlID0gZnVuY3Rpb24oeCkgeworICAg
ICAgICB2YXIgeSA9IHgucmlnaHQ7CisgICAgICAgIAorICAgICAgICAvLyBUdXJuIHkncyBsZWZ0
IHN1YnRyZWUgaW50byB4J3MgcmlnaHQgc3VidHJlZS4KKyAgICAgICAgeC5yaWdodCA9IHkubGVm
dDsKKyAgICAgICAgaWYgKHkubGVmdCkKKyAgICAgICAgICAgIHkubGVmdC5wYXJlbnQgPSB4Owor
ICAgICAgICAKKyAgICAgICAgLy8gTGluayB4J3MgcGFyZW50IHRvIHkuCisgICAgICAgIHkucGFy
ZW50ID0geC5wYXJlbnQ7CisgICAgICAgIGlmICgheC5wYXJlbnQpCisgICAgICAgICAgICB0aGlz
Ll9yb290ID0geTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoeCA9PSB4LnBhcmVu
dC5sZWZ0KQorICAgICAgICAgICAgICAgIHgucGFyZW50LmxlZnQgPSB5OworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHgucGFyZW50LnJpZ2h0ID0geTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgLy8gUHV0IHggb24geSdzIGxlZnQuCisgICAgICAgIHkubGVmdCA9IHg7
CisgICAgICAgIHgucGFyZW50ID0geTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB5OworICAg
IH07CisgICAgCisgICAgUmVkQmxhY2tUcmVlLnByb3RvdHlwZS5fcmlnaHRSb3RhdGUgPSBmdW5j
dGlvbih5KSB7CisgICAgICAgIHZhciB4ID0geS5sZWZ0OworICAgICAgICAKKyAgICAgICAgLy8g
VHVybiB4J3MgcmlnaHQgc3VidHJlZSBpbnRvIHkncyBsZWZ0IHN1YnRyZWUuCisgICAgICAgIHku
bGVmdCA9IHgucmlnaHQ7CisgICAgICAgIGlmICh4LnJpZ2h0KQorICAgICAgICAgICAgeC5yaWdo
dC5wYXJlbnQgPSB5OworICAgICAgICAKKyAgICAgICAgLy8gTGluayB5J3MgcGFyZW50IHRvIHg7
CisgICAgICAgIHgucGFyZW50ID0geS5wYXJlbnQ7CisgICAgICAgIGlmICgheS5wYXJlbnQpCisg
ICAgICAgICAgICB0aGlzLl9yb290ID0geDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBp
ZiAoeSA9PSB5LnBhcmVudC5sZWZ0KQorICAgICAgICAgICAgICAgIHkucGFyZW50LmxlZnQgPSB4
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHkucGFyZW50LnJpZ2h0ID0geDsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgeC5yaWdodCA9IHk7CisgICAgICAgIHkucGFy
ZW50ID0geDsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB4OworICAgIH07CisgICAgCisgICAg
UmVkQmxhY2tUcmVlLnByb3RvdHlwZS5fcmVtb3ZlRml4dXAgPSBmdW5jdGlvbih4LCB4UGFyZW50
KSB7CisgICAgICAgIHdoaWxlICh4ICE9IHRoaXMuX3Jvb3QgJiYgKCF4IHx8IHguY29sb3IgPT0g
ImJsYWNrIikpIHsKKyAgICAgICAgICAgIGlmICh4ID09IHhQYXJlbnQubGVmdCkgeworICAgICAg
ICAgICAgICAgIC8vIE5vdGU6IHRoZSB0ZXh0IHBvaW50cyBvdXQgdGhhdCB3IGNhbm5vdCBiZSBu
dWxsLiBUaGUgcmVhc29uIGlzIG5vdCBvYnZpb3VzIGZyb20KKyAgICAgICAgICAgICAgICAvLyBz
aW1wbHkgbG9va2luZyBhdCB0aGUgY29kZTsgaXQgY29tZXMgYWJvdXQgZnJvbSB0aGUgcHJvcGVy
dGllcyBvZiB0aGUgcmVkLWJsYWNrCisgICAgICAgICAgICAgICAgLy8gdHJlZS4KKyAgICAgICAg
ICAgICAgICB2YXIgdyA9IHhQYXJlbnQucmlnaHQ7CisgICAgICAgICAgICAgICAgaWYgKHcuY29s
b3IgPT0gInJlZCIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2FzZSAxCisgICAgICAgICAg
ICAgICAgICAgIHcuY29sb3IgPSAiYmxhY2siOworICAgICAgICAgICAgICAgICAgICB4UGFyZW50
LmNvbG9yID0gInJlZCI7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xlZnRSb3RhdGUoeFBh
cmVudCk7CisgICAgICAgICAgICAgICAgICAgIHcgPSB4UGFyZW50LnJpZ2h0OworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoKCF3LmxlZnQgfHwgdy5sZWZ0LmNvbG9yID09
ICJibGFjayIpCisgICAgICAgICAgICAgICAgICAgICYmICghdy5yaWdodCB8fCB3LnJpZ2h0LmNv
bG9yID09ICJibGFjayIpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIENhc2UgMgorICAgICAg
ICAgICAgICAgICAgICB3LmNvbG9yID0gInJlZCI7CisgICAgICAgICAgICAgICAgICAgIHggPSB4
UGFyZW50OworICAgICAgICAgICAgICAgICAgICB4UGFyZW50ID0geC5wYXJlbnQ7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF3LnJpZ2h0IHx8IHcu
cmlnaHQuY29sb3IgPT0gImJsYWNrIikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2Fz
ZSAzCisgICAgICAgICAgICAgICAgICAgICAgICB3LmxlZnQuY29sb3IgPSAiYmxhY2siOworICAg
ICAgICAgICAgICAgICAgICAgICAgdy5jb2xvciA9ICJyZWQiOworICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5fcmlnaHRSb3RhdGUodyk7CisgICAgICAgICAgICAgICAgICAgICAgICB3ID0g
eFBhcmVudC5yaWdodDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAvLyBDYXNlIDQKKyAgICAgICAgICAgICAgICAgICAgdy5jb2xvciA9IHhQYXJlbnQuY29sb3I7
CisgICAgICAgICAgICAgICAgICAgIHhQYXJlbnQuY29sb3IgPSAiYmxhY2siOworICAgICAgICAg
ICAgICAgICAgICBpZiAody5yaWdodCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHcucmlnaHQu
Y29sb3IgPSAiYmxhY2siOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9sZWZ0Um90YXRlKHhQ
YXJlbnQpOworICAgICAgICAgICAgICAgICAgICB4ID0gdGhpcy5fcm9vdDsKKyAgICAgICAgICAg
ICAgICAgICAgeFBhcmVudCA9IHgucGFyZW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gU2FtZSBhcyAidGhlbiIgY2xhdXNlIHdp
dGggInJpZ2h0IiBhbmQgImxlZnQiIGV4Y2hhbmdlZC4KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICB2YXIgdyA9IHhQYXJlbnQubGVmdDsKKyAgICAgICAgICAgICAgICBpZiAody5j
b2xvciA9PSAicmVkIikgeworICAgICAgICAgICAgICAgICAgICAvLyBDYXNlIDEKKyAgICAgICAg
ICAgICAgICAgICAgdy5jb2xvciA9ICJibGFjayI7CisgICAgICAgICAgICAgICAgICAgIHhQYXJl
bnQuY29sb3IgPSAicmVkIjsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmlnaHRSb3RhdGUo
eFBhcmVudCk7CisgICAgICAgICAgICAgICAgICAgIHcgPSB4UGFyZW50LmxlZnQ7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgoIXcucmlnaHQgfHwgdy5yaWdodC5jb2xv
ciA9PSAiYmxhY2siKQorICAgICAgICAgICAgICAgICAgICAmJiAoIXcubGVmdCB8fCB3LmxlZnQu
Y29sb3IgPT0gImJsYWNrIikpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2FzZSAyCisgICAg
ICAgICAgICAgICAgICAgIHcuY29sb3IgPSAicmVkIjsKKyAgICAgICAgICAgICAgICAgICAgeCA9
IHhQYXJlbnQ7CisgICAgICAgICAgICAgICAgICAgIHhQYXJlbnQgPSB4LnBhcmVudDsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXcubGVmdCB8fCB3
LmxlZnQuY29sb3IgPT0gImJsYWNrIikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2Fz
ZSAzCisgICAgICAgICAgICAgICAgICAgICAgICB3LnJpZ2h0LmNvbG9yID0gImJsYWNrIjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHcuY29sb3IgPSAicmVkIjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuX2xlZnRSb3RhdGUodyk7CisgICAgICAgICAgICAgICAgICAgICAgICB3ID0g
eFBhcmVudC5sZWZ0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IC8vIENhc2UgNAorICAgICAgICAgICAgICAgICAgICB3LmNvbG9yID0geFBhcmVudC5jb2xvcjsK
KyAgICAgICAgICAgICAgICAgICAgeFBhcmVudC5jb2xvciA9ICJibGFjayI7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh3LmxlZnQpCisgICAgICAgICAgICAgICAgICAgICAgICB3LmxlZnQuY29s
b3IgPSAiYmxhY2siOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9yaWdodFJvdGF0ZSh4UGFy
ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgeCA9IHRoaXMuX3Jvb3Q7CisgICAgICAgICAgICAg
ICAgICAgIHhQYXJlbnQgPSB4LnBhcmVudDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHgpCisgICAgICAgICAgICB4LmNvbG9yID0gImJs
YWNrIjsKKyAgICB9OworICAgIAorICAgIHJldHVybiBSZWRCbGFja1RyZWU7Cit9KSgpOworCklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL3JlZF9ibGFja190cmVlX3Rlc3Qu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vY2Rqcy9yZWRfYmxh
Y2tfdHJlZV90ZXN0LmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0vY2Rqcy9yZWRfYmxhY2tfdHJlZV90ZXN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKK2xvYWQoInJlZF9ibGFja190cmVlLmpzIik7CisKKy8vIFRoZSBjb250cm9sIHN0
cmluZyBpcyBhIGxpc3Qgb2YgY29tbWFuZHMuIEVhY2ggY29tbWFuZCBpcyB0d28gY2hhcmFjdGVy
cywgd2l0aCB0aGUgZmlyc3QKKy8vIGlkZW50aWZ5aW5nIHRoZSBvcGVyYXRpb24gYW5kIHRoZSBz
ZWNvbmQgZ2l2aW5nIGEga2V5LgordmFyIHRlc3QgPSAoZnVuY3Rpb24oKXsKKyAgICBmdW5jdGlv
biBQYWlyVmVjdG9yKCkgeworICAgICAgICB0aGlzLl92ZWN0b3IgPSBbXTsKKyAgICB9CisKKyAg
ICBQYWlyVmVjdG9yLnByb3RvdHlwZS5wdXQgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7CisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdmVjdG9yLmxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICBpZiAoIXRoaXMuX3ZlY3RvcltpXS5rZXkuY29tcGFyZVRvKGtleSkpIHsKKyAgICAg
ICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fdmVjdG9yW2ldLnZhbHVlOworICAgICAgICAg
ICAgICAgIHRoaXMuX3ZlY3RvcltpXS52YWx1ZSA9IHZhbHVlOworICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fdmVj
dG9yLnB1c2goe2tleToga2V5LCB2YWx1ZTogdmFsdWV9KTsKKyAgICAgICAgcmV0dXJuIG51bGw7
CisgICAgfTsKKworICAgIFBhaXJWZWN0b3IucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKGtl
eSwgdmFsdWUpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl92ZWN0b3IubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5fdmVjdG9yW2ldLmtleS5jb21wYXJl
VG8oa2V5KSkgeworICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl92ZWN0b3JbaV0u
dmFsdWU7CisgICAgICAgICAgICAgICAgdGhpcy5fdmVjdG9yW2ldID0gdGhpcy5fdmVjdG9yW3Ro
aXMuX3ZlY3Rvci5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgICAgICB0aGlzLl92ZWN0b3IucG9w
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworCisgICAgUGFpclZlY3Rvci5wcm90
b3R5cGUuZ2V0ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkgeworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHRoaXMuX3ZlY3Rvci5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKCF0aGlz
Ll92ZWN0b3JbaV0ua2V5LmNvbXBhcmVUbyhrZXkpKQorICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLl92ZWN0b3JbaV0udmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgfTsKKyAgICAKKyAgICBQYWlyVmVjdG9yLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9u
KCkgeworICAgICAgICB2YXIgY29weSA9IHRoaXMuX3ZlY3Rvci5jb25jYXQoKTsKKyAgICAgICAg
Y29weS5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKKyAgICAgICAgICAgIHJldHVybiBhLmtleS5jb21w
YXJlVG8oYi5rZXkpOworICAgICAgICB9KTsKKyAgICAgICAgdmFyIHJlc3VsdCA9ICJbIjsKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3B5Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAg
ICBpZiAoaSkKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gIiwgIjsKKyAgICAgICAgICAgIHJl
c3VsdCArPSBjb3B5W2ldLmtleSArICI9PiIgKyBjb3B5W2ldLnZhbHVlOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiByZXN1bHQgKyAiXSI7CisgICAgfTsKKyAgICAKKyAgICBTdHJpbmcucHJv
dG90eXBlLmNvbXBhcmVUbyA9IFN0cmluZy5wcm90b3R5cGUubG9jYWxlQ29tcGFyZTsKKworICAg
IHZhciBjb3VudGVyID0gMDsKKyAgICAKKyAgICByZXR1cm4gZnVuY3Rpb24oY29udHJvbFN0cmlu
ZykgeworICAgICAgICBwcmludCgiUnVubmluZyAiICsgSlNPTi5zdHJpbmdpZnkoY29udHJvbFN0
cmluZykgKyAiOiIpOworICAgICAgICB2YXIgYXNWZWN0b3IgPSBuZXcgUGFpclZlY3RvcigpOwor
ICAgICAgICB2YXIgYXNUcmVlID0gbmV3IFJlZEJsYWNrVHJlZSgpOworICAgICAgICAKKyAgICAg
ICAgZnVuY3Rpb24gZmFpbCh3aGVuKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCisg
ICAgICAgICAgICAgICAgIkZBSUw6ICIgKyB3aGVuICsgIiwgdHJlZSA9ICIgKyBhc1RyZWUgKyAi
LCB2ZWN0b3IgPSAiICsgYXNWZWN0b3IpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBm
b3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgY29udHJvbFN0cmluZy5sZW5ndGg7IGluZGV4ICs9
IDIpIHsKKyAgICAgICAgICAgIHZhciBjb21tYW5kID0gY29udHJvbFN0cmluZ1tpbmRleF07Cisg
ICAgICAgICAgICB2YXIga2V5ID0gY29udHJvbFN0cmluZ1tpbmRleCArIDFdOworICAgICAgICAg
ICAgdmFyIHZhbHVlID0gKytjb3VudGVyOworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0
Y2ggKGNvbW1hbmQpIHsKKyAgICAgICAgICAgIGNhc2UgIisiOgorICAgICAgICAgICAgICAgIHZh
ciBvbGRWZWN0b3JWYWx1ZSA9IGFzVmVjdG9yLnB1dChrZXksIHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICB2YXIgb2xkVHJlZVZhbHVlID0gYXNUcmVlLnB1dChrZXksIHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBpZiAob2xkVmVjdG9yVmFsdWUgIT09IG9sZFRyZWVWYWx1ZSkgeworICAgICAgICAg
ICAgICAgICAgICBmYWlsKCJBZGRpbmcgIiArIGtleSArICI9PiIgKyB2YWx1ZSArICIsIHZlY3Rv
ciBnb3QgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgb2xkVmVjdG9yVmFsdWUgKyAiIGJ1
dCB0cmVlIGdvdCAiICsgb2xkVHJlZVZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlICIqIjoK
KyAgICAgICAgICAgICAgICB2YXIgb2xkVmVjdG9yVmFsdWUgPSBhc1ZlY3Rvci5nZXQoa2V5KTsK
KyAgICAgICAgICAgICAgICB2YXIgb2xkVHJlZVZhbHVlID0gYXNUcmVlLmdldChrZXkpOworICAg
ICAgICAgICAgICAgIGlmIChvbGRWZWN0b3JWYWx1ZSAhPT0gb2xkVHJlZVZhbHVlKSB7CisgICAg
ICAgICAgICAgICAgICAgIGZhaWwoIkdldHRpbmcgIiArIGtleSArICIsIHZlY3RvciBnb3QgIiAr
CisgICAgICAgICAgICAgICAgICAgICAgICAgb2xkVmVjdG9yVmFsdWUgKyAiIGJ1dCB0cmVlIGdv
dCAiICsgb2xkVHJlZVZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlICIhIjoKKyAgICAgICAg
ICAgICAgICB2YXIgb2xkVmVjdG9yVmFsdWUgPSBhc1ZlY3Rvci5yZW1vdmUoa2V5KTsKKyAgICAg
ICAgICAgICAgICB2YXIgb2xkVHJlZVZhbHVlID0gYXNUcmVlLnJlbW92ZShrZXkpOworICAgICAg
ICAgICAgICAgIGlmIChvbGRWZWN0b3JWYWx1ZSAhPT0gb2xkVHJlZVZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgICAgIGZhaWwoIlJlbW92aW5nICIgKyBrZXkgKyAiLCB2ZWN0b3IgZ290ICIgKwor
ICAgICAgICAgICAgICAgICAgICAgICAgIG9sZFZlY3RvclZhbHVlICsgIiBidXQgdHJlZSBnb3Qg
IiArIG9sZFRyZWVWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICB0aHJvdyBFcnJvcigiQmFkIGNvbW1hbmQ6ICIgKyBjb21tYW5kKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCIiICsgYXNWZWN0b3IgIT0gIiIg
KyBhc1RyZWUpCisgICAgICAgICAgICBmYWlsKCJCYWQgcmVzdWx0IGF0IGVuZCIpOworICAgICAg
ICAKKyAgICAgICAgcHJpbnQoIiAgICBTdWNjZXNzLCB0cmVlIGlzOiAiICsgYXNUcmVlKTsKKyAg
ICB9OworfSkoKTsKKwordGVzdCgiIik7Cit0ZXN0KCIrYSIpOwordGVzdCgiKngheiIpOwordGVz
dCgiK2EqeCF6Iik7Cit0ZXN0KCIrYSphIWEiKTsKK3Rlc3QoIithK2IiKTsKK3Rlc3QoIithK2Ir
YyIpOwordGVzdCgiK2ErYitjK2QiKTsKK3Rlc3QoIithK2IrYytkK2ErYitjK2QrYStiK2MrZCth
K2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2Er
YitjK2QrYStiK2MrZCIpOwordGVzdCgiK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2Qr
YStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCth
K2IrYytkK2UrZitnK2graStqK2srbCttK24rbytwK3ErcitzK3QrdSt2K3greSt6Iik7Cit0ZXN0
KCIrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2Mr
ZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrZStmK2craCtpK2orayts
K20rbitvK3ArcStyK3MrdCt1K3YreCt5K3oqYSpiKmMqZCplKmYqZypoKmkqaiprKmwqbSpuKm8q
cCpxKnIqcyp0KnUqdip3KngqeSp6IWEhYiFjIWQhZSFmIWchaCFpIWohayFsIW0hbiFvIXAhcSFy
IXMhdCF1IXYhdyF4IXkheiIpOworCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9j
ZGpzL3JlZHVjZV9jb2xsaXNpb25fc2V0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVz
dHMvSmV0U3RyZWFtL2NkanMvcmVkdWNlX2NvbGxpc2lvbl9zZXQuanMJKHJldmlzaW9uIDApCisr
KyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL3JlZHVjZV9jb2xsaXNpb25fc2V0Lmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ4IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMDEt
MjAxMCwgUHVyZHVlIFVuaXZlcnNpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gCisvLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorLy8gICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8v
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisvLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisvLyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICog
TmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgUHVyZHVlIFVuaXZlcnNpdHkgbm9yIHRoZQorLy8gICAg
bmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMKKy8vICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8gCisvLyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5ECisvLyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorLy8gV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorLy8gRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUgTElBQkxF
IEZPUiBBTlkKKy8vIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisvLyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisv
LyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKy8vIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworLy8gU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKK3ZhciBkcmF3TW90aW9uT25Wb3hlbE1hcCA9IChmdW5jdGlv
bigpIHsKKyAgICB2YXIgdm94ZWxTaXplID0gQ29uc3RhbnRzLkdPT0RfVk9YRUxfU0laRTsKKyAg
ICB2YXIgaG9yaXpvbnRhbCA9IG5ldyBWZWN0b3IyRCh2b3hlbFNpemUsIDApOworICAgIHZhciB2
ZXJ0aWNhbCA9IG5ldyBWZWN0b3IyRCgwLCB2b3hlbFNpemUpOworICAgIAorICAgIGZ1bmN0aW9u
IHZveGVsSGFzaChwb3NpdGlvbikgeworICAgICAgICB2YXIgeERpdiA9IChwb3NpdGlvbi54IC8g
dm94ZWxTaXplKSB8IDA7CisgICAgICAgIHZhciB5RGl2ID0gKHBvc2l0aW9uLnkgLyB2b3hlbFNp
emUpIHwgMDsKKyAgICAgICAgCisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgVmVjdG9yMkQoKTsK
KyAgICAgICAgcmVzdWx0LnggPSB2b3hlbFNpemUgKiB4RGl2OworICAgICAgICByZXN1bHQueSA9
IHZveGVsU2l6ZSAqIHlEaXY7CisgICAgICAgIAorICAgICAgICBpZiAocG9zaXRpb24ueCA8IDAp
CisgICAgICAgICAgICByZXN1bHQueCAtPSB2b3hlbFNpemU7CisgICAgICAgIGlmIChwb3NpdGlv
bi55IDwgMCkKKyAgICAgICAgICAgIHJlc3VsdC55IC09IHZveGVsU2l6ZTsKKyAgICAgICAgCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHJldHVybiBmdW5jdGlvbih2
b3hlbE1hcCwgbW90aW9uKSB7CisgICAgICAgIHZhciBzZWVuID0gbmV3IFJlZEJsYWNrVHJlZSgp
OworICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gcHV0SW50b01hcCh2b3hlbCkgeworICAgICAg
ICAgICAgdmFyIGFycmF5ID0gdm94ZWxNYXAuZ2V0KHZveGVsKTsKKyAgICAgICAgICAgIGlmICgh
YXJyYXkpCisgICAgICAgICAgICAgICAgdm94ZWxNYXAucHV0KHZveGVsLCBhcnJheSA9IFtdKTsK
KyAgICAgICAgICAgIGFycmF5LnB1c2gobW90aW9uKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgZnVuY3Rpb24gaXNJblZveGVsKHZveGVsKSB7CisgICAgICAgICAgICBpZiAodm94ZWwu
eCA+IENvbnN0YW50cy5NQVhfWCB8fAorICAgICAgICAgICAgICAgIHZveGVsLnggPCBDb25zdGFu
dHMuTUlOX1ggfHwKKyAgICAgICAgICAgICAgICB2b3hlbC55ID4gQ29uc3RhbnRzLk1BWF9ZIHx8
CisgICAgICAgICAgICAgICAgdm94ZWwueSA8IENvbnN0YW50cy5NSU5fWSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZhciBpbml0ID0g
bW90aW9uLnBvc09uZTsKKyAgICAgICAgICAgIHZhciBmaW4gPSBtb3Rpb24ucG9zVHdvOworICAg
ICAgICAgICAgCisgICAgICAgICAgICB2YXIgdl9zID0gdm94ZWxTaXplOworICAgICAgICAgICAg
dmFyIHIgPSBDb25zdGFudHMuUFJPWElNSVRZX1JBRElVUyAvIDI7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHZhciB2X3ggPSB2b3hlbC54OworICAgICAgICAgICAgdmFyIHgwID0gaW5pdC54
OworICAgICAgICAgICAgdmFyIHh2ID0gZmluLnggLSBpbml0Lng7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHZhciB2X3kgPSB2b3hlbC55OworICAgICAgICAgICAgdmFyIHkwID0gaW5pdC55
OworICAgICAgICAgICAgdmFyIHl2ID0gZmluLnkgLSBpbml0Lnk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHZhciBsb3dfeCwgaGlnaF94OworICAgICAgICAgICAgbG93X3ggPSAodl94IC0g
ciAtIHgwKSAvIHh2OworICAgICAgICAgICAgaGlnaF94ID0gKHZfeCArIHZfcyArIHIgLSB4MCkg
LyB4djsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHh2IDwgMCkgeworICAgICAgICAg
ICAgICAgIHZhciB0bXAgPSBsb3dfeDsKKyAgICAgICAgICAgICAgICBsb3dfeCA9IGhpZ2hfeDsK
KyAgICAgICAgICAgICAgICBoaWdoX3ggPSB0bXA7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHZhciBsb3dfeSwgaGlnaF95OworICAgICAgICAgICAgbG93X3kgPSAo
dl95IC0gciAtIHkwKSAvIHl2OworICAgICAgICAgICAgaGlnaF95ID0gKHZfeSArIHZfcyArIHIg
LSB5MCkgLyB5djsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHl2IDwgMCkgeworICAg
ICAgICAgICAgICAgIHZhciB0bXAgPSBsb3dfeTsKKyAgICAgICAgICAgICAgICBsb3dfeSA9IGhp
Z2hfeTsKKyAgICAgICAgICAgICAgICBoaWdoX3kgPSB0bXA7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgICAgIHByaW50
KCJ2X3ggPSAiICsgdl94ICsgIiwgeDAgPSAiICsgeDAgKyAiLCB4diA9ICIgKyB4diArICIsIHZf
eSA9ICIgKyB2X3kgKyAiLCB5MCA9ICIgKyB5MCArICIsIHl2ID0gIiArIHl2ICsgIiwgbG93X3gg
PSAiICsgbG93X3ggKyAiLCBsb3dfeSA9ICIgKyBsb3dfeSArICIsIGhpZ2hfeCA9ICIgKyBoaWdo
X3ggKyAiLCBoaWdoX3kgPSAiICsgaGlnaF95KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgcmV0dXJuICgoKHh2ID09IDAgJiYgdl94IDw9IHgwICsgciAmJiB4MCAt
IHIgPD0gdl94ICsgdl9zKSAvKiBubyBtb3Rpb24gaW4geCAqLyB8fCAKKwkJICAgICAoKGxvd194
IDw9IDEgJiYgMSA8PSBoaWdoX3gpIHx8IChsb3dfeCA8PSAwICYmIDAgPD0gaGlnaF94KSB8fAor
ICAgICAgICAgICAgICAgICAgICAgICgwIDw9IGxvd194ICYmIGhpZ2hfeCA8PSAxKSkpICYmIAor
CQkgICAgKCh5diA9PSAwICYmIHZfeSA8PSB5MCArIHIgJiYgeTAgLSByIDw9IHZfeSArIHZfcykg
Lyogbm8gbW90aW9uIGluIHkgKi8gfHwgCisJCSAgICAgKChsb3dfeSA8PSAxICYmIDEgPD0gaGln
aF95KSB8fCAobG93X3kgPD0gMCAmJiAwIDw9IGhpZ2hfeSkgfHwKKyAgICAgICAgICAgICAgICAg
ICAgICAoMCA8PSBsb3dfeSAmJiBoaWdoX3kgPD0gMSkpKSAmJiAKKwkJICAgICh4diA9PSAwIHx8
IHl2ID09IDAgfHwgLyogbm8gbW90aW9uIGluIHggb3IgeSBvciBib3RoICovCisJCSAgICAgKGxv
d195IDw9IGhpZ2hfeCAmJiBoaWdoX3ggPD0gaGlnaF95KSB8fAorICAgICAgICAgICAgICAgICAg
ICAgKGxvd195IDw9IGxvd194ICYmIGxvd194IDw9IGhpZ2hfeSkgfHwKKyAgICAgICAgICAgICAg
ICAgICAgIChsb3dfeCA8PSBsb3dfeSAmJiBoaWdoX3kgPD0gaGlnaF94KSkpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBmdW5jdGlvbiByZWN1cnNlKG5leHRWb3hlbCkgeworICAgICAg
ICAgICAgaWYgKCFpc0luVm94ZWwobmV4dFZveGVsLCBtb3Rpb24pKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIGlmIChzZWVuLnB1dChuZXh0Vm94ZWwsIHRydWUpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcHV0SW50b01h
cChuZXh0Vm94ZWwpOworICAgICAgICAgICAgCisgICAgICAgICAgICByZWN1cnNlKG5leHRWb3hl
bC5taW51cyhob3Jpem9udGFsKSk7CisgICAgICAgICAgICByZWN1cnNlKG5leHRWb3hlbC5wbHVz
KGhvcml6b250YWwpKTsKKyAgICAgICAgICAgIHJlY3Vyc2UobmV4dFZveGVsLm1pbnVzKHZlcnRp
Y2FsKSk7CisgICAgICAgICAgICByZWN1cnNlKG5leHRWb3hlbC5wbHVzKHZlcnRpY2FsKSk7Cisg
ICAgICAgICAgICByZWN1cnNlKG5leHRWb3hlbC5taW51cyhob3Jpem9udGFsKS5taW51cyh2ZXJ0
aWNhbCkpOworICAgICAgICAgICAgcmVjdXJzZShuZXh0Vm94ZWwubWludXMoaG9yaXpvbnRhbCku
cGx1cyh2ZXJ0aWNhbCkpOworICAgICAgICAgICAgcmVjdXJzZShuZXh0Vm94ZWwucGx1cyhob3Jp
em9udGFsKS5taW51cyh2ZXJ0aWNhbCkpOworICAgICAgICAgICAgcmVjdXJzZShuZXh0Vm94ZWwu
cGx1cyhob3Jpem9udGFsKS5wbHVzKHZlcnRpY2FsKSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHJlY3Vyc2Uodm94ZWxIYXNoKG1vdGlvbi5wb3NPbmUpKTsKKyAgICB9OworfSkoKTsK
KworZnVuY3Rpb24gcmVkdWNlQ29sbGlzaW9uU2V0KG1vdGlvbnMpIHsKKyAgICB2YXIgdm94ZWxN
YXAgPSBuZXcgUmVkQmxhY2tUcmVlKCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtb3Rpb25z
Lmxlbmd0aDsgKytpKQorICAgICAgICBkcmF3TW90aW9uT25Wb3hlbE1hcCh2b3hlbE1hcCwgbW90
aW9uc1tpXSk7CisgICAgICAgIAorICAgIHZhciByZXN1bHQgPSBbXTsKKyAgICB2b3hlbE1hcC5m
b3JFYWNoKGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+
IDEpCisgICAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7CisgICAgfSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vY2Rqcy9yZWR1
Y2VfY29sbGlzaW9uX3NldF90ZXN0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMv
SmV0U3RyZWFtL2NkanMvcmVkdWNlX2NvbGxpc2lvbl9zZXRfdGVzdC5qcwkocmV2aXNpb24gMCkK
KysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtL2NkanMvcmVkdWNlX2NvbGxpc2lvbl9zZXRf
dGVzdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgyIEBACisvLyBDb3B5cmlnaHQgKGMp
IDIwMDEtMjAxMCwgUHVyZHVlIFVuaXZlcnNpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gCisv
LyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorLy8gICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKy8vICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisvLyAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
Ly8gICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgUHVyZHVlIFVuaXZlcnNpdHkgbm9yIHRoZQor
Ly8gICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMKKy8vICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8gCisvLyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5ECisvLyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorLy8gV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
Ly8gRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUg
TElBQkxFIEZPUiBBTlkKKy8vIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisvLyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisvLyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKy8vIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworLy8gU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2xvYWQoImNvbnN0YW50cy5qcyIpOworbG9hZCgi
dXRpbC5qcyIpOworbG9hZCgicmVkX2JsYWNrX3RyZWUuanMiKTsKK2xvYWQoImNhbGxfc2lnbi5q
cyIpOworbG9hZCgidmVjdG9yXzJkLmpzIik7Citsb2FkKCJ2ZWN0b3JfM2QuanMiKTsKK2xvYWQo
Im1vdGlvbi5qcyIpOworbG9hZCgicmVkdWNlX2NvbGxpc2lvbl9zZXQuanMiKTsKKwordmFyIG1h
a2VNb3Rpb24gPSAoZnVuY3Rpb24oKSB7CisgICAgdmFyIGNvdW50ZXIgPSAwOworICAgIHJldHVy
biBmdW5jdGlvbih4MSwgeTEsIHoxLCB4MiwgeTIsIHoyKSB7CisgICAgICAgIHJldHVybiBuZXcg
TW90aW9uKG5ldyBDYWxsU2lnbigiZm9vIiArICgrK2NvdW50ZXIpKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmV3IFZlY3RvcjNEKHgxLCB5MSwgejEpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBuZXcgVmVjdG9yM0QoeDIsIHkyLCB6MikpOworICAgIH0KK30pKCk7CisKK2Z1bmN0
aW9uIGRyYXdNb3Rpb24obW90aW9uKSB7CisgICAgdmFyIHZveGVsTWFwID0gbmV3IFJlZEJsYWNr
VHJlZSgpOworICAgIGRyYXdNb3Rpb25PblZveGVsTWFwKHZveGVsTWFwLCBtb3Rpb24pOworICAg
IHJldHVybiB2b3hlbE1hcDsKK30KKworZnVuY3Rpb24ga2V5cyh2b3hlbE1hcCkgeworICAgIHZh
ciByZXN1bHQgPSAiWyI7CisgICAgdmFyIGZpcnN0ID0gdHJ1ZTsKKyAgICB2b3hlbE1hcC5mb3JF
YWNoKGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgICAgICAgaWYgKGZpcnN0KQorICAgICAgICAg
ICAgZmlyc3QgPSBmYWxzZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0ICs9ICIs
ICI7CisgICAgICAgIHJlc3VsdCArPSBrZXk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdCAr
ICJdIjsKK30KKworZnVuY3Rpb24gdGVzdCh4MSwgeTEsIHoxLCB4MiwgeTIsIHoyLCBleHBlY3Rl
ZCkgeworICAgIHZhciBtb3Rpb24gPSBtYWtlTW90aW9uKHgxLCB5MSwgejEsIHgyLCB5MiwgejIp
OworICAgIHByaW50KG1vdGlvbiArICI6Iik7CisgICAgdmFyIGFjdHVhbCA9IGtleXMoZHJhd01v
dGlvbihtb3Rpb24pKTsKKyAgICBpZiAoZXhwZWN0ZWQgIT0gYWN0dWFsKQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIldyb25nIHZveGVsIG1hcDogIiArIGFjdHVhbCk7CisgICAgcHJpbnQoIiAg
ICBHb3Q6ICIgKyBhY3R1YWwpOworfQorCit0ZXN0KDAsIDAsIDAsIDEsIDEsIDEsICJbWzAsIDBd
XSIpOwordGVzdCgwLCAwLCAwLCAyLCAyLCAyLCAiW1swLCAwXSwgWzAsIDJdLCBbMiwgMF0sIFsy
LCAyXV0iKTsKK3Rlc3QoMCwgMCwgMCwgNCwgNCwgNCwgIltbMCwgMF0sIFswLCAyXSwgWzIsIDBd
LCBbMiwgMl0sIFsyLCA0XSwgWzQsIDJdLCBbNCwgNF1dIik7Cit0ZXN0KDAsIDAsIDAsIDEwLCAw
LCAwLCAiW1swLCAwXSwgWzIsIDBdLCBbNCwgMF0sIFs2LCAwXSwgWzgsIDBdLCBbMTAsIDBdXSIp
OwordGVzdCgyLCAwLCAwLCAwLCAyLCAyLCAiW1swLCAwXSwgWzAsIDJdLCBbMiwgMF1dIik7Cit0
ZXN0KDAsIDIsIDAsIDIsIDAsIDIsICJbWzAsIDBdLCBbMCwgMl0sIFsyLCAwXV0iKTsKK3Rlc3Qo
MiwgMiwgMCwgMCwgMCwgMiwgIltbMCwgMF0sIFswLCAyXSwgWzIsIDBdLCBbMiwgMl1dIik7Cit0
ZXN0KDAsIDAsIDAsIDIsIDAsIDAsICJbWzAsIDBdLCBbMiwgMF1dIik7Cit0ZXN0KDAsIDAsIDAs
IDAsIDIsIDAsICJbWzAsIDBdLCBbMCwgMl1dIik7Cit0ZXN0KDIsIDAsIDAsIDAsIDAsIDAsICJb
WzAsIDBdLCBbMiwgMF1dIik7Cit0ZXN0KDAsIDIsIDAsIDAsIDAsIDAsICJbWzAsIDBdLCBbMCwg
Ml1dIik7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL3NpbXVsYXRvci5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL3NpbXVsYXRv
ci5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtL2NkanMvc2lt
dWxhdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8vIENvcHlyaWdodCAo
YykgMjAwMS0yMDEwLCBQdXJkdWUgVW5pdmVyc2l0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyAK
Ky8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisvLyAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorLy8gICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKy8vICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisvLyAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBQdXJkdWUgVW5pdmVyc2l0eSBub3IgdGhl
CisvLyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cworLy8gICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLyAKKy8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQKKy8vIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisvLyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisvLyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBC
RSBMSUFCTEUgRk9SIEFOWQorLy8gRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKy8vIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKy8vIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorLy8gT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisvLyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnVuY3Rpb24gU2ltdWxhdG9yKG51bUFpcmNy
YWZ0KSB7CisgICAgdGhpcy5fYWlyY3JhZnQgPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IG51bUFpcmNyYWZ0OyArK2kpCisgICAgICAgIHRoaXMuX2FpcmNyYWZ0LnB1c2gobmV3IENhbGxT
aWduKCJmb28iICsgaSkpOworfQorCitTaW11bGF0b3IucHJvdG90eXBlLnNpbXVsYXRlID0gZnVu
Y3Rpb24odGltZSkgeworICAgIHZhciBmcmFtZSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgdGhpcy5fYWlyY3JhZnQubGVuZ3RoOyBpICs9IDIpIHsKKyAgICAgICAgZnJhbWUucHVzaCh7
CisgICAgICAgICAgICBjYWxsc2lnbjogdGhpcy5fYWlyY3JhZnRbaV0sCisgICAgICAgICAgICBw
b3NpdGlvbjogbmV3IFZlY3RvcjNEKHRpbWUsIE1hdGguY29zKHRpbWUpICogMiArIGkgKiAzLCAx
MCkKKyAgICAgICAgfSk7CisgICAgICAgIGZyYW1lLnB1c2goeworICAgICAgICAgICAgY2FsbHNp
Z246IHRoaXMuX2FpcmNyYWZ0W2kgKyAxXSwKKyAgICAgICAgICAgIHBvc2l0aW9uOiBuZXcgVmVj
dG9yM0QodGltZSwgTWF0aC5zaW4odGltZSkgKiAyICsgaSAqIDMsIDEwKQorICAgICAgICB9KTsK
KyAgICB9CisgICAgcmV0dXJuIGZyYW1lOworfTsKKwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9K
ZXRTdHJlYW0vY2Rqcy91dGlsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvSmV0
U3RyZWFtL2NkanMvdXRpbC5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0
U3RyZWFtL2NkanMvdXRpbC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgyIEBACisvLyBD
b3B5cmlnaHQgKGMpIDIwMDEtMjAxMCwgUHVyZHVlIFVuaXZlcnNpdHkuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorLy8gICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKy8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKy8vICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisvLyAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorLy8gICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgUHVyZHVlIFVuaXZlcnNp
dHkgbm9yIHRoZQorLy8gICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKy8vICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8gCisv
LyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisvLyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorLy8gV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorLy8gRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VCBIT0xERVIgQkUgTElBQkxFIEZPUiBBTlkKKy8vIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisvLyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisvLyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKy8vIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworLy8gU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Z1bmN0aW9uIGNvbXBhcmVO
dW1iZXJzKGEsIGIpIHsKKyAgICBpZiAoYSA9PSBiKQorICAgICAgICByZXR1cm4gMDsKKyAgICBp
ZiAoYSA8IGIpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoYSA+IGIpCisgICAgICAgIHJl
dHVybiAxOworICAgIAorICAgIC8vIFdlIHNheSB0aGF0IE5hTiBpcyBzbWFsbGVyIHRoYW4gbm9u
LU5hTi4KKyAgICBpZiAoYSA9PSBhKQorICAgICAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gLTE7
Cit9CisKK2Z1bmN0aW9uIGF2ZXJhZ2VBYm92ZVBlcmNlbnRpbGUobnVtYmVycywgcGVyY2VudGls
ZSkgeworICAgIC8vIERvbid0IGNoYW5nZSB0aGUgb3JpZ2luYWwgYXJyYXkuCisgICAgbnVtYmVy
cyA9IG51bWJlcnMuc2xpY2UoKTsKKyAgICAKKyAgICAvLyBTb3J0IGluIGFzY2VuZGluZyBvcmRl
ci4KKyAgICBudW1iZXJzLnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYSAtIGI7IH0pOwor
ICAgIAorICAgIC8vIE5vdyB0aGUgZWxlbWVudHMgd2Ugd2FudCBhcmUgYXQgdGhlIGVuZC4gS2Vl
cCByZW1vdmluZyB0aGVtIHVudGlsIHRoZSBhcnJheSBzaXplIHNocmlua3MgdG9vIG11Y2guCisg
ICAgLy8gRXhhbXBsZXMgYXNzdW1pbmcgcGVyY2VudGlsZSA9IDk5OgorICAgIC8vCisgICAgLy8g
LSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwOiB3ZSB3aWxsIHJlbW92ZSBqdXN0IHRoZSB3
b3JzdCBlbnRyeSBhbmQgdGhlbiBub3QgcmVtb3ZlIGFueW1vcmUsCisgICAgLy8gICBzaW5jZSB0
aGVuIG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPSAwLjk5LgorICAgIC8vCisgICAg
Ly8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwMDogd2Ugd2lsbCByZW1vdmUgdGhlIHRl
biB3b3JzdC4KKyAgICAvLworICAgIC8vIC0gbnVtYmVycy5sZW5ndGggc3RhcnRzIGF0IDEwOiB3
ZSB3aWxsIHJlbW92ZSBqdXN0IHRoZSB3b3JzdC4KKyAgICB2YXIgbnVtYmVyc1dlV2FudCA9IFtd
OworICAgIHZhciBvcmlnaW5hbExlbmd0aCA9IG51bWJlcnMubGVuZ3RoOworICAgIHdoaWxlIChu
dW1iZXJzLmxlbmd0aCAvIG9yaWdpbmFsTGVuZ3RoID4gcGVyY2VudGlsZSAvIDEwMCkKKyAgICAg
ICAgbnVtYmVyc1dlV2FudC5wdXNoKG51bWJlcnMucG9wKCkpOworICAgIAorICAgIHZhciBzdW0g
PSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyc1dlV2FudC5sZW5ndGg7ICsraSkK
KyAgICAgICAgc3VtICs9IG51bWJlcnNXZVdhbnRbaV07CisgICAgCisgICAgdmFyIHJlc3VsdCA9
IHN1bSAvIG51bWJlcnNXZVdhbnQubGVuZ3RoOworICAgIAorICAgIC8vIERvIGEgc2FuaXR5IGNo
ZWNrLgorICAgIGlmIChudW1iZXJzLmxlbmd0aCAmJiByZXN1bHQgPCBudW1iZXJzW251bWJlcnMu
bGVuZ3RoIC0gMV0pIHsKKyAgICAgICAgdGhyb3cgIlNhbml0eSBjaGVjayBmYWlsOiB0aGUgd29y
c3QgY2FzZSByZXN1bHQgaXMgIiArIHJlc3VsdCArCisgICAgICAgICAgICAiIGJ1dCB3ZSBkaWRu
J3QgdGFrZSBpbnRvIGFjY291bnQgIiArIG51bWJlcnM7CisgICAgfQorICAgIAorICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZhciBjdXJyZW50VGltZTsKK2lmICh0aGlzLnBlcmZvcm1hbmNlICYm
IHBlcmZvcm1hbmNlLm5vdykKKyAgICBjdXJyZW50VGltZSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4g
cGVyZm9ybWFuY2Uubm93KCkgfTsKK2Vsc2UgaWYgKHByZWNpc2VUaW1lKQorICAgIGN1cnJlbnRU
aW1lID0gZnVuY3Rpb24oKSB7IHJldHVybiBwcmVjaXNlVGltZSgpICogMTAwMDsgfTsKK2Vsc2UK
KyAgICBjdXJyZW50VGltZSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMCArIG5ldyBEYXRlKCk7IH07
CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL3ZlY3Rvcl8yZC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL3ZlY3Rvcl8yZC5qcwko
cmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtL2NkanMvdmVjdG9yXzJk
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8vIENvcHlyaWdodCAoYykgMjAw
MS0yMDEwLCBQdXJkdWUgVW5pdmVyc2l0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyAKKy8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisvLyAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
Ly8gICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKy8vICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBQdXJkdWUgVW5pdmVyc2l0eSBub3IgdGhlCisvLyAg
ICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cworLy8gICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLyAKKy8vIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQKKy8vIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisvLyBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisvLyBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFC
TEUgRk9SIEFOWQorLy8gRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKy8vIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
Ky8vIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorLy8gT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisvLyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworZnVuY3Rpb24gVmVjdG9yMkQoeCwgeSkgeworICAgIHRo
aXMueCA9IHg7CisgICAgdGhpcy55ID0geTsKK30KKworVmVjdG9yMkQucHJvdG90eXBlLnBsdXMg
PSBmdW5jdGlvbihvdGhlcikgeworICAgIHJldHVybiBuZXcgVmVjdG9yMkQodGhpcy54ICsgb3Ro
ZXIueCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueSArIG90aGVyLnkpOworfTsKKwor
VmVjdG9yMkQucHJvdG90eXBlLm1pbnVzID0gZnVuY3Rpb24ob3RoZXIpIHsKKyAgICByZXR1cm4g
bmV3IFZlY3RvcjJEKHRoaXMueCAtIG90aGVyLngsCisgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLnkgLSBvdGhlci55KTsKK307CisKK1ZlY3RvcjJELnByb3RvdHlwZS50b1N0cmluZyA9IGZ1
bmN0aW9uKCkgeworICAgIHJldHVybiAiWyIgKyB0aGlzLnggKyAiLCAiICsgdGhpcy55ICsgIl0i
OworfTsKKworVmVjdG9yMkQucHJvdG90eXBlLmNvbXBhcmVUbyA9IGZ1bmN0aW9uKG90aGVyKSB7
CisgICAgdmFyIHJlc3VsdCA9IGNvbXBhcmVOdW1iZXJzKHRoaXMueCwgb3RoZXIueCk7CisgICAg
aWYgKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gY29tcGFyZU51
bWJlcnModGhpcy55LCBvdGhlci55KTsKK307CisKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0
U3RyZWFtL2NkanMvdmVjdG9yXzNkLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMv
SmV0U3RyZWFtL2NkanMvdmVjdG9yXzNkLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VU
ZXN0cy9KZXRTdHJlYW0vY2Rqcy92ZWN0b3JfM2QuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3MCBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDAxLTIwMTAsIFB1cmR1ZSBVbml2ZXJzaXR5LiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIAorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1l
dDoKKy8vICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisvLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorLy8gICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFB1
cmR1ZSBVbml2ZXJzaXR5IG5vciB0aGUKKy8vICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisvLyAgICBkZXJpdmVk
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKy8vIAorLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorLy8gQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKy8vIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKy8vIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQgSE9MREVSIEJFIExJQUJMRSBGT1IgQU5ZCisvLyBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworLy8gKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworLy8gTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisvLyBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKy8vIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmdW5j
dGlvbiBWZWN0b3IzRCh4LCB5LCB6KSB7CisgICAgdGhpcy54ID0geDsKKyAgICB0aGlzLnkgPSB5
OworICAgIHRoaXMueiA9IHo7Cit9CisKK1ZlY3RvcjNELnByb3RvdHlwZS5wbHVzID0gZnVuY3Rp
b24ob3RoZXIpIHsKKyAgICByZXR1cm4gbmV3IFZlY3RvcjNEKHRoaXMueCArIG90aGVyLngsCisg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnkgKyBvdGhlci55LAorICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy56ICsgb3RoZXIueik7Cit9OworCitWZWN0b3IzRC5wcm90b3R5cGUubWlu
dXMgPSBmdW5jdGlvbihvdGhlcikgeworICAgIHJldHVybiBuZXcgVmVjdG9yM0QodGhpcy54IC0g
b3RoZXIueCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueSAtIG90aGVyLnksCisgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnogLSBvdGhlci56KTsKK307CisKK1ZlY3RvcjNELnBy
b3RvdHlwZS5kb3QgPSBmdW5jdGlvbihvdGhlcikgeworICAgIHJldHVybiB0aGlzLnggKiBvdGhl
ci54ICsgdGhpcy55ICogb3RoZXIueSArIHRoaXMueiAqIG90aGVyLno7Cit9OworCitWZWN0b3Iz
RC5wcm90b3R5cGUuc3F1YXJlZE1hZ25pdHVkZSA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0
aGlzLmRvdCh0aGlzKTsKK307CisKK1ZlY3RvcjNELnByb3RvdHlwZS5tYWduaXR1ZGUgPSBmdW5j
dGlvbigpIHsKKyAgICByZXR1cm4gTWF0aC5zcXJ0KHRoaXMuc3F1YXJlZE1hZ25pdHVkZSgpKTsK
K307CisKK1ZlY3RvcjNELnByb3RvdHlwZS50aW1lcyA9IGZ1bmN0aW9uKGFtb3VudCkgeworICAg
IHJldHVybiBuZXcgVmVjdG9yM0QodGhpcy54ICogYW1vdW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy55ICogYW1vdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy56ICog
YW1vdW50KTsKK307CisKK1ZlY3RvcjNELnByb3RvdHlwZS5hczJEID0gZnVuY3Rpb24oKSB7Cisg
ICAgcmV0dXJuIG5ldyBWZWN0b3IyRCh0aGlzLngsIHRoaXMueSk7Cit9OworCitWZWN0b3IzRC5w
cm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gIlsiICsgdGhpcy54
ICsgIiwgIiArIHRoaXMueSArICIsICIgKyB0aGlzLnogKyAiXSI7Cit9OworCisKSW5kZXg6IFBl
cmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtL3N1bnNwaWRlci9jb3JkaWMuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vc3Vuc3BpZGVyL2NvcmRpYy5qcwkocmV2aXNp
b24gMTg1NzU3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vc3Vuc3BpZGVyL2NvcmRp
Yy5qcwkod29ya2luZyBjb3B5KQpAQCAtMSwxMDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgUmljaCBNb29yZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLS8vLy8vLiBTdGFydCBDT1JESUMKLQotdmFyIEFH
X0NPTlNUID0gMC42MDcyNTI5MzUwOwotCi1mdW5jdGlvbiBGSVhFRChYKQotewotICByZXR1cm4g
WCAqIDY1NTM2LjA7Ci19Ci0KLWZ1bmN0aW9uIEZMT0FUKFgpCi17Ci0gIHJldHVybiBYIC8gNjU1
MzYuMDsKLX0KLQotZnVuY3Rpb24gREVHMlJBRChYKQotewotICByZXR1cm4gMC4wMTc0NTMgKiAo
WCk7Ci19Ci0KLXZhciBBbmdsZXMgPSBbCi0gIEZJWEVEKDQ1LjApLCBGSVhFRCgyNi41NjUpLCBG
SVhFRCgxNC4wMzYyKSwgRklYRUQoNy4xMjUwMiksCi0gIEZJWEVEKDMuNTc2MzMpLCBGSVhFRCgx
Ljc4OTkxKSwgRklYRUQoMC44OTUxNzQpLCBGSVhFRCgwLjQ0NzYxNCksCi0gIEZJWEVEKDAuMjIz
ODExKSwgRklYRUQoMC4xMTE5MDYpLCBGSVhFRCgwLjA1NTk1MyksCi0gIEZJWEVEKDAuMDI3OTc3
KSAKLSAgICAgICAgICAgICAgXTsKLQotdmFyIFRhcmdldCA9IDI4LjAyNzsKLQotZnVuY3Rpb24g
Y29yZGljc2luY29zKFRhcmdldCkgewotICAgIHZhciBYOwotICAgIHZhciBZOwotICAgIHZhciBU
YXJnZXRBbmdsZTsKLSAgICB2YXIgQ3VyckFuZ2xlOwotICAgIHZhciBTdGVwOwotIAotICAgIFgg
PSBGSVhFRChBR19DT05TVCk7ICAgICAgICAgLyogQUdfQ09OU1QgKiBjb3MoMCkgKi8KLSAgICBZ
ID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIEFHX0NPTlNUICogc2luKDApICovCi0KLSAg
ICBUYXJnZXRBbmdsZSA9IEZJWEVEKFRhcmdldCk7Ci0gICAgQ3VyckFuZ2xlID0gMDsKLSAgICBm
b3IgKFN0ZXAgPSAwOyBTdGVwIDwgMTI7IFN0ZXArKykgewotICAgICAgICB2YXIgTmV3WDsKLSAg
ICAgICAgaWYgKFRhcmdldEFuZ2xlID4gQ3VyckFuZ2xlKSB7Ci0gICAgICAgICAgICBOZXdYID0g
WCAtIChZID4+IFN0ZXApOwotICAgICAgICAgICAgWSA9IChYID4+IFN0ZXApICsgWTsKLSAgICAg
ICAgICAgIFggPSBOZXdYOwotICAgICAgICAgICAgQ3VyckFuZ2xlICs9IEFuZ2xlc1tTdGVwXTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIE5ld1ggPSBYICsgKFkgPj4gU3RlcCk7Ci0g
ICAgICAgICAgICBZID0gLShYID4+IFN0ZXApICsgWTsKLSAgICAgICAgICAgIFggPSBOZXdYOwot
ICAgICAgICAgICAgQ3VyckFuZ2xlIC09IEFuZ2xlc1tTdGVwXTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiBGTE9BVChYKSAqIEZMT0FUKFkpOwotfQotCi0vLy8vLyBFbmQgQ09SRElD
Ci0KLXZhciB0b3RhbCA9IDA7Ci0KLWZ1bmN0aW9uIGNvcmRpYyggcnVucyApIHsKLSAgdmFyIHN0
YXJ0ID0gbmV3IERhdGUoKTsKLQotICBmb3IgKCB2YXIgaSA9IDAgOyBpIDwgcnVucyA7IGkrKyAp
IHsKLSAgICAgIHRvdGFsICs9IGNvcmRpY3NpbmNvcyhUYXJnZXQpOwotICB9Ci0KLSAgdmFyIGVu
ZCA9IG5ldyBEYXRlKCk7Ci0KLSAgcmV0dXJuIGVuZC5nZXRUaW1lKCkgLSBzdGFydC5nZXRUaW1l
KCk7Ci19Ci0KLWNvcmRpYygyNTAwMCk7Ci0KLXZhciBleHBlY3RlZCA9IDEwMzYyLjU3MDQ2ODc1
NTg4ODsKLQotaWYgKHRvdGFsICE9IGV4cGVjdGVkKQotICAgIHRocm93ICJFUlJPUjogYmFkIHJl
c3VsdDogZXhwZWN0ZWQgIiArIGV4cGVjdGVkICsgIiBidXQgZ290ICIgKyB0b3RhbDsKLQo=
</data>
<flag name="review"
          id="280278"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255244</attachid>
            <date>2015-06-19 16:27:26 -0700</date>
            <delta_ts>2015-06-19 16:27:26 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>86642</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODU3NjMpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNCBAQAorMjAxNS0wNi0xOSAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEpldFN0cmVhbSBzaG91
bGQgaW5jbHVkZSBhIEphdmFTY3JpcHQgdmVyc2lvbiBvZiB0aGUgQ0R4IHJlYWwtdGltZSBiZW5j
aG1hcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
NjE1NgorCisgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBhZGRzIGEgSmF2YVNjcmlwdCBwb3J0IG9mIHRoZSBDRHggcmVhbC10aW1lIGJl
bmNobWFyayB0byBKZXRTdHJlYW0sIGFuZCByZXRpcmVzCisgICAgICAgIHRoZSBjb3JkaWMgdGVz
dCBiZWNhdXNlIGl0IHdhcyBwcmV2aW91c2x5IHRoZSBzbWFsbGVzdCBhbmQgcHJvYmFibHkgbGVh
c3QgaW50ZXJlc3RpbmcuCisgICAgICAgIAorICAgICAgICBUaGUgbmV3IHRlc3QsICJjZGpzIiwg
aXMgbW9zdGx5IGEgZmFpdGhmdWwgcmV3cml0ZSBvZiB0aGUgSmF2YSBjb2RlIGludG8gSmF2YVNj
cmlwdC4KKyAgICAgICAgSSBnb3QgdGhlIEphdmEgY29kZSBmcm9tIGh0dHBzOi8vd3d3LmNzLnB1
cmR1ZS5lZHUvc3NzL3Byb2plY3RzL2NkeC8uCisgICAgICAgIAorICAgICAgICBUaGVyZSBhcmUg
c29tZSBkaWZmZXJlbmNlczoKKyAgICAgICAgCisgICAgICAgIC0gSXQgdXNlcyBSZWRCbGFja1Ry
ZWUncyBmb3IgYWxsIHNldHMgYW5kIG1hcHMgcmF0aGVyIHRoYW4gaGFzaHRhYmxlcy4gVGhpcyBp
cyBjbGVhcmx5CisgICAgICAgICAgbW9yZSBpbiB0aGUgc3Bpcml0IG9mIHJlYWwtdGltZSB0aGFu
IHRoZSBDRHggYmVuY2htYXJrLiBGV0lXLCBDRHggdXNlZCB0byB1c2UgdHJlZXMKKyAgICAgICAg
ICBhbmQgSSBkb24ndCBrbm93IHdoeSB0aGF0IGNoYW5nZWQgaW4gdGhlIGxhdGVzdCB2ZXJzaW9u
LgorICAgICAgICAKKyAgICAgICAgLSBDRGpzIGRvZXNuJ3QgYXR0ZW1wdCB0byBhdm9pZCBtZW1v
cnkgYWxsb2NhdGlvbnMsIHVubGlrZSB0aGUgcmVhbC10aW1lIEphdmEgdmVyc2lvbi4KKyAgICAg
ICAgICBJIHdyb3RlIHRoZSBjb2RlIHRoYXQgSSB3YW50ZWQgdG8gd3JpdGUgZm9yIGFlc3RoZXRp
Y3MsIHJhdGhlciB0aGFuIHRoZSBjb2RlIHRoYXQgSQorICAgICAgICAgIHdvdWxkIGhhdmUgd3Jp
dHRlbiBpZiBJIHRyaWVkIHRvIHdyaXRlIHRoZSBmYXN0ZXN0IGNvZGUgcG9zc2libGUuIEFnYWlu
LCBJIGJlbGlldmUKKyAgICAgICAgICB0aGF0IHRoaXMgaXMgaW4gdGhlIHNwaXJpdCBvZiBDRGog
LSBpdCdzIG1lYW50IHRvIHRlc3Qgd2hhdCB3b3VsZCBoYXBwZW4gaWYgeW91IHdyb3RlCisgICAg
ICAgICAgcmVhbC10aW1leSBzdHVmZiBpbiBhIGhpZ2ggbGV2ZWwgbGFuZ3VhZ2UgYW5kIGFjdHVh
bGx5IHRvb2sgYWR2YW50YWdlIG9mIHRoYXQKKyAgICAgICAgICBsYW5ndWFnZSB0byBiZSBtb3Jl
IHByb2R1Y3RpdmUuCisgICAgICAgIAorICAgICAgICBUaGUgdGVzdCBzY29yZSByZWZsZWN0cyB0
aGUgYXZlcmFnZSBsYXRlbmN5IG9mIHRoZSB3b3JzdCAxMCBzYW1wbGVzIG91dCBvZiAyMDAgc2Ft
cGxlcy4KKyAgICAgICAgVGhlIHNpbXVsYXRpb24gdXNlcyAxMDAwIGFpcmNyYWZ0LCBmbHlpbmcg
YWxvbmcgcGF0aHMgdGhhdCByZXN1bHQgaW4gc29tZSBkZXRlY3RlZAorICAgICAgICBjb2xsaXNp
b25zIGV2ZXJ5IG9uY2UgaW4gYSB3aGlsZS4gVGhlIGJlbmNobWFyayB2YWxpZGF0ZXMgaXRzIHJl
c3VsdHMgYnkgY2hlY2tpbmcgdGhlCisgICAgICAgIHRvdGFsIG51bWJlciBvZiBjb2xsaXNpb25z
IGRldGVjdGVkLgorICAgICAgICAKKyAgICAgICAgQXBhcnQgZnJvbSB0aGUgaW50ZWdyYXRpb24g
aW50byB0aGUgSmV0U3RyZWFtIGhhcm5lc3MsIHRoZSBDRGpzIGRpcmVjdG9yeSBjb250YWlucyBh
CisgICAgICAgIGZ1bGx5IHNlbGYtY29udGFpbmVkIGJlbmNobWFyayB0aGF0IGNvdWxkIGJlIHJ1
biBlaXRoZXIgaW4gdGhlIGpzYyBzaGVsbCBvciBpbiBicm93c2VyLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBuZXcgY29kZSB1c2VzIHRoZSBzYW1lIDMtY2xhdXNlIEJTRCBsaWNlbnNlIGFzIHRo
ZSBQdXJkdWUgY29kZSwgYW5kIGdpdmVzCisgICAgICAgIGF0dHJpYnV0aW9uIHRvIFB1cmR1ZSBp
biBhbG1vc3QgYWxsIGZpbGVzLiBJIGJlbGlldmUgdGhhdCBpcyBhcHByb3ByaWF0ZSBzaW5jZSBJ
IHdyb3RlCisgICAgICAgIG1vc3Qgb2YgdGhlIEpTIGZpbGVzIGJ5IGxvb2tpbmcgYXQgdGhlIFB1
cmR1ZSBKYXZhIGNvZGUgYW5kIHRyYXNjcmliaW5nIHRvIEphdmFTY3JpcHQuCisgICAgICAgIElu
IHNvbWUgY2FzZXMsIEkgZXZlbiBjb3B5LXBhc3RlZCB0aGUgSmF2YSBjb2RlLCBsaWtlIHRoZSBj
b21wbGljYXRlZCBtYXRoIGZvcgorICAgICAgICBmb3VyLWRpbWVuc2lvbmFsIGludGVyc2VjdGlv
bnMgYW5kIHZveGVsIGhhc2hpbmcuCisKKyAgICAgICAgKiBKZXRTdHJlYW0vQ0Rqc1NldHVwLmpz
OiBBZGRlZC4KKyAgICAgICAgKiBKZXRTdHJlYW0vT2N0YW5lMlNldHVwLmpzOgorICAgICAgICAq
IEpldFN0cmVhbS9SZWZlcmVuY2UuanM6CisgICAgICAgICogSmV0U3RyZWFtL2NkanM6IEFkZGVk
LgorICAgICAgICAqIEpldFN0cmVhbS9jZGpzL2JlbmNobWFyay5qczogQWRkZWQuCisgICAgICAg
IChiZW5jaG1hcmspOgorICAgICAgICAqIEpldFN0cmVhbS9jZGpzL2NhbGxfc2lnbi5qczogQWRk
ZWQuCisgICAgICAgIChDYWxsU2lnbik6CisgICAgICAgIChDYWxsU2lnbi5wcm90b3R5cGUuY29t
cGFyZVRvKToKKyAgICAgICAgKENhbGxTaWduLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAgICAg
ICogSmV0U3RyZWFtL2NkanMvY29sbGlzaW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKENvbGxpc2lv
bik6CisgICAgICAgIChDb2xsaXNpb24ucHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKiBK
ZXRTdHJlYW0vY2Rqcy9jb2xsaXNpb25fZGV0ZWN0b3IuanM6IEFkZGVkLgorICAgICAgICAoQ29s
bGlzaW9uRGV0ZWN0b3IpOgorICAgICAgICAoQ29sbGlzaW9uRGV0ZWN0b3IucHJvdG90eXBlLmhh
bmRsZU5ld0ZyYW1lLmdldCBmb3IpOgorICAgICAgICAoQ29sbGlzaW9uRGV0ZWN0b3IucHJvdG90
eXBlLmhhbmRsZU5ld0ZyYW1lKToKKyAgICAgICAgKiBKZXRTdHJlYW0vY2Rqcy9jb25zdGFudHMu
anM6IEFkZGVkLgorICAgICAgICAqIEpldFN0cmVhbS9jZGpzL21haW4uaHRtbDogQWRkZWQuCisg
ICAgICAgICogSmV0U3RyZWFtL2NkanMvbWFpbi5qczogQWRkZWQuCisgICAgICAgICogSmV0U3Ry
ZWFtL2NkanMvbW90aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKE1vdGlvbik6CisgICAgICAgIChN
b3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKE1vdGlvbi5wcm90b3R5cGUuZGVs
dGEpOgorICAgICAgICAoTW90aW9uLnByb3RvdHlwZS5maW5kSW50ZXJzZWN0aW9uKToKKyAgICAg
ICAgKiBKZXRTdHJlYW0vY2Rqcy9tb3Rpb25fdGVzdC5qczogQWRkZWQuCisgICAgICAgIChjaGVj
a0RvZXNJbnRlcnNlY3QpOgorICAgICAgICAoY2hlY2tEb2VzTm90SW50ZXJzZWN0KToKKyAgICAg
ICAgKG1ha2VNb3Rpb24pOgorICAgICAgICAqIEpldFN0cmVhbS9jZGpzL3JlZF9ibGFja190cmVl
LmpzOiBBZGRlZC4KKyAgICAgICAgKFJlZEJsYWNrVHJlZSk6CisgICAgICAgIChSZWRCbGFja1Ry
ZWUuKToKKyAgICAgICAgKiBKZXRTdHJlYW0vY2Rqcy9yZWRfYmxhY2tfdHJlZV90ZXN0LmpzOiBB
ZGRlZC4KKyAgICAgICAgKHRlc3QpOgorICAgICAgICAodGVzdC4pOgorICAgICAgICAqIEpldFN0
cmVhbS9jZGpzL3JlZHVjZV9jb2xsaXNpb25fc2V0LmpzOiBBZGRlZC4KKyAgICAgICAgKGRyYXdN
b3Rpb25PblZveGVsTWFwKToKKyAgICAgICAgKGRyYXdNb3Rpb25PblZveGVsTWFwLik6CisgICAg
ICAgICguZ2V0IHJlZHVjZUNvbGxpc2lvblNldCk6CisgICAgICAgICogSmV0U3RyZWFtL2NkanMv
cmVkdWNlX2NvbGxpc2lvbl9zZXRfdGVzdC5qczogQWRkZWQuCisgICAgICAgIChtYWtlTW90aW9u
KToKKyAgICAgICAgKGtleXMpOgorICAgICAgICAodGVzdCk6CisgICAgICAgICogSmV0U3RyZWFt
L2NkanMvc2ltdWxhdG9yLmpzOiBBZGRlZC4KKyAgICAgICAgKFNpbXVsYXRvcik6CisgICAgICAg
IChTaW11bGF0b3IucHJvdG90eXBlLnNpbXVsYXRlKToKKyAgICAgICAgKiBKZXRTdHJlYW0vY2Rq
cy91dGlsLmpzOiBBZGRlZC4KKyAgICAgICAgKGNvbXBhcmVOdW1iZXJzKToKKyAgICAgICAgKGF2
ZXJhZ2VBYm92ZVBlcmNlbnRpbGUpOgorICAgICAgICAoY3VycmVudFRpbWUpOgorICAgICAgICAo
ZWxzZS5jdXJyZW50VGltZSk6CisgICAgICAgICogSmV0U3RyZWFtL2NkanMvdmVjdG9yXzJkLmpz
OiBBZGRlZC4KKyAgICAgICAgKFZlY3RvcjJEKToKKyAgICAgICAgKFZlY3RvcjJELnByb3RvdHlw
ZS5wbHVzKToKKyAgICAgICAgKFZlY3RvcjJELnByb3RvdHlwZS5taW51cyk6CisgICAgICAgIChW
ZWN0b3IyRC5wcm90b3R5cGUudG9TdHJpbmcpOgorICAgICAgICAoVmVjdG9yMkQucHJvdG90eXBl
LmNvbXBhcmVUbyk6CisgICAgICAgICogSmV0U3RyZWFtL2NkanMvdmVjdG9yXzNkLmpzOiBBZGRl
ZC4KKyAgICAgICAgKFZlY3RvcjNEKToKKyAgICAgICAgKFZlY3RvcjNELnByb3RvdHlwZS5wbHVz
KToKKyAgICAgICAgKFZlY3RvcjNELnByb3RvdHlwZS5taW51cyk6CisgICAgICAgIChWZWN0b3Iz
RC5wcm90b3R5cGUuZG90KToKKyAgICAgICAgKFZlY3RvcjNELnByb3RvdHlwZS5zcXVhcmVkTWFn
bml0dWRlKToKKyAgICAgICAgKFZlY3RvcjNELnByb3RvdHlwZS5tYWduaXR1ZGUpOgorICAgICAg
ICAoVmVjdG9yM0QucHJvdG90eXBlLnRpbWVzKToKKyAgICAgICAgKFZlY3RvcjNELnByb3RvdHlw
ZS5hczJEKToKKyAgICAgICAgKFZlY3RvcjNELnByb3RvdHlwZS50b1N0cmluZyk6CisgICAgICAg
ICogSmV0U3RyZWFtL2NyZWF0ZS5yYjoKKyAgICAgICAgKiBKZXRTdHJlYW0vaW5kZXgtVEVNUExB
VEUuaHRtbDoKKyAgICAgICAgKiBKZXRTdHJlYW0vc3Vuc3BpZGVyL2NvcmRpYy5qczogUmVtb3Zl
ZC4KKwogMjAxNS0wNi0xNyAgSmF2aWVyIEZlcm5hbmRleiAgPGpmZXJuYW5kZXpAaWdhbGlhLmNv
bT4KIAogICAgICAgICBbQ1NTIEdyaWQgTGF5b3V0XSBXZSBzaG91bGQgYWRkIHBlcmZvcm1hbmNl
IHRlc3RzIGZvciBzdHJldGNoaW5nIGxvZ2ljCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbS9DRGpzU2V0dXAuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0vQ0Rqc1NldHVwLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0vQ0Rqc1NldHVwLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8vIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKy8vIGFyZSBtZXQ6CisvLyAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorLy8gMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKy8vICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisv
LworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworLy8gQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisvLyBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisv
LyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKy8vIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKy8vIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisvLyBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKy8vIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisvLyBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorLy8g
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorLy8gVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCit2YXIg
Q0Rqc0ZpbGVzID0gWworICAgICJjb25zdGFudHMuanMiLAorICAgICJ1dGlsLmpzIiwKKyAgICAi
cmVkX2JsYWNrX3RyZWUuanMiLAorICAgICJjYWxsX3NpZ24uanMiLAorICAgICJ2ZWN0b3JfMmQu
anMiLAorICAgICJ2ZWN0b3JfM2QuanMiLAorICAgICJtb3Rpb24uanMiLAorICAgICJyZWR1Y2Vf
Y29sbGlzaW9uX3NldC5qcyIsCisgICAgInNpbXVsYXRvci5qcyIsCisgICAgImNvbGxpc2lvbi5q
cyIsCisgICAgImNvbGxpc2lvbl9kZXRlY3Rvci5qcyIsCisgICAgImJlbmNobWFyay5qcyIKK107
CisKK3ZhciBjb2RlID0gIiI7Citmb3IgKHZhciBpID0gMDsgaSA8IENEanNGaWxlcy5sZW5ndGg7
ICsraSkKKyAgICBjb2RlICs9ICI8c2NyaXB0IHNyYz1cImNkanMvIiArIENEanNGaWxlc1tpXSAr
ICJcIj48L3NjcmlwdD5cbiI7Citjb2RlICs9ICI8c2NyaXB0PlxuIjsKK2NvZGUgKz0gImNvbnNv
bGUubG9nKFwicnVubmluZy4uLlwiKTtcbiI7Citjb2RlICs9ICJ2YXIgX19yZXN1bHQgPSBiZW5j
aG1hcmsoKTtcbiI7Citjb2RlICs9ICJjb25zb2xlLmxvZyhcImdvdCByZXN1bHQ6IFwiICsgX19y
ZXN1bHQpO1xuIjsKK2NvZGUgKz0gInRvcC5KZXRTdHJlYW0ucmVwb3J0UmVzdWx0KF9fcmVzdWx0
KTtcbiI7Citjb2RlICs9ICI8L3NjcmlwdD4iOworCitjb25zb2xlLmxvZygiY29kZSA9ICIgKyBj
b2RlKTsKKworSmV0U3RyZWFtLmFkZFBsYW4oeworICAgIG5hbWU6ICJjZGpzIiwKKyAgICBiZW5j
aG1hcmtzOiBbeworICAgICAgICBuYW1lOiAiY2RqcyIsCisgICAgICAgIGNhdGVnb3J5OiAiTGF0
ZW5jeSIsCisgICAgICAgIHVuaXQ6ICJtcyIKKyAgICB9XSwKKyAgICBjb2RlOiBjb2RlCit9KTsK
KwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vT2N0YW5lMlNldHVwLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtL09jdGFuZTJTZXR1cC5qcwkocmV2
aXNpb24gMTg1NzU3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vT2N0YW5lMlNldHVw
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNCwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLwogLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAv
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQ5LDcgKzQ5LDcgQEAgZm9yICh2YXIgaSA9IDA7IGkgPCBPY3RhbmUy
U3VpdGVzLmxlbmd0aAogICAgIGlmIChzdWl0ZS5sYXRlbmN5KSB7CiAgICAgICAgIG15QmVuY2ht
YXJrcy5wdXNoKHsKICAgICAgICAgICAgIG5hbWU6IHN1aXRlLm5hbWUgKyAiLWxhdGVuY3kiLAot
ICAgICAgICAgICAgcHJlZml4OiAiJnNpZ21hOyA9ICIsCisgICAgICAgICAgICB1bml0OiAibXMi
LAogICAgICAgICAgICAgY2F0ZWdvcnk6ICJMYXRlbmN5IgogICAgICAgICB9KTsKICAgICB9Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9SZWZlcmVuY2UuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vUmVmZXJlbmNlLmpzCShyZXZpc2lvbiAxODU3
NTcpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9SZWZlcmVuY2UuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vCiAvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIC8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjUsNyArMjUsNiBAQCBKZXRTdHJlYW0uYWRkUmVmZXJlbmNlcyh7CiAgICAgIjNkLWN1YmUi
OiA3LjMsCiAgICAgIjNkLXJheXRyYWNlIjogOC4wNSwKICAgICAiYmFzZTY0IjogNC4yLAotICAg
ICJjb3JkaWMiOiAzLAogICAgICJjcnlwdG8tYWVzIjogNi42LAogICAgICJjcnlwdG8tbWQ1Ijog
MywKICAgICAiY3J5cHRvLXNoYTEiOiAyLjA1LApAQCAtNjUsNSArNjQsNiBAQCBKZXRTdHJlYW0u
YWRkUmVmZXJlbmNlcyh7CiAgICAgInpsaWIiOiA4ODcuNjY2NjY2NjY2NjY2LAogICAgICJ0eXBl
c2NyaXB0IjogMTE0OS45OTk5OTk5OTk5OTkzLAogICAgICJsdWEiOiAyOTg1OCwKKyAgICAiY2Rq
cyI6IDE0LAogICAgICJnZW9tZWFuIjogMzEuNTU2NDUxNzA0NDcyMTU2LAogfSk7CkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jcmVhdGUucmIKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0vY3JlYXRlLnJiCShyZXZpc2lvbiAxODU3NTcpCisrKyBQZXJm
b3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jcmVhdGUucmIJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDcgQEAKIHJlcXVpcmUgInBhdGhuYW1lIgogcmVxdWlyZSAic2hlbGx3b3JkcyIKIAotVkVS
U0lPTiA9ICIxLjEtYWxwaGExIgorVkVSU0lPTiA9ICIxLjEtYWxwaGEyIgogRElSRUNUT1JZX05B
TUUgPSAiSmV0U3RyZWFtLSN7VkVSU0lPTn0iCiAKIHJhaXNlIHVubGVzcyBzeXN0ZW0oInJtIC1y
ZiAiICsgRElSRUNUT1JZX05BTUUpCkBAIC0zNCw3ICszNCw3IEBAIHJhaXNlIHVubGVzcyBzeXN0
ZW0oIm1rZGlyIC1wICIgKyBESVJFQ1QKIHJhaXNlIHVubGVzcyBzeXN0ZW0oIm1rZGlyIC1wICN7
RElSRUNUT1JZX05BTUV9L3N1bnNwaWRlciIpCiByYWlzZSB1bmxlc3Mgc3lzdGVtKCJta2RpciAt
cCAje0RJUkVDVE9SWV9OQU1FfS9zb3VyY2VzIikKIHJhaXNlIHVubGVzcyBzeXN0ZW0oImNwIHN1
bnNwaWRlci8qLmpzICN7RElSRUNUT1JZX05BTUV9L3N1bnNwaWRlciIpCi1yYWlzZSB1bmxlc3Mg
c3lzdGVtKCJjcCAtciBKZXRTdHJlYW0uY3NzIEpldFN0cmVhbURyaXZlci5qcyBMTFZNLXRlc3Qt
c3VpdGUtTElDRU5TRS50eHQgc2ltcGxlIE9jdGFuZTIgT2N0YW5lMlNldHVwLmpzIFNpbXBsZVNl
dHVwLmpzIFN1blNwaWRlclNldHVwLmpzIE9jdGFuZSBPY3RhbmVTZXR1cC5qcyBSZWZlcmVuY2Uu
anMgVGVzdGluZ1NldHVwLmpzIEpldFN0cmVhbS1Mb2dvLnBuZyBKZXRTdHJlYW0tTG9nb0AyeC5w
bmcgU3dvb3NoLnBuZyBTd29vc2hAMngucG5nICIgKyBESVJFQ1RPUllfTkFNRSkKK3JhaXNlIHVu
bGVzcyBzeXN0ZW0oImNwIC1yIEpldFN0cmVhbS5jc3MgSmV0U3RyZWFtRHJpdmVyLmpzIExMVk0t
dGVzdC1zdWl0ZS1MSUNFTlNFLnR4dCBzaW1wbGUgT2N0YW5lMiBPY3RhbmUyU2V0dXAuanMgU2lt
cGxlU2V0dXAuanMgU3VuU3BpZGVyU2V0dXAuanMgT2N0YW5lIE9jdGFuZVNldHVwLmpzIENEanNT
ZXR1cC5qcyBjZGpzIFJlZmVyZW5jZS5qcyBUZXN0aW5nU2V0dXAuanMgSmV0U3RyZWFtLUxvZ28u
cG5nIEpldFN0cmVhbS1Mb2dvQDJ4LnBuZyBTd29vc2gucG5nIFN3b29zaEAyeC5wbmcgIiArIERJ
UkVDVE9SWV9OQU1FKQogCiBkZWYgZGV0ZW1wbGF0aXplKGJhc2VuYW1lKQogICAgIEZpbGUub3Bl
bihESVJFQ1RPUllfTkFNRSArICIvI3tiYXNlbmFtZX0uaHRtbCIsICJ3IikgewpAQCAtMTE2LDYg
KzExNiw3IEBAIHRyYW5zZmVyU291cmNlKCJjb2RlLWZpcnN0LWxvYWQiLCAiT2N0YW4KIHRyYW5z
ZmVyU291cmNlKCJib3gyZCIsICJPY3RhbmUyL2JveDJkLmpzIikKIHRyYW5zZmVyU291cmNlKCJ6
bGliIiwgIk9jdGFuZTIvemxpYi5qcyIsICJPY3RhbmUyL3psaWItZGF0YS5qcyIpCiB0cmFuc2Zl
clNvdXJjZSgidHlwZXNjcmlwdCIsICJPY3RhbmUyL3R5cGVzY3JpcHQuanMiLCAiT2N0YW5lMi90
eXBlc2NyaXB0LWNvbXBpbGVyLmpzIiwgIk9jdGFuZTIvdHlwZXNjcmlwdC1pbnB1dC5qcyIpCit0
cmFuc2ZlclNvdXJjZSgiY2RqcyIsICJjZGpzL2NvbnN0YW50cy5qcyIsICJjZGpzL3V0aWwuanMi
LCAiY2Rqcy9yZWRfYmxhY2tfdHJlZS5qcyIsICJjZGpzL2NhbGxfc2lnbi5qcyIsICJjZGpzL3Zl
Y3Rvcl8yZC5qcyIsICJjZGpzL3ZlY3Rvcl8zZC5qcyIsICJjZGpzL21vdGlvbi5qcyIsICJjZGpz
L3JlZHVjZV9jb2xsaXNpb25fc2V0LmpzIiwgImNkanMvc2ltdWxhdG9yLmpzIiwgImNkanMvY29s
bGlzaW9uLmpzIiwgImNkanMvY29sbGlzaW9uX2RldGVjdG9yLmpzIiwgImNkanMvYmVuY2htYXJr
LmpzIikKIAogcHV0cyAiWW91IGNhbiBub3cgcnVuIEpldFN0cmVhbSBieSBuYXZpZ2F0aW5nIHRv
IGZpbGU6Ly8iICsgKFBhdGhuYW1lLm5ldyhESVJFQ1RPUllfTkFNRSkgKyAiaW5kZXguaHRtbCIp
LnJlYWxwYXRoLnRvX3MKIApJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vaW5kZXgt
VEVNUExBVEUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9p
bmRleC1URU1QTEFURS5odG1sCShyZXZpc2lvbiAxODU3NTcpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0pldFN0cmVhbS9pbmRleC1URU1QTEFURS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0
OCw3IEBACiAgICAgPHNjcmlwdCBzcmM9IlNpbXBsZVNldHVwLmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHNyYz0iT2N0YW5lU2V0dXAuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJP
Y3RhbmUyU2V0dXAuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJDRGpzU2V0dXAuanMi
Pjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJSZWZlcmVuY2UuanMiPjwvc2NyaXB0PgogPC9o
ZWFkPgogPGJvZHkgb25sb2FkPSJpbml0aWFsaXplKCkiPgpJbmRleDogUGVyZm9ybWFuY2VUZXN0
cy9KZXRTdHJlYW0vY2Rqcy9iZW5jaG1hcmsuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VU
ZXN0cy9KZXRTdHJlYW0vY2Rqcy9iZW5jaG1hcmsuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3Jt
YW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL2JlbmNobWFyay5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDgwIEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxMCwgUHVyZHVlIFVuaXZlcnNp
dHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUgbWV0OgorLy8gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisvLyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICogTmVpdGhlciB0aGUgbmFtZSBvZiB0
aGUgUHVyZHVlIFVuaXZlcnNpdHkgbm9yIHRoZQorLy8gICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKy8vICAgIGRl
cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorLy8gCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisvLyBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorLy8gV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorLy8gRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUgTElBQkxFIEZPUiBBTlkKKy8vIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisvLyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisvLyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
Ky8vIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworLy8gU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
K2Z1bmN0aW9uIGJlbmNobWFyaygpIHsKKyAgICB2YXIgdmVyYm9zaXR5ID0gMDsKKyAgICB2YXIg
bnVtQWlyY3JhZnQgPSAxMDAwOworICAgIHZhciBudW1GcmFtZXMgPSAyMDA7CisgICAgdmFyIGV4
cGVjdGVkQ29sbGlzaW9ucyA9IDE0NDg0OworICAgIHZhciBwZXJjZW50aWxlID0gOTU7CisKKyAg
ICB2YXIgc2ltdWxhdG9yID0gbmV3IFNpbXVsYXRvcihudW1BaXJjcmFmdCk7CisgICAgdmFyIGRl
dGVjdG9yID0gbmV3IENvbGxpc2lvbkRldGVjdG9yKCk7CisgICAgdmFyIGxhc3RUaW1lID0gY3Vy
cmVudFRpbWUoKTsKKyAgICB2YXIgcmVzdWx0cyA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbnVtRnJhbWVzOyArK2kpIHsKKyAgICAgICAgdmFyIHRpbWUgPSBpIC8gMTA7CisgICAgICAg
IAorICAgICAgICB2YXIgY29sbGlzaW9ucyA9IGRldGVjdG9yLmhhbmRsZU5ld0ZyYW1lKHNpbXVs
YXRvci5zaW11bGF0ZSh0aW1lKSk7CisgICAgICAgIAorICAgICAgICB2YXIgYmVmb3JlID0gbGFz
dFRpbWU7CisgICAgICAgIHZhciBhZnRlciA9IGN1cnJlbnRUaW1lKCk7CisgICAgICAgIGxhc3RU
aW1lID0gYWZ0ZXI7CisgICAgICAgIHZhciByZXN1bHQgPSB7CisgICAgICAgICAgICB0aW1lOiBh
ZnRlciAtIGJlZm9yZSwKKyAgICAgICAgICAgIG51bUNvbGxpc2lvbnM6IGNvbGxpc2lvbnMubGVu
Z3RoCisgICAgICAgIH07CisgICAgICAgIGlmICh2ZXJib3NpdHkgPj0gMikKKyAgICAgICAgICAg
IHJlc3VsdC5jb2xsaXNpb25zID0gY29sbGlzaW9uczsKKyAgICAgICAgcmVzdWx0cy5wdXNoKHJl
c3VsdCk7CisgICAgfQorCisgICAgaWYgKHZlcmJvc2l0eSA+PSAxKSB7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIHN0
cmluZyA9ICJGcmFtZSAiICsgaSArICI6ICIgKyByZXN1bHRzW2ldLnRpbWUgKyAiIG1zLiI7Cisg
ICAgICAgICAgICBpZiAocmVzdWx0c1tpXS5udW1Db2xsaXNpb25zKQorICAgICAgICAgICAgICAg
IHN0cmluZyArPSAiICgiICsgcmVzdWx0c1tpXS5udW1Db2xsaXNpb25zICsgIiBjb2xsaXNpb25z
LikiOworICAgICAgICAgICAgcHJpbnQoc3RyaW5nKTsKKyAgICAgICAgICAgIGlmICh2ZXJib3Np
dHkgPj0gMiAmJiByZXN1bHRzW2ldLmNvbGxpc2lvbnMubGVuZ3RoKQorICAgICAgICAgICAgICAg
IHByaW50KCIgICAgQ29sbGlzaW9uczogIiArIHJlc3VsdHNbaV0uY29sbGlzaW9ucyk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBDaGVjayByZXN1bHRzLgorICAgIHZhciBhY3R1YWxDb2xs
aXNpb25zID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyArK2kp
CisgICAgICAgIGFjdHVhbENvbGxpc2lvbnMgKz0gcmVzdWx0c1tpXS5udW1Db2xsaXNpb25zOwor
ICAgIGlmIChhY3R1YWxDb2xsaXNpb25zICE9IGV4cGVjdGVkQ29sbGlzaW9ucykgeworICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBudW1iZXIgb2YgY29sbGlzaW9uczogIiArIGFjdHVhbENv
bGxpc2lvbnMgKyAiIChleHBlY3RlZCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVj
dGVkQ29sbGlzaW9ucyArICIpIik7CisgICAgfQorCisgICAgLy8gRmluZCB0aGUgd29yc3QgNSUg
CisgICAgdmFyIHRpbWVzID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxl
bmd0aDsgKytpKQorICAgICAgICB0aW1lcy5wdXNoKHJlc3VsdHNbaV0udGltZSk7CisgICAgCisg
ICAgcmV0dXJuIGF2ZXJhZ2VBYm92ZVBlcmNlbnRpbGUodGltZXMsIHBlcmNlbnRpbGUpOworfQpJ
bmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vY2Rqcy9jYWxsX3NpZ24uanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vY2Rqcy9jYWxsX3NpZ24uanMJKHJl
dmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL2NhbGxfc2lnbi5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMDEt
MjAxMCwgUHVyZHVlIFVuaXZlcnNpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gCisvLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorLy8gICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8v
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisvLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisvLyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICog
TmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgUHVyZHVlIFVuaXZlcnNpdHkgbm9yIHRoZQorLy8gICAg
bmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMKKy8vICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8gCisvLyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5ECisvLyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorLy8gV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorLy8gRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUgTElBQkxF
IEZPUiBBTlkKKy8vIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisvLyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisv
LyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKy8vIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworLy8gU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKK2Z1bmN0aW9uIENhbGxTaWduKHZhbHVlKSB7CisgICAgdGhp
cy5fdmFsdWUgPSB2YWx1ZTsKK30KKworQ2FsbFNpZ24ucHJvdG90eXBlLmNvbXBhcmVUbyA9IGZ1
bmN0aW9uKG90aGVyKSB7CisgICAgcmV0dXJuIHRoaXMuX3ZhbHVlLmxvY2FsZUNvbXBhcmUob3Ro
ZXIuX3ZhbHVlKTsKK30KKworQ2FsbFNpZ24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24o
KSB7CisgICAgcmV0dXJuIHRoaXMuX3ZhbHVlOworfQorCkluZGV4OiBQZXJmb3JtYW5jZVRlc3Rz
L0pldFN0cmVhbS9jZGpzL2NvbGxpc2lvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRl
c3RzL0pldFN0cmVhbS9jZGpzL2NvbGxpc2lvbi5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtL2NkanMvY29sbGlzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzQgQEAKKy8vIENvcHlyaWdodCAoYykgMjAwMS0yMDEwLCBQdXJkdWUgVW5pdmVyc2l0
eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyAKKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZSBtZXQ6CisvLyAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKy8vICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRo
ZSBQdXJkdWUgVW5pdmVyc2l0eSBub3IgdGhlCisvLyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworLy8gICAgZGVy
aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisvLyAKKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKy8vIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisvLyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisvLyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFCTEUgRk9SIEFOWQorLy8gRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKy8vIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKy8vIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
Ly8gT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisvLyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
ZnVuY3Rpb24gQ29sbGlzaW9uKGFpcmNyYWZ0LCBwb3NpdGlvbikgeworICAgIHRoaXMuYWlyY3Jh
ZnQgPSBhaXJjcmFmdDsKKyAgICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb247Cit9CisKK0NvbGxp
c2lvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gIkNvbGxp
c2lvbigiICsgdGhpcy5haXJjcmFmdCArICIgYXQgIiArIHRoaXMucG9zaXRpb24gKyAiKSI7Cit9
OworCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL2NvbGxpc2lvbl9kZXRl
Y3Rvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL2Nv
bGxpc2lvbl9kZXRlY3Rvci5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0
U3RyZWFtL2NkanMvY29sbGlzaW9uX2RldGVjdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzQgQEAKKy8vIENvcHlyaWdodCAoYykgMjAwMS0yMDEwLCBQdXJkdWUgVW5pdmVyc2l0eS4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyAKKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBt
ZXQ6CisvLyAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKy8vICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBQ
dXJkdWUgVW5pdmVyc2l0eSBub3IgdGhlCisvLyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworLy8gICAgZGVyaXZl
ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisvLyAKKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKy8vIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisvLyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisvLyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFCTEUgRk9SIEFOWQorLy8gRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKy8vIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKy8vIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorLy8g
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisvLyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnVu
Y3Rpb24gQ29sbGlzaW9uRGV0ZWN0b3IoKSB7CisgICAgdGhpcy5fc3RhdGUgPSBuZXcgUmVkQmxh
Y2tUcmVlKCk7Cit9CisKK0NvbGxpc2lvbkRldGVjdG9yLnByb3RvdHlwZS5oYW5kbGVOZXdGcmFt
ZSA9IGZ1bmN0aW9uKGZyYW1lKSB7CisgICAgdmFyIG1vdGlvbnMgPSBbXTsKKyAgICB2YXIgc2Vl
biA9IG5ldyBSZWRCbGFja1RyZWUoKTsKKyAgICAKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZy
YW1lLmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBhaXJjcmFmdCA9IGZyYW1lW2ldOworICAg
ICAgICAKKyAgICAgICAgdmFyIG9sZFBvc2l0aW9uID0gdGhpcy5fc3RhdGUucHV0KGFpcmNyYWZ0
LmNhbGxzaWduLCBhaXJjcmFmdC5wb3NpdGlvbik7CisgICAgICAgIHZhciBuZXdQb3NpdGlvbiA9
IGFpcmNyYWZ0LnBvc2l0aW9uOworICAgICAgICBzZWVuLnB1dChhaXJjcmFmdC5jYWxsc2lnbiwg
dHJ1ZSk7CisgICAgICAgIAorICAgICAgICBpZiAoIW9sZFBvc2l0aW9uKSB7CisgICAgICAgICAg
ICAvLyBUcmVhdCBuZXdseSBpbnRyb2R1Y2VkIGFpcmNyYWZ0IGFzIGlmIHRoZXkgd2VyZSBzdGF0
aW9uYXJ5LgorICAgICAgICAgICAgb2xkUG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgbW90aW9ucy5wdXNoKG5ldyBNb3Rpb24oYWlyY3JhZnQuY2Fs
bHNpZ24sIG9sZFBvc2l0aW9uLCBuZXdQb3NpdGlvbikpOworICAgIH0KKyAgICAKKyAgICAvLyBS
ZW1vdmUgYWlyY3JhZnQgdGhhdCBhcmUgbm8gbG9uZ2VyIHByZXNlbnQuCisgICAgdmFyIHRvUmVt
b3ZlID0gW107CisgICAgdGhpcy5fc3RhdGUuZm9yRWFjaChmdW5jdGlvbihjYWxsc2lnbiwgcG9z
aXRpb24pIHsKKyAgICAgICAgaWYgKCFzZWVuLmdldChjYWxsc2lnbikpCisgICAgICAgICAgICB0
b1JlbW92ZS5wdXNoKGNhbGxzaWduKTsKKyAgICB9KTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHRvUmVtb3ZlLmxlbmd0aDsgKytpKQorICAgICAgICB0aGlzLl9zdGF0ZS5yZW1vdmUodG9SZW1v
dmVbaV0pOworICAgIAorICAgIHZhciBhbGxSZWR1Y2VkID0gcmVkdWNlQ29sbGlzaW9uU2V0KG1v
dGlvbnMpOworICAgIHZhciBjb2xsaXNpb25zID0gW107CisgICAgZm9yICh2YXIgcmVkdWN0aW9u
SW5kZXggPSAwOyByZWR1Y3Rpb25JbmRleCA8IGFsbFJlZHVjZWQubGVuZ3RoOyArK3JlZHVjdGlv
bkluZGV4KSB7CisgICAgICAgIHZhciByZWR1Y2VkID0gYWxsUmVkdWNlZFtyZWR1Y3Rpb25JbmRl
eF07CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVkdWNlZC5sZW5ndGg7ICsraSkgewor
ICAgICAgICAgICAgdmFyIG1vdGlvbjEgPSByZWR1Y2VkW2ldOworICAgICAgICAgICAgZm9yICh2
YXIgaiA9IGkgKyAxOyBqIDwgcmVkdWNlZC5sZW5ndGg7ICsraikgeworICAgICAgICAgICAgICAg
IHZhciBtb3Rpb24yID0gcmVkdWNlZFtqXTsKKyAgICAgICAgICAgICAgICB2YXIgY29sbGlzaW9u
ID0gbW90aW9uMS5maW5kSW50ZXJzZWN0aW9uKG1vdGlvbjIpOworICAgICAgICAgICAgICAgIGlm
IChjb2xsaXNpb24pCisgICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbnMucHVzaChuZXcgQ29s
bGlzaW9uKFttb3Rpb24xLmNhbGxzaWduLCBtb3Rpb24yLmNhbGxzaWduXSwgY29sbGlzaW9uKSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIGNvbGxp
c2lvbnM7Cit9OwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vY2Rqcy9jb25zdGFu
dHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vY2Rqcy9jb25z
dGFudHMuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpz
L2NvbnN0YW50cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0IEBACisvLyBDb3B5cmln
aHQgKGMpIDIwMDEtMjAxMCwgUHVyZHVlIFVuaXZlcnNpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorLy8gICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8v
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKy8vICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisvLyAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorLy8gICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgUHVyZHVlIFVuaXZlcnNpdHkgbm9y
IHRoZQorLy8gICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKy8vICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8gCisvLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5ECisvLyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorLy8gV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorLy8gRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xE
RVIgQkUgTElBQkxFIEZPUiBBTlkKKy8vIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisvLyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisvLyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKy8vIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisv
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworLy8gU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3ZhciBDb25zdGFudHMgPSB7fTsKK0Nv
bnN0YW50cy5NSU5fWCA9IDA7CitDb25zdGFudHMuTUlOX1kgPSAwOworQ29uc3RhbnRzLk1BWF9Y
ID0gMTAwMDsKK0NvbnN0YW50cy5NQVhfWSA9IDEwMDA7CitDb25zdGFudHMuTUlOX1ogPSAwOwor
Q29uc3RhbnRzLk1BWF9aID0gMTA7CitDb25zdGFudHMuUFJPWElNSVRZX1JBRElVUyA9IDE7CitD
b25zdGFudHMuR09PRF9WT1hFTF9TSVpFID0gQ29uc3RhbnRzLlBST1hJTUlUWV9SQURJVVMgKiAy
OwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vY2Rqcy9tYWluLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vY2Rqcy9tYWluLmh0bWwJKHJldmlz
aW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL21haW4uaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACis8IS0tCisgQ29weXJpZ2h0IChjKSAyMDAxLTIw
MTAsIFB1cmR1ZSBVbml2ZXJzaXR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgCisgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZSBtZXQ6CisgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRo
ZSBQdXJkdWUgVW5pdmVyc2l0eSBub3IgdGhlCisgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgICBkZXJpdmVk
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAKKyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVCBIT0xERVIgQkUgTElBQkxFIEZPUiBBTlkKKyBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLT4KKworPGh0bWw+Cis8aGVhZD4KKzx0aXRs
ZT5DRGpzPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJjb25zdGFudHMuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9InV0aWwuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlZF9ibGFja190cmVl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJjYWxsX3NpZ24uanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9InZlY3Rvcl8yZC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0idmVjdG9yXzNk
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJtb3Rpb24uanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9InJlZHVjZV9jb2xsaXNpb25fc2V0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJz
aW11bGF0b3IuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImNvbGxpc2lvbi5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iY29sbGlzaW9uX2RldGVjdG9yLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJiZW5jaG1hcmsuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyAgICBmdW5jdGlvbiBy
dW5UZXN0KCkgeworICAgICAgICB2YXIgcmVzdWx0ID0gYmVuY2htYXJrKCk7CisgICAgICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQtc3VtbWFyeSIpLmlubmVySFRNTCA9ICJBdmVy
YWdlIHdvcnN0IGNhc2U6ICIgKyByZXN1bHQ7CisgICAgfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxoMT5DRGpzPC9oMT4KKzxwPgorICA8ZGl2IGlkPSJyZXN1bHQtc3VtbWFyeSI+PC9k
aXY+CisgIDxkaXY+PGEgaHJlZj0iamF2YXNjcmlwdDpydW5UZXN0KCkiPlN0YXJ0IFRlc3Q8L2E+
PC9kaXY+Cis8L3A+Cis8L2JvZHk+Cis8L2h0bWw+CisKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMv
SmV0U3RyZWFtL2NkanMvbWFpbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pl
dFN0cmVhbS9jZGpzL21haW4uanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pl
dFN0cmVhbS9jZGpzL21haW4uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLy8g
Q29weXJpZ2h0IChjKSAyMDAxLTIwMTAsIFB1cmR1ZSBVbml2ZXJzaXR5LiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIAorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKy8vICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisvLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisvLyAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorLy8gICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKy8vICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFB1cmR1ZSBVbml2ZXJz
aXR5IG5vciB0aGUKKy8vICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisvLyAgICBkZXJpdmVkIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vIAor
Ly8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorLy8gQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKy8vIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKy8vIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgSE9MREVSIEJFIExJQUJMRSBGT1IgQU5ZCisvLyBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworLy8gKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworLy8gTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisvLyBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKy8vIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitsb2FkKCJjb25zdGFudHMu
anMiKTsKK2xvYWQoInV0aWwuanMiKTsKK2xvYWQoInJlZF9ibGFja190cmVlLmpzIik7Citsb2Fk
KCJjYWxsX3NpZ24uanMiKTsKK2xvYWQoInZlY3Rvcl8yZC5qcyIpOworbG9hZCgidmVjdG9yXzNk
LmpzIik7Citsb2FkKCJtb3Rpb24uanMiKTsKK2xvYWQoInJlZHVjZV9jb2xsaXNpb25fc2V0Lmpz
Iik7Citsb2FkKCJzaW11bGF0b3IuanMiKTsKK2xvYWQoImNvbGxpc2lvbi5qcyIpOworbG9hZCgi
Y29sbGlzaW9uX2RldGVjdG9yLmpzIik7Citsb2FkKCJiZW5jaG1hcmsuanMiKTsKKwordmFyIHJl
c3VsdCA9IGJlbmNobWFyaygpOworCitwcmludCgiQXZlcmFnZSB3b3JzdCBjYXNlOiAiICsgcmVz
dWx0ICsgIiBtcy4iKTsKKwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vY2Rqcy9t
b3Rpb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vY2Rqcy9t
b3Rpb24uanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpz
L21vdGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNiBAQAorLy8gQ29weXJpZ2h0
IChjKSAyMDAxLTIwMTAsIFB1cmR1ZSBVbml2ZXJzaXR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IAorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKy8vICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisvLyAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorLy8gICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKy8vICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFB1cmR1ZSBVbml2ZXJzaXR5IG5vciB0
aGUKKy8vICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzCisvLyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vIAorLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORAorLy8gQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKy8vIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKy8vIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVS
IEJFIExJQUJMRSBGT1IgQU5ZCisvLyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworLy8gKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworLy8gTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisvLyBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKy8vIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmdW5jdGlvbiBNb3Rpb24oY2FsbHNpZ24s
IHBvc09uZSwgcG9zVHdvKSB7CisgICAgdGhpcy5jYWxsc2lnbiA9IGNhbGxzaWduOworICAgIHRo
aXMucG9zT25lID0gcG9zT25lOworICAgIHRoaXMucG9zVHdvID0gcG9zVHdvOworfQorCitNb3Rp
b24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuICJNb3Rpb24o
IiArIHRoaXMuY2FsbHNpZ24gKyAiIGZyb20gIiArIHRoaXMucG9zT25lICsgIiB0byAiICsgdGhp
cy5wb3NUd28gKyAiKSI7Cit9OworCitNb3Rpb24ucHJvdG90eXBlLmRlbHRhID0gZnVuY3Rpb24o
KSB7CisgICAgcmV0dXJuIHRoaXMucG9zVHdvLm1pbnVzKHRoaXMucG9zT25lKTsKK307CisKK01v
dGlvbi5wcm90b3R5cGUuZmluZEludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKG90aGVyKSB7CisgICAg
dmFyIGluaXQxID0gdGhpcy5wb3NPbmU7CisgICAgdmFyIGluaXQyID0gb3RoZXIucG9zT25lOwor
ICAgIHZhciB2ZWMxID0gdGhpcy5kZWx0YSgpOworICAgIHZhciB2ZWMyID0gb3RoZXIuZGVsdGEo
KTsKKyAgICB2YXIgcmFkaXVzID0gQ29uc3RhbnRzLlBST1hJTUlUWV9SQURJVVM7CisgICAgCisg
ICAgLy8gdGhpcyB0ZXN0IGlzIG5vdCBnZW9tZXRyaWNhbCAzLWQgaW50ZXJzZWN0aW9uIHRlc3Qs
IGl0IHRha2VzIHRoZSBmYWN0IHRoYXQgdGhlIGFpcmNyYWZ0IG1vdmUKKyAgICAvLyBpbnRvIGFj
Y291bnQgOyBzbyBpdCBpcyBtb3JlIGxpa2UgYSA0ZCB0ZXN0CisgICAgLy8gKGl0IGFzc3VtZXMg
dGhhdCBib3RoIG9mIHRoZSBhaXJjcmFmdCBoYXZlIGEgY29uc3RhbnQgc3BlZWQgb3ZlciB0aGUg
dGVzdGVkIGludGVydmFsKQorICAgIAorICAgIC8vIHdlIHRodXMgaGF2ZSB0d28gcG9pbnRzLCBl
YWNoIG9mIHRoZW0gbW92aW5nIG9uIGl0cyBsaW5lIHNlZ21lbnQgYXQgY29uc3RhbnQgc3BlZWQg
OyB3ZSBhcmUgbG9va2luZworICAgIC8vIGZvciB0aW1lcyB3aGVuIHRoZSBkaXN0YW5jZSBiZXR3
ZWVuIHRoZXNlIHR3byBwb2ludHMgaXMgc21hbGxlciB0aGFuIHIgCisgICAgCisgICAgLy8gdmVj
MSBpcyB2ZWN0b3Igb2YgYWlyY3JhZnQgMQorICAgIC8vIHZlYzIgaXMgdmVjdG9yIG9mIGFpcmNy
YWZ0IDIKKyAgICAKKyAgICAvLyBhID0gKFYyIC0gVjEpXlQgKiAoVjIgLSBWMSkKKyAgICB2YXIg
YSA9IHZlYzIubWludXModmVjMSkuc3F1YXJlZE1hZ25pdHVkZSgpOworICAgIAorICAgIGlmIChh
ICE9IDApIHsKKyAgICAgICAgLy8gd2UgYXJlIGZpcnN0IGxvb2tpbmcgZm9yIGluc3RhbmNlcyBv
ZiB0aW1lIHdoZW4gdGhlIHBsYW5lcyBhcmUgZXhhY3RseSByIGZyb20gZWFjaCBvdGhlcgorICAg
ICAgICAvLyBhdCBsZWFzdCBvbmUgcGxhbmUgaXMgbW92aW5nIDsgaWYgdGhlIHBsYW5lcyBhcmUg
bW92aW5nIGluIHBhcmFsbGVsLCB0aGV5IGRvIG5vdCBoYXZlIGNvbnN0YW50IHNwZWVkCisKKyAg
ICAgICAgLy8gaWYgdGhlIHBsYW5lcyBhcmUgbW92aW5nIGluIHBhcmFsbGVsLCB0aGVuCisgICAg
ICAgIC8vICAgaWYgdGhlIGZhc3RlciBzdGFydHMgYmVoaW5kIHRoZSBzbG93ZXIsIHdlIGNhbiBo
YXZlIDIsIDEsIG9yIDAgc29sdXRpb25zCisgICAgICAgIC8vICAgaWYgdGhlIGZhc3RlciBwbGFu
ZSBzdGFydHMgaW4gZnJvbnQgb2YgdGhlIHNsb3dlciwgd2UgY2FuIGhhdmUgMCBvciAxIHNvbHV0
aW9ucworCisgICAgICAgIC8vIGlmIHRoZSBwbGFuZXMgYXJlIG5vdCBtb3ZpbmcgaW4gcGFyYWxs
ZWwsIHRoZW4KKworCisgICAgICAgIC8vIHBvaW50IFAxID0gSTEgKyB2VjEKKyAgICAgICAgLy8g
cG9pbnQgUDIgPSBJMiArIHZWMgorICAgICAgICAvLyAgIC0gbG9va2luZyBmb3Igdiwgc3VjaCB0
aGF0IGRpc3QoUDEsUDIpID0gfHwgUDEgLSBQMiB8fCA9IHIKKworICAgICAgICAvLyBpdCBmb2xs
b3dzIHRoYXQgfHwgUDEgLSBQMiB8fCA9IHNxcnQoIDwgUDEtUDIsIFAxLVAyID4gKQorICAgICAg
ICAvLyAgIDAgPSAtcl4yICsgPCBQMSAtIFAyLCBQMSAtIFAyID4KKyAgICAgICAgLy8gIGZyb20g
cHJvcGVydGllcyBvZiBkb3QgcHJvZHVjdAorICAgICAgICAvLyAgIDAgPSAtcl4yICsgPEkxLUky
LEkxLUkyPiArIHYgKiAyPEkxLUkyLCBWMS1WMj4gKyB2XjIgKjxWMS1WMixWMS1WMj4KKyAgICAg
ICAgLy8gICBzbyB3ZSBjYWxjdWxhdGUgYSwgYiwgYyAtIGFuZCBzb2x2ZSB0aGUgcXVhZHJhdGlj
IGVxdWF0aW9uCisgICAgICAgIC8vICAgMCA9IGMgKyBidiArIGF2XjIKKworICAgICAgICAvLyBi
ID0gMiAqIDxJMS1JMiwgVjEtVjI+CisKKyAgICAgICAgdmFyIGIgPSAyICogaW5pdDEubWludXMo
aW5pdDIpLmRvdCh2ZWMxLm1pbnVzKHZlYzIpKTsKKworICAgICAgICAvLyBjID0gLXJeMiArIChJ
MiAtIEkxKV5UICogKEkyIC0gSTEpCisgICAgICAgIHZhciBjID0gLXJhZGl1cyAqIHJhZGl1cyAr
IGluaXQyLm1pbnVzKGluaXQxKS5zcXVhcmVkTWFnbml0dWRlKCk7CisKKyAgICAgICAgdmFyIGRp
c2NyID0gYiAqIGIgLSA0ICogYSAqIGM7CisgICAgICAgIGlmIChkaXNjciA8IDApCisgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICB2YXIgdjEgPSAoLWIgLSBNYXRoLnNxcnQoZGlz
Y3IpKSAvICgyICogYSk7CisgICAgICAgIHZhciB2MiA9ICgtYiArIE1hdGguc3FydChkaXNjcikp
IC8gKDIgKiBhKTsKKworICAgICAgICBpZiAodjEgPD0gdjIgJiYgKCh2MSA8PSAxICYmIDEgPD0g
djIpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgKHYxIDw9IDAgJiYgMCA8PSB2MikgfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAoMCA8PSB2MSAmJiB2MiA8PSAxKSkpIHsKKyAgICAg
ICAgICAgIC8vIFBpY2sgYSBnb29kICJ0aW1lIiBhdCB3aGljaCB0byByZXBvcnQgdGhlIGNvbGxp
c2lvbi4KKyAgICAgICAgICAgIHZhciB2OworICAgICAgICAgICAgaWYgKHYxIDw9IDApIHsKKyAg
ICAgICAgICAgICAgICAvLyBUaGUgY29sbGlzaW9uIHN0YXJ0ZWQgYmVmb3JlIHRoaXMgZnJhbWUu
IFJlcG9ydCBpdCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZyYW1lLgorICAgICAgICAgICAgICAgIHYg
PSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgY29sbGlz
aW9uIHN0YXJ0ZWQgZHVyaW5nIHRoaXMgZnJhbWUuIFJlcG9ydCBpdCBhdCB0aGF0IG1vbWVudC4K
KyAgICAgICAgICAgICAgICB2ID0gdjE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHZhciByZXN1bHQxID0gaW5pdDEucGx1cyh2ZWMxLnRpbWVzKHYpKTsKKyAgICAg
ICAgICAgIHZhciByZXN1bHQyID0gaW5pdDIucGx1cyh2ZWMyLnRpbWVzKHYpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3VsdDEucGx1cyhyZXN1bHQyKS50aW1l
cygwLjUpOworICAgICAgICAgICAgaWYgKHJlc3VsdC54ID49IENvbnN0YW50cy5NSU5fWCAmJgor
ICAgICAgICAgICAgICAgIHJlc3VsdC54IDw9IENvbnN0YW50cy5NQVhfWCAmJgorICAgICAgICAg
ICAgICAgIHJlc3VsdC55ID49IENvbnN0YW50cy5NSU5fWSAmJgorICAgICAgICAgICAgICAgIHJl
c3VsdC55IDw9IENvbnN0YW50cy5NQVhfWSAmJgorICAgICAgICAgICAgICAgIHJlc3VsdC56ID49
IENvbnN0YW50cy5NSU5fWiAmJgorICAgICAgICAgICAgICAgIHJlc3VsdC56IDw9IENvbnN0YW50
cy5NQVhfWikKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKK3Jl
dHVybiBudWxsOworICAgIH0KKyAgICAKKyAgICAvLyB0aGUgcGxhbmVzIGhhdmUgdGhlIHNhbWUg
c3BlZWRzIGFuZCBhcmUgbW92aW5nIGluIHBhcmFsbGVsIChvciB0aGV5IGFyZSBub3QgbW92aW5n
IGF0IGFsbCkKKyAgICAvLyB0aGV5ICB0aHVzIGhhdmUgdGhlIHNhbWUgZGlzdGFuY2UgYWxsIHRo
ZSB0aW1lIDsgd2UgY2FsY3VsYXRlIGl0IGZyb20gdGhlIGluaXRpYWwgcG9pbnQKKyAgICAKKyAg
ICAvLyBkaXN0ID0gfHwgaTIgLSBpMSB8fCA9IHNxcnQoICAoIGkyIC0gaTEgKV5UICogKCBpMiAt
IGkxICkgKQorICAgIAorICAgIHZhciBkaXN0ID0gaW5pdDIubWludXMoaW5pdDEpLm1hZ25pdHVk
ZSgpOworICAgIGlmIChkaXN0IDw9IHJhZGl1cykKKyAgICAgICAgcmV0dXJuIGluaXQxLnBsdXMo
aW5pdDIpLnRpbWVzKDAuNSk7CisgICAgCisgICAgcmV0dXJuIG51bGw7Cit9OworCkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL21vdGlvbl90ZXN0LmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtL2NkanMvbW90aW9uX3Rlc3QuanMJKHJldmlz
aW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL21vdGlvbl90ZXN0Lmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8vIENvcHlyaWdodCAoYykgMjAwMS0y
MDEwLCBQdXJkdWUgVW5pdmVyc2l0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyAKKy8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisvLyAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8g
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKy8vICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBQdXJkdWUgVW5pdmVyc2l0eSBub3IgdGhlCisvLyAgICBu
YW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cworLy8gICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLyAKKy8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQKKy8vIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisvLyBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisvLyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFCTEUg
Rk9SIEFOWQorLy8gRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKy8vIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKy8v
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorLy8gT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisvLyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworbG9hZCgiY29uc3RhbnRzLmpzIik7Citsb2FkKCJ1dGlsLmpz
Iik7Citsb2FkKCJjYWxsX3NpZ24uanMiKTsKK2xvYWQoInZlY3Rvcl8yZC5qcyIpOworbG9hZCgi
dmVjdG9yXzNkLmpzIik7Citsb2FkKCJtb3Rpb24uanMiKTsKKwordmFyIGVwc2lsb24gPSAwLjAw
MDAwMTsKKworZnVuY3Rpb24gY2hlY2tEb2VzSW50ZXJzZWN0KG1vdGlvbk9uZSwgbW90aW9uVHdv
LCBleHBlY3RlZCkgeworICAgIHByaW50KG1vdGlvbk9uZSArICIgYW5kICIgKyBtb3Rpb25Ud28g
KyAiOiIpOworICAgIHZhciBhY3R1YWwgPSBtb3Rpb25PbmUuZmluZEludGVyc2VjdGlvbihtb3Rp
b25Ud28pOworICAgIGlmICghYWN0dWFsKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldhcyBz
dXBwb3NlZCB0byBpbnRlcnNlY3QgYXQgIiArIGV4cGVjdGVkICsgIiBidXQgZGlkbid0Iik7Cisg
ICAgCisgICAgdmFyIGRlbHRhID0gYWN0dWFsLm1pbnVzKGV4cGVjdGVkKS5tYWduaXR1ZGUoKTsK
KyAgICBpZiAoZGVsdGEgPiBlcHNpbG9uKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiV2Fz
IHN1cHBvc2VkIHRvIGludGVyc2VjdCBhdCAiICsgZXhwZWN0ZWQgKyAiIGJ1dCBpbnRlcnNlY3Rl
ZCBhdCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbCArICIsIHdoaWNoIGlzICIg
KyBkZWx0YSArICIgYXdheSIpOworICAgIH0KKyAgICAKKyAgICBwcmludCgiICAgIEludGVyc2Vj
dGVkIGF0ICIgKyBhY3R1YWwgKyAiLCB3aGljaCBpcyAiICsgZGVsdGEgKyAiIGF3YXkgZnJvbSAi
ICsgZXhwZWN0ZWQgKyAiLiIpOworfQorCitmdW5jdGlvbiBjaGVja0RvZXNOb3RJbnRlcnNlY3Qo
bW90aW9uT25lLCBtb3Rpb25Ud28pIHsKKyAgICBwcmludChtb3Rpb25PbmUgKyAiIGFuZCAiICsg
bW90aW9uVHdvICsgIjoiKTsKKyAgICB2YXIgYWN0dWFsID0gbW90aW9uT25lLmZpbmRJbnRlcnNl
Y3Rpb24obW90aW9uVHdvKTsKKyAgICBpZiAoYWN0dWFsKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoIldhcyBub3Qgc3VwcG9zZWQgdG8gaW50ZXJzZWN0IGJ1dCBpbnRlcnNlY3RlZCBhdCAiICsg
YWN0dWFsKTsKKyAgICAKKyAgICBwcmludCgiICAgIE5vIGludGVyc2VjdGlvbiwgYXMgZXhwZWN0
ZWQuIik7Cit9CisKK3ZhciBtYWtlTW90aW9uID0gKGZ1bmN0aW9uKCkgeworICAgIHZhciBjb3Vu
dGVyID0gMDsKKyAgICByZXR1cm4gZnVuY3Rpb24oeDEsIHkxLCB6MSwgeDIsIHkyLCB6Mikgewor
ICAgICAgICByZXR1cm4gbmV3IE1vdGlvbihuZXcgQ2FsbFNpZ24oImZvbyIgKyAoKytjb3VudGVy
KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IzRCh4MSwgeTEsIHoxKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFZlY3RvcjNEKHgyLCB5MiwgejIpKTsKKyAg
ICB9Cit9KSgpOworCitjaGVja0RvZXNOb3RJbnRlcnNlY3QoCisgICAgbWFrZU1vdGlvbigwLCAw
LCAwLCAxMCwgMCwgMCksCisgICAgbWFrZU1vdGlvbigwLCAxMCwgMCwgMTAsIDEwLCAwKSk7CisK
K2NoZWNrRG9lc05vdEludGVyc2VjdCgKKyAgICBtYWtlTW90aW9uKDAsIDAsIDAsIDEwLCAwLCAw
KSwKKyAgICBtYWtlTW90aW9uKDAsIDEgKyBlcHNpbG9uLCAwLCAxMCwgMSArIGVwc2lsb24sIDAp
KTsKKworY2hlY2tEb2VzSW50ZXJzZWN0KAorICAgIG1ha2VNb3Rpb24oMCwgMCwgMCwgMTAsIDAs
IDApLAorICAgIG1ha2VNb3Rpb24oMCwgMSwgMCwgMTAsIDEsIDApLAorICAgIG5ldyBWZWN0b3Iz
RCgwLCAwLjUsIDApKTsKKworY2hlY2tEb2VzSW50ZXJzZWN0KAorICAgIG1ha2VNb3Rpb24oMCwg
MCwgMCwgMTAsIDAsIDApLAorICAgIG1ha2VNb3Rpb24oMCwgMTAsIDAsIDEwLCAwLCAwKSwKKyAg
ICBuZXcgVmVjdG9yM0QoOSwgMC41LCAwKSk7CisKK2NoZWNrRG9lc0ludGVyc2VjdCgKKyAgICBt
YWtlTW90aW9uKDAsIDAsIDAsIDkuNSwgMCwgMCksCisgICAgbWFrZU1vdGlvbigwLCAxMCwgMCwg
OS42NSwgMC4zNSwgMCksCisgICAgbmV3IFZlY3RvcjNEKDguOTM5ODMwNzIyNDQ2MTc4LCAwLjQ5
NTA3MjI0NjkxMzU0NDIzLCAwKSk7CisKKy8vIEZJWE1FOiBBZGQgbW9yZSB0ZXN0cyBoZXJlLiBT
YWRseSwgdGhlIG9yaWdpbmFsIEphdmEgY29kZSBmb3IgdGhpcyBiZW5jaG1hcmsgaGFkIGFuIGV4
dGVuc2l2ZQorLy8gSlVuaXQgdGVzdCBzdWl0ZSBmb3IgaW50ZXJzZWN0aW9ucywgYnV0IHRoaXMg
ZGlkbid0IGdldCBpbmNsdWRlZCBpbiBhbnkgb2YgdGhlIHJlbGVhc2VzIGFuZCBJIG5vCisvLyBs
b25nZXIgaGF2ZSBhY2Nlc3MgdG8gdGhlIG9yaWdpbmFsIENWUyByZXBvc2l0b3J5ICh5ZXMsIENW
UykuCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL3JlZF9ibGFja190cmVl
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtL2NkanMvcmVkX2Js
YWNrX3RyZWUuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9j
ZGpzL3JlZF9ibGFja190cmVlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDA5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
K3ZhciBSZWRCbGFja1RyZWUgPSAoZnVuY3Rpb24oKXsKKyAgICBmdW5jdGlvbiBjb21wYXJlKGEs
IGIpIHsKKyAgICAgICAgcmV0dXJuIGEuY29tcGFyZVRvKGIpOworICAgIH0KKyAgICAKKyAgICBm
dW5jdGlvbiB0cmVlTWluaW11bSh4KSB7CisgICAgICAgIHdoaWxlICh4LmxlZnQpCisgICAgICAg
ICAgICB4ID0geC5sZWZ0OworICAgICAgICByZXR1cm4geDsKKyAgICB9CisgICAgCisgICAgZnVu
Y3Rpb24gdHJlZU1heGltdW0oeCkgeworICAgICAgICB3aGlsZSAoeC5yaWdodCkKKyAgICAgICAg
ICAgIHggPSB4LnJpZ2h0OworICAgICAgICByZXR1cm4geDsKKyAgICB9CisgICAgCisgICAgZnVu
Y3Rpb24gTm9kZShrZXksIHZhbHVlKSB7CisgICAgICAgIHRoaXMua2V5ID0ga2V5OworICAgICAg
ICB0aGlzLnZhbHVlID0gdmFsdWU7CisgICAgICAgIHRoaXMubGVmdCA9IG51bGw7CisgICAgICAg
IHRoaXMucmlnaHQgPSBudWxsOworICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7CisgICAgICAg
IHRoaXMuY29sb3IgPSAicmVkIjsKKyAgICB9CisgICAgCisgICAgTm9kZS5wcm90b3R5cGUuc3Vj
Y2Vzc29yID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciB4ID0gdGhpczsKKyAgICAgICAgaWYg
KHgucmlnaHQpCisgICAgICAgICAgICByZXR1cm4gdHJlZU1pbmltdW0oeC5yaWdodCk7CisgICAg
ICAgIHZhciB5ID0geC5wYXJlbnQ7CisgICAgICAgIHdoaWxlICh5ICYmIHggPT0geS5yaWdodCkg
eworICAgICAgICAgICAgeCA9IHk7CisgICAgICAgICAgICB5ID0geS5wYXJlbnQ7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHk7CisgICAgfTsKKyAgICAKKyAgICBOb2RlLnByb3RvdHlwZS5w
cmVkZWNlc3NvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgeCA9IHRoaXM7CisgICAgICAg
IGlmICh4LmxlZnQpCisgICAgICAgICAgICByZXR1cm4gdHJlZU1heGltdW0oeC5sZWZ0KTsKKyAg
ICAgICAgdmFyIHkgPSB4LnBhcmVudDsKKyAgICAgICAgd2hpbGUgKHkgJiYgeCA9PSB5LmxlZnQp
IHsKKyAgICAgICAgICAgIHggPSB5OworICAgICAgICAgICAgeSA9IHkucGFyZW50OworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB5OworICAgIH07CisgICAgCisgICAgTm9kZS5wcm90b3R5cGUu
dG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMua2V5ICsgIj0+IiAr
IHRoaXMudmFsdWUgKyAiICgiICsgdGhpcy5jb2xvciArICIpIjsKKyAgICB9OworICAgIAorICAg
IGZ1bmN0aW9uIFJlZEJsYWNrVHJlZSgpIHsKKyAgICAgICAgdGhpcy5fcm9vdCA9IG51bGw7Cisg
ICAgfQorICAgIAorICAgIFJlZEJsYWNrVHJlZS5wcm90b3R5cGUucHV0ID0gZnVuY3Rpb24oa2V5
LCB2YWx1ZSkgeworICAgICAgICB2YXIgaW5zZXJ0aW9uUmVzdWx0ID0gdGhpcy5fdHJlZUluc2Vy
dChrZXksIHZhbHVlKTsKKyAgICAgICAgaWYgKCFpbnNlcnRpb25SZXN1bHQuaXNOZXdFbnRyeSkK
KyAgICAgICAgICAgIHJldHVybiBpbnNlcnRpb25SZXN1bHQub2xkVmFsdWU7CisgICAgICAgIHZh
ciB4ID0gaW5zZXJ0aW9uUmVzdWx0Lm5ld05vZGU7CisgICAgICAgIAorICAgICAgICB3aGlsZSAo
eCAhPSB0aGlzLl9yb290ICYmIHgucGFyZW50LmNvbG9yID09ICJyZWQiKSB7CisgICAgICAgICAg
ICBpZiAoeC5wYXJlbnQgPT0geC5wYXJlbnQucGFyZW50LmxlZnQpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgeSA9IHgucGFyZW50LnBhcmVudC5yaWdodDsKKyAgICAgICAgICAgICAgICBpZiAoeSAm
JiB5LmNvbG9yID09ICJyZWQiKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIENhc2UgMQorICAg
ICAgICAgICAgICAgICAgICB4LnBhcmVudC5jb2xvciA9ICJibGFjayI7CisgICAgICAgICAgICAg
ICAgICAgIHkuY29sb3IgPSAiYmxhY2siOworICAgICAgICAgICAgICAgICAgICB4LnBhcmVudC5w
YXJlbnQuY29sb3IgPSAicmVkIjsKKyAgICAgICAgICAgICAgICAgICAgeCA9IHgucGFyZW50LnBh
cmVudDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAo
eCA9PSB4LnBhcmVudC5yaWdodCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzZSAy
CisgICAgICAgICAgICAgICAgICAgICAgICB4ID0geC5wYXJlbnQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLl9sZWZ0Um90YXRlKHgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIC8vIENhc2UgMworICAgICAgICAgICAgICAgICAgICB4LnBhcmVudC5j
b2xvciA9ICJibGFjayI7CisgICAgICAgICAgICAgICAgICAgIHgucGFyZW50LnBhcmVudC5jb2xv
ciA9ICJyZWQiOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9yaWdodFJvdGF0ZSh4LnBhcmVu
dC5wYXJlbnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgLy8gU2FtZSBhcyAidGhlbiIgY2xhdXNlIHdpdGggInJpZ2h0IiBhbmQgImxl
ZnQiIGV4Y2hhbmdlZC4KKyAgICAgICAgICAgICAgICB2YXIgeSA9IHgucGFyZW50LnBhcmVudC5s
ZWZ0OworICAgICAgICAgICAgICAgIGlmICh5ICYmIHkuY29sb3IgPT0gInJlZCIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gQ2FzZSAxCisgICAgICAgICAgICAgICAgICAgIHgucGFyZW50LmNv
bG9yID0gImJsYWNrIjsKKyAgICAgICAgICAgICAgICAgICAgeS5jb2xvciA9ICJibGFjayI7Cisg
ICAgICAgICAgICAgICAgICAgIHgucGFyZW50LnBhcmVudC5jb2xvciA9ICJyZWQiOworICAgICAg
ICAgICAgICAgICAgICB4ID0geC5wYXJlbnQucGFyZW50OworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh4ID09IHgucGFyZW50LmxlZnQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIENhc2UgMgorICAgICAgICAgICAgICAgICAgICAgICAgeCA9
IHgucGFyZW50OworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmlnaHRSb3RhdGUoeCk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gQ2FzZSAzCisg
ICAgICAgICAgICAgICAgICAgIHgucGFyZW50LmNvbG9yID0gImJsYWNrIjsKKyAgICAgICAgICAg
ICAgICAgICAgeC5wYXJlbnQucGFyZW50LmNvbG9yID0gInJlZCI7CisgICAgICAgICAgICAgICAg
ICAgIHRoaXMuX2xlZnRSb3RhdGUoeC5wYXJlbnQucGFyZW50KTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRoaXMuX3Jvb3Qu
Y29sb3IgPSAiYmxhY2siOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAgIAorICAg
IFJlZEJsYWNrVHJlZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oa2V5KSB7CisgICAgICAg
IHZhciB6ID0gdGhpcy5fZmluZE5vZGUoa2V5KTsKKyAgICAgICAgaWYgKCF6KQorICAgICAgICAg
ICAgcmV0dXJuIG51bGw7CisgICAgICAgIAorICAgICAgICAvLyBZIGlzIHRoZSBub2RlIHRvIGJl
IHVubGlua2VkIGZyb20gdGhlIHRyZWUuCisgICAgICAgIHZhciB5OworICAgICAgICBpZiAoIXou
bGVmdCB8fCAhei5yaWdodCkKKyAgICAgICAgICAgIHkgPSB6OworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB5ID0gei5zdWNjZXNzb3IoKTsKKworICAgICAgICAvLyBZIGlzIGd1YXJhbnRlZWQg
dG8gYmUgbm9uLW51bGwgYXQgdGhpcyBwb2ludC4KKyAgICAgICAgdmFyIHg7CisgICAgICAgIGlm
ICh5LmxlZnQpCisgICAgICAgICAgICB4ID0geS5sZWZ0OworICAgICAgICBlbHNlCisgICAgICAg
ICAgICB4ID0geS5yaWdodDsKKyAgICAgICAgCisgICAgICAgIC8vIFggaXMgdGhlIGNoaWxkIG9m
IHkgd2hpY2ggbWlnaHQgcG90ZW50aWFsbHkgcmVwbGFjZSB5IGluIHRoZSB0cmVlLiBYIG1pZ2h0
IGJlIG51bGwgYXQKKyAgICAgICAgLy8gdGhpcyBwb2ludC4KKyAgICAgICAgdmFyIHhQYXJlbnQ7
CisgICAgICAgIGlmICh4KSB7CisgICAgICAgICAgICB4LnBhcmVudCA9IHkucGFyZW50OworICAg
ICAgICAgICAgeFBhcmVudCA9IHgucGFyZW50OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IHhQYXJlbnQgPSB5LnBhcmVudDsKKyAgICAgICAgaWYgKCF5LnBhcmVudCkKKyAgICAgICAgICAg
IHRoaXMuX3Jvb3QgPSB4OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmICh5ID09IHku
cGFyZW50LmxlZnQpCisgICAgICAgICAgICAgICAgeS5wYXJlbnQubGVmdCA9IHg7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgeS5wYXJlbnQucmlnaHQgPSB4OworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBpZiAoeSAhPSB6KSB7CisgICAgICAgICAgICBpZiAoeS5jb2xv
ciA9PSAiYmxhY2siKQorICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUZpeHVwKHgsIHhQYXJl
bnQpOworICAgICAgICAgICAgCisgICAgICAgICAgICB5LnBhcmVudCA9IHoucGFyZW50OworICAg
ICAgICAgICAgeS5jb2xvciA9IHouY29sb3I7CisgICAgICAgICAgICB5LmxlZnQgPSB6LmxlZnQ7
CisgICAgICAgICAgICB5LnJpZ2h0ID0gei5yaWdodDsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKHoubGVmdCkKKyAgICAgICAgICAgICAgICB6LmxlZnQucGFyZW50ID0geTsKKyAgICAg
ICAgICAgIGlmICh6LnJpZ2h0KQorICAgICAgICAgICAgICAgIHoucmlnaHQucGFyZW50ID0geTsK
KyAgICAgICAgICAgIGlmICh6LnBhcmVudCkgeworICAgICAgICAgICAgICAgIGlmICh6LnBhcmVu
dC5sZWZ0ID09IHopCisgICAgICAgICAgICAgICAgICAgIHoucGFyZW50LmxlZnQgPSB5OworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgei5wYXJlbnQucmlnaHQgPSB5
OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgdGhpcy5fcm9vdCA9IHk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoeS5jb2xvciA9PSAiYmxhY2siKQorICAgICAgICAgICAgdGhpcy5f
cmVtb3ZlRml4dXAoeCwgeFBhcmVudCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gei52YWx1
ZTsKKyAgICB9OworICAgIAorICAgIFJlZEJsYWNrVHJlZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rp
b24oa2V5KSB7CisgICAgICAgIHZhciBub2RlID0gdGhpcy5fZmluZE5vZGUoa2V5KTsKKyAgICAg
ICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIHJldHVybiBu
b2RlLnZhbHVlOworICAgIH07CisgICAgCisgICAgUmVkQmxhY2tUcmVlLnByb3RvdHlwZS5mb3JF
YWNoID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgICAgICAgaWYgKCF0aGlzLl9yb290KQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBmb3IgKHZhciBjdXJyZW50ID0gdHJlZU1pbmltdW0o
dGhpcy5fcm9vdCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LnN1Y2Nlc3NvcigpKQorICAg
ICAgICAgICAgY2FsbGJhY2soY3VycmVudC5rZXksIGN1cnJlbnQudmFsdWUpOworICAgIH07Cisg
ICAgCisgICAgUmVkQmxhY2tUcmVlLnByb3RvdHlwZS5hc0FycmF5ID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHZhciByZXN1bHQgPSBbXTsKKyAgICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGtl
eSwgdmFsdWUpIHsKKyAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtrZXk6IGtleSwgdmFsdWU6IHZh
bHVlfSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAg
CisgICAgUmVkQmxhY2tUcmVlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICB2YXIgcmVzdWx0ID0gIlsiOworICAgICAgICB2YXIgZmlyc3QgPSB0cnVlOworICAgICAg
ICB0aGlzLmZvckVhY2goZnVuY3Rpb24oa2V5LCB2YWx1ZSkgeworICAgICAgICAgICAgaWYgKGZp
cnN0KQorICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgcmVzdWx0ICs9ICIsICI7CisgICAgICAgICAgICByZXN1bHQgKz0ga2V5
ICsgIj0+IiArIHZhbHVlOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArICJd
IjsKKyAgICB9OworICAgIAorICAgIFJlZEJsYWNrVHJlZS5wcm90b3R5cGUuX2ZpbmROb2RlID0g
ZnVuY3Rpb24oa2V5KSB7CisgICAgICAgIGZvciAodmFyIGN1cnJlbnQgPSB0aGlzLl9yb290OyBj
dXJyZW50OykgeworICAgICAgICAgICAgdmFyIGNvbXBhcmlzb25SZXN1bHQgPSBjb21wYXJlKGtl
eSwgY3VycmVudC5rZXkpOworICAgICAgICAgICAgaWYgKCFjb21wYXJpc29uUmVzdWx0KQorICAg
ICAgICAgICAgICAgIHJldHVybiBjdXJyZW50OworICAgICAgICAgICAgaWYgKGNvbXBhcmlzb25S
ZXN1bHQgPCAwKQorICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmxlZnQ7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAKKyAgICBSZWRCbGFj
a1RyZWUucHJvdG90eXBlLl90cmVlSW5zZXJ0ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkgeworICAg
ICAgICB2YXIgeSA9IG51bGw7CisgICAgICAgIHZhciB4ID0gdGhpcy5fcm9vdDsKKyAgICAgICAg
d2hpbGUgKHgpIHsKKyAgICAgICAgICAgIHkgPSB4OworICAgICAgICAgICAgdmFyIGNvbXBhcmlz
b25SZXN1bHQgPSBrZXkuY29tcGFyZVRvKHgua2V5KTsKKyAgICAgICAgICAgIGlmIChjb21wYXJp
c29uUmVzdWx0IDwgMCkKKyAgICAgICAgICAgICAgICB4ID0geC5sZWZ0OworICAgICAgICAgICAg
ZWxzZSBpZiAoY29tcGFyaXNvblJlc3VsdCA+IDApCisgICAgICAgICAgICAgICAgeCA9IHgucmln
aHQ7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgb2xkVmFsdWUgPSB4
LnZhbHVlOworICAgICAgICAgICAgICAgIHgudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4ge2lzTmV3RW50cnk6ZmFsc2UsIG9sZFZhbHVlOm9sZFZhbHVlfTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgeiA9IG5ldyBOb2RlKGtleSwgdmFsdWUpOwor
ICAgICAgICB6LnBhcmVudCA9IHk7CisgICAgICAgIGlmICgheSkKKyAgICAgICAgICAgIHRoaXMu
X3Jvb3QgPSB6OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChrZXkuY29tcGFyZVRv
KHkua2V5KSA8IDApCisgICAgICAgICAgICAgICAgeS5sZWZ0ID0gejsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICB5LnJpZ2h0ID0gejsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4ge2lzTmV3RW50cnk6dHJ1ZSwgbmV3Tm9kZTp6fTsKKyAgICB9OworICAgIAorICAgIFJlZEJs
YWNrVHJlZS5wcm90b3R5cGUuX2xlZnRSb3RhdGUgPSBmdW5jdGlvbih4KSB7CisgICAgICAgIHZh
ciB5ID0geC5yaWdodDsKKyAgICAgICAgCisgICAgICAgIC8vIFR1cm4geSdzIGxlZnQgc3VidHJl
ZSBpbnRvIHgncyByaWdodCBzdWJ0cmVlLgorICAgICAgICB4LnJpZ2h0ID0geS5sZWZ0OworICAg
ICAgICBpZiAoeS5sZWZ0KQorICAgICAgICAgICAgeS5sZWZ0LnBhcmVudCA9IHg7CisgICAgICAg
IAorICAgICAgICAvLyBMaW5rIHgncyBwYXJlbnQgdG8geS4KKyAgICAgICAgeS5wYXJlbnQgPSB4
LnBhcmVudDsKKyAgICAgICAgaWYgKCF4LnBhcmVudCkKKyAgICAgICAgICAgIHRoaXMuX3Jvb3Qg
PSB5OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmICh4ID09IHgucGFyZW50LmxlZnQp
CisgICAgICAgICAgICAgICAgeC5wYXJlbnQubGVmdCA9IHk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgeC5wYXJlbnQucmlnaHQgPSB5OworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICAvLyBQdXQgeCBvbiB5J3MgbGVmdC4KKyAgICAgICAgeS5sZWZ0ID0geDsKKyAgICAg
ICAgeC5wYXJlbnQgPSB5OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHk7CisgICAgfTsKKyAg
ICAKKyAgICBSZWRCbGFja1RyZWUucHJvdG90eXBlLl9yaWdodFJvdGF0ZSA9IGZ1bmN0aW9uKHkp
IHsKKyAgICAgICAgdmFyIHggPSB5LmxlZnQ7CisgICAgICAgIAorICAgICAgICAvLyBUdXJuIHgn
cyByaWdodCBzdWJ0cmVlIGludG8geSdzIGxlZnQgc3VidHJlZS4KKyAgICAgICAgeS5sZWZ0ID0g
eC5yaWdodDsKKyAgICAgICAgaWYgKHgucmlnaHQpCisgICAgICAgICAgICB4LnJpZ2h0LnBhcmVu
dCA9IHk7CisgICAgICAgIAorICAgICAgICAvLyBMaW5rIHkncyBwYXJlbnQgdG8geDsKKyAgICAg
ICAgeC5wYXJlbnQgPSB5LnBhcmVudDsKKyAgICAgICAgaWYgKCF5LnBhcmVudCkKKyAgICAgICAg
ICAgIHRoaXMuX3Jvb3QgPSB4OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmICh5ID09
IHkucGFyZW50LmxlZnQpCisgICAgICAgICAgICAgICAgeS5wYXJlbnQubGVmdCA9IHg7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeS5wYXJlbnQucmlnaHQgPSB4OworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICB4LnJpZ2h0ID0geTsKKyAgICAgICAgeS5wYXJlbnQgPSB4
OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHg7CisgICAgfTsKKyAgICAKKyAgICBSZWRCbGFj
a1RyZWUucHJvdG90eXBlLl9yZW1vdmVGaXh1cCA9IGZ1bmN0aW9uKHgsIHhQYXJlbnQpIHsKKyAg
ICAgICAgd2hpbGUgKHggIT0gdGhpcy5fcm9vdCAmJiAoIXggfHwgeC5jb2xvciA9PSAiYmxhY2si
KSkgeworICAgICAgICAgICAgaWYgKHggPT0geFBhcmVudC5sZWZ0KSB7CisgICAgICAgICAgICAg
ICAgLy8gTm90ZTogdGhlIHRleHQgcG9pbnRzIG91dCB0aGF0IHcgY2Fubm90IGJlIG51bGwuIFRo
ZSByZWFzb24gaXMgbm90IG9idmlvdXMgZnJvbQorICAgICAgICAgICAgICAgIC8vIHNpbXBseSBs
b29raW5nIGF0IHRoZSBjb2RlOyBpdCBjb21lcyBhYm91dCBmcm9tIHRoZSBwcm9wZXJ0aWVzIG9m
IHRoZSByZWQtYmxhY2sKKyAgICAgICAgICAgICAgICAvLyB0cmVlLgorICAgICAgICAgICAgICAg
IHZhciB3ID0geFBhcmVudC5yaWdodDsKKyAgICAgICAgICAgICAgICBpZiAody5jb2xvciA9PSAi
cmVkIikgeworICAgICAgICAgICAgICAgICAgICAvLyBDYXNlIDEKKyAgICAgICAgICAgICAgICAg
ICAgdy5jb2xvciA9ICJibGFjayI7CisgICAgICAgICAgICAgICAgICAgIHhQYXJlbnQuY29sb3Ig
PSAicmVkIjsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGVmdFJvdGF0ZSh4UGFyZW50KTsK
KyAgICAgICAgICAgICAgICAgICAgdyA9IHhQYXJlbnQucmlnaHQ7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmICgoIXcubGVmdCB8fCB3LmxlZnQuY29sb3IgPT0gImJsYWNr
IikKKyAgICAgICAgICAgICAgICAgICAgJiYgKCF3LnJpZ2h0IHx8IHcucmlnaHQuY29sb3IgPT0g
ImJsYWNrIikpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2FzZSAyCisgICAgICAgICAgICAg
ICAgICAgIHcuY29sb3IgPSAicmVkIjsKKyAgICAgICAgICAgICAgICAgICAgeCA9IHhQYXJlbnQ7
CisgICAgICAgICAgICAgICAgICAgIHhQYXJlbnQgPSB4LnBhcmVudDsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXcucmlnaHQgfHwgdy5yaWdodC5j
b2xvciA9PSAiYmxhY2siKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXNlIDMKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHcubGVmdC5jb2xvciA9ICJibGFjayI7CisgICAgICAgICAg
ICAgICAgICAgICAgICB3LmNvbG9yID0gInJlZCI7CisgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLl9yaWdodFJvdGF0ZSh3KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHcgPSB4UGFyZW50
LnJpZ2h0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIENh
c2UgNAorICAgICAgICAgICAgICAgICAgICB3LmNvbG9yID0geFBhcmVudC5jb2xvcjsKKyAgICAg
ICAgICAgICAgICAgICAgeFBhcmVudC5jb2xvciA9ICJibGFjayI7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh3LnJpZ2h0KQorICAgICAgICAgICAgICAgICAgICAgICAgdy5yaWdodC5jb2xvciA9
ICJibGFjayI7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xlZnRSb3RhdGUoeFBhcmVudCk7
CisgICAgICAgICAgICAgICAgICAgIHggPSB0aGlzLl9yb290OworICAgICAgICAgICAgICAgICAg
ICB4UGFyZW50ID0geC5wYXJlbnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAvLyBTYW1lIGFzICJ0aGVuIiBjbGF1c2Ugd2l0aCAicmln
aHQiIGFuZCAibGVmdCIgZXhjaGFuZ2VkLgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIHZhciB3ID0geFBhcmVudC5sZWZ0OworICAgICAgICAgICAgICAgIGlmICh3LmNvbG9yID09
ICJyZWQiKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIENhc2UgMQorICAgICAgICAgICAgICAg
ICAgICB3LmNvbG9yID0gImJsYWNrIjsKKyAgICAgICAgICAgICAgICAgICAgeFBhcmVudC5jb2xv
ciA9ICJyZWQiOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9yaWdodFJvdGF0ZSh4UGFyZW50
KTsKKyAgICAgICAgICAgICAgICAgICAgdyA9IHhQYXJlbnQubGVmdDsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgaWYgKCghdy5yaWdodCB8fCB3LnJpZ2h0LmNvbG9yID09ICJi
bGFjayIpCisgICAgICAgICAgICAgICAgICAgICYmICghdy5sZWZ0IHx8IHcubGVmdC5jb2xvciA9
PSAiYmxhY2siKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBDYXNlIDIKKyAgICAgICAgICAg
ICAgICAgICAgdy5jb2xvciA9ICJyZWQiOworICAgICAgICAgICAgICAgICAgICB4ID0geFBhcmVu
dDsKKyAgICAgICAgICAgICAgICAgICAgeFBhcmVudCA9IHgucGFyZW50OworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghdy5sZWZ0IHx8IHcubGVmdC5j
b2xvciA9PSAiYmxhY2siKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXNlIDMKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHcucmlnaHQuY29sb3IgPSAiYmxhY2siOworICAgICAgICAg
ICAgICAgICAgICAgICAgdy5jb2xvciA9ICJyZWQiOworICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5fbGVmdFJvdGF0ZSh3KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHcgPSB4UGFyZW50
LmxlZnQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gQ2Fz
ZSA0CisgICAgICAgICAgICAgICAgICAgIHcuY29sb3IgPSB4UGFyZW50LmNvbG9yOworICAgICAg
ICAgICAgICAgICAgICB4UGFyZW50LmNvbG9yID0gImJsYWNrIjsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHcubGVmdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHcubGVmdC5jb2xvciA9ICJi
bGFjayI7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JpZ2h0Um90YXRlKHhQYXJlbnQpOwor
ICAgICAgICAgICAgICAgICAgICB4ID0gdGhpcy5fcm9vdDsKKyAgICAgICAgICAgICAgICAgICAg
eFBhcmVudCA9IHgucGFyZW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBpZiAoeCkKKyAgICAgICAgICAgIHguY29sb3IgPSAiYmxhY2siOwor
ICAgIH07CisgICAgCisgICAgcmV0dXJuIFJlZEJsYWNrVHJlZTsKK30pKCk7CisKSW5kZXg6IFBl
cmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtL2NkanMvcmVkX2JsYWNrX3RyZWVfdGVzdC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL3JlZF9ibGFja190cmVl
X3Rlc3QuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpz
L3JlZF9ibGFja190cmVlX3Rlc3QuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworbG9hZCgicmVkX2JsYWNrX3RyZWUuanMiKTsKKworLy8gVGhlIGNvbnRyb2wgc3RyaW5nIGlz
IGEgbGlzdCBvZiBjb21tYW5kcy4gRWFjaCBjb21tYW5kIGlzIHR3byBjaGFyYWN0ZXJzLCB3aXRo
IHRoZSBmaXJzdAorLy8gaWRlbnRpZnlpbmcgdGhlIG9wZXJhdGlvbiBhbmQgdGhlIHNlY29uZCBn
aXZpbmcgYSBrZXkuCit2YXIgdGVzdCA9IChmdW5jdGlvbigpeworICAgIGZ1bmN0aW9uIFBhaXJW
ZWN0b3IoKSB7CisgICAgICAgIHRoaXMuX3ZlY3RvciA9IFtdOworICAgIH0KKworICAgIFBhaXJW
ZWN0b3IucHJvdG90eXBlLnB1dCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB0aGlzLl92ZWN0b3IubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAg
IGlmICghdGhpcy5fdmVjdG9yW2ldLmtleS5jb21wYXJlVG8oa2V5KSkgeworICAgICAgICAgICAg
ICAgIHZhciByZXN1bHQgPSB0aGlzLl92ZWN0b3JbaV0udmFsdWU7CisgICAgICAgICAgICAgICAg
dGhpcy5fdmVjdG9yW2ldLnZhbHVlID0gdmFsdWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLl92ZWN0b3IucHVz
aCh7a2V5OiBrZXksIHZhbHVlOiB2YWx1ZX0pOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9
OworCisgICAgUGFpclZlY3Rvci5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oa2V5LCB2YWx1
ZSkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3ZlY3Rvci5sZW5ndGg7ICsr
aSkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl92ZWN0b3JbaV0ua2V5LmNvbXBhcmVUbyhrZXkp
KSB7CisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX3ZlY3RvcltpXS52YWx1ZTsK
KyAgICAgICAgICAgICAgICB0aGlzLl92ZWN0b3JbaV0gPSB0aGlzLl92ZWN0b3JbdGhpcy5fdmVj
dG9yLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgICAgIHRoaXMuX3ZlY3Rvci5wb3AoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBudWxsOworICAgIH07CisKKyAgICBQYWlyVmVjdG9yLnByb3RvdHlwZS5n
ZXQgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dGhpcy5fdmVjdG9yLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX3ZlY3Rv
cltpXS5rZXkuY29tcGFyZVRvKGtleSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Zl
Y3RvcltpXS52YWx1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Owor
ICAgIAorICAgIFBhaXJWZWN0b3IucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHZhciBjb3B5ID0gdGhpcy5fdmVjdG9yLmNvbmNhdCgpOworICAgICAgICBjb3B5LnNv
cnQoZnVuY3Rpb24oYSwgYikgeworICAgICAgICAgICAgcmV0dXJuIGEua2V5LmNvbXBhcmVUbyhi
LmtleSk7CisgICAgICAgIH0pOworICAgICAgICB2YXIgcmVzdWx0ID0gIlsiOworICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGNvcHkubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChp
KQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiLCAiOworICAgICAgICAgICAgcmVzdWx0ICs9
IGNvcHlbaV0ua2V5ICsgIj0+IiArIGNvcHlbaV0udmFsdWU7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHJlc3VsdCArICJdIjsKKyAgICB9OworICAgIAorICAgIFN0cmluZy5wcm90b3R5cGUu
Y29tcGFyZVRvID0gU3RyaW5nLnByb3RvdHlwZS5sb2NhbGVDb21wYXJlOworCisgICAgdmFyIGNv
dW50ZXIgPSAwOworICAgIAorICAgIHJldHVybiBmdW5jdGlvbihjb250cm9sU3RyaW5nKSB7Cisg
ICAgICAgIHByaW50KCJSdW5uaW5nICIgKyBKU09OLnN0cmluZ2lmeShjb250cm9sU3RyaW5nKSAr
ICI6Iik7CisgICAgICAgIHZhciBhc1ZlY3RvciA9IG5ldyBQYWlyVmVjdG9yKCk7CisgICAgICAg
IHZhciBhc1RyZWUgPSBuZXcgUmVkQmxhY2tUcmVlKCk7CisgICAgICAgIAorICAgICAgICBmdW5j
dGlvbiBmYWlsKHdoZW4pIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigKKyAgICAgICAg
ICAgICAgICAiRkFJTDogIiArIHdoZW4gKyAiLCB0cmVlID0gIiArIGFzVHJlZSArICIsIHZlY3Rv
ciA9ICIgKyBhc1ZlY3Rvcik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAodmFy
IGluZGV4ID0gMDsgaW5kZXggPCBjb250cm9sU3RyaW5nLmxlbmd0aDsgaW5kZXggKz0gMikgewor
ICAgICAgICAgICAgdmFyIGNvbW1hbmQgPSBjb250cm9sU3RyaW5nW2luZGV4XTsKKyAgICAgICAg
ICAgIHZhciBrZXkgPSBjb250cm9sU3RyaW5nW2luZGV4ICsgMV07CisgICAgICAgICAgICB2YXIg
dmFsdWUgPSArK2NvdW50ZXI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAoY29t
bWFuZCkgeworICAgICAgICAgICAgY2FzZSAiKyI6CisgICAgICAgICAgICAgICAgdmFyIG9sZFZl
Y3RvclZhbHVlID0gYXNWZWN0b3IucHV0KGtleSwgdmFsdWUpOworICAgICAgICAgICAgICAgIHZh
ciBvbGRUcmVlVmFsdWUgPSBhc1RyZWUucHV0KGtleSwgdmFsdWUpOworICAgICAgICAgICAgICAg
IGlmIChvbGRWZWN0b3JWYWx1ZSAhPT0gb2xkVHJlZVZhbHVlKSB7CisgICAgICAgICAgICAgICAg
ICAgIGZhaWwoIkFkZGluZyAiICsga2V5ICsgIj0+IiArIHZhbHVlICsgIiwgdmVjdG9yIGdvdCAi
ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBvbGRWZWN0b3JWYWx1ZSArICIgYnV0IHRyZWUg
Z290ICIgKyBvbGRUcmVlVmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgIioiOgorICAgICAg
ICAgICAgICAgIHZhciBvbGRWZWN0b3JWYWx1ZSA9IGFzVmVjdG9yLmdldChrZXkpOworICAgICAg
ICAgICAgICAgIHZhciBvbGRUcmVlVmFsdWUgPSBhc1RyZWUuZ2V0KGtleSk7CisgICAgICAgICAg
ICAgICAgaWYgKG9sZFZlY3RvclZhbHVlICE9PSBvbGRUcmVlVmFsdWUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZmFpbCgiR2V0dGluZyAiICsga2V5ICsgIiwgdmVjdG9yIGdvdCAiICsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBvbGRWZWN0b3JWYWx1ZSArICIgYnV0IHRyZWUgZ290ICIgKyBv
bGRUcmVlVmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgIiEiOgorICAgICAgICAgICAgICAg
IHZhciBvbGRWZWN0b3JWYWx1ZSA9IGFzVmVjdG9yLnJlbW92ZShrZXkpOworICAgICAgICAgICAg
ICAgIHZhciBvbGRUcmVlVmFsdWUgPSBhc1RyZWUucmVtb3ZlKGtleSk7CisgICAgICAgICAgICAg
ICAgaWYgKG9sZFZlY3RvclZhbHVlICE9PSBvbGRUcmVlVmFsdWUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZmFpbCgiUmVtb3ZpbmcgIiArIGtleSArICIsIHZlY3RvciBnb3QgIiArCisgICAgICAg
ICAgICAgICAgICAgICAgICAgb2xkVmVjdG9yVmFsdWUgKyAiIGJ1dCB0cmVlIGdvdCAiICsgb2xk
VHJlZVZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHRo
cm93IEVycm9yKCJCYWQgY29tbWFuZDogIiArIGNvbW1hbmQpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIiIgKyBhc1ZlY3RvciAhPSAiIiArIGFzVHJl
ZSkKKyAgICAgICAgICAgIGZhaWwoIkJhZCByZXN1bHQgYXQgZW5kIik7CisgICAgICAgIAorICAg
ICAgICBwcmludCgiICAgIFN1Y2Nlc3MsIHRyZWUgaXM6ICIgKyBhc1RyZWUpOworICAgIH07Cit9
KSgpOworCit0ZXN0KCIiKTsKK3Rlc3QoIithIik7Cit0ZXN0KCIqeCF6Iik7Cit0ZXN0KCIrYSp4
IXoiKTsKK3Rlc3QoIithKmEhYSIpOwordGVzdCgiK2ErYiIpOwordGVzdCgiK2ErYitjIik7Cit0
ZXN0KCIrYStiK2MrZCIpOwordGVzdCgiK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2Qr
YStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCth
K2IrYytkIik7Cit0ZXN0KCIrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytk
K2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2Qr
ZStmK2craCtpK2oraytsK20rbitvK3ArcStyK3MrdCt1K3YreCt5K3oiKTsKK3Rlc3QoIithK2Ir
YytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitj
K2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCtlK2YrZytoK2kraitrK2wrbStuK28r
cCtxK3Ircyt0K3Urdit4K3kreiphKmIqYypkKmUqZipnKmgqaSpqKmsqbCptKm4qbypwKnEqcipz
KnQqdSp2KncqeCp5KnohYSFiIWMhZCFlIWYhZyFoIWkhaiFrIWwhbSFuIW8hcCFxIXIhcyF0IXUh
diF3IXgheSF6Iik7CisKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtL2NkanMvcmVk
dWNlX2NvbGxpc2lvbl9zZXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0vY2Rqcy9yZWR1Y2VfY29sbGlzaW9uX3NldC5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZv
cm1hbmNlVGVzdHMvSmV0U3RyZWFtL2NkanMvcmVkdWNlX2NvbGxpc2lvbl9zZXQuanMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxNDggQEAKKy8vIENvcHlyaWdodCAoYykgMjAwMS0yMDEwLCBQ
dXJkdWUgVW5pdmVyc2l0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyAKKy8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZSBtZXQ6CisvLyAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKy8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKy8vICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIHRoZSBQdXJkdWUgVW5pdmVyc2l0eSBub3IgdGhlCisvLyAgICBuYW1lcyBv
ZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cworLy8gICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLyAKKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQK
Ky8vIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisvLyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisvLyBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFCTEUgRk9SIEFO
WQorLy8gRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKy8vIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKy8vIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorLy8gT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisvLyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKwordmFyIGRyYXdNb3Rpb25PblZveGVsTWFwID0gKGZ1bmN0aW9uKCkgewor
ICAgIHZhciB2b3hlbFNpemUgPSBDb25zdGFudHMuR09PRF9WT1hFTF9TSVpFOworICAgIHZhciBo
b3Jpem9udGFsID0gbmV3IFZlY3RvcjJEKHZveGVsU2l6ZSwgMCk7CisgICAgdmFyIHZlcnRpY2Fs
ID0gbmV3IFZlY3RvcjJEKDAsIHZveGVsU2l6ZSk7CisgICAgCisgICAgZnVuY3Rpb24gdm94ZWxI
YXNoKHBvc2l0aW9uKSB7CisgICAgICAgIHZhciB4RGl2ID0gKHBvc2l0aW9uLnggLyB2b3hlbFNp
emUpIHwgMDsKKyAgICAgICAgdmFyIHlEaXYgPSAocG9zaXRpb24ueSAvIHZveGVsU2l6ZSkgfCAw
OworICAgICAgICAKKyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBWZWN0b3IyRCgpOworICAgICAg
ICByZXN1bHQueCA9IHZveGVsU2l6ZSAqIHhEaXY7CisgICAgICAgIHJlc3VsdC55ID0gdm94ZWxT
aXplICogeURpdjsKKyAgICAgICAgCisgICAgICAgIGlmIChwb3NpdGlvbi54IDwgMCkKKyAgICAg
ICAgICAgIHJlc3VsdC54IC09IHZveGVsU2l6ZTsKKyAgICAgICAgaWYgKHBvc2l0aW9uLnkgPCAw
KQorICAgICAgICAgICAgcmVzdWx0LnkgLT0gdm94ZWxTaXplOworICAgICAgICAKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZ1bmN0aW9uKHZveGVsTWFw
LCBtb3Rpb24pIHsKKyAgICAgICAgdmFyIHNlZW4gPSBuZXcgUmVkQmxhY2tUcmVlKCk7CisgICAg
ICAgIAorICAgICAgICBmdW5jdGlvbiBwdXRJbnRvTWFwKHZveGVsKSB7CisgICAgICAgICAgICB2
YXIgYXJyYXkgPSB2b3hlbE1hcC5nZXQodm94ZWwpOworICAgICAgICAgICAgaWYgKCFhcnJheSkK
KyAgICAgICAgICAgICAgICB2b3hlbE1hcC5wdXQodm94ZWwsIGFycmF5ID0gW10pOworICAgICAg
ICAgICAgYXJyYXkucHVzaChtb3Rpb24pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBm
dW5jdGlvbiBpc0luVm94ZWwodm94ZWwpIHsKKyAgICAgICAgICAgIGlmICh2b3hlbC54ID4gQ29u
c3RhbnRzLk1BWF9YIHx8CisgICAgICAgICAgICAgICAgdm94ZWwueCA8IENvbnN0YW50cy5NSU5f
WCB8fAorICAgICAgICAgICAgICAgIHZveGVsLnkgPiBDb25zdGFudHMuTUFYX1kgfHwKKyAgICAg
ICAgICAgICAgICB2b3hlbC55IDwgQ29uc3RhbnRzLk1JTl9ZKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdmFyIGluaXQgPSBtb3Rpb24u
cG9zT25lOworICAgICAgICAgICAgdmFyIGZpbiA9IG1vdGlvbi5wb3NUd287CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHZhciB2X3MgPSB2b3hlbFNpemU7CisgICAgICAgICAgICB2YXIgciA9
IENvbnN0YW50cy5QUk9YSU1JVFlfUkFESVVTIC8gMjsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgdmFyIHZfeCA9IHZveGVsLng7CisgICAgICAgICAgICB2YXIgeDAgPSBpbml0Lng7CisgICAg
ICAgICAgICB2YXIgeHYgPSBmaW4ueCAtIGluaXQueDsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgdmFyIHZfeSA9IHZveGVsLnk7CisgICAgICAgICAgICB2YXIgeTAgPSBpbml0Lnk7CisgICAg
ICAgICAgICB2YXIgeXYgPSBmaW4ueSAtIGluaXQueTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgdmFyIGxvd194LCBoaWdoX3g7CisgICAgICAgICAgICBsb3dfeCA9ICh2X3ggLSByIC0geDAp
IC8geHY7CisgICAgICAgICAgICBoaWdoX3ggPSAodl94ICsgdl9zICsgciAtIHgwKSAvIHh2Owor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoeHYgPCAwKSB7CisgICAgICAgICAgICAgICAg
dmFyIHRtcCA9IGxvd194OworICAgICAgICAgICAgICAgIGxvd194ID0gaGlnaF94OworICAgICAg
ICAgICAgICAgIGhpZ2hfeCA9IHRtcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgdmFyIGxvd195LCBoaWdoX3k7CisgICAgICAgICAgICBsb3dfeSA9ICh2X3kgLSBy
IC0geTApIC8geXY7CisgICAgICAgICAgICBoaWdoX3kgPSAodl95ICsgdl9zICsgciAtIHkwKSAv
IHl2OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoeXYgPCAwKSB7CisgICAgICAgICAg
ICAgICAgdmFyIHRtcCA9IGxvd195OworICAgICAgICAgICAgICAgIGxvd195ID0gaGlnaF95Owor
ICAgICAgICAgICAgICAgIGhpZ2hfeSA9IHRtcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAgICAgICAgcHJpbnQoInZfeCA9
ICIgKyB2X3ggKyAiLCB4MCA9ICIgKyB4MCArICIsIHh2ID0gIiArIHh2ICsgIiwgdl95ID0gIiAr
IHZfeSArICIsIHkwID0gIiArIHkwICsgIiwgeXYgPSAiICsgeXYgKyAiLCBsb3dfeCA9ICIgKyBs
b3dfeCArICIsIGxvd195ID0gIiArIGxvd195ICsgIiwgaGlnaF94ID0gIiArIGhpZ2hfeCArICIs
IGhpZ2hfeSA9ICIgKyBoaWdoX3kpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICByZXR1cm4gKCgoeHYgPT0gMCAmJiB2X3ggPD0geDAgKyByICYmIHgwIC0gciA8PSB2
X3ggKyB2X3MpIC8qIG5vIG1vdGlvbiBpbiB4ICovIHx8IAorICAgICAgICAgICAgICAgICAgICAg
KChsb3dfeCA8PSAxICYmIDEgPD0gaGlnaF94KSB8fCAobG93X3ggPD0gMCAmJiAwIDw9IGhpZ2hf
eCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAoMCA8PSBsb3dfeCAmJiBoaWdoX3ggPD0gMSkp
KSAmJiAKKyAgICAgICAgICAgICAgICAgICAgKCh5diA9PSAwICYmIHZfeSA8PSB5MCArIHIgJiYg
eTAgLSByIDw9IHZfeSArIHZfcykgLyogbm8gbW90aW9uIGluIHkgKi8gfHwgCisgICAgICAgICAg
ICAgICAgICAgICAoKGxvd195IDw9IDEgJiYgMSA8PSBoaWdoX3kpIHx8IChsb3dfeSA8PSAwICYm
IDAgPD0gaGlnaF95KSB8fAorICAgICAgICAgICAgICAgICAgICAgICgwIDw9IGxvd195ICYmIGhp
Z2hfeSA8PSAxKSkpICYmIAorICAgICAgICAgICAgICAgICAgICAoeHYgPT0gMCB8fCB5diA9PSAw
IHx8IC8qIG5vIG1vdGlvbiBpbiB4IG9yIHkgb3IgYm90aCAqLworICAgICAgICAgICAgICAgICAg
ICAgKGxvd195IDw9IGhpZ2hfeCAmJiBoaWdoX3ggPD0gaGlnaF95KSB8fAorICAgICAgICAgICAg
ICAgICAgICAgKGxvd195IDw9IGxvd194ICYmIGxvd194IDw9IGhpZ2hfeSkgfHwKKyAgICAgICAg
ICAgICAgICAgICAgIChsb3dfeCA8PSBsb3dfeSAmJiBoaWdoX3kgPD0gaGlnaF94KSkpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBmdW5jdGlvbiByZWN1cnNlKG5leHRWb3hlbCkgewor
ICAgICAgICAgICAgaWYgKCFpc0luVm94ZWwobmV4dFZveGVsLCBtb3Rpb24pKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChzZWVuLnB1dChuZXh0Vm94ZWwsIHRydWUp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcHV0
SW50b01hcChuZXh0Vm94ZWwpOworICAgICAgICAgICAgCisgICAgICAgICAgICByZWN1cnNlKG5l
eHRWb3hlbC5taW51cyhob3Jpem9udGFsKSk7CisgICAgICAgICAgICByZWN1cnNlKG5leHRWb3hl
bC5wbHVzKGhvcml6b250YWwpKTsKKyAgICAgICAgICAgIHJlY3Vyc2UobmV4dFZveGVsLm1pbnVz
KHZlcnRpY2FsKSk7CisgICAgICAgICAgICByZWN1cnNlKG5leHRWb3hlbC5wbHVzKHZlcnRpY2Fs
KSk7CisgICAgICAgICAgICByZWN1cnNlKG5leHRWb3hlbC5taW51cyhob3Jpem9udGFsKS5taW51
cyh2ZXJ0aWNhbCkpOworICAgICAgICAgICAgcmVjdXJzZShuZXh0Vm94ZWwubWludXMoaG9yaXpv
bnRhbCkucGx1cyh2ZXJ0aWNhbCkpOworICAgICAgICAgICAgcmVjdXJzZShuZXh0Vm94ZWwucGx1
cyhob3Jpem9udGFsKS5taW51cyh2ZXJ0aWNhbCkpOworICAgICAgICAgICAgcmVjdXJzZShuZXh0
Vm94ZWwucGx1cyhob3Jpem9udGFsKS5wbHVzKHZlcnRpY2FsKSk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHJlY3Vyc2Uodm94ZWxIYXNoKG1vdGlvbi5wb3NPbmUpKTsKKyAgICB9Owor
fSkoKTsKKworZnVuY3Rpb24gcmVkdWNlQ29sbGlzaW9uU2V0KG1vdGlvbnMpIHsKKyAgICB2YXIg
dm94ZWxNYXAgPSBuZXcgUmVkQmxhY2tUcmVlKCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBt
b3Rpb25zLmxlbmd0aDsgKytpKQorICAgICAgICBkcmF3TW90aW9uT25Wb3hlbE1hcCh2b3hlbE1h
cCwgbW90aW9uc1tpXSk7CisgICAgICAgIAorICAgIHZhciByZXN1bHQgPSBbXTsKKyAgICB2b3hl
bE1hcC5mb3JFYWNoKGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgICAgICAgaWYgKHZhbHVlLmxl
bmd0aCA+IDEpCisgICAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7CisgICAgfSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vY2Rq
cy9yZWR1Y2VfY29sbGlzaW9uX3NldF90ZXN0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNl
VGVzdHMvSmV0U3RyZWFtL2NkanMvcmVkdWNlX2NvbGxpc2lvbl9zZXRfdGVzdC5qcwkocmV2aXNp
b24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtL2NkanMvcmVkdWNlX2NvbGxpc2lv
bl9zZXRfdGVzdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgyIEBACisvLyBDb3B5cmln
aHQgKGMpIDIwMDEtMjAxMCwgUHVyZHVlIFVuaXZlcnNpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorLy8gICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8v
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKy8vICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisvLyAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorLy8gICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgUHVyZHVlIFVuaXZlcnNpdHkgbm9y
IHRoZQorLy8gICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKy8vICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8gCisvLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5ECisvLyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorLy8gV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorLy8gRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xE
RVIgQkUgTElBQkxFIEZPUiBBTlkKKy8vIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisvLyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisvLyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKy8vIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisv
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworLy8gU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2xvYWQoImNvbnN0YW50cy5qcyIpOwor
bG9hZCgidXRpbC5qcyIpOworbG9hZCgicmVkX2JsYWNrX3RyZWUuanMiKTsKK2xvYWQoImNhbGxf
c2lnbi5qcyIpOworbG9hZCgidmVjdG9yXzJkLmpzIik7Citsb2FkKCJ2ZWN0b3JfM2QuanMiKTsK
K2xvYWQoIm1vdGlvbi5qcyIpOworbG9hZCgicmVkdWNlX2NvbGxpc2lvbl9zZXQuanMiKTsKKwor
dmFyIG1ha2VNb3Rpb24gPSAoZnVuY3Rpb24oKSB7CisgICAgdmFyIGNvdW50ZXIgPSAwOworICAg
IHJldHVybiBmdW5jdGlvbih4MSwgeTEsIHoxLCB4MiwgeTIsIHoyKSB7CisgICAgICAgIHJldHVy
biBuZXcgTW90aW9uKG5ldyBDYWxsU2lnbigiZm9vIiArICgrK2NvdW50ZXIpKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3IFZlY3RvcjNEKHgxLCB5MSwgejEpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBuZXcgVmVjdG9yM0QoeDIsIHkyLCB6MikpOworICAgIH0KK30pKCk7CisK
K2Z1bmN0aW9uIGRyYXdNb3Rpb24obW90aW9uKSB7CisgICAgdmFyIHZveGVsTWFwID0gbmV3IFJl
ZEJsYWNrVHJlZSgpOworICAgIGRyYXdNb3Rpb25PblZveGVsTWFwKHZveGVsTWFwLCBtb3Rpb24p
OworICAgIHJldHVybiB2b3hlbE1hcDsKK30KKworZnVuY3Rpb24ga2V5cyh2b3hlbE1hcCkgewor
ICAgIHZhciByZXN1bHQgPSAiWyI7CisgICAgdmFyIGZpcnN0ID0gdHJ1ZTsKKyAgICB2b3hlbE1h
cC5mb3JFYWNoKGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgICAgICAgaWYgKGZpcnN0KQorICAg
ICAgICAgICAgZmlyc3QgPSBmYWxzZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0
ICs9ICIsICI7CisgICAgICAgIHJlc3VsdCArPSBrZXk7CisgICAgfSk7CisgICAgcmV0dXJuIHJl
c3VsdCArICJdIjsKK30KKworZnVuY3Rpb24gdGVzdCh4MSwgeTEsIHoxLCB4MiwgeTIsIHoyLCBl
eHBlY3RlZCkgeworICAgIHZhciBtb3Rpb24gPSBtYWtlTW90aW9uKHgxLCB5MSwgejEsIHgyLCB5
MiwgejIpOworICAgIHByaW50KG1vdGlvbiArICI6Iik7CisgICAgdmFyIGFjdHVhbCA9IGtleXMo
ZHJhd01vdGlvbihtb3Rpb24pKTsKKyAgICBpZiAoZXhwZWN0ZWQgIT0gYWN0dWFsKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIHZveGVsIG1hcDogIiArIGFjdHVhbCk7CisgICAgcHJp
bnQoIiAgICBHb3Q6ICIgKyBhY3R1YWwpOworfQorCit0ZXN0KDAsIDAsIDAsIDEsIDEsIDEsICJb
WzAsIDBdXSIpOwordGVzdCgwLCAwLCAwLCAyLCAyLCAyLCAiW1swLCAwXSwgWzAsIDJdLCBbMiwg
MF0sIFsyLCAyXV0iKTsKK3Rlc3QoMCwgMCwgMCwgNCwgNCwgNCwgIltbMCwgMF0sIFswLCAyXSwg
WzIsIDBdLCBbMiwgMl0sIFsyLCA0XSwgWzQsIDJdLCBbNCwgNF1dIik7Cit0ZXN0KDAsIDAsIDAs
IDEwLCAwLCAwLCAiW1swLCAwXSwgWzIsIDBdLCBbNCwgMF0sIFs2LCAwXSwgWzgsIDBdLCBbMTAs
IDBdXSIpOwordGVzdCgyLCAwLCAwLCAwLCAyLCAyLCAiW1swLCAwXSwgWzAsIDJdLCBbMiwgMF1d
Iik7Cit0ZXN0KDAsIDIsIDAsIDIsIDAsIDIsICJbWzAsIDBdLCBbMCwgMl0sIFsyLCAwXV0iKTsK
K3Rlc3QoMiwgMiwgMCwgMCwgMCwgMiwgIltbMCwgMF0sIFswLCAyXSwgWzIsIDBdLCBbMiwgMl1d
Iik7Cit0ZXN0KDAsIDAsIDAsIDIsIDAsIDAsICJbWzAsIDBdLCBbMiwgMF1dIik7Cit0ZXN0KDAs
IDAsIDAsIDAsIDIsIDAsICJbWzAsIDBdLCBbMCwgMl1dIik7Cit0ZXN0KDIsIDAsIDAsIDAsIDAs
IDAsICJbWzAsIDBdLCBbMiwgMF1dIik7Cit0ZXN0KDAsIDIsIDAsIDAsIDAsIDAsICJbWzAsIDBd
LCBbMCwgMl1dIik7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL3NpbXVs
YXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL3Np
bXVsYXRvci5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtL2Nk
anMvc2ltdWxhdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8vIENvcHly
aWdodCAoYykgMjAwMS0yMDEwLCBQdXJkdWUgVW5pdmVyc2l0eS4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyAKKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisvLyAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
Ly8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorLy8gICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKy8vICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisvLyAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBQdXJkdWUgVW5pdmVyc2l0eSBu
b3IgdGhlCisvLyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworLy8gICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLyAKKy8vIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQKKy8vIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisvLyBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisvLyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhP
TERFUiBCRSBMSUFCTEUgRk9SIEFOWQorLy8gRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKy8vIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKy8vIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorLy8gT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
Ky8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisvLyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnVuY3Rpb24gU2ltdWxhdG9yKG51
bUFpcmNyYWZ0KSB7CisgICAgdGhpcy5fYWlyY3JhZnQgPSBbXTsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IG51bUFpcmNyYWZ0OyArK2kpCisgICAgICAgIHRoaXMuX2FpcmNyYWZ0LnB1c2gobmV3
IENhbGxTaWduKCJmb28iICsgaSkpOworfQorCitTaW11bGF0b3IucHJvdG90eXBlLnNpbXVsYXRl
ID0gZnVuY3Rpb24odGltZSkgeworICAgIHZhciBmcmFtZSA9IFtdOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgdGhpcy5fYWlyY3JhZnQubGVuZ3RoOyBpICs9IDIpIHsKKyAgICAgICAgZnJhbWUu
cHVzaCh7CisgICAgICAgICAgICBjYWxsc2lnbjogdGhpcy5fYWlyY3JhZnRbaV0sCisgICAgICAg
ICAgICBwb3NpdGlvbjogbmV3IFZlY3RvcjNEKHRpbWUsIE1hdGguY29zKHRpbWUpICogMiArIGkg
KiAzLCAxMCkKKyAgICAgICAgfSk7CisgICAgICAgIGZyYW1lLnB1c2goeworICAgICAgICAgICAg
Y2FsbHNpZ246IHRoaXMuX2FpcmNyYWZ0W2kgKyAxXSwKKyAgICAgICAgICAgIHBvc2l0aW9uOiBu
ZXcgVmVjdG9yM0QodGltZSwgTWF0aC5zaW4odGltZSkgKiAyICsgaSAqIDMsIDEwKQorICAgICAg
ICB9KTsKKyAgICB9CisgICAgcmV0dXJuIGZyYW1lOworfTsKKwpJbmRleDogUGVyZm9ybWFuY2VU
ZXN0cy9KZXRTdHJlYW0vY2Rqcy91dGlsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVz
dHMvSmV0U3RyZWFtL2NkanMvdXRpbC5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVz
dHMvSmV0U3RyZWFtL2NkanMvdXRpbC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgyIEBA
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxMCwgUHVyZHVlIFVuaXZlcnNpdHkuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorLy8g
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKy8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisv
LyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorLy8gICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgUHVyZHVlIFVu
aXZlcnNpdHkgbm9yIHRoZQorLy8gICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKy8vICAgIGRlcml2ZWQgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
Ly8gCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisvLyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
Ly8gV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorLy8gRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVCBIT0xERVIgQkUgTElBQkxFIEZPUiBBTlkKKy8vIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisv
LyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisvLyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKy8vIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworLy8gU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Z1bmN0aW9uIGNv
bXBhcmVOdW1iZXJzKGEsIGIpIHsKKyAgICBpZiAoYSA9PSBiKQorICAgICAgICByZXR1cm4gMDsK
KyAgICBpZiAoYSA8IGIpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoYSA+IGIpCisgICAg
ICAgIHJldHVybiAxOworICAgIAorICAgIC8vIFdlIHNheSB0aGF0IE5hTiBpcyBzbWFsbGVyIHRo
YW4gbm9uLU5hTi4KKyAgICBpZiAoYSA9PSBhKQorICAgICAgICByZXR1cm4gMTsKKyAgICByZXR1
cm4gLTE7Cit9CisKK2Z1bmN0aW9uIGF2ZXJhZ2VBYm92ZVBlcmNlbnRpbGUobnVtYmVycywgcGVy
Y2VudGlsZSkgeworICAgIC8vIERvbid0IGNoYW5nZSB0aGUgb3JpZ2luYWwgYXJyYXkuCisgICAg
bnVtYmVycyA9IG51bWJlcnMuc2xpY2UoKTsKKyAgICAKKyAgICAvLyBTb3J0IGluIGFzY2VuZGlu
ZyBvcmRlci4KKyAgICBudW1iZXJzLnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYSAtIGI7
IH0pOworICAgIAorICAgIC8vIE5vdyB0aGUgZWxlbWVudHMgd2Ugd2FudCBhcmUgYXQgdGhlIGVu
ZC4gS2VlcCByZW1vdmluZyB0aGVtIHVudGlsIHRoZSBhcnJheSBzaXplIHNocmlua3MgdG9vIG11
Y2guCisgICAgLy8gRXhhbXBsZXMgYXNzdW1pbmcgcGVyY2VudGlsZSA9IDk5OgorICAgIC8vCisg
ICAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwOiB3ZSB3aWxsIHJlbW92ZSBqdXN0
IHRoZSB3b3JzdCBlbnRyeSBhbmQgdGhlbiBub3QgcmVtb3ZlIGFueW1vcmUsCisgICAgLy8gICBz
aW5jZSB0aGVuIG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPSAwLjk5LgorICAgIC8v
CisgICAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwMDogd2Ugd2lsbCByZW1vdmUg
dGhlIHRlbiB3b3JzdC4KKyAgICAvLworICAgIC8vIC0gbnVtYmVycy5sZW5ndGggc3RhcnRzIGF0
IDEwOiB3ZSB3aWxsIHJlbW92ZSBqdXN0IHRoZSB3b3JzdC4KKyAgICB2YXIgbnVtYmVyc1dlV2Fu
dCA9IFtdOworICAgIHZhciBvcmlnaW5hbExlbmd0aCA9IG51bWJlcnMubGVuZ3RoOworICAgIHdo
aWxlIChudW1iZXJzLmxlbmd0aCAvIG9yaWdpbmFsTGVuZ3RoID4gcGVyY2VudGlsZSAvIDEwMCkK
KyAgICAgICAgbnVtYmVyc1dlV2FudC5wdXNoKG51bWJlcnMucG9wKCkpOworICAgIAorICAgIHZh
ciBzdW0gPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyc1dlV2FudC5sZW5ndGg7
ICsraSkKKyAgICAgICAgc3VtICs9IG51bWJlcnNXZVdhbnRbaV07CisgICAgCisgICAgdmFyIHJl
c3VsdCA9IHN1bSAvIG51bWJlcnNXZVdhbnQubGVuZ3RoOworICAgIAorICAgIC8vIERvIGEgc2Fu
aXR5IGNoZWNrLgorICAgIGlmIChudW1iZXJzLmxlbmd0aCAmJiByZXN1bHQgPCBudW1iZXJzW251
bWJlcnMubGVuZ3RoIC0gMV0pIHsKKyAgICAgICAgdGhyb3cgIlNhbml0eSBjaGVjayBmYWlsOiB0
aGUgd29yc3QgY2FzZSByZXN1bHQgaXMgIiArIHJlc3VsdCArCisgICAgICAgICAgICAiIGJ1dCB3
ZSBkaWRuJ3QgdGFrZSBpbnRvIGFjY291bnQgIiArIG51bWJlcnM7CisgICAgfQorICAgIAorICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZhciBjdXJyZW50VGltZTsKK2lmICh0aGlzLnBlcmZvcm1h
bmNlICYmIHBlcmZvcm1hbmNlLm5vdykKKyAgICBjdXJyZW50VGltZSA9IGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gcGVyZm9ybWFuY2Uubm93KCkgfTsKK2Vsc2UgaWYgKHByZWNpc2VUaW1lKQorICAgIGN1
cnJlbnRUaW1lID0gZnVuY3Rpb24oKSB7IHJldHVybiBwcmVjaXNlVGltZSgpICogMTAwMDsgfTsK
K2Vsc2UKKyAgICBjdXJyZW50VGltZSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMCArIG5ldyBEYXRl
KCk7IH07CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL3ZlY3Rvcl8yZC5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL3ZlY3Rvcl8y
ZC5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtL2NkanMvdmVj
dG9yXzJkLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8vIENvcHlyaWdodCAo
YykgMjAwMS0yMDEwLCBQdXJkdWUgVW5pdmVyc2l0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyAK
Ky8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisvLyAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorLy8gICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKy8vICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisvLyAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBQdXJkdWUgVW5pdmVyc2l0eSBub3IgdGhl
CisvLyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cworLy8gICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLyAKKy8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQKKy8vIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisvLyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisvLyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBC
RSBMSUFCTEUgRk9SIEFOWQorLy8gRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKy8vIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKy8vIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorLy8gT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisvLyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnVuY3Rpb24gVmVjdG9yMkQoeCwgeSkgewor
ICAgIHRoaXMueCA9IHg7CisgICAgdGhpcy55ID0geTsKK30KKworVmVjdG9yMkQucHJvdG90eXBl
LnBsdXMgPSBmdW5jdGlvbihvdGhlcikgeworICAgIHJldHVybiBuZXcgVmVjdG9yMkQodGhpcy54
ICsgb3RoZXIueCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueSArIG90aGVyLnkpOwor
fTsKKworVmVjdG9yMkQucHJvdG90eXBlLm1pbnVzID0gZnVuY3Rpb24ob3RoZXIpIHsKKyAgICBy
ZXR1cm4gbmV3IFZlY3RvcjJEKHRoaXMueCAtIG90aGVyLngsCisgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLnkgLSBvdGhlci55KTsKK307CisKK1ZlY3RvcjJELnByb3RvdHlwZS50b1N0cmlu
ZyA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiAiWyIgKyB0aGlzLnggKyAiLCAiICsgdGhpcy55
ICsgIl0iOworfTsKKworVmVjdG9yMkQucHJvdG90eXBlLmNvbXBhcmVUbyA9IGZ1bmN0aW9uKG90
aGVyKSB7CisgICAgdmFyIHJlc3VsdCA9IGNvbXBhcmVOdW1iZXJzKHRoaXMueCwgb3RoZXIueCk7
CisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gY29t
cGFyZU51bWJlcnModGhpcy55LCBvdGhlci55KTsKK307CisKSW5kZXg6IFBlcmZvcm1hbmNlVGVz
dHMvSmV0U3RyZWFtL2NkanMvdmVjdG9yXzNkLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNl
VGVzdHMvSmV0U3RyZWFtL2NkanMvdmVjdG9yXzNkLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0vY2Rqcy92ZWN0b3JfM2QuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw3MCBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDAxLTIwMTAsIFB1cmR1ZSBVbml2ZXJz
aXR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIAorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlIG1ldDoKKy8vICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorLy8gICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
dGhlIFB1cmR1ZSBVbml2ZXJzaXR5IG5vciB0aGUKKy8vICAgIG5hbWVzIG9mIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisvLyAgICBk
ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKy8vIAorLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorLy8gQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKy8vIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKy8vIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFIExJQUJMRSBGT1IgQU5ZCisvLyBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworLy8gKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworLy8gTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisvLyBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKy8vIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CitmdW5jdGlvbiBWZWN0b3IzRCh4LCB5LCB6KSB7CisgICAgdGhpcy54ID0geDsKKyAgICB0aGlz
LnkgPSB5OworICAgIHRoaXMueiA9IHo7Cit9CisKK1ZlY3RvcjNELnByb3RvdHlwZS5wbHVzID0g
ZnVuY3Rpb24ob3RoZXIpIHsKKyAgICByZXR1cm4gbmV3IFZlY3RvcjNEKHRoaXMueCArIG90aGVy
LngsCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnkgKyBvdGhlci55LAorICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy56ICsgb3RoZXIueik7Cit9OworCitWZWN0b3IzRC5wcm90b3R5
cGUubWludXMgPSBmdW5jdGlvbihvdGhlcikgeworICAgIHJldHVybiBuZXcgVmVjdG9yM0QodGhp
cy54IC0gb3RoZXIueCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueSAtIG90aGVyLnks
CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnogLSBvdGhlci56KTsKK307CisKK1ZlY3Rv
cjNELnByb3RvdHlwZS5kb3QgPSBmdW5jdGlvbihvdGhlcikgeworICAgIHJldHVybiB0aGlzLngg
KiBvdGhlci54ICsgdGhpcy55ICogb3RoZXIueSArIHRoaXMueiAqIG90aGVyLno7Cit9OworCitW
ZWN0b3IzRC5wcm90b3R5cGUuc3F1YXJlZE1hZ25pdHVkZSA9IGZ1bmN0aW9uKCkgeworICAgIHJl
dHVybiB0aGlzLmRvdCh0aGlzKTsKK307CisKK1ZlY3RvcjNELnByb3RvdHlwZS5tYWduaXR1ZGUg
PSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gTWF0aC5zcXJ0KHRoaXMuc3F1YXJlZE1hZ25pdHVk
ZSgpKTsKK307CisKK1ZlY3RvcjNELnByb3RvdHlwZS50aW1lcyA9IGZ1bmN0aW9uKGFtb3VudCkg
eworICAgIHJldHVybiBuZXcgVmVjdG9yM0QodGhpcy54ICogYW1vdW50LAorICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy55ICogYW1vdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy56ICogYW1vdW50KTsKK307CisKK1ZlY3RvcjNELnByb3RvdHlwZS5hczJEID0gZnVuY3Rpb24o
KSB7CisgICAgcmV0dXJuIG5ldyBWZWN0b3IyRCh0aGlzLngsIHRoaXMueSk7Cit9OworCitWZWN0
b3IzRC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gIlsiICsg
dGhpcy54ICsgIiwgIiArIHRoaXMueSArICIsICIgKyB0aGlzLnogKyAiXSI7Cit9OworCisKSW5k
ZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtL3N1bnNwaWRlci9jb3JkaWMuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vc3Vuc3BpZGVyL2NvcmRpYy5qcwko
cmV2aXNpb24gMTg1NzU3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vc3Vuc3BpZGVy
L2NvcmRpYy5qcwkod29ya2luZyBjb3B5KQpAQCAtMSwxMDYgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgUmljaCBNb29yZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLS8vLy8vLiBTdGFydCBDT1JESUMKLQot
dmFyIEFHX0NPTlNUID0gMC42MDcyNTI5MzUwOwotCi1mdW5jdGlvbiBGSVhFRChYKQotewotICBy
ZXR1cm4gWCAqIDY1NTM2LjA7Ci19Ci0KLWZ1bmN0aW9uIEZMT0FUKFgpCi17Ci0gIHJldHVybiBY
IC8gNjU1MzYuMDsKLX0KLQotZnVuY3Rpb24gREVHMlJBRChYKQotewotICByZXR1cm4gMC4wMTc0
NTMgKiAoWCk7Ci19Ci0KLXZhciBBbmdsZXMgPSBbCi0gIEZJWEVEKDQ1LjApLCBGSVhFRCgyNi41
NjUpLCBGSVhFRCgxNC4wMzYyKSwgRklYRUQoNy4xMjUwMiksCi0gIEZJWEVEKDMuNTc2MzMpLCBG
SVhFRCgxLjc4OTkxKSwgRklYRUQoMC44OTUxNzQpLCBGSVhFRCgwLjQ0NzYxNCksCi0gIEZJWEVE
KDAuMjIzODExKSwgRklYRUQoMC4xMTE5MDYpLCBGSVhFRCgwLjA1NTk1MyksCi0gIEZJWEVEKDAu
MDI3OTc3KSAKLSAgICAgICAgICAgICAgXTsKLQotdmFyIFRhcmdldCA9IDI4LjAyNzsKLQotZnVu
Y3Rpb24gY29yZGljc2luY29zKFRhcmdldCkgewotICAgIHZhciBYOwotICAgIHZhciBZOwotICAg
IHZhciBUYXJnZXRBbmdsZTsKLSAgICB2YXIgQ3VyckFuZ2xlOwotICAgIHZhciBTdGVwOwotIAot
ICAgIFggPSBGSVhFRChBR19DT05TVCk7ICAgICAgICAgLyogQUdfQ09OU1QgKiBjb3MoMCkgKi8K
LSAgICBZID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIEFHX0NPTlNUICogc2luKDApICov
Ci0KLSAgICBUYXJnZXRBbmdsZSA9IEZJWEVEKFRhcmdldCk7Ci0gICAgQ3VyckFuZ2xlID0gMDsK
LSAgICBmb3IgKFN0ZXAgPSAwOyBTdGVwIDwgMTI7IFN0ZXArKykgewotICAgICAgICB2YXIgTmV3
WDsKLSAgICAgICAgaWYgKFRhcmdldEFuZ2xlID4gQ3VyckFuZ2xlKSB7Ci0gICAgICAgICAgICBO
ZXdYID0gWCAtIChZID4+IFN0ZXApOwotICAgICAgICAgICAgWSA9IChYID4+IFN0ZXApICsgWTsK
LSAgICAgICAgICAgIFggPSBOZXdYOwotICAgICAgICAgICAgQ3VyckFuZ2xlICs9IEFuZ2xlc1tT
dGVwXTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIE5ld1ggPSBYICsgKFkgPj4gU3Rl
cCk7Ci0gICAgICAgICAgICBZID0gLShYID4+IFN0ZXApICsgWTsKLSAgICAgICAgICAgIFggPSBO
ZXdYOwotICAgICAgICAgICAgQ3VyckFuZ2xlIC09IEFuZ2xlc1tTdGVwXTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBGTE9BVChYKSAqIEZMT0FUKFkpOwotfQotCi0vLy8vLyBFbmQg
Q09SRElDCi0KLXZhciB0b3RhbCA9IDA7Ci0KLWZ1bmN0aW9uIGNvcmRpYyggcnVucyApIHsKLSAg
dmFyIHN0YXJ0ID0gbmV3IERhdGUoKTsKLQotICBmb3IgKCB2YXIgaSA9IDAgOyBpIDwgcnVucyA7
IGkrKyApIHsKLSAgICAgIHRvdGFsICs9IGNvcmRpY3NpbmNvcyhUYXJnZXQpOwotICB9Ci0KLSAg
dmFyIGVuZCA9IG5ldyBEYXRlKCk7Ci0KLSAgcmV0dXJuIGVuZC5nZXRUaW1lKCkgLSBzdGFydC5n
ZXRUaW1lKCk7Ci19Ci0KLWNvcmRpYygyNTAwMCk7Ci0KLXZhciBleHBlY3RlZCA9IDEwMzYyLjU3
MDQ2ODc1NTg4ODsKLQotaWYgKHRvdGFsICE9IGV4cGVjdGVkKQotICAgIHRocm93ICJFUlJPUjog
YmFkIHJlc3VsdDogZXhwZWN0ZWQgIiArIGV4cGVjdGVkICsgIiBidXQgZ290ICIgKyB0b3RhbDsK
LQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>