<?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>175697</bug_id>
          
          <creation_ts>2017-08-17 16:29:48 -0700</creation_ts>
          <short_desc>Add a Unicode test to RexBench that matches non-BMP characters</short_desc>
          <delta_ts>2024-11-11 01:42:06 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>hebon48997</cc>
    
    <cc>jfbastien</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1339835</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-08-17 16:29:48 -0700</bug_when>
    <thetext>Currently all the Unicode sub tests of RexBench only process BMP characters.  We should add a test that goes beyond BMP characters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339837</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-17 16:30:43 -0700</bug_when>
    <thetext>&lt;rdar://problem/33952865&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339851</commentid>
    <comment_count>2</comment_count>
      <attachid>318441</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-08-17 16:43:49 -0700</bug_when>
    <thetext>Created attachment 318441
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339863</commentid>
    <comment_count>3</comment_count>
      <attachid>318441</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-08-17 17:16:27 -0700</bug_when>
    <thetext>Comment on attachment 318441
Patch

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

I didn&apos;t check the poker logic. I saw you play, looked about right.

r=me

&gt; PerformanceTests/RexBench/unicode_poker_benchmark.js:51
&gt; +    runUnicodePokerBenchmark = makeBenchmarkRunner(sources, &quot;UnicodePokerBenchmark&quot;, 20);

What&apos;s the 20 here? numIterations?

&gt; PerformanceTests/RexBench/unicode_poker_benchmark.js:55
&gt; +    name: &quot;Unicode Poker&quot;,

UniPoker or Po🂾er

;-)

&gt; PerformanceTests/RexBench/UnicodePoker/benchmark.js:36
&gt; +        Math.random = (function() {

Ha nice :)

&gt; PerformanceTests/RexBench/UnicodePoker/benchmark.js:54
&gt; +        this._players.push(new Player(&quot;Player 4&quot;));

Better player names! You could immortalized 4 people in benchmark fame!

&gt; PerformanceTests/RexBench/UnicodePoker/poker.js:71
&gt; +        return cardRank

ASI on purpose here?

&gt; PerformanceTests/RexBench/UnicodePoker/poker.js:128
&gt; +        });

Arrow function here!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339878</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-08-17 17:57:01 -0700</bug_when>
    <thetext>Committed r220893: &lt;http://trac.webkit.org/changeset/220893&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339879</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-08-17 17:58:16 -0700</bug_when>
    <thetext>(In reply to JF Bastien from comment #3)
&gt; Comment on attachment 318441 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=318441&amp;action=review
&gt; 
&gt; I didn&apos;t check the poker logic. I saw you play, looked about right.
&gt; 
&gt; r=me
&gt; 
&gt; &gt; PerformanceTests/RexBench/unicode_poker_benchmark.js:51
&gt; &gt; +    runUnicodePokerBenchmark = makeBenchmarkRunner(sources, &quot;UnicodePokerBenchmark&quot;, 20);
&gt; 
&gt; What&apos;s the 20 here? numIterations?

Yes.

&gt; &gt; PerformanceTests/RexBench/unicode_poker_benchmark.js:55
&gt; &gt; +    name: &quot;Unicode Poker&quot;,
&gt; 
&gt; UniPoker or Po🂾er
&gt; 
&gt; ;-)

I changed it to UniPoker.

&gt; &gt; PerformanceTests/RexBench/UnicodePoker/benchmark.js:36
&gt; &gt; +        Math.random = (function() {
&gt; 
&gt; Ha nice :)
&gt; 
&gt; &gt; PerformanceTests/RexBench/UnicodePoker/benchmark.js:54
&gt; &gt; +        this._players.push(new Player(&quot;Player 4&quot;));
&gt; 
&gt; Better player names! You could immortalized 4 people in benchmark fame!
&gt; 
&gt; &gt; PerformanceTests/RexBench/UnicodePoker/poker.js:71
&gt; &gt; +        return cardRank
&gt; 
&gt; ASI on purpose here?

I added the missing semicolon.

&gt; &gt; PerformanceTests/RexBench/UnicodePoker/poker.js:128
&gt; &gt; +        });
&gt; 
&gt; Arrow function here!

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2074227</commentid>
    <comment_count>6</comment_count>
    <who name="hebon48">hebon48997</who>
    <bug_when>2024-11-11 01:42:06 -0800</bug_when>
    <thetext>The community aspect is also a big plus. Winspirit AU Sat has a great community of players from all over, but I’ve met quite a few fellow https://winspirit-aus.com/ who are just as passionate about the games as I am. We share tips, talk about our favorite games, and keep each other motivated.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318441</attachid>
            <date>2017-08-17 16:43:49 -0700</date>
            <delta_ts>2017-08-17 17:16:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>175697.patch</filename>
            <type>text/plain</type>
            <size>30155</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjA4ODgpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDE3LTA4LTE3ICBN
aWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhIFVuaWNv
ZGUgdGVzdCB0byBSZXhCZW5jaCB0aGF0IG1hdGNoZXMgbm9uLUJNUCBjaGFyYWN0ZXJzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU2OTcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBhIG5ldyBz
dWIgdGVzdCB0aGF0IHNpbXVsYXRlcyA1IGNhcmQgc3R1ZCBwb2tlci4gIFRoaXMgdGVzdCB1c2Vz
IHRoZSBVbmljb2RlIHBsYXlpbmcKKyAgICAgICAgY2FyZHMgY29kZSBwb2ludHMsIFUrMUYwQTEu
LlUrMUYwREUsIGFzIHRoZSBjYXJkIHJlcHJlc2VudGF0aW9uLiAgVGhlIHNjb3Jpbmcgb2YgaGFu
ZHMgaXMKKyAgICAgICAgZG9uZSB1c2luZyB0aHJlZSByZWd1bGFyIGV4cHJlc3Npb25zLCBvbmUg
dG8gY2hlY2sgZm9yIGEgZmx1c2gsIG9uZSB0byBjaGVjayBmb3Igc3RyYWlnaHRzCisgICAgICAg
IGFuZCBvbmUgdG8gY2hlY2sgZm9yIHBhaXJzLCB0aHJlZSBvZiBhIGtpbmQgYW5kIGZvdXIgb2Yg
YSBraW5kLgorCisgICAgICAgICogUmV4QmVuY2gvVW5pY29kZVBva2VyOiBBZGRlZC4KKyAgICAg
ICAgKiBSZXhCZW5jaC9Vbmljb2RlUG9rZXIvYmVuY2htYXJrLmpzOiBBZGRlZC4KKyAgICAgICAg
KFVuaWNvZGVQb2tlckJlbmNobWFyayk6CisgICAgICAgIChVbmljb2RlUG9rZXJCZW5jaG1hcmsu
cHJvdG90eXBlLnNldHVwLik6CisgICAgICAgIChVbmljb2RlUG9rZXJCZW5jaG1hcmsucHJvdG90
eXBlLnNldHVwLk1hdGgucmFuZG9tKToKKyAgICAgICAgKFVuaWNvZGVQb2tlckJlbmNobWFyay5w
cm90b3R5cGUuc2V0dXApOgorICAgICAgICAoVW5pY29kZVBva2VyQmVuY2htYXJrLnByb3RvdHlw
ZS5ydW5PbmNlKToKKyAgICAgICAgKFVuaWNvZGVQb2tlckJlbmNobWFyay5wcm90b3R5cGUudmFs
aWRhdGUpOgorICAgICAgICAqIFJleEJlbmNoL1VuaWNvZGVQb2tlci9leHBlY3RlZC5qczogQWRk
ZWQuCisgICAgICAgIChQbGF5ZXJFeHBlY3RhdGlvbik6CisgICAgICAgIChQbGF5ZXJFeHBlY3Rh
dGlvbi5wcm90b3R5cGUudmFsaWRhdGUpOgorICAgICAgICAqIFJleEJlbmNoL1VuaWNvZGVQb2tl
ci9wb2tlci5qczogQWRkZWQuCisgICAgICAgIChDYXJkRGVjayk6CisgICAgICAgIChDYXJkRGVj
ay5wcm90b3R5cGUubmV3RGVjayk6CisgICAgICAgIChDYXJkRGVjay5wcm90b3R5cGUuc2h1ZmZs
ZSk6CisgICAgICAgIChDYXJkRGVjay5wcm90b3R5cGUuZGVhbE9uZUNhcmQpOgorICAgICAgICAo
Q2FyZERlY2suY2FyZFJhbmspOgorICAgICAgICAoQ2FyZERlY2suY2FyZE5hbWUpOgorICAgICAg
ICAoSGFuZCk6CisgICAgICAgIChIYW5kLnByb3RvdHlwZS5jbGVhcik6CisgICAgICAgIChIYW5k
LnByb3RvdHlwZS50YWtlQ2FyZCk6CisgICAgICAgIChIYW5kLnByb3RvdHlwZS5zY29yZSk6Cisg
ICAgICAgIChIYW5kLnByb3RvdHlwZS5nZXQgcmFuayk6CisgICAgICAgIChIYW5kLnByb3RvdHlw
ZS50b1N0cmluZyk6CisgICAgICAgIChQbGF5ZXIpOgorICAgICAgICAoUGxheWVyLnByb3RvdHlw
ZS5zY29yZUhhbmQpOgorICAgICAgICAoUGxheWVyLnByb3RvdHlwZS53b25IYW5kKToKKyAgICAg
ICAgKFBsYXllci5wcm90b3R5cGUuZ2V0IG5hbWUpOgorICAgICAgICAoUGxheWVyLnByb3RvdHlw
ZS5nZXQgaGFuZCk6CisgICAgICAgIChQbGF5ZXIucHJvdG90eXBlLmdldCB3aW5zKToKKyAgICAg
ICAgKFBsYXllci5wcm90b3R5cGUuZ2V0IGhhbmRUeXBlQ291bnRzKToKKyAgICAgICAgKHBsYXlI
YW5kcyk6CisgICAgICAgICogUmV4QmVuY2gvYWJvdXQuaHRtbDoKKyAgICAgICAgKiBSZXhCZW5j
aC9jbGkuanM6CisgICAgICAgICogUmV4QmVuY2gvZ2x1ZS5qczoKKyAgICAgICAgKGRyaXZlci5y
ZXBvcnRSZXN1bHQpOgorICAgICAgICAqIFJleEJlbmNoL2luZGV4Lmh0bWw6CisgICAgICAgICog
UmV4QmVuY2gvdW5pY29kZV9wb2tlcl9iZW5jaG1hcmsuanM6IEFkZGVkLgorCiAyMDE3LTA4LTE2
ICBNYXRoaWFzIEJ5bmVucyAgPG1hdGhpYXNAcWl3aS5iZT4KIAogICAgICAgICBTcGVlZG9tZXRl
cjogVXBkYXRlIEFuZ3VsYXIgMSBUb2RvTVZDIGV4YW1wbGUgdG8gdjEuNi41CkluZGV4OiBQZXJm
b3JtYW5jZVRlc3RzL1JleEJlbmNoL2Fib3V0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFu
Y2VUZXN0cy9SZXhCZW5jaC9hYm91dC5odG1sCShyZXZpc2lvbiAyMjA3NTIpCisrKyBQZXJmb3Jt
YW5jZVRlc3RzL1JleEJlbmNoL2Fib3V0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0
LDggQEAKIAogICAgICAgICA8cD5PZmZsaW5lIEFzc2VtYmxlciBpcyB0aGUgbGV4ZXIsIHBhcnNl
ciBhbmQgQVNUIGxheWVyIG9mIHRoZSBvZmZsaW5lIGFzc2VtYmxlciBmb3IgSmF2YVNjcmlwdENv
cmUuICBJdCBoYXMgYmVlbiBwb3J0ZWQgdG8gSmF2YVNjcmlwdCBmcm9tIHRoZSBvcmlnaW5hbCBS
dWJ5LjwvcD4KIAorICAgICAgICA8cD5Vbmljb2RlIFBva2VyIGlzIGEgNSBjYXJkIHBva2VyIHNp
bXVsYXRpb24gdXNpbmcgdGhlIFVuaWNvZGUgcGxheWluZyBjYXJkcyBjb2RlIHBvaW50cywgVSsx
RjBBMS4uVSsxRjBERSwgYXMgdGhlIGNhcmQgcmVwcmVzZW50YXRpb24gaW4gdGhlIGNvZGUuICBT
Y29yaW5nIG9mIGhhbmRzIGlzIGRvbmUgd2l0aCB0aHJlZSByZWd1bGFyIGV4cHJlc3Npb25zLCBv
bmUgdG8gY2hlY2sgZm9yIGEgZmx1c2gsIG9uZSB0byBjaGVjayBmb3Igc3RyYWlnaHRzIGFuZCBv
bmUgdG8gY2hlY2sgZm9yIHBhaXJzLCB0aHJlZSBvZiBhIGtpbmQgYW5kIGZvdXIgb2YgYSBraW5k
LiAgVGhlIGxhc3QgcmVndWxhciBleHByZXNzaW9uIGlzIHVzZWQgdHdpY2UgYXMgbmVlZGVkIHRv
IGZpbmQgaGFuZHMgd2l0aCAyIHBhaXJzIG9yIGEgZnVsbCBob3VzZS4KKwogICAgICAgICA8cD5G
bGlnaHQgUGxhbm5lciBpcyBhIG5ld2x5IHdyaXR0ZW4gYmVuY2htYXJrIHRha2VuIGZyb20gYSBm
bGlnaHQgbWFuYWdlbWVudCB3ZWIgYXBwbGljYXRpb24uICBGbGlnaHQgUGxhbm5lciBwYXJzZXMg
YWlyY3JhZnQgZmxpZ2h0IHBsYW5zIGFuZCBjb21wdXRlcyBkaXN0YW5jZSwgY291cnNlIGFuZCBl
bGFwc2VkIHRpbWVzIGZvciBsZWdzIG9mIGZsaWdodCBwbGFucyBhcyB3ZWxsIGFzIHRvdGFsIHRp
bWUuICBJdCB1c2VzIEZBQSBkYXRhIGZvciBhaXJwb3J0cywgbmF2aWdhdGlvbiBhaWRzIGFuZCBh
aXJ3YXlzLiAgVGhlIGZsaWdodCBtYW5hZ2VtZW50IGFwcCB3YXMgb3JpZ2luYWxseSB3cml0dGVu
IHRvIGhlbHAgY29tcGV0ZSBpbiBhIGZseWluZyBwcm9maWNpZW5jeSBldmVudC4gIFNlZSA8YSBo
cmVmPSJodHRwOi8vd3d3Lmh3ZGFpcnJhbGx5Lm9yZy9pbmRleC5zaHRtbCI+SGF5d2FyZCBBaXIg
UmFsbHk8L2E+LgogICAgICAgICA8L3A+CiAKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvUmV4QmVu
Y2gvY2xpLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvUmV4QmVuY2gvY2xpLmpz
CShyZXZpc2lvbiAyMjA3NTIpCisrKyBQZXJmb3JtYW5jZVRlc3RzL1JleEJlbmNoL2NsaS5qcwko
d29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQCBsb2FkKCJzdW5zcGlkZXJfYmVuY2htYXJr
LmpzIik7CiBsb2FkKCJvY3RhbmUyX2JlbmNobWFyay5qcyIpOwogbG9hZCgiYmFzaWNfYmVuY2ht
YXJrLmpzIik7CiBsb2FkKCJvZmZsaW5lX2Fzc2VtYmxlcl9iZW5jaG1hcmsuanMiKTsKK2xvYWQo
InVuaWNvZGVfcG9rZXJfYmVuY2htYXJrLmpzIik7CiBsb2FkKCJmbGlnaHRwbGFuX2JlbmNobWFy
ay5qcyIpOwogbG9hZCgiZmxpZ2h0cGxhbl91bmljb2RlX2JlbmNobWFyay5qcyIpOwogbG9hZCgi
Z2x1ZS5qcyIpOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9SZXhCZW5jaC9nbHVlLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvUmV4QmVuY2gvZ2x1ZS5qcwkocmV2aXNpb24gMjIw
NzUyKQorKysgUGVyZm9ybWFuY2VUZXN0cy9SZXhCZW5jaC9nbHVlLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw3ICszOSw3IEBAIGZ1bmN0aW9uIHJlcG9ydFJlc3VsdCguLi5hcmdzKSB7CiB9CiAK
IHsKLSAgICBjb25zdCB0aXRsZSA9ICJSZXhCZW5jaCAwLjkyIjsKKyAgICBjb25zdCB0aXRsZSA9
ICJSZXhCZW5jaCAwLjkzIjsKICAgICBpZiAoaXNJbkJyb3dzZXIpIHsKICAgICAgICAgZG9jdW1l
bnQudGl0bGUgPSB0aXRsZTsKICAgICB9IGVsc2UgewpAQCAtNTEsNiArNTEsNyBAQCBkcml2ZXIu
YWRkQmVuY2htYXJrKFJlZ2V4RE5BQmVuY2htYXJrUnVuCiBkcml2ZXIuYWRkQmVuY2htYXJrKE9j
dGFuZTJSZWdFeHBCZW5jaG1hcmtSdW5uZXIpOwogZHJpdmVyLmFkZEJlbmNobWFyayhCYXNpY0Jl
bmNobWFya1J1bm5lcik7CiBkcml2ZXIuYWRkQmVuY2htYXJrKE9mZmxpbmVBc3NlbWJsZXJCZW5j
aG1hcmtSdW5uZXIpOworZHJpdmVyLmFkZEJlbmNobWFyayhVbmljb2RlUG9rZXJCZW5jaG1hcmtS
dW5uZXIpOwogZHJpdmVyLmFkZEJlbmNobWFyayhGbGlnaHRQbGFubmVyQmVuY2htYXJrUnVubmVy
KTsKIGRyaXZlci5hZGRCZW5jaG1hcmsoRmxpZ2h0UGxhbm5lclVuaWNvZGVCZW5jaG1hcmtSdW5u
ZXIpOwogZHJpdmVyLnJlYWR5VHJpZ2dlcigpOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9SZXhC
ZW5jaC9pbmRleC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvUmV4QmVuY2gv
aW5kZXguaHRtbAkocmV2aXNpb24gMjIwNzUyKQorKysgUGVyZm9ybWFuY2VUZXN0cy9SZXhCZW5j
aC9pbmRleC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNiArMTQwLDMxIEBACiAgICAgICAg
ICAgICA8L2Rpdj4KICAgICAgICAgPC9kaXY+CiAKKyAgICAgICAgPGRpdiBjbGFzcz0idW5pY29k
ZSBwb2tlciB0ZXN0Ij4KKyAgICAgICAgICAgIDxoMiBpZD0iVW5pY29kZVBva2VyTWVzc2FnZSI+
VW5pY29kZSBQb2tlcjwvaDI+IAorICAgICAgICAgICAgCisgICAgICAgICAgICA8ZGl2IGNsYXNz
PSJzY29yZSI+CisgICAgICAgICAgICAgICAgPGxhYmVsPkZpcnN0IEl0ZXJhdGlvbjwvbGFiZWw+
CisgICAgICAgICAgICAgICAgPHNwYW4gaWQ9IlVuaWNvZGVQb2tlckZpcnN0SXRlcmF0aW9uIj4K
KyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZhbHVlIj4wPC9zcGFuPjxzcGFuIGNs
YXNzPSJ1bml0cyI+bXM8L3NwYW4+ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICA8L3NwYW4+CisgICAgICAgICAgICA8L2Rpdj4KKyAKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9
InNjb3JlIj4KKyAgICAgICAgICAgICAgICA8bGFiZWw+V29yc3QgNCBJdGVyYXRvbnM8L2xhYmVs
PgorICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJVbmljb2RlUG9rZXJBdmVyYWdlV29yc3RDYXNl
Ij4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZhbHVlIj4wPC9zcGFuPjxzcGFu
IGNsYXNzPSJ1bml0cyI+bXM8L3NwYW4+ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICA8L3NwYW4+CisgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgPGRpdiBjbGFz
cz0ic2NvcmUiPgorICAgICAgICAgICAgICAgIDxsYWJlbD5BdmVyYWdlPC9sYWJlbD4KKyAgICAg
ICAgICAgICAgICA8c3BhbiBpZD0iVW5pY29kZVBva2VyU3RlYWR5U3RhdGUiPgorICAgICAgICAg
ICAgICAgICAgICA8c3BhbiBjbGFzcz0idmFsdWUiPjA8L3NwYW4+PHNwYW4gY2xhc3M9InVuaXRz
Ij5tczwvc3Bhbj4gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDwvc3Bhbj4K
KyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKwogICAgICAgICA8ZGl2IGNsYXNz
PSJmbGlnaHQgcGxhbm5lciB0ZXN0Ij4KICAgICAgICAgICAgIDxoMiBpZD0iRmxpZ2h0UGxhbm5l
ck1lc3NhZ2UiPkZsaWdodCBQbGFubmVyPC9oMj4gCiAgICAgICAgICAgICAKQEAgLTE5OCw2ICsy
MjMsNyBAQAogICAgIDxzY3JpcHQgc3JjPSJvY3RhbmUyX2JlbmNobWFyay5qcyI+PC9zY3JpcHQ+
CiAgICAgPHNjcmlwdCBzcmM9ImJhc2ljX2JlbmNobWFyay5qcyI+PC9zY3JpcHQ+CiAgICAgPHNj
cmlwdCBzcmM9Im9mZmxpbmVfYXNzZW1ibGVyX2JlbmNobWFyay5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9InVuaWNvZGVfcG9rZXJfYmVuY2htYXJrLmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHNyYz0iZmxpZ2h0cGxhbl9iZW5jaG1hcmsuanMiPjwvc2NyaXB0PgogICAgIDxzY3Jp
cHQgc3JjPSJmbGlnaHRwbGFuX3VuaWNvZGVfYmVuY2htYXJrLmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHNyYz0iZ2x1ZS5qcyI+PC9zY3JpcHQ+CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL1Jl
eEJlbmNoL3VuaWNvZGVfcG9rZXJfYmVuY2htYXJrLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvUmV4QmVuY2gvdW5pY29kZV9wb2tlcl9iZW5jaG1hcmsuanMJKG5vbmV4aXN0ZW50
KQorKysgUGVyZm9ybWFuY2VUZXN0cy9SZXhCZW5jaC91bmljb2RlX3Bva2VyX2JlbmNobWFyay5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2NvbnN0IFVuaWNvZGVQb2tl
ckJlbmNobWFya0NvZGUgPSBTdHJpbmcucmF3YAorPHNjcmlwdCBzcmM9ImJlbmNobWFyay5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iVW5pY29kZVBva2VyL3Bva2VyLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJVbmljb2RlUG9rZXIvZXhwZWN0ZWQuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9IlVuaWNvZGVQb2tlci9iZW5jaG1hcmsuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyJ1
c2Ugc3RyaWN0IjsKK3ZhciByZXN1bHRzID0gW107Cit2YXIgYmVuY2htYXJrID0gbmV3IFVuaWNv
ZGVQb2tlckJlbmNobWFyaygpOwordmFyIG51bUl0ZXJhdGlvbnMgPSAyMDsKK2JlbmNobWFyay5y
dW5JdGVyYXRpb25zKG51bUl0ZXJhdGlvbnMsIHJlc3VsdHMpOworcmVwb3J0UmVzdWx0KHJlc3Vs
dHMpOworPC9zY3JpcHQ+YDsKKworCitsZXQgcnVuVW5pY29kZVBva2VyQmVuY2htYXJrID0gbnVs
bDsKK2lmICghaXNJbkJyb3dzZXIpIHsKKyAgICBsZXQgc291cmNlcyA9IFsKKyAgICAgICAgImJl
bmNobWFyay5qcyIKKyAgICAgICAgLCAiVW5pY29kZVBva2VyL3Bva2VyLmpzIgorICAgICAgICAs
ICJVbmljb2RlUG9rZXIvZXhwZWN0ZWQuanMiCisgICAgICAgICwgIlVuaWNvZGVQb2tlci9iZW5j
aG1hcmsuanMiCisgICAgXTsKKworICAgIHJ1blVuaWNvZGVQb2tlckJlbmNobWFyayA9IG1ha2VC
ZW5jaG1hcmtSdW5uZXIoc291cmNlcywgIlVuaWNvZGVQb2tlckJlbmNobWFyayIsIDIwKTsKK30K
KworY29uc3QgVW5pY29kZVBva2VyQmVuY2htYXJrUnVubmVyID0geworICAgIG5hbWU6ICJVbmlj
b2RlIFBva2VyIiwKKyAgICBjb2RlOiBVbmljb2RlUG9rZXJCZW5jaG1hcmtDb2RlLAorICAgIHJ1
bjogcnVuVW5pY29kZVBva2VyQmVuY2htYXJrLAorICAgIGNlbGxzOiB7fQorfTsKKworaWYgKGlz
SW5Ccm93c2VyKSB7CisgICAgVW5pY29kZVBva2VyQmVuY2htYXJrUnVubmVyLmNlbGxzID0gewor
ICAgICAgICBmaXJzdEl0ZXJhdGlvbjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlVuaWNvZGVQ
b2tlckZpcnN0SXRlcmF0aW9uIiksCisgICAgICAgIGF2ZXJhZ2VXb3JzdENhc2U6IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJVbmljb2RlUG9rZXJBdmVyYWdlV29yc3RDYXNlIiksCisgICAgICAg
IHN0ZWFkeVN0YXRlOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVW5pY29kZVBva2VyU3RlYWR5
U3RhdGUiKSwKKyAgICAgICAgbWVzc2FnZTogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlVuaWNv
ZGVQb2tlck1lc3NhZ2UiKQorICAgIH07Cit9CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL1JleEJl
bmNoL1VuaWNvZGVQb2tlci9iZW5jaG1hcmsuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VU
ZXN0cy9SZXhCZW5jaC9Vbmljb2RlUG9rZXIvYmVuY2htYXJrLmpzCShub25leGlzdGVudCkKKysr
IFBlcmZvcm1hbmNlVGVzdHMvUmV4QmVuY2gvVW5pY29kZVBva2VyL2JlbmNobWFyay5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIFVuaWNvZGVQb2tlckJlbmNo
bWFyayBleHRlbmRzIEJlbmNobWFyayB7CisgICAgY29uc3RydWN0b3IodmVyYm9zZSA9IDApCisg
ICAgeworICAgICAgICBzdXBlcih2ZXJib3NlKTsKKyAgICAgICAgdGhpcy5fcGxheWVycyA9IFtd
OworICAgIH0KKworICAgIHNldHVwKCkKKyAgICB7CisgICAgICAgIE1hdGgucmFuZG9tID0gKGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIHNlZWQgPSA0OTczNDMyMTsKKyAgICAgICAgICAg
IHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAvLyBSb2JlcnQgSmVua2lucycg
MzIgYml0IGludGVnZXIgaGFzaCBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICBzZWVkID0gKChz
ZWVkICsgMHg3ZWQ1NWQxNikgKyAoc2VlZCA8PCAxMikpICAmIDB4ZmZmZmZmZmY7CisgICAgICAg
ICAgICAgICAgc2VlZCA9ICgoc2VlZCBeIDB4Yzc2MWMyM2MpIF4gKHNlZWQgPj4+IDE5KSkgJiAw
eGZmZmZmZmZmOworICAgICAgICAgICAgICAgIHNlZWQgPSAoKHNlZWQgKyAweDE2NTY2N2IxKSAr
IChzZWVkIDw8IDUpKSAgICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAgICAgICBzZWVkID0gKChz
ZWVkICsgMHhkM2EyNjQ2YykgXiAoc2VlZCA8PCA5KSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICAg
ICAgICAgICAgc2VlZCA9ICgoc2VlZCArIDB4ZmQ3MDQ2YzUpICsgKHNlZWQgPDwgMykpICAgJiAw
eGZmZmZmZmZmOworICAgICAgICAgICAgICAgIHNlZWQgPSAoKHNlZWQgXiAweGI1NWE0ZjA5KSBe
IChzZWVkID4+PiAxNikpICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAgICAgICByZXR1cm4gKHNl
ZWQgJiAweGZmZmZmZmYpIC8gMHgxMDAwMDAwMDsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0p
KCk7CisKKyAgICAgICAgdGhpcy5fcGxheWVycyA9IFtdOworICAgICAgICB0aGlzLl9wbGF5ZXJz
LnB1c2gobmV3IFBsYXllcigiUGxheWVyIDEiKSk7CisgICAgICAgIHRoaXMuX3BsYXllcnMucHVz
aChuZXcgUGxheWVyKCJQbGF5ZXIgMiIpKTsKKyAgICAgICAgdGhpcy5fcGxheWVycy5wdXNoKG5l
dyBQbGF5ZXIoIlBsYXllciAzIikpOworICAgICAgICB0aGlzLl9wbGF5ZXJzLnB1c2gobmV3IFBs
YXllcigiUGxheWVyIDQiKSk7CisgICAgfQorCisgICAgcnVuT25jZSgpCisgICAgeworICAgICAg
ICBwbGF5SGFuZHModGhpcy5fcGxheWVycyk7CisgICAgfQorCisgICAgdmFsaWRhdGUoKQorICAg
IHsKKyAgICAgICAgaWYgKHRoaXMuX3BsYXllcnMubGVuZ3RoICE9IHBsYXllckV4cGVjdGF0aW9u
cy5sZW5ndGgpCisgICAgICAgICAgICB0aHJvdyAiRXhwZWN0ICIgKyBwbGF5ZXJFeHBlY3RhdGlv
bnMubGVuZ3RoICsgIiwgYnV0IGFjdHVhbGx5IGhhdmUgIiArIHRoaXMuX3BsYXllcnMubGVuZ3Ro
OworCisgICAgICAgIGZvciAobGV0IHBsYXllcklkeCA9IDA7IHBsYXllcklkeCA8IHBsYXllckV4
cGVjdGF0aW9ucy5sZW5ndGg7IHBsYXllcklkeCsrKQorICAgICAgICAgICAgcGxheWVyRXhwZWN0
YXRpb25zW3BsYXllcklkeF0udmFsaWRhdGUodGhpcy5fcGxheWVyc1twbGF5ZXJJZHhdKTsKKyAg
ICB9Cit9CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL1JleEJlbmNoL1VuaWNvZGVQb2tlci9leHBl
Y3RlZC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL1JleEJlbmNoL1VuaWNvZGVQ
b2tlci9leHBlY3RlZC5qcwkobm9uZXhpc3RlbnQpCisrKyBQZXJmb3JtYW5jZVRlc3RzL1JleEJl
bmNoL1VuaWNvZGVQb2tlci9leHBlY3RlZC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0
cmljdCI7CisKK2NsYXNzIFBsYXllckV4cGVjdGF0aW9uCit7CisgICAgY29uc3RydWN0b3Iod2lu
cywgaGFuZFR5cGVDb3VudHMpCisgICAgeworICAgICAgICB0aGlzLl93aW5zID0gd2luczsKKyAg
ICAgICAgdGhpcy5faGFuZFR5cGVDb3VudHMgPSBoYW5kVHlwZUNvdW50czsKKyAgICB9CisKKyAg
ICB2YWxpZGF0ZShwbGF5ZXIpCisgICAgeworICAgICAgICBpZiAocGxheWVyLndpbnMgIT0gdGhp
cy5fd2lucykKKyAgICAgICAgICAgIHRocm93ICJFeHBlY3RlZCAiICsgcGxheWVyLm5hbWUgKyAi
IHRvIGhhdmUgIiArIHRoaXMuX3dpbnMgKyAiLCBidXQgdGhleSBoYXZlICIgKyBwbGF5ZXIud2lu
czsKKworICAgICAgICBsZXQgYWN0dWFsSGFuZFR5cGVDb3VudHMgPSBwbGF5ZXIuaGFuZFR5cGVD
b3VudHM7CisgICAgICAgIGlmICh0aGlzLl9oYW5kVHlwZUNvdW50cy5sZW5ndGggIT0gYWN0dWFs
SGFuZFR5cGVDb3VudHMubGVuZ3RoKQorICAgICAgICAgICAgdGhyb3cgIkV4cGVjdGVkICIgKyBw
bGF5ZXIubmFtZSArICIgdG8gaGF2ZSAiICsgdGhpcy5faGFuZFR5cGVDb3VudHMubGVuZ3RoICsg
IiBoYW5kIHR5cGVzLCBidXQgdGhleSBoYXZlICIgKyBhY3R1YWxIYW5kVHlwZUNvdW50cy5sZW5n
dGg7CisKKyAgICAgICAgZm9yIChsZXQgaGFuZFR5cGVJZHggPSAwOyBoYW5kVHlwZUlkeCA8IHRo
aXMuX2hhbmRUeXBlQ291bnRzLmxlbmd0aDsgaGFuZFR5cGVJZHgrKykgeworICAgICAgICAgICAg
aWYgKHRoaXMuX2hhbmRUeXBlQ291bnRzW2hhbmRUeXBlSWR4XSAhPSBhY3R1YWxIYW5kVHlwZUNv
dW50c1toYW5kVHlwZUlkeF0pIHsKKyAgICAgICAgICAgICAgICB0aHJvdyAiRXhwZWN0ZWQgIiAr
IHBsYXllci5uYW1lICsgIiB0byBoYXZlICIgKyB0aGlzLl9oYW5kVHlwZUNvdW50c1toYW5kVHlw
ZUlkeF0gKyAiICIgKyB0aGlzLl9oYW5kVHlwZXNbaGFuZFR5cGVJZHhdICsgIiBoYW5kcywgYnV0
IHRoZXkgaGF2ZSAiICsgYWN0dWFsSGFuZFR5cGVDb3VudHNbaGFuZFR5cGVJZHhdOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitQbGF5ZXJFeHBlY3RhdGlvbi5faGFuZFR5
cGVzID0gWworICAgICJIaWdoIENhcmRzIiwKKyAgICAiUGFpcnMiLAorICAgICJUd28gUGFpcnMi
LAorICAgICJUaHJlZSBvZiBhIEtpbmRzIiwKKyAgICAiU3RyYWlnaHRzIiwKKyAgICAiRmx1c2hl
cyIsCisgICAgIkZ1bGwgSG91c2VzIiwKKyAgICAiRm91ciBvZiBhIEtpbmRzIiwKKyAgICAiU3Ry
YWlnaHQgRmx1c2hlcyIsCisgICAgIlJveWFsIEZsdXNoZXMiCitdOworICAgIAordmFyIHBsYXll
ckV4cGVjdGF0aW9ucyA9IFtdOworCitwbGF5ZXJFeHBlY3RhdGlvbnMucHVzaChuZXcgUGxheWVy
RXhwZWN0YXRpb24oOTk0NCwgWyAyMDA2NSwgMTY4NjEsIDE4NzUsIDg5OCwgMTYxLCA3NSwgNTgs
IDcsIDAsIDBdKSk7CitwbGF5ZXJFeHBlY3RhdGlvbnMucHVzaChuZXcgUGxheWVyRXhwZWN0YXRp
b24oOTk2OSwgWyAyMDE0MiwgMTY3ODIsIDE4OTEsIDkxOCwgMTMxLCA2MSwgNjAsIDEzLCAyLCAw
XSkpOworcGxheWVyRXhwZWN0YXRpb25zLnB1c2gobmV3IFBsYXllckV4cGVjdGF0aW9uKDEwMDI4
LCBbIDIwMTIzLCAxNjgxNiwgMTkzNiwgODI4LCAxNTIsIDc0LCA1NCwgMTYsIDEsIDBdKSk7Citw
bGF5ZXJFeHBlY3RhdGlvbnMucHVzaChuZXcgUGxheWVyRXhwZWN0YXRpb24oMTAwNjIsIFsgMjAw
ODIsIDE2ODAxLCAxOTMzLCA4NzQsIDE2OSwgNzAsIDYxLCA5LCAxLCAwXSkpOwpJbmRleDogUGVy
Zm9ybWFuY2VUZXN0cy9SZXhCZW5jaC9Vbmljb2RlUG9rZXIvcG9rZXIuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9SZXhCZW5jaC9Vbmljb2RlUG9rZXIvcG9rZXIuanMJKG5vbmV4
aXN0ZW50KQorKysgUGVyZm9ybWFuY2VUZXN0cy9SZXhCZW5jaC9Vbmljb2RlUG9rZXIvcG9rZXIu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworCitjbGFzcyBDYXJkRGVj
aworeworICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHRoaXMubmV3RGVjaygpOwor
ICAgIH0KKworICAgIG5ld0RlY2soKQorICAgIHsKKyAgICAgICAgLy8gTWFrZSBhIHNoYWxsb3cg
Y29weSBvZiBhIG5ldyBkZWNrCisgICAgICAgIHRoaXMuX2NhcmRzID0gQ2FyZERlY2suX25ld0Rl
Y2suc2xpY2UoMCk7CisgICAgfQorCisgICAgc2h1ZmZsZSgpCisgICAgeworICAgICAgICB0aGlz
Lm5ld0RlY2soKTsKKworICAgICAgICBmb3IgKGxldCBpbmRleCA9IDUyOyBpbmRleCAhPT0gMDsp
IHsKKyAgICAgICAgICAgIC8vIFNlbGVjdCBhIHJhbmRvbSBjYXJkCisgICAgICAgICAgICBsZXQg
cmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBpbmRleCk7CisgICAgICAg
ICAgICBpbmRleC0tOworCisgICAgICAgICAgICAvLyBTd2FwIHRoZSBjdXJyZW50IGNhcmQgd2l0
aCB0aGUgcmFuZG9tIGNhcmQKKyAgICAgICAgICAgIGxldCB0ZW1wQ2FyZCA9IHRoaXMuX2NhcmRz
W2luZGV4XTsKKyAgICAgICAgICAgIHRoaXMuX2NhcmRzW2luZGV4XSA9IHRoaXMuX2NhcmRzW3Jh
bmRvbUluZGV4XTsKKyAgICAgICAgICAgIHRoaXMuX2NhcmRzW3JhbmRvbUluZGV4XSA9IHRlbXBD
YXJkOworICAgICAgICB9CisgICAgfQorCisgICAgZGVhbE9uZUNhcmQoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX2NhcmRzLnNoaWZ0KCk7CisgICAgfQorCisgICAgc3RhdGljIGNhcmRS
YW5rKGNhcmQpCisgICAgeworICAgICAgICAvLyBUaGlzIHJldHVybnMgYSBudW1lcmljIHZhbHVl
IGZvciBhIGNhcmQuCisgICAgICAgIC8vIEFjZSBpcyBoaWdoZXN0LgorCisgICAgICAgIGxldCBj
YXJkUmFuayA9IGNhcmQuY29kZVBvaW50QXQoMCkgJiAweGY7CisgICAgICAgIGlmIChjYXJkUmFu
ayA9PSAweDEpIC8vIE1ha2UgQWNlcyBoaWdoZXIgdGhhbiBLaW5ncworICAgICAgICAgICAgY2Fy
ZFJhbmsgPSAweGY7CisKKyAgICAgICAgcmV0dXJuIGNhcmRSYW5rCisgICAgfQorCisgICAgc3Rh
dGljIGNhcmROYW1lKGNhcmQpCisgICAgeyAgICAgIAorICAgICAgICBpZiAodHlwZW9mKGNhcmQp
ID09ICJzdHJpbmciKQorICAgICAgICAgICAgY2FyZCA9IGNhcmQuY29kZVBvaW50QXQoMCk7Cisg
ICAgICAgIHJldHVybiB0aGlzLl9yYW5rTmFtZXNbY2FyZCAmIDB4Zl07CisgICAgfQorfQorCitD
YXJkRGVjay5fcmFua05hbWVzID0gWworICAgICIiLCAiQWNlIiwgIjIiLCAiMyIsICI0IiwgIjUi
LCAiNiIsICI3IiwgIjgiLCAiOSIsICIxMCIsICJKYWNrIiwgIiIsICJRdWVlbiIsICJLaW5nIgor
XTsKKworQ2FyZERlY2suX25ld0RlY2sgPSBbCisgICAgLy8gU3BhZGVzCisgICAgIlx1ezFmMGEx
fSIsICJcdXsxZjBhMn0iLCAgIlx1ezFmMGEzfSIsICAiXHV7MWYwYTR9IiwgICJcdXsxZjBhNX0i
LAorICAgICJcdXsxZjBhNn0iLCAiXHV7MWYwYTd9IiwgICJcdXsxZjBhOH0iLCAgIlx1ezFmMGE5
fSIsICAiXHV7MWYwYWF9IiwKKyAgICAiXHV7MWYwYWJ9IiwgIlx1ezFmMGFkfSIsICAiXHV7MWYw
YWV9IiwKKyAgICAvLyBIZWFydHMKKyAgICAiXHV7MWYwYjF9IiwgIlx1ezFmMGIyfSIsICAiXHV7
MWYwYjN9IiwgICJcdXsxZjBiNH0iLCAgIlx1ezFmMGI1fSIsCisgICAgIlx1ezFmMGI2fSIsICJc
dXsxZjBiN30iLCAgIlx1ezFmMGI4fSIsICAiXHV7MWYwYjl9IiwgICJcdXsxZjBiYX0iLAorICAg
ICJcdXsxZjBiYn0iLCAiXHV7MWYwYmR9IiwgICJcdXsxZjBiZX0iLAorICAgIC8vIENsdWJzCisg
ICAgIlx1ezFmMGQxfSIsICJcdXsxZjBkMn0iLCAgIlx1ezFmMGQzfSIsICAiXHV7MWYwZDR9Iiwg
ICJcdXsxZjBkNX0iLAorICAgICJcdXsxZjBkNn0iLCAiXHV7MWYwZDd9IiwgICJcdXsxZjBkOH0i
LCAgIlx1ezFmMGQ5fSIsICAiXHV7MWYwZGF9IiwKKyAgICAiXHV7MWYwZGJ9IiwgIlx1ezFmMGRk
fSIsICAiXHV7MWYwZGV9IiwKKyAgICAvLyBEaWFtb25kcworICAgICJcdXsxZjBjMX0iLCAiXHV7
MWYwYzJ9IiwgICJcdXsxZjBjM30iLCAgIlx1ezFmMGM0fSIsICAiXHV7MWYwYzV9IiwKKyAgICAi
XHV7MWYwYzZ9IiwgIlx1ezFmMGM3fSIsICAiXHV7MWYwYzh9IiwgICJcdXsxZjBjOX0iLCAgIlx1
ezFmMGNhfSIsCisgICAgIlx1ezFmMGNifSIsICJcdXsxZjBjZH0iLCAgIlx1ezFmMGNlfSIKK107
CisKK2NsYXNzIEhhbmQKK3sKKyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICB0aGlz
LmNsZWFyKCk7CisgICAgfQorCisgICAgY2xlYXIoKQorICAgIHsKKyAgICAgICAgdGhpcy5fY2Fy
ZHMgPSBbXTsKKyAgICAgICAgdGhpcy5fcmFuayA9IDA7CisgICAgfQorCisgICAgdGFrZUNhcmQo
Y2FyZCkKKyAgICB7CisgICAgICAgIHRoaXMuX2NhcmRzLnB1c2goY2FyZCk7CisgICAgfQorCisg
ICAgc2NvcmUoKQorICAgIHsKKyAgICAgICAgLy8gU29ydCBoaWdoZXN0IHJhbmsgdG8gbG93ZXN0
CisgICAgICAgIHRoaXMuX2NhcmRzLnNvcnQoZnVuY3Rpb24oYSwgYikgeworICAgICAgICAgICAg
cmV0dXJuIENhcmREZWNrLmNhcmRSYW5rKGIpIC0gQ2FyZERlY2suY2FyZFJhbmsoYSk7CisgICAg
ICAgIH0pOworCisgICAgICAgIGxldCBoYW5kU3RyaW5nID0gdGhpcy5fY2FyZHMuam9pbigiIik7
CisKKyAgICAgICAgbGV0IGZsdXNoUmVzdWx0ID0gaGFuZFN0cmluZy5tYXRjaChIYW5kLkZsdXNo
UmVnRXhwKTsKKyAgICAgICAgbGV0IHN0cmFpZ2h0UmVzdWx0ID0gaGFuZFN0cmluZy5tYXRjaChI
YW5kLlN0cmFpZ2h0UmVnRXhwKTsKKyAgICAgICAgbGV0IG9mQUtpbmRSZXN1bHQgPSBoYW5kU3Ry
aW5nLm1hdGNoKEhhbmQuT2ZBS2luZFJlZ0V4cCk7CisKKyAgICAgICAgaWYgKGZsdXNoUmVzdWx0
KSB7CisgICAgICAgICAgICBpZiAoc3RyYWlnaHRSZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoc3RyYWlnaHRSZXN1bHRbMV0pCisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmsgPSBI
YW5kLlJveWFsRmx1c2g7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9yYW5rID0gSGFuZC5TdHJhaWdodEZsdXNoCisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICB0aGlzLl9yYW5rID0gSGFuZC5GbHVzaDsKKworICAgICAgICAgICAgdGhp
cy5fcmFuayB8PSBDYXJkRGVjay5jYXJkUmFuayh0aGlzLl9jYXJkc1swXSkgPDwgMTYgfCBDYXJk
RGVjay5jYXJkUmFuayh0aGlzLl9jYXJkc1sxXSkgPDwgMTI7CisgICAgICAgIH0gZWxzZSBpZiAo
c3RyYWlnaHRSZXN1bHQpCisgICAgICAgICAgICB0aGlzLl9yYW5rID0gSGFuZC5TdHJhaWdodCB8
IENhcmREZWNrLmNhcmRSYW5rKHRoaXMuX2NhcmRzWzBdKSA8PCAxNiB8IENhcmREZWNrLmNhcmRS
YW5rKHRoaXMuX2NhcmRzWzFdKSA8PCAxMjsKKyAgICAgICAgZWxzZSBpZiAob2ZBS2luZFJlc3Vs
dCkgeworICAgICAgICAgICAgLy8gV2hlbiBjb21wYXJpbmcgbGVuZ3RocywgYSBtYXRjaGVkIHVu
aWNvZGUgY2hhcmFjdGVyIGhhcyBhIGxlbmd0aCBvZiAyLgorICAgICAgICAgICAgLy8gVGhlcmVm
b3JlIGV4cGVjdGVkIGxlbmd0aHMgYXJlIGRvdWJsZWQsIGUuZyBhIHBhaXIgd2lsbCBoYXZlIGEg
bWF0Y2ggbGVuZ3RoIG9mIDQuCisgICAgICAgICAgICBpZiAob2ZBS2luZFJlc3VsdFswXS5sZW5n
dGggPT0gOCkKKyAgICAgICAgICAgICAgICB0aGlzLl9yYW5rID0gSGFuZC5Gb3VyT2ZBS2luZCB8
IENhcmREZWNrLmNhcmRSYW5rKHRoaXMuX2NhcmRzWzBdKTsKKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIC8vIEZvdW5kIHBhaXIgb3IgdGhyZWUgb2YgYSBraW5kLiAgQ2hlY2sg
Zm9yIHR3byBwYWlyIG9yIGZ1bGwgaG91c2UuCisgICAgICAgICAgICAgICAgbGV0IGZpcnN0T2ZB
S2luZCA9IG9mQUtpbmRSZXN1bHRbMF07CisgICAgICAgICAgICAgICAgbGV0IHJlbWFpbmluZ0Nh
cmRzSW5kZXggPSBoYW5kU3RyaW5nLmluZGV4T2YoZmlyc3RPZkFLaW5kKSArIGZpcnN0T2ZBS2lu
ZC5sZW5ndGg7CisgICAgICAgICAgICAgICAgbGV0IHNlY29uZE9mQUtpbmRSZXN1bHQ7CisgICAg
ICAgICAgICAgICAgaWYgKHJlbWFpbmluZ0NhcmRzSW5kZXggPD0gNgorICAgICAgICAgICAgICAg
ICAgICAmJiAoc2Vjb25kT2ZBS2luZFJlc3VsdCA9IGhhbmRTdHJpbmcuc2xpY2UocmVtYWluaW5n
Q2FyZHNJbmRleCkubWF0Y2goSGFuZC5PZkFLaW5kUmVnRXhwKSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKChmaXJzdE9mQUtpbmQubGVuZ3RoID09IDYgJiYgc2Vjb25kT2ZBS2luZFJlc3Vs
dFswXS5sZW5ndGggPT0gNCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IChmaXJzdE9mQUtp
bmQubGVuZ3RoID09IDQgJiYgc2Vjb25kT2ZBS2luZFJlc3VsdFswXS5sZW5ndGggPT0gNikpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aHJlZU9mQUtpbmRDYXJkUmFuazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGxldCB0d29PZkFLaW5kQ2FyZFJhbms7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZmlyc3RPZkFLaW5kLmxlbmd0aCA9PSA2KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhyZWVPZkFLaW5kQ2FyZFJhbmsgPSBDYXJkRGVjay5jYXJkUmFuayhm
aXJzdE9mQUtpbmQuc2xpY2UoMCwyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHdv
T2ZBS2luZENhcmRSYW5rID0gQ2FyZERlY2suY2FyZFJhbmsoc2Vjb25kT2ZBS2luZFJlc3VsdFsw
XS5zbGljZSgwLDIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhyZWVPZkFLaW5kQ2FyZFJhbmsgPSBDYXJkRGVjay5jYXJk
UmFuayhzZWNvbmRPZkFLaW5kUmVzdWx0WzBdLnNsaWNlKDAsMikpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHR3b09mQUtpbmRDYXJkUmFuayA9IENhcmREZWNrLmNhcmRSYW5rKGZpcnN0
T2ZBS2luZC5zbGljZSgwLDIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuX3JhbmsgPSBIYW5kLkZ1bGxIb3VzZSB8IHRocmVlT2ZBS2lu
ZENhcmRSYW5rIDw8IDE2IHwgdGhyZWVPZkFLaW5kQ2FyZFJhbmsgPCAxMiB8IHRocmVlT2ZBS2lu
ZENhcmRSYW5rIDw8IDggfCB0d29PZkFLaW5kQ2FyZFJhbmsgPDwgNCB8IHR3b09mQUtpbmRDYXJk
UmFuazsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaXJzdE9mQUtpbmQubGVuZ3Ro
ID09IDQgJiYgc2Vjb25kT2ZBS2luZFJlc3VsdFswXS5sZW5ndGggPT0gNCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbGV0IGZpcnN0UGFpckNhcmRSYW5rID0gQ2FyZERlY2suY2FyZFJhbmso
Zmlyc3RPZkFLaW5kLnNsaWNlKDAsMikpOworICAgICAgICAgICAgICAgICAgICAgICAgbGV0IFNl
Y29uZFBhaXJDYXJkUmFuayA9IENhcmREZWNrLmNhcmRSYW5rKHNlY29uZE9mQUtpbmRSZXN1bHRb
MF0uc2xpY2UoMCwyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3RoZXJDYXJkUmFu
azsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIER1ZSB0byBzb3J0aW5nLCB0aGUgb3RoZXIg
Y2FyZCBpcyBhdCBpbmRleCAwLCA0IG9yIDgKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChm
aXJzdE9mQUtpbmQuY29kZVBvaW50QXQoMCkgPT0gaGFuZFN0cmluZy5jb2RlUG9pbnRBdCgwKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWNvbmRPZkFLaW5kUmVzdWx0WzBd
LmNvZGVQb2ludEF0KDApID09IGhhbmRTdHJpbmcuY29kZVBvaW50QXQoNCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG90aGVyQ2FyZFJhbmsgPSBDYXJkRGVjay5jYXJkUmFuayho
YW5kU3RyaW5nLnNsaWNlKDgsMTApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyQ2FyZFJhbmsgPSBDYXJkRGVj
ay5jYXJkUmFuayhoYW5kU3RyaW5nLnNsaWNlKDQsNikpOworICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJDYXJkUmFuayA9IENh
cmREZWNrLmNhcmRSYW5rKGhhbmRTdHJpbmcuc2xpY2UoMCwyKSk7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMuX3JhbmsgPSBIYW5kLlR3b1BhaXIgfCBmaXJzdFBhaXJDYXJkUmFuayA8
PCAxNiB8IGZpcnN0UGFpckNhcmRSYW5rIDw8IDEyIHwgU2Vjb25kUGFpckNhcmRSYW5rIDw8IDgg
fCBTZWNvbmRQYWlyQ2FyZFJhbmsgPDwgNCB8IG90aGVyQ2FyZFJhbms7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBs
ZXQgb2ZBS2luZENhcmRSYW5rID0gQ2FyZERlY2suY2FyZFJhbmsoZmlyc3RPZkFLaW5kLnNsaWNl
KDAsMikpOworICAgICAgICAgICAgICAgICAgICBsZXQgb3RoZXJDYXJkc1JhbmsgPSAwOworICAg
ICAgICAgICAgICAgICAgICBmb3IgKGxldCBjYXJkIG9mIHRoaXMuX2NhcmRzKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBsZXQgY2FyZFJhbmsgPSBDYXJkRGVjay5jYXJkUmFuayhjYXJkKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXJkUmFuayAhPSBvZkFLaW5kQ2FyZFJhbmsp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJDYXJkc1JhbmsgPSAob3RoZXJDYXJk
c1JhbmsgPDwgNCkgfCBjYXJkUmFuazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIGlmIChmaXJzdE9mQUtpbmQubGVuZ3RoID09IDYpCisgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9yYW5rID0gSGFuZC5UaHJlZU9mQUtpbmQgfCBvZkFLaW5kQ2FyZFJh
bmsgPDwgMTYgfCBvZkFLaW5kQ2FyZFJhbmsgPDwgMTIgfCBvZkFLaW5kQ2FyZFJhbmsgPDwgOCB8
IG90aGVyQ2FyZHNSYW5rOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9yYW5rID0gSGFuZC5QYWlyIHwgb2ZBS2luZENhcmRSYW5rIDw8IDE2
IHwgb2ZBS2luZENhcmRSYW5rIDw8IDEyIHwgb3RoZXJDYXJkc1Jhbms7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5f
cmFuayA9IDA7CisgICAgICAgICAgICBmb3IgKGxldCBjYXJkIG9mIHRoaXMuX2NhcmRzKSB7Cisg
ICAgICAgICAgICAgICAgbGV0IGNhcmRSYW5rID0gQ2FyZERlY2suY2FyZFJhbmsoY2FyZCk7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fcmFuayA9ICh0aGlzLl9yYW5rIDw8IDQpIHwgY2FyZFJhbms7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBnZXQgcmFuaygpCisgICAg
eworICAgICAgICByZXR1cm4gdGhpcy5fcmFuazsKKyAgICB9CisKKyAgICB0b1N0cmluZygpCisg
ICAgeworICAgICAgICByZXR1cm4gdGhpcy5fY2FyZHMuam9pbigiIik7CisgICAgfQorfQorCitI
YW5kLkZsdXNoUmVnRXhwID0gbmV3IFJlZ0V4cCgiKFtcdXsxZjBhMX0tXHV7MWYwYWV9XXs1fSl8
KFtcdXsxZjBiMX0tXHV7MWYwYmV9XXs1fSl8KFtcdXsxZjBjMX0tXHV7MWYwY2V9XXs1fSl8KFtc
dXsxZjBkMX0tXHV7MWYwZGV9XXs1fSkiLCAidSIpOworCitIYW5kLlN0cmFpZ2h0UmVnRXhwID0g
bmV3IFJlZ0V4cCgiKFtcdXsxZjBhMX1cdXsxZjBiMX1cdXsxZjBkMX1cdXsxZjBjMX1dW1x1ezFm
MGFlfVx1ezFmMGJlfVx1ezFmMGRlfVx1ezFmMGNlfV1bXHV7MWYwYWR9XHV7MWYwYmR9XHV7MWYw
ZGR9XHV7MWYwY2R9XVtcdXsxZjBhYn1cdXsxZjBiYn1cdXsxZjBkYn1cdXsxZjBjYn1dW1x1ezFm
MGFhfVx1ezFmMGJhfVx1ezFmMGRhfVx1ezFmMGNhfV0pfFtcdXsxZjBhZX1cdXsxZjBiZX1cdXsx
ZjBkZX1cdXsxZjBjZX1dW1x1ezFmMGFkfVx1ezFmMGJkfVx1ezFmMGRkfVx1ezFmMGNkfV1bXHV7
MWYwYWJ9XHV7MWYwYmJ9XHV7MWYwZGJ9XHV7MWYwY2J9XVtcdXsxZjBhYX1cdXsxZjBiYX1cdXsx
ZjBkYX1cdXsxZjBjYX1dW1x1ezFmMGE5fVx1ezFmMGI5fVx1ezFmMGQ5fVx1ezFmMGM5fV18W1x1
ezFmMGFkfVx1ezFmMGJkfVx1ezFmMGRkfVx1ezFmMGNkfV1bXHV7MWYwYWJ9XHV7MWYwYmJ9XHV7
MWYwZGJ9XHV7MWYwY2J9XVtcdXsxZjBhYX1cdXsxZjBiYX1cdXsxZjBkYX1cdXsxZjBjYX1dW1x1
ezFmMGE5fVx1ezFmMGI5fVx1ezFmMGQ5fVx1ezFmMGM5fV1bXHV7MWYwYTh9XHV7MWYwYjh9XHV7
MWYwZDh9XHV7MWYwYzh9XXxbXHV7MWYwYWJ9XHV7MWYwYmJ9XHV7MWYwZGJ9XHV7MWYwY2J9XVtc
dXsxZjBhYX1cdXsxZjBiYX1cdXsxZjBkYX1cdXsxZjBjYX1dW1x1ezFmMGE5fVx1ezFmMGI5fVx1
ezFmMGQ5fVx1ezFmMGM5fV1bXHV7MWYwYTh9XHV7MWYwYjh9XHV7MWYwZDh9XHV7MWYwYzh9XVtc
dXsxZjBhN31cdXsxZjBiN31cdXsxZjBkN31cdXsxZjBjN31dfFtcdXsxZjBhYX1cdXsxZjBiYX1c
dXsxZjBkYX1cdXsxZjBjYX1dW1x1ezFmMGE5fVx1ezFmMGI5fVx1ezFmMGQ5fVx1ezFmMGM5fV1b
XHV7MWYwYTh9XHV7MWYwYjh9XHV7MWYwZDh9XHV7MWYwYzh9XVtcdXsxZjBhN31cdXsxZjBiN31c
dXsxZjBkN31cdXsxZjBjN31dW1x1ezFmMGE2fVx1ezFmMGI2fVx1ezFmMGQ2fVx1ezFmMGM2fV18
W1x1ezFmMGE5fVx1ezFmMGI5fVx1ezFmMGQ5fVx1ezFmMGM5fV1bXHV7MWYwYTh9XHV7MWYwYjh9
XHV7MWYwZDh9XHV7MWYwYzh9XVtcdXsxZjBhN31cdXsxZjBiN31cdXsxZjBkN31cdXsxZjBjN31d
W1x1ezFmMGE2fVx1ezFmMGI2fVx1ezFmMGQ2fVx1ezFmMGM2fV1bXHV7MWYwYTV9XHV7MWYwYjV9
XHV7MWYwZDV9XHV7MWYwYzV9XXxbXHV7MWYwYTh9XHV7MWYwYjh9XHV7MWYwZDh9XHV7MWYwYzh9
XVtcdXsxZjBhN31cdXsxZjBiN31cdXsxZjBkN31cdXsxZjBjN31dW1x1ezFmMGE2fVx1ezFmMGI2
fVx1ezFmMGQ2fVx1ezFmMGM2fV1bXHV7MWYwYTV9XHV7MWYwYjV9XHV7MWYwZDV9XHV7MWYwYzV9
XVtcdXsxZjBhNH1cdXsxZjBiNH1cdXsxZjBkNH1cdXsxZjBjNH1dfFtcdXsxZjBhN31cdXsxZjBi
N31cdXsxZjBkN31cdXsxZjBjN31dW1x1ezFmMGE2fVx1ezFmMGI2fVx1ezFmMGQ2fVx1ezFmMGM2
fV1bXHV7MWYwYTV9XHV7MWYwYjV9XHV7MWYwZDV9XHV7MWYwYzV9XVtcdXsxZjBhNH1cdXsxZjBi
NH1cdXsxZjBkNH1cdXsxZjBjNH1dW1x1ezFmMGEzfVx1ezFmMGIzfVx1ezFmMGQzfVx1ezFmMGMz
fV18W1x1ezFmMGE2fVx1ezFmMGI2fVx1ezFmMGQ2fVx1ezFmMGM2fV1bXHV7MWYwYTV9XHV7MWYw
YjV9XHV7MWYwZDV9XHV7MWYwYzV9XVtcdXsxZjBhNH1cdXsxZjBiNH1cdXsxZjBkNH1cdXsxZjBj
NH1dW1x1ezFmMGEzfVx1ezFmMGIzfVx1ezFmMGQzfVx1ezFmMGMzfV1bXHV7MWYwYTJ9XHV7MWYw
YjJ9XHV7MWYwZDJ9XHV7MWYwYzJ9XXxbXHV7MWYwYTF9XHV7MWYwYjF9XHV7MWYwZDF9XHV7MWYw
YzF9XVtcdXsxZjBhNX1cdXsxZjBiNX1cdXsxZjBkNX1cdXsxZjBjNX1dW1x1ezFmMGE0fVx1ezFm
MGI0fVx1ezFmMGQ0fVx1ezFmMGM0fV1bXHV7MWYwYTN9XHV7MWYwYjN9XHV7MWYwZDN9XHV7MWYw
YzN9XVtcdXsxZjBhMn1cdXsxZjBiMn1cdXsxZjBkMn1cdXsxZjBjMn1dIiwgInUiKTsKKworSGFu
ZC5PZkFLaW5kUmVnRXhwID0gbmV3IFJlZ0V4cCgiKD86W1x1ezFmMGExfVx1ezFmMGIxfVx1ezFm
MGQxfVx1ezFmMGMxfV17Miw0fSl8KD86W1x1ezFmMGFlfVx1ezFmMGJlfVx1ezFmMGRlfVx1ezFm
MGNlfV17Miw0fSl8KD86W1x1ezFmMGFkfVx1ezFmMGJkfVx1ezFmMGRkfVx1ezFmMGNkfV17Miw0
fSl8KD86W1x1ezFmMGFifVx1ezFmMGJifVx1ezFmMGRifVx1ezFmMGNifV17Miw0fSl8KD86W1x1
ezFmMGFhfVx1ezFmMGJhfVx1ezFmMGRhfVx1ezFmMGNhfV17Miw0fSl8KD86W1x1ezFmMGE5fVx1
ezFmMGI5fVx1ezFmMGQ5fVx1ezFmMGM5fV17Miw0fSl8KD86W1x1ezFmMGE4fVx1ezFmMGI4fVx1
ezFmMGQ4fVx1ezFmMGM4fV17Miw0fSl8KD86W1x1ezFmMGE3fVx1ezFmMGI3fVx1ezFmMGQ3fVx1
ezFmMGM3fV17Miw0fSl8KD86W1x1ezFmMGE2fVx1ezFmMGI2fVx1ezFmMGQ2fVx1ezFmMGM2fV17
Miw0fSl8KD86W1x1ezFmMGE1fVx1ezFmMGI1fVx1ezFmMGQ1fVx1ezFmMGM1fV17Miw0fSl8KD86
W1x1ezFmMGE0fVx1ezFmMGI0fVx1ezFmMGQ0fVx1ezFmMGM0fV17Miw0fSl8KD86W1x1ezFmMGEz
fVx1ezFmMGIzfVx1ezFmMGQzfVx1ezFmMGMzfV17Miw0fSl8KD86W1x1ezFmMGEyfVx1ezFmMGIy
fVx1ezFmMGQyfVx1ezFmMGMyfV17Miw0fSkiLCAidSIpOworCitIYW5kLlJveWFsRmx1c2ggPSAw
eDkwMDAwMDsKK0hhbmQuU3RyYWlnaHRGbHVzaCA9IDB4ODAwMDAwOworSGFuZC5Gb3VyT2ZBS2lu
ZCA9IDB4NzAwMDAwOworSGFuZC5GdWxsSG91c2UgPSAweDYwMDAwMDsKK0hhbmQuRmx1c2ggPSAw
eDUwMDAwMDsKK0hhbmQuU3RyYWlnaHQgPSAweDQwMDAwMDsKK0hhbmQuVGhyZWVPZkFLaW5kID0g
MHgzMDAwMDA7CitIYW5kLlR3b1BhaXIgPSAweDIwMDAwMDsKK0hhbmQuUGFpciA9IDB4MTAwMDAw
OworCitjbGFzcyBQbGF5ZXIgZXh0ZW5kcyBIYW5kCit7CisgICAgY29uc3RydWN0b3IobmFtZSkK
KyAgICB7CisgICAgICAgIHN1cGVyKCk7CisgICAgICAgIHRoaXMuX25hbWUgPSBuYW1lOworICAg
ICAgICB0aGlzLl93aW5zID0gMDsKKyAgICAgICAgdGhpcy5faGFuZFR5cGVDb3VudHMgPSBbMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07CisgICAgfQorCisgICAgc2NvcmVIYW5kKCkKKyAg
ICB7CisgICAgICAgIHRoaXMuc2NvcmUoKTsKKyAgICAgICAgbGV0IGhhbmRUeXBlID0gdGhpcy5y
YW5rID4+IDIwOworICAgICAgICB0aGlzLl9oYW5kVHlwZUNvdW50c1toYW5kVHlwZV0rKzsKKyAg
ICB9CisKKyAgICB3b25IYW5kKCkKKyAgICB7CisgICAgICAgIHRoaXMuX3dpbnMrKworICAgIH0K
KworICAgIGdldCBuYW1lKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9uYW1lOworICAg
IH0KKworICAgIGdldCBoYW5kKCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdXBlci50b1N0cmlu
ZygpOworICAgIH0KKworICAgIGdldCB3aW5zKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlz
Ll93aW5zOworICAgIH0KKworICAgIGdldCBoYW5kVHlwZUNvdW50cygpCisgICAgeworICAgICAg
ICByZXR1cm4gdGhpcy5faGFuZFR5cGVDb3VudHM7CisgICAgfQorfQorCitmdW5jdGlvbiBwbGF5
SGFuZHMocGxheWVycykKK3sKKyAgICBsZXQgY2FyZERlY2sgPSBuZXcgQ2FyZERlY2soKTsKKyAg
ICBsZXQgaGFuZHNQbGF5ZWQgPSAwOworICAgIGxldCBoaWdoZXN0UmFuayA9IDA7CisKKyAgICBk
byB7CisgICAgICAgIGNhcmREZWNrLnNodWZmbGUoKTsKKworICAgICAgICBmb3IgKGxldCBwbGF5
ZXIgb2YgcGxheWVycykKKyAgICAgICAgICAgIHBsYXllci5jbGVhcigpOworCisgICAgICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7CisgICAgICAgICAgICBmb3IgKGxldCBwbGF5ZXIg
b2YgcGxheWVycykKKyAgICAgICAgICAgICAgICBwbGF5ZXIudGFrZUNhcmQoY2FyZERlY2suZGVh
bE9uZUNhcmQoKSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGxldCBwbGF5ZXIgb2YgcGxh
eWVycykKKyAgICAgICAgICAgIHBsYXllci5zY29yZUhhbmQoKTsKKworICAgICAgICBoYW5kc1Bs
YXllZCsrOworCisgICAgICAgIGhpZ2hlc3RSYW5rID0gMDsKKworICAgICAgICBmb3IgKGxldCBw
bGF5ZXIgb2YgcGxheWVycykgeworICAgICAgICAgICAgaWYgKHBsYXllci5yYW5rID4gaGlnaGVz
dFJhbmspCisgICAgICAgICAgICAgICAgaGlnaGVzdFJhbmsgPSBwbGF5ZXIucmFuazsKKyAgICAg
ICAgfQorCisgICAgICAgIGZvciAobGV0IHBsYXllciBvZiBwbGF5ZXJzKSB7CisgICAgICAgICAg
ICAvLyBXZSBjb3VudCB0aWVzIGFzIHdpbnMgZm9yIGVhY2ggcGxheWVyLgorICAgICAgICAgICAg
aWYgKHBsYXllci5yYW5rID09IGhpZ2hlc3RSYW5rKQorICAgICAgICAgICAgICAgIHBsYXllci53
b25IYW5kKCk7CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChoYW5kc1BsYXllZCA8IDIwMDApOwor
fQo=
</data>
<flag name="review"
          id="338830"
          type_id="1"
          status="+"
          setter="jfbastien"
    />
          </attachment>
      

    </bug>

</bugzilla>