<?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>176235</bug_id>
          
          <creation_ts>2017-09-01 11:09:40 -0700</creation_ts>
          <short_desc>WSL NullType should be a special type variable so it can unify with any pointer type</short_desc>
          <delta_ts>2018-10-13 19:55:35 -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>WebGPU</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>176199</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mjs</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1344477</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-01 11:09:40 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344865</commentid>
    <comment_count>1</comment_count>
      <attachid>319740</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-02 14:08:49 -0700</bug_when>
    <thetext>Created attachment 319740
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344866</commentid>
    <comment_count>2</comment_count>
      <attachid>319740</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-02 14:10:36 -0700</bug_when>
    <thetext>Comment on attachment 319740
the patch

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

&gt; Tools/WebGPUShadingLanguageRI/Test.js:628
&gt; +gc();

I&apos;ll remove this.  I put it in there out of curiosity.  Turns out this program allocates about 10MB, so it doesn&apos;t get to GC yet even with all these tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344867</commentid>
    <comment_count>3</comment_count>
      <attachid>319741</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-02 14:29:41 -0700</bug_when>
    <thetext>Created attachment 319741
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344983</commentid>
    <comment_count>4</comment_count>
      <attachid>319785</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-03 09:42:23 -0700</bug_when>
    <thetext>Created attachment 319785
the patch

Added facilities for NullType to figure out what type it got unified with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344988</commentid>
    <comment_count>5</comment_count>
      <attachid>319785</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-09-03 10:25:19 -0700</bug_when>
    <thetext>Comment on attachment 319785
the patch

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

&gt; Tools/WebGPUShadingLanguageRI/Test.html:3
&gt; +&lt;title&gt;WSL Test&lt;/title&gt;

So we&apos;re forbidding load() inside any of these js files?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344993</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-03 10:43:40 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/221549/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353607</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:41:52 -0700</bug_when>
    <thetext>&lt;rdar://problem/34693782&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1469005</commentid>
    <comment_count>8</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-10-13 19:55:35 -0700</bug_when>
    <thetext>Migrated to https://github.com/gpuweb/WHLSL/issues/199</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319740</attachid>
            <date>2017-09-02 14:08:49 -0700</date>
            <delta_ts>2017-09-02 14:29:41 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>26168</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMTUzOSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDg1IEBACisyMDE3LTA5LTAyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgV1NMIE51bGxUeXBlIHNob3VsZCBiZSBhIHNwZWNpYWwgdHlwZSB2YXJpYWJsZSBz
byBpdCBjYW4gdW5pZnkgd2l0aCBhbnkgcG9pbnRlciB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYyMzUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIE51bGwgaXMganVzdCBhIHR5cGUg
dmFyaWFibGUgdGhhdCBwbGF5cyBieSB3ZWlyZCBydWxlczoKKyAgICAgICAgCisgICAgICAgIC0g
T3RoZXIgdHlwZSB2YXJpYWJsZXMgZG9uJ3QgcmVjb2duaXplIGl0LCBzbyBpZiBpdCdzIHVuaWZp
ZWQgd2l0aCBULCBpdCBmYWlscy4KKyAgICAgICAgLSBJdCBiZWhhdmVzIGxpa2UgYSB0eXBlIHZh
cmlhYmxlIGZvciBwb2ludGVyIGFuZCBhcnJheSByZWZlcmVuY2UgdHlwZXMuCisgICAgICAgIC0g
SXQgYXJpc2VzIG9ubHkgaW4gYXJndW1lbnQgKFJIUykgcG9zaXRpb24uCisgICAgICAgIAorICAg
ICAgICBJIHJlZmFjdG9yZWQgc29tZSBvZiB0aGUgdHlwZSBzeXN0ZW0gY29kZSB0byBhbGxvdyBm
b3IgdGhlIHBvc3NpYmlsaXR5IG9mIHR5cGUgdmFyaWFibGVzIGJlaW5nCisgICAgICAgIHVuaWZp
ZWQgZHVyaW5nIGVxdWFscygpIHRlc3RzLiBJdCB0dXJucyBvdXQgdGhhdCB3ZSB3ZXJlIHBsYXlp
bmcgZmFzdCBhbmQgbG9vc2UgaGVyZTsgSSBuZWVkZWQKKyAgICAgICAgdG8gYmVlZiB1cCBVbmlm
aWNhdGlvbkNvbnRleHQucHJvdG90eXBlLnZlcmlmeS4gSSBhZGRlZCB0ZXN0cyBmb3IgdGhpcy4K
KyAgICAgICAgCisgICAgICAgIE51bGxMaXRlcmFsIHRoZW4ganVzdCBpbnN0YW50aWF0ZXMgaXRz
IG93biBOdWxsVHlwZSwgd2hpY2ggaXMgd2hhdCBDaGVja2VyIHVzZXMgYXMgdGhlIHR5cGUgb2YK
KyAgICAgICAgdGhlIE51bGxMaXRlcmFsLiBFdmVyeXRoaW5nIGVsc2UganVzdCB3b3Jrcy4KKyAg
ICAgICAgCisgICAgICAgIFRoaXMgYWRkcyBhIGJ1bmNoIG9mIHRlc3RzIHRvIG1ha2Ugc3VyZSB3
ZSBnZW5lcmF0ZSB0eXBlIGVycm9ycyBpbiB2YXJpb3VzIHdlaXJkIGNhc2VzIHdoaWxlCisgICAg
ICAgIGFsc28gYWNjZXB0aW5nIGEgbnVtYmVyIG9mIHNhZmUgY2FzZXMuCisKKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanM6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvQXJyYXlSZWZUeXBlLmpzOgorICAgICAgICAoQXJyYXlSZWZUeXBlLnByb3RvdHlw
ZS5nZXQgaXNBcnJheVJlZik6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hl
Y2tlci5qczoKKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0UHJvdG9jb2xEZWNsLnNl
dCB0aHJvdyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ29uc3RleHByVHlw
ZVBhcmFtZXRlci5qczoKKyAgICAgICAgKENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIucHJvdG90eXBl
LnR5cGVWYXJpYWJsZVVuaWZ5KToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9F
dmFsdWF0b3IuanM6CisgICAgICAgIChFdmFsdWF0b3IucHJvdG90eXBlLnZpc2l0RGVyZWZlcmVu
Y2VFeHByZXNzaW9uKToKKyAgICAgICAgKEV2YWx1YXRvci5wcm90b3R5cGUudmlzaXROdWxsTGl0
ZXJhbCk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qczoKKyAgICAg
ICAgKEZ1bmMucHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKEZ1bmMpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hdGl2ZUZ1bmMuanM6CisgICAgICAgIChOYXRpdmVG
dW5jLnByb3RvdHlwZS50b0RlY2xTdHJpbmcpOgorICAgICAgICAoTmF0aXZlRnVuYyk6CisgICAg
ICAgIChOYXRpdmVGdW5jLnByb3RvdHlwZS50b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgICog
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuY0luc3RhbmNlLmpzOgorICAgICAgICAo
TmF0aXZlRnVuY0luc3RhbmNlLnByb3RvdHlwZS50b0RlY2xTdHJpbmcpOgorICAgICAgICAoTmF0
aXZlRnVuY0luc3RhbmNlKToKKyAgICAgICAgKE5hdGl2ZUZ1bmNJbnN0YW5jZS5wcm90b3R5cGUu
dG9TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05v
ZGUuanM6CisgICAgICAgIChOb2RlLnVuaWZ5KToKKyAgICAgICAgKE5vZGUucHJvdG90eXBlLl90
eXBlVmFyaWFibGVVbmlmeUltcGwpOgorICAgICAgICAoTm9kZS5wcm90b3R5cGUuZXF1YWxzKToK
KyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OdWxsTGl0ZXJhbC5qczogQWRkZWQu
CisgICAgICAgIChOdWxsTGl0ZXJhbCk6CisgICAgICAgIChOdWxsTGl0ZXJhbC5wcm90b3R5cGUu
dG9TdHJpbmcpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL051bGxUeXBlLmpz
OgorICAgICAgICAoTnVsbFR5cGUpOgorICAgICAgICAoTnVsbFR5cGUucHJvdG90eXBlLmdldCBp
c1ByaW1pdGl2ZSk6CisgICAgICAgIChOdWxsVHlwZS5wcm90b3R5cGUuZ2V0IGlzVW5pZmlhYmxl
KToKKyAgICAgICAgKE51bGxUeXBlLnByb3RvdHlwZS50eXBlVmFyaWFibGVVbmlmeSk6CisgICAg
ICAgIChOdWxsVHlwZS5wcm90b3R5cGUudW5pZnlJbXBsKToKKyAgICAgICAgKE51bGxUeXBlLnBy
b3RvdHlwZS52ZXJpZnlBc0FyZ3VtZW50KToKKyAgICAgICAgKE51bGxUeXBlLnByb3RvdHlwZS52
ZXJpZnlBc1BhcmFtZXRlcik6CisgICAgICAgIChOdWxsVHlwZS5wcm90b3R5cGUudG9TdHJpbmcp
OgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpzOgorICAgICAgICAo
cGFyc2VUZXJtKToKKyAgICAgICAgKHBhcnNlVHlwZS5nZXRBZGRyZXNzU3BhY2UpOgorICAgICAg
ICAocGFyc2VUeXBlKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRl
ci5qczoKKyAgICAgICAgKFJld3JpdGVyLnByb3RvdHlwZS52aXNpdE51bGxMaXRlcmFsKToKKyAg
ICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzOgorICAgICAgICAoVEVTVF9k
b3VibGVHZW5lcmljQ2FsbHNTaW5nbGVHZW5lcmljKToKKyAgICAgICAgKFRFU1RfZGVyZWZlcmVu
Y2VEZWZhdWx0TnVsbCk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZS5q
czoKKyAgICAgICAgKFR5cGUucHJvdG90eXBlLmdldCBpc0FycmF5UmVmKToKKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlVmFyaWFibGUuanM6CisgICAgICAgIChUeXBlVmFy
aWFibGUucHJvdG90eXBlLnR5cGVWYXJpYWJsZVVuaWZ5KToKKyAgICAgICAgKiBXZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9VbmlmaWNhdGlvbkNvbnRleHQuanM6CisgICAgICAgIChVbmlmaWNhdGlv
bkNvbnRleHQucHJvdG90eXBlLnZlcmlmeSk6CisgICAgICAgIChVbmlmaWNhdGlvbkNvbnRleHQp
OgorICAgICAgICAoVW5pZmljYXRpb25Db250ZXh0LnByb3RvdHlwZS5pc1VudW5pZmllZCk6IERl
bGV0ZWQuCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFyaWFibGVSZWYuanM6
CisgICAgICAgIChWYXJpYWJsZVJlZi5wcm90b3R5cGUuZ2V0IHVuaWZ5Tm9kZSk6CisgICAgICAg
ICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qczoKKyAgICAgICAgKFZpc2l0b3Iu
cHJvdG90eXBlLnZpc2l0TnVsbExpdGVyYWwpOgorCiAyMDE3LTA5LTAxICBGaWxpcCBQaXpsbyAg
PGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgV1NMIHNob3VsZCBjaGVjayB1bnJlYWNoYWJs
ZSBjb2RlIGFuZCBubyByZXR1cm5zCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9BbGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxs
LmpzCShyZXZpc2lvbiAyMjE1MzkpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9B
bGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDcgQEAgbG9hZCgiTmF0aXZlRnVuYy5q
cyIpOwogbG9hZCgiTmF0aXZlRnVuY0luc3RhbmNlLmpzIik7CiBsb2FkKCJOYXRpdmVUeXBlLmpz
Iik7CiBsb2FkKCJOYXRpdmVUeXBlSW5zdGFuY2UuanMiKTsKK2xvYWQoIk51bGxMaXRlcmFsLmpz
Iik7CiBsb2FkKCJOdWxsVHlwZS5qcyIpOwogbG9hZCgiUGFyc2UuanMiKTsKIGxvYWQoIlByZXBh
cmUuanMiKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlw
ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVJl
ZlR5cGUuanMJKHJldmlzaW9uIDIyMTUzOSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL0FycmF5UmVmVHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsOCBAQCBjbGFz
cyBBcnJheVJlZlR5cGUgZXh0ZW5kcyBSZWZlcmVuY2VUeXBlCiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIHRoaXMuZWxlbWVudFR5cGUudW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlci5l
bGVtZW50VHlwZSk7CiAgICAgfQorICAgIAorICAgIGdldCBpc0FycmF5UmVmKCkgeyByZXR1cm4g
dHJ1ZTsgfQogCiAgICAgdG9TdHJpbmcoKQogICAgIHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0NoZWNrZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvQ2hlY2tlci5qcwkocmV2aXNpb24gMjIxNTM5KQorKysgVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTg2LDYgKzE4
NiwxMiBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIHJldHVybiB0
aGlzLl9wcm9ncmFtLmludHJpbnNpY3MudWludDMyOwogICAgIH0KICAgICAKKyAgICB2aXNpdE51
bGxMaXRlcmFsKG5vZGUpCisgICAgeworICAgICAgICAvLyBSZXR1cm4gdGhlIG51bGwgbGl0ZXJh
bCdzIHR5cGUgdmFyaWFibGUuCisgICAgICAgIHJldHVybiBub2RlLnR5cGU7CisgICAgfQorICAg
IAogICAgIHZpc2l0Q29tbWFFeHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVz
dWx0ID0gbnVsbDsKQEAgLTIzMSw3ICsyMzcsNyBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlz
aXRvciB7CiAgICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSAiRGlkIG5vdCBmaW5kIGZ1bmN0
aW9uIGZvciBjYWxsIjsKICAgICAgICAgICAgICAgICBpZiAoZmFpbHVyZXMubGVuZ3RoKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGxldCBzdHJpbmdpZnlGYWlsdXJlID0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZhaWx1cmUgPT4gZmFpbHVyZS5mdW5jICsgIiBkaWQgbm90IG1hdGNoIGJlY2F1
c2U6ICIgKyBmYWlsdXJlLnJlYXNvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmUg
PT4gZmFpbHVyZS5mdW5jLnRvRGVjbFN0cmluZygpICsgIiBkaWQgbm90IG1hdGNoIGJlY2F1c2U6
ICIgKyBmYWlsdXJlLnJlYXNvbjsKICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAiLCBi
dXQgY29uc2lkZXJlZDpcbiIgKyBmYWlsdXJlcy5tYXAoc3RyaW5naWZ5RmFpbHVyZSkuam9pbigi
XG4iKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVF
cnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsIG1lc3NhZ2UpOwpJbmRleDogVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvQ29uc3RleHByVHlwZVBhcmFtZXRlci5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Db25zdGV4cHJUeXBlUGFyYW1ldGVy
LmpzCShyZXZpc2lvbiAyMjE1MzkpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9D
b25zdGV4cHJUeXBlUGFyYW1ldGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxNiArNDUsOCBA
QCBjbGFzcyBDb25zdGV4cHJUeXBlUGFyYW1ldGVyIGV4dGVuZHMgVmFsCiAKICAgICAgICAgaWYg
KCF0aGlzLnR5cGUudW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlci50eXBlKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBsZXQgcmVhbFRoaXMgPSB1bmlmaWNhdGlv
bkNvbnRleHQuZmluZCh0aGlzKTsKLSAgICAgICAgaWYgKHJlYWxUaGlzICE9IHRoaXMpCi0gICAg
ICAgICAgICByZXR1cm4gcmVhbFRoaXMudW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlcik7
Ci0gICAgICAgIAotICAgICAgICBpZiAob3RoZXIgaW5zdGFuY2VvZiBWYXJpYWJsZVJlZikKLSAg
ICAgICAgICAgIG90aGVyID0gb3RoZXIudmFyaWFibGU7CiAgICAgICAgIAotICAgICAgICB1bmlm
aWNhdGlvbkNvbnRleHQudW5pZnkodGhpcywgb3RoZXIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGVWYXJpYWJsZVVuaWZ5SW1wbCh1bmlmaWNhdGlvbkNv
bnRleHQsIG90aGVyKTsKICAgICB9CiAgICAgCiAgICAgdW5pZnlJbXBsKHVuaWZpY2F0aW9uQ29u
dGV4dCwgb3RoZXIpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FdmFsdWF0
b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVh
dG9yLmpzCShyZXZpc2lvbiAyMjE1MzkpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9FdmFsdWF0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDEwIEBAIGNsYXNzIEV2
YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAgIAogICAgIHZpc2l0RGVyZWZlcmVuY2VFeHBy
ZXNzaW9uKG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gbm9kZS5wdHIudmlzaXQodGhpcyku
bG9hZFZhbHVlKCk7CisgICAgICAgIGxldCBwdHIgPSBub2RlLnB0ci52aXNpdCh0aGlzKS5sb2Fk
VmFsdWUoKTsKKyAgICAgICAgaWYgKCFwdHIpCisgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBF
cnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJOdWxsIGRlcmVmZXJlbmNlIik7CisgICAg
ICAgIHJldHVybiBwdHI7CiAgICAgfQogICAgIAogICAgIHZpc2l0TWFrZVB0ckV4cHJlc3Npb24o
bm9kZSkKQEAgLTEyNiw2ICsxMjksMTEgQEAgY2xhc3MgRXZhbHVhdG9yIGV4dGVuZHMgVmlzaXRv
ciB7CiAgICAgICAgIHJldHVybiBFUHRyLmJveChub2RlLnZhbHVlKTsKICAgICB9CiAgICAgCisg
ICAgdmlzaXROdWxsTGl0ZXJhbChub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEVQdHIuYm94
KG51bGwpOworICAgIH0KKyAgICAKICAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCiAgICAg
ewogICAgICAgICAvLyBXZSBldmFsdWF0ZSBpbmxpbmVkIEFTVHMsIHNvIHRoaXMgY2FuIG9ubHkg
YmUgYSBuYXRpdmUgY2FsbC4KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1
bmMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5q
cwkocmV2aXNpb24gMjIxNTM5KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVu
Yy5qcwkod29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQsMTQgQEAgY2xhc3MgRnVuYyBleHRlbmRz
IE5vZGUgewogICAgIAogICAgIGdldCBraW5kKCkgeyByZXR1cm4gRnVuYzsgfQogICAgIAotICAg
IHRvU3RyaW5nKCkKKyAgICB0b0RlY2xTdHJpbmcoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRo
aXMucmV0dXJuVHlwZSArICIgIiArIHRoaXMubmFtZSArICI8IiArIHRoaXMudHlwZVBhcmFtZXRl
cnMgKyAiPigiICsgdGhpcy5wYXJhbWV0ZXJzICsgIikiOwogICAgIH0KKyAgICAKKyAgICB0b1N0
cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy50b0RlY2xTdHJpbmcoKTsKKyAgICB9
CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJpbnNpY3MuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50cmluc2ljcy5q
cwkocmV2aXNpb24gMjIxNTM5KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50
cmluc2ljcy5qcwkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsOCBAQCBjbGFzcyBJbnRyaW5z
aWNzIHsKICAgICAgICAgbGV0IGFycmF5RWxlbWVudFB0ciA9IGZ1bmMgPT4gewogICAgICAgICAg
ICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChbcmVmLCBpbmRleF0sIG5vZGUpID0+IHsKICAgICAg
ICAgICAgICAgICByZWYgPSByZWYubG9hZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgaWYgKCFy
ZWYpCisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHJhcEVycm9yKG5vZGUub3JpZ2lu
Lm9yaWdpblN0cmluZywgIk51bGwgZGVyZWZlcmVuY2UiKTsKICAgICAgICAgICAgICAgICBpbmRl
eCA9IGluZGV4LmxvYWRWYWx1ZSgpOwogICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IHJlZi5s
ZW5ndGgpCiAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHJhcEVycm9yKG5vZGUub3Jp
Z2luLm9yaWdpblN0cmluZywgIkFycmF5IGluZGV4ICIgKyBpbmRleCArICIgaXMgb3V0IG9mIGJv
dW5kcyBvZiAiICsgcmVmKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05h
dGl2ZUZ1bmMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
TmF0aXZlRnVuYy5qcwkocmV2aXNpb24gMjIxNTM5KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvTmF0aXZlRnVuYy5qcwkod29ya2luZyBjb3B5KQpAQCAtMzIsOSArMzIsOSBAQCBj
bGFzcyBOYXRpdmVGdW5jIGV4dGVuZHMgRnVuYyB7CiAgICAgCiAgICAgZ2V0IGlzTmF0aXZlKCkg
eyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdG9TdHJpbmcoKQorICAgIHRvRGVjbFN0cmluZygpCiAg
ICAgewotICAgICAgICByZXR1cm4gIm5hdGl2ZSAiICsgc3VwZXIudG9TdHJpbmcoKTsKKyAgICAg
ICAgcmV0dXJuICJuYXRpdmUgIiArIHN1cGVyLnRvRGVjbFN0cmluZygpOwogICAgIH0KIH0KIApJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuY0luc3RhbmNlLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hdGl2ZUZ1bmNJ
bnN0YW5jZS5qcwkocmV2aXNpb24gMjIxNTM5KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvTmF0aXZlRnVuY0luc3RhbmNlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw5ICszMyw5
IEBAIGNsYXNzIE5hdGl2ZUZ1bmNJbnN0YW5jZSBleHRlbmRzIEZ1bmMgewogICAgIGdldCBmdW5j
KCkgeyByZXR1cm4gdGhpcy5fZnVuYzsgfQogICAgIGdldCBpc05hdGl2ZSgpIHsgcmV0dXJuIHRy
dWU7IH0KIAotICAgIHRvU3RyaW5nKCkKKyAgICB0b0RlY2xTdHJpbmcoKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuICJuYXRpdmUgIiArIHN1cGVyLnRvU3RyaW5nKCk7CisgICAgICAgIHJldHVybiAi
bmF0aXZlICIgKyBzdXBlci50b0RlY2xTdHJpbmcoKTsKICAgICB9CiB9CiAKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vZGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwkocmV2aXNpb24gMjIxNTM5KQorKysgVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwkod29ya2luZyBjb3B5KQpAQCAtNDIsNiAr
NDIsOCBAQCBjbGFzcyBOb2RlIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBv
dGhlciIpOwogICAgICAgICBsZXQgdW5pZnlUaGlzID0gdGhpcy51bmlmeU5vZGU7CiAgICAgICAg
IGxldCB1bmlmeU90aGVyID0gb3RoZXIudW5pZnlOb2RlOworICAgICAgICBpZiAodW5pZnlUaGlz
ID09IHVuaWZ5T3RoZXIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYgKHVu
aWZ5T3RoZXIudHlwZVZhcmlhYmxlVW5pZnkodW5pZmljYXRpb25Db250ZXh0LCB1bmlmeVRoaXMp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIHJldHVybiB1bmlmeVRoaXMudW5p
ZnlJbXBsKHVuaWZpY2F0aW9uQ29udGV4dCwgdW5pZnlPdGhlcik7CkBAIC01OSw2ICs2MSwxNiBA
QCBjbGFzcyBOb2RlIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKKyAgICBf
dHlwZVZhcmlhYmxlVW5pZnlJbXBsKHVuaWZpY2F0aW9uQ29udGV4dCwgb3RoZXIpCisgICAgewor
ICAgICAgICBsZXQgcmVhbFRoaXMgPSB1bmlmaWNhdGlvbkNvbnRleHQuZmluZCh0aGlzKTsKKyAg
ICAgICAgaWYgKHJlYWxUaGlzICE9IHRoaXMpCisgICAgICAgICAgICByZXR1cm4gcmVhbFRoaXMu
dW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlcik7CisgICAgICAgIAorICAgICAgICB1bmlm
aWNhdGlvbkNvbnRleHQudW5pb24odGhpcywgb3RoZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCiAgICAgZ2V0IHVuaWZ5Tm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KICAgICBn
ZXQgaXNVbmlmaWFibGUoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIApAQCAtNjcsNyArNzksNyBA
QCBjbGFzcyBOb2RlIHsKICAgICBlcXVhbHMob3RoZXIpCiAgICAgewogICAgICAgICBsZXQgdW5p
ZmljYXRpb25Db250ZXh0ID0gbmV3IFVuaWZpY2F0aW9uQ29udGV4dCgpOwotICAgICAgICByZXR1
cm4gdGhpcy51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyKSAmJiB1bmlmaWNhdGlvbkNv
bnRleHQuaXNVbnVuaWZpZWQoKTsKKyAgICAgICAgcmV0dXJuIHRoaXMudW5pZnkodW5pZmljYXRp
b25Db250ZXh0LCBvdGhlcikgJiYgdW5pZmljYXRpb25Db250ZXh0LnZlcmlmeSgpOwogICAgIH0K
ICAgICAKICAgICBzdWJzdGl0dXRlKHBhcmFtZXRlcnMsIGFyZ3VtZW50TGlzdCkKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL051bGxMaXRlcmFsLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL051bGxMaXRlcmFsLmpzCShub25leGlzdGVu
dCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL051bGxMaXRlcmFsLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgTnVsbExpdGVyYWwgZXh0ZW5k
cyBFeHByZXNzaW9uIHsKKyAgICBjb25zdHJ1Y3RvcihvcmlnaW4pCisgICAgeworICAgICAgICBz
dXBlcihvcmlnaW4pOworICAgICAgICB0aGlzLnR5cGUgPSBuZXcgTnVsbFR5cGUob3JpZ2luKTsK
KyAgICB9CisgICAgCisgICAgdG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJudWxs
IjsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL051bGxU
eXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL051bGxU
eXBlLmpzCShyZXZpc2lvbiAyMjE1MzkpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9OdWxsVHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjUsOSArMjUsNDYgQEAKICJ1c2Ugc3Ry
aWN0IjsKIAogY2xhc3MgTnVsbFR5cGUgZXh0ZW5kcyBUeXBlIHsKLSAgICAvLyBGSVhNRTogVGhp
cyB3aWxsIGhhdmUgdG8gYmVoYXZlIGxpa2UgYSB0eXBlIHZhcmlhYmxlIGZvciB0aGUgcHVycG9z
ZXMgb2YgdW5pZmljYXRpb24sIHNvIHRoYXQKLSAgICAvLyBpdCBjYW4gYmUgdW5pZmllZCB3aXRo
IGFueSBwb2ludGVyIHR5cGUuIFRoZW4sIHdlIGNhbiBkbyBhIHZlcmlmaWNhdGlvbiBhdCB0aGUg
ZW5kIHRvIHNlZSBpZgotICAgIC8vIHdlIGdvdCB1bmlmaWVkIHdpdGggYSBwb2ludGVyIHR5cGUu
Ci0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjIzNQor
ICAgIGNvbnN0cnVjdG9yKG9yaWdpbikKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CisgICAgICAg
IHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKKyAgICB9CisgICAgCisgICAgLy8gRm9yIG5vdyB3ZSBh
bnN3ZXIgZmFsc2UgZm9yIGlzUHRyIGFuZCBpc0FycmF5UmVmIGJlY2F1c2UgdGhhdCBoYXBwZW5z
IHRvIG1ha2UgYWxsIG9mIHRoZSBsb2dpYworICAgIC8vIHdvcmsuIEJ1dCwgaXQncyBzdHJhbmdl
LCBzaW5jZSBhcyBhIGJvdHRvbSB0eXBlIGl0IHJlYWxseSBpcyB0aGUgY2FzZSB0aGF0IHRoaXMg
aXMgYm90aCBpc1B0ciBhbmQKKyAgICAvLyBpc0FycmF5UmVmLgorICAgIAorICAgIGdldCBpc1By
aW1pdGl2ZSgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICBnZXQgaXNVbmlmaWFibGUoKSB7IHJldHVy
biB0cnVlOyB9CisgICAgCisgICAgdHlwZVZhcmlhYmxlVW5pZnkodW5pZmljYXRpb25Db250ZXh0
LCBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgVHlwZSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdGhpcy5f
dHlwZVZhcmlhYmxlVW5pZnlJbXBsKHVuaWZpY2F0aW9uQ29udGV4dCwgb3RoZXIpOworICAgIH0K
KyAgICAKKyAgICB1bmlmeUltcGwodW5pZmljYXRpb25Db250ZXh0LCBvdGhlcikKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0aGlzLnR5cGVWYXJpYWJsZVVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwg
b3RoZXIpOworICAgIH0KKyAgICAKKyAgICB2ZXJpZnlBc0FyZ3VtZW50KHVuaWZpY2F0aW9uQ29u
dGV4dCkKKyAgICB7CisgICAgICAgIGxldCByZWFsVGhpcyA9IHVuaWZpY2F0aW9uQ29udGV4dC5m
aW5kKHRoaXMpOworICAgICAgICByZXR1cm4gcmVhbFRoaXMuaXNQdHIgfHwgcmVhbFRoaXMuaXNB
cnJheVJlZjsKKyAgICB9CisgICAgCisgICAgdmVyaWZ5QXNQYXJhbWV0ZXIodW5pZmljYXRpb25D
b250ZXh0KQorICAgIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOdWxsVHlwZSBzaG91bGQg
bmV2ZXIgYmUgdXNlZCBhcyBhIHR5cGUgcGFyYW1ldGVyIik7CisgICAgfQorICAgIAorICAgIHRv
U3RyaW5nKCkKKyAgICB7CisgICAgICAgIHJldHVybiAibnVsbCI7CisgICAgfQogfQogCkluZGV4
OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qcwkocmV2aXNpb24gMjIxNTM5KQor
KysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUGFyc2UuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE2OCw3ICsxNjgsNyBAQCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIGxpbmVO
dW1iCiAgICAgewogICAgICAgICBsZXQgdG9rZW47CiAgICAgICAgIGlmICh0b2tlbiA9IHRyeUNv
bnN1bWUoIm51bGwiKSkKLSAgICAgICAgICAgIHJldHVybiBuZXcgTnVsbCh0b2tlbik7CisgICAg
ICAgICAgICByZXR1cm4gbmV3IE51bGxMaXRlcmFsKHRva2VuKTsKICAgICAgICAgaWYgKHRva2Vu
ID0gdHJ5Q29uc3VtZUtpbmQoImlkZW50aWZpZXIiKSkKICAgICAgICAgICAgIHJldHVybiBuZXcg
VmFyaWFibGVSZWYodG9rZW4sIHRva2VuLnRleHQpOwogICAgICAgICBpZiAodG9rZW4gPSB0cnlD
b25zdW1lS2luZCgiaW50TGl0ZXJhbCIpKSB7CkBAIC0yNjAsNyArMjYwLDggQEAgZnVuY3Rpb24g
cGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBsaW5lTnVtYgogICAgICAgICAgICAgYWRkcmVzc1NwYWNl
Q29uc3VtZWQgPSB0cnVlOwogICAgICAgICAgICAgaWYgKGFkZHJlc3NTcGFjZSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gYWRkcmVzc1NwYWNlOwotICAgICAgICAgICAgcmV0dXJuIHRyeUNvbnN1
bWUoLi4uYWRkcmVzc1NwYWNlcyk7CisgICAgICAgICAgICBhZGRyZXNzU3BhY2UgPSBjb25zdW1l
KC4uLmFkZHJlc3NTcGFjZXMpOworICAgICAgICAgICAgcmV0dXJuIGFkZHJlc3NTcGFjZTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgd2hpbGUgKHRva2VuID0gdHJ5Q29uc3VtZSgiXiIs
ICJbIikpIHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpz
CShyZXZpc2lvbiAyMjE1MzkpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdy
aXRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTk0LDcgKzE5NCwxMyBAQCBjbGFzcyBSZXdyaXRl
ciB7CiAgICAgewogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9Ci0KKyAgICAKKyAgICB2aXNp
dE51bGxMaXRlcmFsKG5vZGUpCisgICAgeworICAgICAgICAvLyBXZSBjaG9vc2Ugbm90IHRvIHZp
c2l0IHRoZSBudWxsIHR5cGUgYmVjYXVzZSB0aGVyZSdzIHJlYWxseSBubyBwb2ludCBmb3Igbm93
LgorICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisgICAgCiAgICAgdmlzaXRDYWxsRXhwcmVz
c2lvbihub2RlKQogICAgIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBDYWxsRXhwcmVzc2lv
bigKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwkocmV2aXNpb24gMjIx
NTM5KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwkod29ya2luZyBj
b3B5KQpAQCAtMzc2LDYgKzM3NiwyMjggQEAgZnVuY3Rpb24gVEVTVF9zaW1wbGVVbnJlYWNoYWJs
ZUNvZGUoKQogICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpOwogfQogCitm
dW5jdGlvbiBURVNUX2RvdWJsZUdlbmVyaWNDYWxsc0RvdWJsZUdlbmVyaWMoKQoreworICAgIGRv
UHJlcChgCisgICAgICAgIHZvaWQgZm9vPFQsIFU+KFQsIFUpIHsgfQorICAgICAgICB2b2lkIGJh
cjxWLCBXPihWIHgsIFcgeSkgeyBmb28oeCwgeSk7IH0KKyAgICBgKTsKK30KKworZnVuY3Rpb24g
VEVTVF9kb3VibGVHZW5lcmljQ2FsbHNTaW5nbGVHZW5lcmljKCkKK3sKKyAgICBjaGVja0ZhaWwo
CisgICAgICAgICgpID0+IGRvUHJlcChgCisgICAgICAgICAgICB2b2lkIGZvbzxUPihULCBUKSB7
IH0KKyAgICAgICAgICAgIHZvaWQgYmFyPFYsIFc+KFYgeCwgVyB5KSB7IGZvbyh4LCB5KTsgfQor
ICAgICAgICBgKSwKKyAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yKTsKK30K
KworZnVuY3Rpb24gVEVTVF9sb2FkTnVsbCgpCit7CisgICAgY2hlY2tGYWlsKAorICAgICAgICAo
KSA9PiBkb1ByZXAoYAorICAgICAgICAgICAgdm9pZCBzaW5rPFQ+KFQpIHsgfQorICAgICAgICAg
ICAgdm9pZCBmb28oKSB7IHNpbmsoXm51bGwpOyB9CisgICAgICAgIGApLAorICAgICAgICAoZSkg
PT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IgJiYgZS5tZXNzYWdlLmluZGV4T2YoIlR5cGUgcGFz
c2VkIHRvIGRlcmVmZXJlbmNlIGlzIG5vdCBhIHBvaW50ZXI6IG51bGwiKSAhPSAtMSk7Cit9CisK
K2Z1bmN0aW9uIFRFU1Rfc3RvcmVOdWxsKCkKK3sKKyAgICBjaGVja0ZhaWwoCisgICAgICAgICgp
ID0+IGRvUHJlcChgCisgICAgICAgICAgICB2b2lkIGZvbygpIHsgXm51bGwgPSA0MjsgfQorICAg
ICAgICBgKSwKKyAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yICYmIGUubWVz
c2FnZS5pbmRleE9mKCJUeXBlIHBhc3NlZCB0byBkZXJlZmVyZW5jZSBpcyBub3QgYSBwb2ludGVy
OiBudWxsIikgIT0gLTEpOworfQorCitmdW5jdGlvbiBURVNUX3JldHVybk51bGwoKQoreworICAg
IGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgdGhyZWFkIGludF4gZm9vKCkgeyByZXR1
cm4gbnVsbDsgfQorICAgIGApOworICAgIGxldCByZXN1bHQgPSBjYWxsRnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFtdLCBbXSk7CisgICAgaWYgKCFyZXN1bHQudHlwZS5pc1B0cikKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJSZXR1cm4gdHlwZSBpcyBub3QgYSBwb2ludGVyOiAiICsgcmVzdWx0
LnR5cGUpOworICAgIGlmICghcmVzdWx0LnR5cGUuZWxlbWVudFR5cGUuZXF1YWxzKHByb2dyYW0u
aW50cmluc2ljcy5pbnQzMikpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiUmV0dXJuIHR5cGUg
aXMgbm90IGEgcG9pbnRlciB0byBhbiBpbnQ6ICIgKyByZXN1bHQudHlwZSk7CisgICAgaWYgKHJl
c3VsdC52YWx1ZSAhPSBudWxsKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlJldHVybiB2YWx1
ZSBpcyBub3QgbnVsbDogIiArIHJlc3VsdC52YWx1ZSk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfZGVy
ZWZlcmVuY2VEZWZhdWx0TnVsbCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAg
ICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyZWFkIGludF4gcDsKKyAg
ICAgICAgICAgIHJldHVybiBecDsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrRmFpbCgK
KyAgICAgICAgKCkgPT4gY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW10pLAorICAg
ICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUcmFwRXJyb3IpOworfQorCitmdW5jdGlvbiBURVNU
X2RlZmF1bHRJbml0aWFsaXplZE51bGwoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAK
KyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocmVhZCBpbnReIHAg
PSBudWxsOzsKKyAgICAgICAgICAgIHJldHVybiBecDsKKyAgICAgICAgfQorICAgIGApOworICAg
IGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
XSwgW10pLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUcmFwRXJyb3IpOworfQorCitm
dW5jdGlvbiBURVNUX3Bhc3NOdWxsVG9QdHJNb25vbW9ycGhpYygpCit7CisgICAgbGV0IHByb2dy
YW0gPSBkb1ByZXAoYAorICAgICAgICBpbnQgZm9vKHRocmVhZCBpbnReIHB0cikKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIF5wdHI7CisgICAgICAgIH0KKyAgICAgICAgaW50IGJhcigp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmb28obnVsbCk7CisgICAgICAgIH0KKyAg
ICBgKTsKKyAgICBjaGVja0ZhaWwoCisgICAgICAgICgpID0+IGNhbGxGdW5jdGlvbihwcm9ncmFt
LCAiYmFyIiwgW10sIFtdKSwKKyAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHJhcEVycm9y
KTsKK30KKworZnVuY3Rpb24gVEVTVF9wYXNzTnVsbFRvUHRyUG9seW1vcnBoaWMoKQoreworICAg
IGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gZG9QcmVwKGAKKyAgICAgICAgICAgIFQgZm9vPFQ+
KHRocmVhZCBUXiBwdHIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF5w
dHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgYmFyKCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZm9vKG51bGwpOworICAgICAgICAgICAgfQorICAgICAg
ICBgKSwKKyAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yKTsKK30KKworZnVu
Y3Rpb24gVEVTVF9wYXNzTnVsbFRvUG9seW1vcnBoaWMoKQoreworICAgIGNoZWNrRmFpbCgKKyAg
ICAgICAgKCkgPT4gZG9QcmVwKGAKKyAgICAgICAgICAgIFQgZm9vPFQ+KFQgcHRyKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwdHI7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpbnQgYmFyKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Zm9vKG51bGwpOworICAgICAgICAgICAgfQorICAgICAgICBgKSwKKyAgICAgICAgKGUpID0+IGUg
aW5zdGFuY2VvZiBXVHlwZUVycm9yKTsKK30KKworZnVuY3Rpb24gVEVTVF9sb2FkTnVsbEFycmF5
UmVmKCkKK3sKKyAgICBjaGVja0ZhaWwoCisgICAgICAgICgpID0+IGRvUHJlcChgCisgICAgICAg
ICAgICB2b2lkIHNpbms8VD4oVCkgeyB9CisgICAgICAgICAgICB2b2lkIGZvbygpIHsgc2luayhu
dWxsWzB1XSk7IH0KKyAgICAgICAgYCksCisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5
cGVFcnJvciAmJiBlLm1lc3NhZ2UuaW5kZXhPZigiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZvciBj
YWxsIikgIT0gLTEpOworfQorCitmdW5jdGlvbiBURVNUX3N0b3JlTnVsbEFycmF5UmVmKCkKK3sK
KyAgICBjaGVja0ZhaWwoCisgICAgICAgICgpID0+IGRvUHJlcChgCisgICAgICAgICAgICB2b2lk
IGZvbygpIHsgbnVsbFswdV0gPSA0MjsgfQorICAgICAgICBgKSwKKyAgICAgICAgKGUpID0+IGUg
aW5zdGFuY2VvZiBXVHlwZUVycm9yICYmIGUubWVzc2FnZS5pbmRleE9mKCJEaWQgbm90IGZpbmQg
ZnVuY3Rpb24gZm9yIGNhbGwiKSAhPSAtMSk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfcmV0dXJuTnVs
bEFycmF5UmVmKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHRocmVh
ZCBpbnRbXSBmb28oKSB7IHJldHVybiBudWxsOyB9CisgICAgYCk7CisgICAgbGV0IHJlc3VsdCA9
IGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFtdKTsKKyAgICBpZiAoIXJlc3VsdC50
eXBlLmlzQXJyYXlSZWYpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiUmV0dXJuIHR5cGUgaXMg
bm90IGFuIGFycmF5IHJlZmVyZW5jZTogIiArIHJlc3VsdC50eXBlKTsKKyAgICBpZiAoIXJlc3Vs
dC50eXBlLmVsZW1lbnRUeXBlLmVxdWFscyhwcm9ncmFtLmludHJpbnNpY3MuaW50MzIpKQorICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoIlJldHVybiB0eXBlIGlzIG5vdCBhbiBpbnQgYXJyYXkgcmVm
ZXJlbmNlOiAiICsgcmVzdWx0LnR5cGUpOworICAgIGlmIChyZXN1bHQudmFsdWUgIT0gbnVsbCkK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJSZXR1cm4gdmFsdWUgaXMgbm90IG51bGw6ICIgKyBy
ZXN1bHQudmFsdWUpOworfQorCitmdW5jdGlvbiBURVNUX2RlcmVmZXJlbmNlRGVmYXVsdE51bGxB
cnJheVJlZigpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBpbnQgZm9v
KCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyZWFkIGludFtdIHA7CisgICAgICAgICAgICBy
ZXR1cm4gcFswdV07CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0ZhaWwoCisgICAgICAg
ICgpID0+IGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFtdKSwKKyAgICAgICAgKGUp
ID0+IGUgaW5zdGFuY2VvZiBXVHJhcEVycm9yKTsKK30KKworZnVuY3Rpb24gVEVTVF9kZWZhdWx0
SW5pdGlhbGl6ZWROdWxsQXJyYXlSZWYoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAK
KyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocmVhZCBpbnRbXSBw
ID0gbnVsbDsKKyAgICAgICAgICAgIHJldHVybiBwWzB1XTsKKyAgICAgICAgfQorICAgIGApOwor
ICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbXSwgW10pLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUcmFwRXJyb3IpOworfQor
CitmdW5jdGlvbiBURVNUX3Bhc3NOdWxsVG9QdHJNb25vbW9ycGhpY0FycmF5UmVmKCkKK3sKKyAg
ICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGludCBmb28odGhyZWFkIGludFtdIHB0
cikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHB0clswdV07CisgICAgICAgIH0KKyAg
ICAgICAgaW50IGJhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmb28obnVsbCk7
CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0ZhaWwoCisgICAgICAgICgpID0+IGNhbGxG
dW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW10sIFtdKSwKKyAgICAgICAgKGUpID0+IGUgaW5zdGFu
Y2VvZiBXVHJhcEVycm9yKTsKK30KKworZnVuY3Rpb24gVEVTVF9wYXNzTnVsbFRvUHRyUG9seW1v
cnBoaWNBcnJheVJlZigpCit7CisgICAgY2hlY2tGYWlsKAorICAgICAgICAoKSA9PiBkb1ByZXAo
YAorICAgICAgICAgICAgVCBmb288VD4odGhyZWFkIFRbXSBwdHIpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHB0clswdV07CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpbnQgYmFyKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZm9vKG51
bGwpOworICAgICAgICAgICAgfQorICAgICAgICBgKSwKKyAgICAgICAgKGUpID0+IGUgaW5zdGFu
Y2VvZiBXVHlwZUVycm9yKTsKK30KKwogbGV0IGJlZm9yZSA9IHByZWNpc2VUaW1lKCk7CiAKIGxl
dCBmaWx0ZXIgPSAvLiovOyAvLyBydW4gZXZlcnl0aGluZyBieSBkZWZhdWx0CkBAIC00MDMsMyAr
NjI1LDQgQEAgZm9yIChsZXQgcyBpbiB0aGlzKSB7CiBsZXQgYWZ0ZXIgPSBwcmVjaXNlVGltZSgp
OwogCiBwcmludCgiVGhhdCB0b29rICIgKyAoYWZ0ZXIgLSBiZWZvcmUpICogMTAwMCArICIgbXMu
Iik7CitnYygpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlLmpzCShyZXZp
c2lvbiAyMjE1MzkpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBAIGNsYXNzIFR5cGUgZXh0ZW5kcyBOb2RlIHsK
ICAgICBnZXQgdHlwZVBhcmFtZXRlcnMoKSB7IHJldHVybiBbXTsgfQogICAgIGdldCBraW5kKCkg
eyByZXR1cm4gVHlwZTsgfQogICAgIGdldCBpc1B0cigpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
Z2V0IGlzQXJyYXlSZWYoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIAogICAgIGluaGVyaXRzKHBy
b3RvY29sKQogICAgIHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVW
YXJpYWJsZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9U
eXBlVmFyaWFibGUuanMJKHJldmlzaW9uIDIyMTUzOSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1R5cGVWYXJpYWJsZS5qcwkod29ya2luZyBjb3B5KQpAQCAtNTYsMTIgKzU2LDgg
QEAgY2xhc3MgVHlwZVZhcmlhYmxlIGV4dGVuZHMgVHlwZSB7CiAgICAgewogICAgICAgICBpZiAo
IShvdGhlciBpbnN0YW5jZW9mIFR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBsZXQgcmVhbFRoaXMgPSB1bmlmaWNhdGlvbkNvbnRleHQuZmluZCh0aGlzKTsKLSAgICAg
ICAgaWYgKHJlYWxUaGlzICE9IHRoaXMpCi0gICAgICAgICAgICByZXR1cm4gcmVhbFRoaXMudW5p
ZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlcik7CiAgICAgICAgIAotICAgICAgICB1bmlmaWNh
dGlvbkNvbnRleHQudW5pb24odGhpcywgb3RoZXIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX3R5cGVWYXJpYWJsZVVuaWZ5SW1wbCh1bmlmaWNhdGlvbkNvbnRl
eHQsIG90aGVyKTsKICAgICB9CiAgICAgCiAgICAgdW5pZnlJbXBsKHVuaWZpY2F0aW9uQ29udGV4
dCwgb3RoZXIpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9VbmlmaWNhdGlv
bkNvbnRleHQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
VW5pZmljYXRpb25Db250ZXh0LmpzCShyZXZpc2lvbiAyMjE1MzkpCisrKyBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9VbmlmaWNhdGlvbkNvbnRleHQuanMJKHdvcmtpbmcgY29weSkKQEAg
LTgzLDYgKzgzLDggQEAgY2xhc3MgVW5pZmljYXRpb25Db250ZXh0IHsKICAgICAgICAgICAgIGlm
ICghdHlwZVBhcmFtZXRlci52ZXJpZnlBc1BhcmFtZXRlcih0aGlzKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KKyAgICAgICAgbGV0IG51bVR5cGVWYXJpYWJsZUFy
Z3VtZW50cyA9IDA7CisgICAgICAgIGxldCBhcmd1bWVudFNldCA9IG5ldyBTZXQoKTsKICAgICAg
ICAgZm9yIChsZXQgdHlwZUFyZ3VtZW50IG9mIHRoaXMubm9kZXMpIHsKICAgICAgICAgICAgIGlm
ICghdHlwZUFyZ3VtZW50LmlzVW5pZmlhYmxlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpA
QCAtOTAsMTMgKzkyLDEwIEBAIGNsYXNzIFVuaWZpY2F0aW9uQ29udGV4dCB7CiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAoIXR5cGVBcmd1bWVudC52ZXJpZnlBc0Fy
Z3VtZW50KHRoaXMpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGFyZ3VtZW50U2V0LmFkZCh0aGlzLmZpbmQodHlwZUFyZ3VtZW50KSk7CisgICAgICAgICAgICBu
dW1UeXBlVmFyaWFibGVBcmd1bWVudHMrKzsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgCi0gICAgaXNVbnVuaWZpZWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
ICF0aGlzLl9uZXh0TWFwLnNpemU7CisgICAgICAgIHJldHVybiBhcmd1bWVudFNldC5zaXplID09
IG51bVR5cGVWYXJpYWJsZUFyZ3VtZW50czsKICAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1ZhcmlhYmxlUmVmLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ZhcmlhYmxlUmVmLmpzCShyZXZpc2lvbiAyMjE1MzkpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYXJpYWJsZVJlZi5qcwkod29ya2luZyBj
b3B5KQpAQCAtMzcsNiArMzcsNyBAQCBjbGFzcyBWYXJpYWJsZVJlZiBleHRlbmRzIEV4cHJlc3Np
b24gewogICAgIGdldCB1bmlmeU5vZGUoKSB7IHJldHVybiB0aGlzLnZhcmlhYmxlLnVuaWZ5Tm9k
ZTsgfQogICAgIGdldCBpc0xWYWx1ZSgpIHsgcmV0dXJuIHRydWU7IH0KICAgICBnZXQgYWRkcmVz
c1NwYWNlKCkgeyByZXR1cm4gInRocmVhZCI7IH0KKyAgICBnZXQgdW5pZnlOb2RlKCkgeyByZXR1
cm4gdGhpcy52YXJpYWJsZTsgfQogICAgIAogICAgIHRvU3RyaW5nKCkKICAgICB7CkluZGV4OiBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanMJKHJldmlzaW9uIDIyMTUzOSkK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTIwNiw2ICsyMDYsMTEgQEAgY2xhc3MgVmlzaXRvciB7CiAgICAgewogICAgIH0KICAg
ICAKKyAgICB2aXNpdE51bGxMaXRlcmFsKG5vZGUpCisgICAgeworICAgICAgICAvLyBXZSBjaG9v
c2Ugbm90IHRvIHZpc2l0IHRoZSBudWxsIHR5cGUgYmVjYXVzZSB0aGVyZSdzIHJlYWxseSBubyBw
b2ludCBmb3Igbm93LgorICAgIH0KKyAgICAKICAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUp
CiAgICAgewogICAgICAgICBmb3IgKGxldCB0eXBlQXJndW1lbnQgb2Ygbm9kZS50eXBlQXJndW1l
bnRzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319741</attachid>
            <date>2017-09-02 14:29:41 -0700</date>
            <delta_ts>2017-09-03 09:42:23 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>31267</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMTUzOSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDk0IEBACisyMDE3LTA5LTAyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgV1NMIE51bGxUeXBlIHNob3VsZCBiZSBhIHNwZWNpYWwgdHlwZSB2YXJpYWJsZSBz
byBpdCBjYW4gdW5pZnkgd2l0aCBhbnkgcG9pbnRlciB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYyMzUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIE51bGwgaXMganVzdCBhIHR5cGUg
dmFyaWFibGUgdGhhdCBwbGF5cyBieSB3ZWlyZCBydWxlczoKKyAgICAgICAgCisgICAgICAgIC0g
T3RoZXIgdHlwZSB2YXJpYWJsZXMgZG9uJ3QgcmVjb2duaXplIGl0LCBzbyBpZiBpdCdzIHVuaWZp
ZWQgd2l0aCBULCBpdCBmYWlscy4KKyAgICAgICAgLSBJdCBiZWhhdmVzIGxpa2UgYSB0eXBlIHZh
cmlhYmxlIGZvciBwb2ludGVyIGFuZCBhcnJheSByZWZlcmVuY2UgdHlwZXMuCisgICAgICAgIC0g
SXQgYXJpc2VzIG9ubHkgaW4gYXJndW1lbnQgKFJIUykgcG9zaXRpb24uCisgICAgICAgIAorICAg
ICAgICBJIHJlZmFjdG9yZWQgc29tZSBvZiB0aGUgdHlwZSBzeXN0ZW0gY29kZSB0byBhbGxvdyBm
b3IgdGhlIHBvc3NpYmlsaXR5IG9mIHR5cGUgdmFyaWFibGVzIGJlaW5nCisgICAgICAgIHVuaWZp
ZWQgZHVyaW5nIGVxdWFscygpIHRlc3RzLiBJdCB0dXJucyBvdXQgdGhhdCB3ZSB3ZXJlIHBsYXlp
bmcgZmFzdCBhbmQgbG9vc2UgaGVyZTsgSSBuZWVkZWQKKyAgICAgICAgdG8gYmVlZiB1cCBVbmlm
aWNhdGlvbkNvbnRleHQucHJvdG90eXBlLnZlcmlmeS4gSSBhZGRlZCB0ZXN0cyBmb3IgdGhpcy4K
KyAgICAgICAgCisgICAgICAgIE51bGxMaXRlcmFsIHRoZW4ganVzdCBpbnN0YW50aWF0ZXMgaXRz
IG93biBOdWxsVHlwZSwgd2hpY2ggaXMgd2hhdCBDaGVja2VyIHVzZXMgYXMgdGhlIHR5cGUgb2YK
KyAgICAgICAgdGhlIE51bGxMaXRlcmFsLiBFdmVyeXRoaW5nIGVsc2UganVzdCB3b3Jrcy4KKyAg
ICAgICAgCisgICAgICAgIFRoaXMgYWRkcyBhIGJ1bmNoIG9mIHRlc3RzIHRvIG1ha2Ugc3VyZSB3
ZSBnZW5lcmF0ZSB0eXBlIGVycm9ycyBpbiB2YXJpb3VzIHdlaXJkIGNhc2VzIHdoaWxlCisgICAg
ICAgIGFsc28gYWNjZXB0aW5nIGEgbnVtYmVyIG9mIHNhZmUgY2FzZXMuCisgICAgICAgIAorICAg
ICAgICBJIGFsc28gYWRkZWQgYSB3YXkgdG8gcnVuIHRoZSB0ZXN0cyBpbi1icm93c2VyLgorCisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzOgorICAgICAgICAqIFdlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qczoKKyAgICAgICAgKEFycmF5UmVmVHlw
ZS5wcm90b3R5cGUuZ2V0IGlzQXJyYXlSZWYpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0NoZWNrZXIuanM6CisgICAgICAgIChDaGVja2VyLnByb3RvdHlwZS52aXNpdFByb3Rv
Y29sRGVjbC5zZXQgdGhyb3cpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Nv
bnN0ZXhwclR5cGVQYXJhbWV0ZXIuanM6CisgICAgICAgIChDb25zdGV4cHJUeXBlUGFyYW1ldGVy
LnByb3RvdHlwZS50eXBlVmFyaWFibGVVbmlmeSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvRXZhbHVhdG9yLmpzOgorICAgICAgICAoRXZhbHVhdG9yLnByb3RvdHlwZS52aXNp
dERlcmVmZXJlbmNlRXhwcmVzc2lvbik6CisgICAgICAgIChFdmFsdWF0b3IucHJvdG90eXBlLnZp
c2l0TnVsbExpdGVyYWwpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmMu
anM6CisgICAgICAgIChGdW5jLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAgICAgIChGdW5jKToK
KyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzOgorICAgICAg
ICAoSW50cmluc2ljcyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZl
RnVuYy5qczoKKyAgICAgICAgKE5hdGl2ZUZ1bmMucHJvdG90eXBlLnRvRGVjbFN0cmluZyk6Cisg
ICAgICAgIChOYXRpdmVGdW5jKToKKyAgICAgICAgKE5hdGl2ZUZ1bmMucHJvdG90eXBlLnRvU3Ry
aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVG
dW5jSW5zdGFuY2UuanM6CisgICAgICAgIChOYXRpdmVGdW5jSW5zdGFuY2UucHJvdG90eXBlLnRv
RGVjbFN0cmluZyk6CisgICAgICAgIChOYXRpdmVGdW5jSW5zdGFuY2UpOgorICAgICAgICAoTmF0
aXZlRnVuY0luc3RhbmNlLnByb3RvdHlwZS50b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgICog
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qczoKKyAgICAgICAgKE5vZGUudW5pZnkpOgor
ICAgICAgICAoTm9kZS5wcm90b3R5cGUuX3R5cGVWYXJpYWJsZVVuaWZ5SW1wbCk6CisgICAgICAg
IChOb2RlLnByb3RvdHlwZS5lcXVhbHMpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL051bGxMaXRlcmFsLmpzOiBBZGRlZC4KKyAgICAgICAgKE51bGxMaXRlcmFsKToKKyAgICAg
ICAgKE51bGxMaXRlcmFsLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAgICAgICogV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvTnVsbFR5cGUuanM6CisgICAgICAgIChOdWxsVHlwZSk6CisgICAgICAg
IChOdWxsVHlwZS5wcm90b3R5cGUuZ2V0IGlzUHJpbWl0aXZlKToKKyAgICAgICAgKE51bGxUeXBl
LnByb3RvdHlwZS5nZXQgaXNVbmlmaWFibGUpOgorICAgICAgICAoTnVsbFR5cGUucHJvdG90eXBl
LnR5cGVWYXJpYWJsZVVuaWZ5KToKKyAgICAgICAgKE51bGxUeXBlLnByb3RvdHlwZS51bmlmeUlt
cGwpOgorICAgICAgICAoTnVsbFR5cGUucHJvdG90eXBlLnZlcmlmeUFzQXJndW1lbnQpOgorICAg
ICAgICAoTnVsbFR5cGUucHJvdG90eXBlLnZlcmlmeUFzUGFyYW1ldGVyKToKKyAgICAgICAgKE51
bGxUeXBlLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUGFyc2UuanM6CisgICAgICAgIChwYXJzZVRlcm0pOgorICAgICAgICAocGFyc2VUeXBl
LmdldEFkZHJlc3NTcGFjZSk6CisgICAgICAgIChwYXJzZVR5cGUpOgorICAgICAgICAqIFdlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90
eXBlLnZpc2l0TnVsbExpdGVyYWwpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1Rlc3QuaHRtbDogQWRkZWQuCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVz
dC5qczoKKyAgICAgICAgKHRoaXMud2luZG93LnRoaXMucHJpbnQpOgorICAgICAgICAoVEVTVF9k
b3VibGVHZW5lcmljQ2FsbHNTaW5nbGVHZW5lcmljKToKKyAgICAgICAgKFRFU1RfZGVyZWZlcmVu
Y2VEZWZhdWx0TnVsbCk6CisgICAgICAgIChURVNUX2RlcmVmZXJlbmNlRGVmYXVsdE51bGxBcnJh
eVJlZik6CisgICAgICAgIChkb1Rlc3QpOgorICAgICAgICAobGV0LnMuaW4udGhpcy5zLnN0YXJ0
c1dpdGguc3RyaW5nX2FwcGVhcmVkX2hlcmUucy5tYXRjaCk6IERlbGV0ZWQuCisgICAgICAgICog
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZS5qczoKKyAgICAgICAgKFR5cGUucHJvdG90eXBl
LmdldCBpc0FycmF5UmVmKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBl
VmFyaWFibGUuanM6CisgICAgICAgIChUeXBlVmFyaWFibGUucHJvdG90eXBlLnR5cGVWYXJpYWJs
ZVVuaWZ5KToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9VbmlmaWNhdGlvbkNv
bnRleHQuanM6CisgICAgICAgIChVbmlmaWNhdGlvbkNvbnRleHQucHJvdG90eXBlLnZlcmlmeSk6
CisgICAgICAgIChVbmlmaWNhdGlvbkNvbnRleHQpOgorICAgICAgICAoVW5pZmljYXRpb25Db250
ZXh0LnByb3RvdHlwZS5pc1VudW5pZmllZCk6IERlbGV0ZWQuCisgICAgICAgICogV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvVmFyaWFibGVSZWYuanM6CisgICAgICAgIChWYXJpYWJsZVJlZi5wcm90
b3R5cGUuZ2V0IHVuaWZ5Tm9kZSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
VmlzaXRvci5qczoKKyAgICAgICAgKFZpc2l0b3IucHJvdG90eXBlLnZpc2l0TnVsbExpdGVyYWwp
OgorCiAyMDE3LTA5LTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgV1NMIHNob3VsZCBjaGVjayB1bnJlYWNoYWJsZSBjb2RlIGFuZCBubyByZXR1cm5zCkluZGV4
OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCShyZXZpc2lvbiAyMjE1MzkpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTcz
LDYgKzczLDcgQEAgbG9hZCgiTmF0aXZlRnVuYy5qcyIpOwogbG9hZCgiTmF0aXZlRnVuY0luc3Rh
bmNlLmpzIik7CiBsb2FkKCJOYXRpdmVUeXBlLmpzIik7CiBsb2FkKCJOYXRpdmVUeXBlSW5zdGFu
Y2UuanMiKTsKK2xvYWQoIk51bGxMaXRlcmFsLmpzIik7CiBsb2FkKCJOdWxsVHlwZS5qcyIpOwog
bG9hZCgiUGFyc2UuanMiKTsKIGxvYWQoIlByZXBhcmUuanMiKTsKSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVJlZlR5cGUuanMJKHJldmlzaW9uIDIyMTUzOSkK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNiArMzcsOCBAQCBjbGFzcyBBcnJheVJlZlR5cGUgZXh0ZW5kcyBSZWZl
cmVuY2VUeXBlCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUudW5p
ZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlci5lbGVtZW50VHlwZSk7CiAgICAgfQorICAgIAor
ICAgIGdldCBpc0FycmF5UmVmKCkgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdG9TdHJpbmcoKQog
ICAgIHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwkocmV2
aXNpb24gMjIxNTM5KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTg2LDYgKzE4NiwxMiBAQCBjbGFzcyBDaGVja2VyIGV4dGVu
ZHMgVmlzaXRvciB7CiAgICAgICAgIHJldHVybiB0aGlzLl9wcm9ncmFtLmludHJpbnNpY3MudWlu
dDMyOwogICAgIH0KICAgICAKKyAgICB2aXNpdE51bGxMaXRlcmFsKG5vZGUpCisgICAgeworICAg
ICAgICAvLyBSZXR1cm4gdGhlIG51bGwgbGl0ZXJhbCdzIHR5cGUgdmFyaWFibGUuCisgICAgICAg
IHJldHVybiBub2RlLnR5cGU7CisgICAgfQorICAgIAogICAgIHZpc2l0Q29tbWFFeHByZXNzaW9u
KG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDsKQEAgLTIzMSw3ICsyMzcs
NyBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgICAgICAgICAgbGV0
IG1lc3NhZ2UgPSAiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZvciBjYWxsIjsKICAgICAgICAgICAg
ICAgICBpZiAoZmFpbHVyZXMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgIGxldCBzdHJp
bmdpZnlGYWlsdXJlID0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmUgPT4gZmFpbHVy
ZS5mdW5jICsgIiBkaWQgbm90IG1hdGNoIGJlY2F1c2U6ICIgKyBmYWlsdXJlLnJlYXNvbjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmUgPT4gZmFpbHVyZS5mdW5jLnRvRGVjbFN0cmlu
ZygpICsgIiBkaWQgbm90IG1hdGNoIGJlY2F1c2U6ICIgKyBmYWlsdXJlLnJlYXNvbjsKICAgICAg
ICAgICAgICAgICAgICAgbWVzc2FnZSArPSAiLCBidXQgY29uc2lkZXJlZDpcbiIgKyBmYWlsdXJl
cy5tYXAoc3RyaW5naWZ5RmFpbHVyZSkuam9pbigiXG4iKQogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJp
bmcsIG1lc3NhZ2UpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ29uc3Rl
eHByVHlwZVBhcmFtZXRlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9Db25zdGV4cHJUeXBlUGFyYW1ldGVyLmpzCShyZXZpc2lvbiAyMjE1MzkpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Db25zdGV4cHJUeXBlUGFyYW1ldGVyLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC00NSwxNiArNDUsOCBAQCBjbGFzcyBDb25zdGV4cHJUeXBlUGFyYW1l
dGVyIGV4dGVuZHMgVmFsCiAKICAgICAgICAgaWYgKCF0aGlzLnR5cGUudW5pZnkodW5pZmljYXRp
b25Db250ZXh0LCBvdGhlci50eXBlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICBsZXQgcmVhbFRoaXMgPSB1bmlmaWNhdGlvbkNvbnRleHQuZmluZCh0aGlzKTsKLSAgICAg
ICAgaWYgKHJlYWxUaGlzICE9IHRoaXMpCi0gICAgICAgICAgICByZXR1cm4gcmVhbFRoaXMudW5p
ZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlcik7Ci0gICAgICAgIAotICAgICAgICBpZiAob3Ro
ZXIgaW5zdGFuY2VvZiBWYXJpYWJsZVJlZikKLSAgICAgICAgICAgIG90aGVyID0gb3RoZXIudmFy
aWFibGU7CiAgICAgICAgIAotICAgICAgICB1bmlmaWNhdGlvbkNvbnRleHQudW5pZnkodGhpcywg
b3RoZXIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGVW
YXJpYWJsZVVuaWZ5SW1wbCh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyKTsKICAgICB9CiAgICAg
CiAgICAgdW5pZnlJbXBsKHVuaWZpY2F0aW9uQ29udGV4dCwgb3RoZXIpCkluZGV4OiBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FdmFsdWF0b3IuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCShyZXZpc2lvbiAyMjE1MzkpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FdmFsdWF0b3IuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTk0LDcgKzk0LDEwIEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3Igewog
ICAgIAogICAgIHZpc2l0RGVyZWZlcmVuY2VFeHByZXNzaW9uKG5vZGUpCiAgICAgewotICAgICAg
ICByZXR1cm4gbm9kZS5wdHIudmlzaXQodGhpcykubG9hZFZhbHVlKCk7CisgICAgICAgIGxldCBw
dHIgPSBub2RlLnB0ci52aXNpdCh0aGlzKS5sb2FkVmFsdWUoKTsKKyAgICAgICAgaWYgKCFwdHIp
CisgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJp
bmcsICJOdWxsIGRlcmVmZXJlbmNlIik7CisgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogICAg
IAogICAgIHZpc2l0TWFrZVB0ckV4cHJlc3Npb24obm9kZSkKQEAgLTEyNiw2ICsxMjksMTEgQEAg
Y2xhc3MgRXZhbHVhdG9yIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIHJldHVybiBFUHRyLmJv
eChub2RlLnZhbHVlKTsKICAgICB9CiAgICAgCisgICAgdmlzaXROdWxsTGl0ZXJhbChub2RlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEVQdHIuYm94KG51bGwpOworICAgIH0KKyAgICAKICAgICB2
aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICAvLyBXZSBldmFsdWF0ZSBp
bmxpbmVkIEFTVHMsIHNvIHRoaXMgY2FuIG9ubHkgYmUgYSBuYXRpdmUgY2FsbC4KSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmMuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qcwkocmV2aXNpb24gMjIxNTM5KQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qcwkod29ya2luZyBjb3B5KQpAQCAtNDQs
OSArNDQsMTQgQEAgY2xhc3MgRnVuYyBleHRlbmRzIE5vZGUgewogICAgIAogICAgIGdldCBraW5k
KCkgeyByZXR1cm4gRnVuYzsgfQogICAgIAotICAgIHRvU3RyaW5nKCkKKyAgICB0b0RlY2xTdHJp
bmcoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuVHlwZSArICIgIiArIHRoaXMu
bmFtZSArICI8IiArIHRoaXMudHlwZVBhcmFtZXRlcnMgKyAiPigiICsgdGhpcy5wYXJhbWV0ZXJz
ICsgIikiOwogICAgIH0KKyAgICAKKyAgICB0b1N0cmluZygpCisgICAgeworICAgICAgICByZXR1
cm4gdGhpcy50b0RlY2xTdHJpbmcoKTsKKyAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0ludHJpbnNpY3MuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvSW50cmluc2ljcy5qcwkocmV2aXNpb24gMjIxNTM5KQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50cmluc2ljcy5qcwkod29ya2luZyBjb3B5KQpA
QCAtODAsNiArODAsOCBAQCBjbGFzcyBJbnRyaW5zaWNzIHsKICAgICAgICAgbGV0IGFycmF5RWxl
bWVudFB0ciA9IGZ1bmMgPT4gewogICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChb
cmVmLCBpbmRleF0sIG5vZGUpID0+IHsKICAgICAgICAgICAgICAgICByZWYgPSByZWYubG9hZFZh
bHVlKCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZWYpCisgICAgICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBXVHJhcEVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIk51bGwgZGVyZWZl
cmVuY2UiKTsKICAgICAgICAgICAgICAgICBpbmRleCA9IGluZGV4LmxvYWRWYWx1ZSgpOwogICAg
ICAgICAgICAgICAgIGlmIChpbmRleCA+IHJlZi5sZW5ndGgpCiAgICAgICAgICAgICAgICAgICAg
IHRocm93IG5ldyBXVHJhcEVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkFycmF5IGlu
ZGV4ICIgKyBpbmRleCArICIgaXMgb3V0IG9mIGJvdW5kcyBvZiAiICsgcmVmKTsKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hdGl2ZUZ1bmMuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuYy5qcwkocmV2aXNpb24gMjIx
NTM5KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuYy5qcwkod29y
a2luZyBjb3B5KQpAQCAtMzIsOSArMzIsOSBAQCBjbGFzcyBOYXRpdmVGdW5jIGV4dGVuZHMgRnVu
YyB7CiAgICAgCiAgICAgZ2V0IGlzTmF0aXZlKCkgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdG9T
dHJpbmcoKQorICAgIHRvRGVjbFN0cmluZygpCiAgICAgewotICAgICAgICByZXR1cm4gIm5hdGl2
ZSAiICsgc3VwZXIudG9TdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuICJuYXRpdmUgIiArIHN1cGVy
LnRvRGVjbFN0cmluZygpOwogICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvTmF0aXZlRnVuY0luc3RhbmNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL05hdGl2ZUZ1bmNJbnN0YW5jZS5qcwkocmV2aXNpb24gMjIxNTM5
KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuY0luc3RhbmNlLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw5ICszMyw5IEBAIGNsYXNzIE5hdGl2ZUZ1bmNJbnN0YW5j
ZSBleHRlbmRzIEZ1bmMgewogICAgIGdldCBmdW5jKCkgeyByZXR1cm4gdGhpcy5fZnVuYzsgfQog
ICAgIGdldCBpc05hdGl2ZSgpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHRvU3RyaW5nKCkKKyAg
ICB0b0RlY2xTdHJpbmcoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICJuYXRpdmUgIiArIHN1cGVy
LnRvU3RyaW5nKCk7CisgICAgICAgIHJldHVybiAibmF0aXZlICIgKyBzdXBlci50b0RlY2xTdHJp
bmcoKTsKICAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05v
ZGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5q
cwkocmV2aXNpb24gMjIxNTM5KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9k
ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsOCBAQCBjbGFzcyBOb2RlIHsKICAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBvdGhlciIpOwogICAgICAgICBsZXQgdW5pZnlU
aGlzID0gdGhpcy51bmlmeU5vZGU7CiAgICAgICAgIGxldCB1bmlmeU90aGVyID0gb3RoZXIudW5p
ZnlOb2RlOworICAgICAgICBpZiAodW5pZnlUaGlzID09IHVuaWZ5T3RoZXIpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYgKHVuaWZ5T3RoZXIudHlwZVZhcmlhYmxlVW5pZnko
dW5pZmljYXRpb25Db250ZXh0LCB1bmlmeVRoaXMpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIHJldHVybiB1bmlmeVRoaXMudW5pZnlJbXBsKHVuaWZpY2F0aW9uQ29udGV4dCwg
dW5pZnlPdGhlcik7CkBAIC01OSw2ICs2MSwxNiBAQCBjbGFzcyBOb2RlIHsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KICAgICAKKyAgICBfdHlwZVZhcmlhYmxlVW5pZnlJbXBsKHVuaWZp
Y2F0aW9uQ29udGV4dCwgb3RoZXIpCisgICAgeworICAgICAgICBsZXQgcmVhbFRoaXMgPSB1bmlm
aWNhdGlvbkNvbnRleHQuZmluZCh0aGlzKTsKKyAgICAgICAgaWYgKHJlYWxUaGlzICE9IHRoaXMp
CisgICAgICAgICAgICByZXR1cm4gcmVhbFRoaXMudW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBv
dGhlcik7CisgICAgICAgIAorICAgICAgICB1bmlmaWNhdGlvbkNvbnRleHQudW5pb24odGhpcywg
b3RoZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCiAgICAgZ2V0IHVuaWZ5
Tm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KICAgICBnZXQgaXNVbmlmaWFibGUoKSB7IHJldHVybiBm
YWxzZTsgfQogICAgIApAQCAtNjcsNyArNzksNyBAQCBjbGFzcyBOb2RlIHsKICAgICBlcXVhbHMo
b3RoZXIpCiAgICAgewogICAgICAgICBsZXQgdW5pZmljYXRpb25Db250ZXh0ID0gbmV3IFVuaWZp
Y2F0aW9uQ29udGV4dCgpOwotICAgICAgICByZXR1cm4gdGhpcy51bmlmeSh1bmlmaWNhdGlvbkNv
bnRleHQsIG90aGVyKSAmJiB1bmlmaWNhdGlvbkNvbnRleHQuaXNVbnVuaWZpZWQoKTsKKyAgICAg
ICAgcmV0dXJuIHRoaXMudW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlcikgJiYgdW5pZmlj
YXRpb25Db250ZXh0LnZlcmlmeSgpOwogICAgIH0KICAgICAKICAgICBzdWJzdGl0dXRlKHBhcmFt
ZXRlcnMsIGFyZ3VtZW50TGlzdCkKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L051bGxMaXRlcmFsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL051bGxMaXRlcmFsLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL051bGxMaXRlcmFsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0
IjsKKworY2xhc3MgTnVsbExpdGVyYWwgZXh0ZW5kcyBFeHByZXNzaW9uIHsKKyAgICBjb25zdHJ1
Y3RvcihvcmlnaW4pCisgICAgeworICAgICAgICBzdXBlcihvcmlnaW4pOworICAgICAgICB0aGlz
LnR5cGUgPSBuZXcgTnVsbFR5cGUob3JpZ2luKTsKKyAgICB9CisgICAgCisgICAgdG9TdHJpbmco
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICJudWxsIjsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL051bGxUeXBlLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL051bGxUeXBlLmpzCShyZXZpc2lvbiAyMjE1MzkpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OdWxsVHlwZS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMjUsOSArMjUsNDYgQEAKICJ1c2Ugc3RyaWN0IjsKIAogY2xhc3MgTnVsbFR5cGUgZXh0
ZW5kcyBUeXBlIHsKLSAgICAvLyBGSVhNRTogVGhpcyB3aWxsIGhhdmUgdG8gYmVoYXZlIGxpa2Ug
YSB0eXBlIHZhcmlhYmxlIGZvciB0aGUgcHVycG9zZXMgb2YgdW5pZmljYXRpb24sIHNvIHRoYXQK
LSAgICAvLyBpdCBjYW4gYmUgdW5pZmllZCB3aXRoIGFueSBwb2ludGVyIHR5cGUuIFRoZW4sIHdl
IGNhbiBkbyBhIHZlcmlmaWNhdGlvbiBhdCB0aGUgZW5kIHRvIHNlZSBpZgotICAgIC8vIHdlIGdv
dCB1bmlmaWVkIHdpdGggYSBwb2ludGVyIHR5cGUuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjIzNQorICAgIGNvbnN0cnVjdG9yKG9yaWdpbikKKyAg
ICB7CisgICAgICAgIHN1cGVyKCk7CisgICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKKyAg
ICB9CisgICAgCisgICAgLy8gRm9yIG5vdyB3ZSBhbnN3ZXIgZmFsc2UgZm9yIGlzUHRyIGFuZCBp
c0FycmF5UmVmIGJlY2F1c2UgdGhhdCBoYXBwZW5zIHRvIG1ha2UgYWxsIG9mIHRoZSBsb2dpYwor
ICAgIC8vIHdvcmsuIEJ1dCwgaXQncyBzdHJhbmdlLCBzaW5jZSBhcyBhIGJvdHRvbSB0eXBlIGl0
IHJlYWxseSBpcyB0aGUgY2FzZSB0aGF0IHRoaXMgaXMgYm90aCBpc1B0ciBhbmQKKyAgICAvLyBp
c0FycmF5UmVmLgorICAgIAorICAgIGdldCBpc1ByaW1pdGl2ZSgpIHsgcmV0dXJuIHRydWU7IH0K
KyAgICBnZXQgaXNVbmlmaWFibGUoKSB7IHJldHVybiB0cnVlOyB9CisgICAgCisgICAgdHlwZVZh
cmlhYmxlVW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlcikKKyAgICB7CisgICAgICAgIGlm
ICghKG90aGVyIGluc3RhbmNlb2YgVHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gdGhpcy5fdHlwZVZhcmlhYmxlVW5pZnlJbXBsKHVuaWZp
Y2F0aW9uQ29udGV4dCwgb3RoZXIpOworICAgIH0KKyAgICAKKyAgICB1bmlmeUltcGwodW5pZmlj
YXRpb25Db250ZXh0LCBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLnR5cGVWYXJp
YWJsZVVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwgb3RoZXIpOworICAgIH0KKyAgICAKKyAgICB2
ZXJpZnlBc0FyZ3VtZW50KHVuaWZpY2F0aW9uQ29udGV4dCkKKyAgICB7CisgICAgICAgIGxldCBy
ZWFsVGhpcyA9IHVuaWZpY2F0aW9uQ29udGV4dC5maW5kKHRoaXMpOworICAgICAgICByZXR1cm4g
cmVhbFRoaXMuaXNQdHIgfHwgcmVhbFRoaXMuaXNBcnJheVJlZjsKKyAgICB9CisgICAgCisgICAg
dmVyaWZ5QXNQYXJhbWV0ZXIodW5pZmljYXRpb25Db250ZXh0KQorICAgIHsKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJOdWxsVHlwZSBzaG91bGQgbmV2ZXIgYmUgdXNlZCBhcyBhIHR5cGUgcGFy
YW1ldGVyIik7CisgICAgfQorICAgIAorICAgIHRvU3RyaW5nKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiAibnVsbCI7CisgICAgfQogfQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9QYXJzZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9QYXJzZS5qcwkocmV2aXNpb24gMjIxNTM5KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUGFyc2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNyBAQCBmdW5jdGlv
biBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIGxpbmVOdW1iCiAgICAgewogICAgICAgICBsZXQgdG9r
ZW47CiAgICAgICAgIGlmICh0b2tlbiA9IHRyeUNvbnN1bWUoIm51bGwiKSkKLSAgICAgICAgICAg
IHJldHVybiBuZXcgTnVsbCh0b2tlbik7CisgICAgICAgICAgICByZXR1cm4gbmV3IE51bGxMaXRl
cmFsKHRva2VuKTsKICAgICAgICAgaWYgKHRva2VuID0gdHJ5Q29uc3VtZUtpbmQoImlkZW50aWZp
ZXIiKSkKICAgICAgICAgICAgIHJldHVybiBuZXcgVmFyaWFibGVSZWYodG9rZW4sIHRva2VuLnRl
eHQpOwogICAgICAgICBpZiAodG9rZW4gPSB0cnlDb25zdW1lS2luZCgiaW50TGl0ZXJhbCIpKSB7
CkBAIC0yNjAsNyArMjYwLDggQEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBsaW5l
TnVtYgogICAgICAgICAgICAgYWRkcmVzc1NwYWNlQ29uc3VtZWQgPSB0cnVlOwogICAgICAgICAg
ICAgaWYgKGFkZHJlc3NTcGFjZSkKICAgICAgICAgICAgICAgICByZXR1cm4gYWRkcmVzc1NwYWNl
OwotICAgICAgICAgICAgcmV0dXJuIHRyeUNvbnN1bWUoLi4uYWRkcmVzc1NwYWNlcyk7CisgICAg
ICAgICAgICBhZGRyZXNzU3BhY2UgPSBjb25zdW1lKC4uLmFkZHJlc3NTcGFjZXMpOworICAgICAg
ICAgICAgcmV0dXJuIGFkZHJlc3NTcGFjZTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
d2hpbGUgKHRva2VuID0gdHJ5Q29uc3VtZSgiXiIsICJbIikpIHsKSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCShyZXZpc2lvbiAyMjE1MzkpCisrKyBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcwkod29ya2luZyBjb3B5KQpAQCAt
MTk0LDcgKzE5NCwxMyBAQCBjbGFzcyBSZXdyaXRlciB7CiAgICAgewogICAgICAgICByZXR1cm4g
bm9kZTsKICAgICB9Ci0KKyAgICAKKyAgICB2aXNpdE51bGxMaXRlcmFsKG5vZGUpCisgICAgewor
ICAgICAgICAvLyBXZSBjaG9vc2Ugbm90IHRvIHZpc2l0IHRoZSBudWxsIHR5cGUgYmVjYXVzZSB0
aGVyZSdzIHJlYWxseSBubyBwb2ludCBmb3Igbm93LgorICAgICAgICByZXR1cm4gbm9kZTsKKyAg
ICB9CisgICAgCiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAg
bGV0IHJlc3VsdCA9IG5ldyBDYWxsRXhwcmVzc2lvbigKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9UZXN0Lmh0bWwJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvVGVzdC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKzxo
dG1sPgorPGhlYWQ+Cis8dGl0bGU+V1NMIFRlc3Q8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ik5vZGUu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlR5cGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9IlJlZmVyZW5jZVR5cGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlZhbHVlLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJSZXdyaXRlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iVmlzaXRvci5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iQWRkcmVzc1NwYWNlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJBcnJheVJlZlR5cGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkFycmF5VHlwZS5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iQXNzaWdubWVudC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iQmxvY2suanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkNhbGxBc3NpZ25tZW50
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJDYWxsRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iQ2FsbEZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJD
aGVjay5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iQ2hlY2tSZXR1cm5zLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJDaGVja1VucmVhY2hhYmxlQ29kZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iQ2hlY2tlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iQ29tbWFFeHByZXNz
aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJDb25zdGV4cHJUeXBlUGFyYW1ldGVyLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJEZXJlZmVyZW5jZUV4cHJlc3Npb24uanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9IkVBcnJheVJlZi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
RUJ1ZmZlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iRUJ1ZmZlckJ1aWxkZXIuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9IkVQdHIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkV2
YWx1YXRpb25Db21tb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkV2YWx1YXRvci5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iRmllbGQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
IkZ1bmMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkZ1bmNEZWYuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9IkZ1bmNJbnN0YW50aWF0b3IuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
IkZ1bmNQYXJhbWV0ZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkZ1bmN0aW9uTGlrZUJs
b2NrLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJJbmxpbmUuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9IklubGluZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ikluc3RhbnRpYXRl
SW1tZWRpYXRlcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iSW50TGl0ZXJhbC5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iSW50cmluc2ljcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iTGV4ZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkxleGVyVG9rZW4uanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ik1ha2VQdHJFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJOYW1lQ29udGV4dC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iTmFtZVJlc29s
dmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJOYXRpdmVGdW5jLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJOYXRpdmVGdW5jSW5zdGFuY2UuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ik5hdGl2ZVR5cGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ik5hdGl2ZVR5cGVJbnN0
YW5jZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iTnVsbExpdGVyYWwuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ik51bGxUeXBlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJQYXJz
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iUHJlcGFyZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iUHJvZ3JhbS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iUHJvdG9jb2wuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlByb3RvY29sRGVjbC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iUHJvdG9jb2xGdW5jRGVjbC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iUHJv
dG9jb2xSZWYuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlB0clR5cGUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9IlJlc29sdmVOYW1lcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
UmVzb2x2ZU92ZXJsb2FkSW1wbC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iUmVzb2x2ZVR5
cGVEZWZzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJSZXR1cm4uanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9IlJldHVybkNoZWNrZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlJl
dHVybkV4Y2VwdGlvbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iU3RhbmRhcmRMaWJyYXJ5
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJTdHJ1Y3RUeXBlLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJTdWJzdGl0dXRpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlN1ZmZp
eENhbGxBc3NpZ25tZW50LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJUeXBlRGVmLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJUeXBlRGVmUmVzb2x2ZXIuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9IlR5cGVPclZhcmlhYmxlUmVmLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJU
eXBlUmVmLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJUeXBlVmFyaWFibGUuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9IlR5cGVkVmFsdWUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
IlVpbnRMaXRlcmFsLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJVbmlmaWNhdGlvbkNvbnRl
eHQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlVucmVhY2hhYmxlQ29kZUNoZWNrZXIuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlZhcmlhYmxlRGVjbC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iVmFyaWFibGVSZWYuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlZpc2l0aW5n
U2V0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJXU3ludGF4RXJyb3IuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9IldUcmFwRXJyb3IuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IldU
eXBlRXJyb3IuanMiPjwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iVGVzdC5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9ImRvVGVzdCh0aGlzKSI+Cis8ZGl2IGlkPSJtZXNzYWdl
cyI+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9UZXN0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1Rlc3QuanMJKHJldmlzaW9uIDIyMTUzOSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Rlc3QuanMJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDE1IEBACiAgKi8KICJ1
c2Ugc3RyaWN0IjsKIAotbG9hZCgiQWxsLmpzIik7CitpZiAodGhpcy53aW5kb3cpIHsKKyAgICB0
aGlzLnByaW50ID0gKHRleHQpID0+IHsKKyAgICAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtZXNz
YWdlcyIpLmFwcGVuZENoaWxkKHNwYW4pOworICAgICAgICBzcGFuLmlubmVySFRNTCA9IHRleHQg
KyAiPGJyPiI7CisgICAgfTsKKyAgICB0aGlzLnByZWNpc2VUaW1lID0gKCkgPT4gcGVyZm9ybWFu
Y2Uubm93KCkgLyAxMDAwOworfSBlbHNlCisgICAgbG9hZCgiQWxsLmpzIik7CiAKIGZ1bmN0aW9u
IGRvUHJlcChjb2RlKQogewpAQCAtMzc2LDcgKzM4NCwyMjcgQEAgZnVuY3Rpb24gVEVTVF9zaW1w
bGVVbnJlYWNoYWJsZUNvZGUoKQogICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJy
b3IpOwogfQogCi1sZXQgYmVmb3JlID0gcHJlY2lzZVRpbWUoKTsKK2Z1bmN0aW9uIFRFU1RfZG91
YmxlR2VuZXJpY0NhbGxzRG91YmxlR2VuZXJpYygpCit7CisgICAgZG9QcmVwKGAKKyAgICAgICAg
dm9pZCBmb288VCwgVT4oVCwgVSkgeyB9CisgICAgICAgIHZvaWQgYmFyPFYsIFc+KFYgeCwgVyB5
KSB7IGZvbyh4LCB5KTsgfQorICAgIGApOworfQorCitmdW5jdGlvbiBURVNUX2RvdWJsZUdlbmVy
aWNDYWxsc1NpbmdsZUdlbmVyaWMoKQoreworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4g
ZG9QcmVwKGAKKyAgICAgICAgICAgIHZvaWQgZm9vPFQ+KFQsIFQpIHsgfQorICAgICAgICAgICAg
dm9pZCBiYXI8ViwgVz4oViB4LCBXIHkpIHsgZm9vKHgsIHkpOyB9CisgICAgICAgIGApLAorICAg
ICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpOworfQorCitmdW5jdGlvbiBURVNU
X2xvYWROdWxsKCkKK3sKKyAgICBjaGVja0ZhaWwoCisgICAgICAgICgpID0+IGRvUHJlcChgCisg
ICAgICAgICAgICB2b2lkIHNpbms8VD4oVCkgeyB9CisgICAgICAgICAgICB2b2lkIGZvbygpIHsg
c2luayhebnVsbCk7IH0KKyAgICAgICAgYCksCisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2Yg
V1R5cGVFcnJvciAmJiBlLm1lc3NhZ2UuaW5kZXhPZigiVHlwZSBwYXNzZWQgdG8gZGVyZWZlcmVu
Y2UgaXMgbm90IGEgcG9pbnRlcjogbnVsbCIpICE9IC0xKTsKK30KKworZnVuY3Rpb24gVEVTVF9z
dG9yZU51bGwoKQoreworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gZG9QcmVwKGAKKyAg
ICAgICAgICAgIHZvaWQgZm9vKCkgeyBebnVsbCA9IDQyOyB9CisgICAgICAgIGApLAorICAgICAg
ICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IgJiYgZS5tZXNzYWdlLmluZGV4T2YoIlR5
cGUgcGFzc2VkIHRvIGRlcmVmZXJlbmNlIGlzIG5vdCBhIHBvaW50ZXI6IG51bGwiKSAhPSAtMSk7
Cit9CisKK2Z1bmN0aW9uIFRFU1RfcmV0dXJuTnVsbCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBk
b1ByZXAoYAorICAgICAgICB0aHJlYWQgaW50XiBmb28oKSB7IHJldHVybiBudWxsOyB9CisgICAg
YCk7CisgICAgbGV0IHJlc3VsdCA9IGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFtd
KTsKKyAgICBpZiAoIXJlc3VsdC50eXBlLmlzUHRyKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IlJldHVybiB0eXBlIGlzIG5vdCBhIHBvaW50ZXI6ICIgKyByZXN1bHQudHlwZSk7CisgICAgaWYg
KCFyZXN1bHQudHlwZS5lbGVtZW50VHlwZS5lcXVhbHMocHJvZ3JhbS5pbnRyaW5zaWNzLmludDMy
KSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJSZXR1cm4gdHlwZSBpcyBub3QgYSBwb2ludGVy
IHRvIGFuIGludDogIiArIHJlc3VsdC50eXBlKTsKKyAgICBpZiAocmVzdWx0LnZhbHVlICE9IG51
bGwpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiUmV0dXJuIHZhbHVlIGlzIG5vdCBudWxsOiAi
ICsgcmVzdWx0LnZhbHVlKTsKK30KKworZnVuY3Rpb24gVEVTVF9kZXJlZmVyZW5jZURlZmF1bHRO
dWxsKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGludCBmb28oKQor
ICAgICAgICB7CisgICAgICAgICAgICB0aHJlYWQgaW50XiBwOworICAgICAgICAgICAgcmV0dXJu
IF5wOworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tGYWlsKAorICAgICAgICAoKSA9PiBj
YWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbXSksCisgICAgICAgIChlKSA9PiBlIGlu
c3RhbmNlb2YgV1RyYXBFcnJvcik7Cit9CisKK2Z1bmN0aW9uIFRFU1RfZGVmYXVsdEluaXRpYWxp
emVkTnVsbCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBpbnQgZm9v
KCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyZWFkIGludF4gcCA9IG51bGw7OworICAgICAg
ICAgICAgcmV0dXJuIF5wOworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tGYWlsKAorICAg
ICAgICAoKSA9PiBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbXSksCisgICAgICAg
IChlKSA9PiBlIGluc3RhbmNlb2YgV1RyYXBFcnJvcik7Cit9CisKK2Z1bmN0aW9uIFRFU1RfcGFz
c051bGxUb1B0ck1vbm9tb3JwaGljKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisg
ICAgICAgIGludCBmb28odGhyZWFkIGludF4gcHRyKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gXnB0cjsKKyAgICAgICAgfQorICAgICAgICBpbnQgYmFyKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGZvbyhudWxsKTsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNr
RmFpbCgKKyAgICAgICAgKCkgPT4gY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbXSwgW10p
LAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUcmFwRXJyb3IpOworfQorCitmdW5jdGlv
biBURVNUX3Bhc3NOdWxsVG9QdHJQb2x5bW9ycGhpYygpCit7CisgICAgY2hlY2tGYWlsKAorICAg
ICAgICAoKSA9PiBkb1ByZXAoYAorICAgICAgICAgICAgVCBmb288VD4odGhyZWFkIFReIHB0cikK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gXnB0cjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGludCBiYXIoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBmb28obnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgIGApLAorICAgICAgICAo
ZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpOworfQorCitmdW5jdGlvbiBURVNUX3Bhc3NO
dWxsVG9Qb2x5bW9ycGhpYygpCit7CisgICAgY2hlY2tGYWlsKAorICAgICAgICAoKSA9PiBkb1By
ZXAoYAorICAgICAgICAgICAgVCBmb288VD4oVCBwdHIpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBiYXIo
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmb28obnVsbCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIGApLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBl
RXJyb3IpOworfQorCitmdW5jdGlvbiBURVNUX2xvYWROdWxsQXJyYXlSZWYoKQoreworICAgIGNo
ZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gZG9QcmVwKGAKKyAgICAgICAgICAgIHZvaWQgc2luazxU
PihUKSB7IH0KKyAgICAgICAgICAgIHZvaWQgZm9vKCkgeyBzaW5rKG51bGxbMHVdKTsgfQorICAg
ICAgICBgKSwKKyAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yICYmIGUubWVz
c2FnZS5pbmRleE9mKCJEaWQgbm90IGZpbmQgZnVuY3Rpb24gZm9yIGNhbGwiKSAhPSAtMSk7Cit9
CisKK2Z1bmN0aW9uIFRFU1Rfc3RvcmVOdWxsQXJyYXlSZWYoKQoreworICAgIGNoZWNrRmFpbCgK
KyAgICAgICAgKCkgPT4gZG9QcmVwKGAKKyAgICAgICAgICAgIHZvaWQgZm9vKCkgeyBudWxsWzB1
XSA9IDQyOyB9CisgICAgICAgIGApLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBl
RXJyb3IgJiYgZS5tZXNzYWdlLmluZGV4T2YoIkRpZCBub3QgZmluZCBmdW5jdGlvbiBmb3IgY2Fs
bCIpICE9IC0xKTsKK30KKworZnVuY3Rpb24gVEVTVF9yZXR1cm5OdWxsQXJyYXlSZWYoKQorewor
ICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgdGhyZWFkIGludFtdIGZvbygpIHsg
cmV0dXJuIG51bGw7IH0KKyAgICBgKTsKKyAgICBsZXQgcmVzdWx0ID0gY2FsbEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbXSwgW10pOworICAgIGlmICghcmVzdWx0LnR5cGUuaXNBcnJheVJlZikK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJSZXR1cm4gdHlwZSBpcyBub3QgYW4gYXJyYXkgcmVm
ZXJlbmNlOiAiICsgcmVzdWx0LnR5cGUpOworICAgIGlmICghcmVzdWx0LnR5cGUuZWxlbWVudFR5
cGUuZXF1YWxzKHByb2dyYW0uaW50cmluc2ljcy5pbnQzMikpCisgICAgICAgIHRocm93IG5ldyBF
cnJvcigiUmV0dXJuIHR5cGUgaXMgbm90IGFuIGludCBhcnJheSByZWZlcmVuY2U6ICIgKyByZXN1
bHQudHlwZSk7CisgICAgaWYgKHJlc3VsdC52YWx1ZSAhPSBudWxsKQorICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIlJldHVybiB2YWx1ZSBpcyBub3QgbnVsbDogIiArIHJlc3VsdC52YWx1ZSk7Cit9
CisKK2Z1bmN0aW9uIFRFU1RfZGVyZWZlcmVuY2VEZWZhdWx0TnVsbEFycmF5UmVmKCkKK3sKKyAg
ICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGludCBmb28oKQorICAgICAgICB7Cisg
ICAgICAgICAgICB0aHJlYWQgaW50W10gcDsKKyAgICAgICAgICAgIHJldHVybiBwWzB1XTsKKyAg
ICAgICAgfQorICAgIGApOworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gY2FsbEZ1bmN0
aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW10pLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9m
IFdUcmFwRXJyb3IpOworfQorCitmdW5jdGlvbiBURVNUX2RlZmF1bHRJbml0aWFsaXplZE51bGxB
cnJheVJlZigpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBpbnQgZm9v
KCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyZWFkIGludFtdIHAgPSBudWxsOworICAgICAg
ICAgICAgcmV0dXJuIHBbMHVdOworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tGYWlsKAor
ICAgICAgICAoKSA9PiBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbXSksCisgICAg
ICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1RyYXBFcnJvcik7Cit9CisKK2Z1bmN0aW9uIFRFU1Rf
cGFzc051bGxUb1B0ck1vbm9tb3JwaGljQXJyYXlSZWYoKQoreworICAgIGxldCBwcm9ncmFtID0g
ZG9QcmVwKGAKKyAgICAgICAgaW50IGZvbyh0aHJlYWQgaW50W10gcHRyKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gcHRyWzB1XTsKKyAgICAgICAgfQorICAgICAgICBpbnQgYmFyKCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZvbyhudWxsKTsKKyAgICAgICAgfQorICAg
IGApOworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gY2FsbEZ1bmN0aW9uKHByb2dyYW0s
ICJiYXIiLCBbXSwgW10pLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUcmFwRXJyb3Ip
OworfQorCitmdW5jdGlvbiBURVNUX3Bhc3NOdWxsVG9QdHJQb2x5bW9ycGhpY0FycmF5UmVmKCkK
K3sKKyAgICBjaGVja0ZhaWwoCisgICAgICAgICgpID0+IGRvUHJlcChgCisgICAgICAgICAgICBU
IGZvbzxUPih0aHJlYWQgVFtdIHB0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcHRyWzB1XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBiYXIoKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmb28obnVsbCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIGApLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3Ip
OworfQogCiBsZXQgZmlsdGVyID0gLy4qLzsgLy8gcnVuIGV2ZXJ5dGhpbmcgYnkgZGVmYXVsdAog
aWYgKHRoaXNbImFyZ3VtZW50cyJdKSB7CkBAIC0zOTEsMTUgKzYxOSwyMiBAQCBpZiAodGhpc1si
YXJndW1lbnRzIl0pIHsKICAgICB9CiB9CiAKK2Z1bmN0aW9uIGRvVGVzdChvYmplY3QpCit7Cisg
ICAgbGV0IGJlZm9yZSA9IHByZWNpc2VUaW1lKCk7CiAKLWZvciAobGV0IHMgaW4gdGhpcykgewot
ICAgIGlmIChzLnN0YXJ0c1dpdGgoIlRFU1RfIikgJiYgcy5tYXRjaChmaWx0ZXIpKSB7Ci0gICAg
ICAgIHByaW50KHMgKyAiLi4uIik7Ci0gICAgICAgIHRoaXNbc10oKTsKLSAgICAgICAgcHJpbnQo
IiAgICBPSyEiKTsKKyAgICBmb3IgKGxldCBzIGluIG9iamVjdCkgeworICAgICAgICBpZiAocy5z
dGFydHNXaXRoKCJURVNUXyIpICYmIHMubWF0Y2goZmlsdGVyKSkgeworICAgICAgICAgICAgcHJp
bnQocyArICIuLi4iKTsKKyAgICAgICAgICAgIG9iamVjdFtzXSgpOworICAgICAgICAgICAgcHJp
bnQoIiAgICBPSyEiKTsKKyAgICAgICAgfQogICAgIH0KLX0KIAotbGV0IGFmdGVyID0gcHJlY2lz
ZVRpbWUoKTsKKyAgICBsZXQgYWZ0ZXIgPSBwcmVjaXNlVGltZSgpOworICAgIAorICAgIHByaW50
KCJUaGF0IHRvb2sgIiArIChhZnRlciAtIGJlZm9yZSkgKiAxMDAwICsgIiBtcy4iKTsKK30KIAot
cHJpbnQoIlRoYXQgdG9vayAiICsgKGFmdGVyIC0gYmVmb3JlKSAqIDEwMDAgKyAiIG1zLiIpOwor
aWYgKCF0aGlzLndpbmRvdykKKyAgICBkb1Rlc3QodGhpcyk7CkluZGV4OiBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9UeXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1R5cGUuanMJKHJldmlzaW9uIDIyMTUzOSkKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1R5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAg
Y2xhc3MgVHlwZSBleHRlbmRzIE5vZGUgewogICAgIGdldCB0eXBlUGFyYW1ldGVycygpIHsgcmV0
dXJuIFtdOyB9CiAgICAgZ2V0IGtpbmQoKSB7IHJldHVybiBUeXBlOyB9CiAgICAgZ2V0IGlzUHRy
KCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBnZXQgaXNBcnJheVJlZigpIHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgCiAgICAgaW5oZXJpdHMocHJvdG9jb2wpCiAgICAgewpJbmRleDogVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVZhcmlhYmxlLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVWYXJpYWJsZS5qcwkocmV2aXNpb24gMjIxNTM5
KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVZhcmlhYmxlLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NiwxMiArNTYsOCBAQCBjbGFzcyBUeXBlVmFyaWFibGUgZXh0ZW5kcyBU
eXBlIHsKICAgICB7CiAgICAgICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgVHlwZSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGxldCByZWFsVGhpcyA9IHVuaWZpY2F0aW9u
Q29udGV4dC5maW5kKHRoaXMpOwotICAgICAgICBpZiAocmVhbFRoaXMgIT0gdGhpcykKLSAgICAg
ICAgICAgIHJldHVybiByZWFsVGhpcy51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyKTsK
ICAgICAgICAgCi0gICAgICAgIHVuaWZpY2F0aW9uQ29udGV4dC51bmlvbih0aGlzLCBvdGhlcik7
Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gdGhpcy5fdHlwZVZhcmlhYmxl
VW5pZnlJbXBsKHVuaWZpY2F0aW9uQ29udGV4dCwgb3RoZXIpOwogICAgIH0KICAgICAKICAgICB1
bmlmeUltcGwodW5pZmljYXRpb25Db250ZXh0LCBvdGhlcikKSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1VuaWZpY2F0aW9uQ29udGV4dC5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9VbmlmaWNhdGlvbkNvbnRleHQuanMJKHJldmlzaW9u
IDIyMTUzOSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1VuaWZpY2F0aW9uQ29u
dGV4dC5qcwkod29ya2luZyBjb3B5KQpAQCAtODMsNiArODMsOCBAQCBjbGFzcyBVbmlmaWNhdGlv
bkNvbnRleHQgewogICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnZlcmlmeUFzUGFyYW1l
dGVyKHRoaXMpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQorICAg
ICAgICBsZXQgbnVtVHlwZVZhcmlhYmxlQXJndW1lbnRzID0gMDsKKyAgICAgICAgbGV0IGFyZ3Vt
ZW50U2V0ID0gbmV3IFNldCgpOwogICAgICAgICBmb3IgKGxldCB0eXBlQXJndW1lbnQgb2YgdGhp
cy5ub2RlcykgewogICAgICAgICAgICAgaWYgKCF0eXBlQXJndW1lbnQuaXNVbmlmaWFibGUpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CkBAIC05MCwxMyArOTIsMTAgQEAgY2xhc3MgVW5pZmlj
YXRpb25Db250ZXh0IHsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlm
ICghdHlwZUFyZ3VtZW50LnZlcmlmeUFzQXJndW1lbnQodGhpcykpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYXJndW1lbnRTZXQuYWRkKHRoaXMuZmluZCh0eXBl
QXJndW1lbnQpKTsKKyAgICAgICAgICAgIG51bVR5cGVWYXJpYWJsZUFyZ3VtZW50cysrOwogICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpc1VudW5pZmll
ZCgpCi0gICAgewotICAgICAgICByZXR1cm4gIXRoaXMuX25leHRNYXAuc2l6ZTsKKyAgICAgICAg
cmV0dXJuIGFyZ3VtZW50U2V0LnNpemUgPT0gbnVtVHlwZVZhcmlhYmxlQXJndW1lbnRzOwogICAg
IH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFyaWFibGVSZWYu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFyaWFibGVS
ZWYuanMJKHJldmlzaW9uIDIyMTUzOSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1ZhcmlhYmxlUmVmLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBAIGNsYXNzIFZh
cmlhYmxlUmVmIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgICAgZ2V0IHVuaWZ5Tm9kZSgpIHsgcmV0
dXJuIHRoaXMudmFyaWFibGUudW5pZnlOb2RlOyB9CiAgICAgZ2V0IGlzTFZhbHVlKCkgeyByZXR1
cm4gdHJ1ZTsgfQogICAgIGdldCBhZGRyZXNzU3BhY2UoKSB7IHJldHVybiAidGhyZWFkIjsgfQor
ICAgIGdldCB1bmlmeU5vZGUoKSB7IHJldHVybiB0aGlzLnZhcmlhYmxlOyB9CiAgICAgCiAgICAg
dG9TdHJpbmcoKQogICAgIHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zp
c2l0b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlz
aXRvci5qcwkocmV2aXNpb24gMjIxNTM5KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvVmlzaXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMjA2LDYgKzIwNiwxMSBAQCBjbGFzcyBW
aXNpdG9yIHsKICAgICB7CiAgICAgfQogICAgIAorICAgIHZpc2l0TnVsbExpdGVyYWwobm9kZSkK
KyAgICB7CisgICAgICAgIC8vIFdlIGNob29zZSBub3QgdG8gdmlzaXQgdGhlIG51bGwgdHlwZSBi
ZWNhdXNlIHRoZXJlJ3MgcmVhbGx5IG5vIHBvaW50IGZvciBub3cuCisgICAgfQorICAgIAogICAg
IHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIGZvciAobGV0IHR5cGVB
cmd1bWVudCBvZiBub2RlLnR5cGVBcmd1bWVudHMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319785</attachid>
            <date>2017-09-03 09:42:23 -0700</date>
            <delta_ts>2017-09-03 10:25:19 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>41222</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMTUzOSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDk4IEBACisyMDE3LTA5LTAyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgV1NMIE51bGxUeXBlIHNob3VsZCBiZSBhIHNwZWNpYWwgdHlwZSB2YXJpYWJsZSBz
byBpdCBjYW4gdW5pZnkgd2l0aCBhbnkgcG9pbnRlciB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYyMzUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIE51bGwgaXMganVzdCBhIHR5cGUg
dmFyaWFibGUgdGhhdCBwbGF5cyBieSB3ZWlyZCBydWxlczoKKyAgICAgICAgCisgICAgICAgIC0g
T3RoZXIgdHlwZSB2YXJpYWJsZXMgZG9uJ3QgcmVjb2duaXplIGl0LCBzbyBpZiBpdCdzIHVuaWZp
ZWQgd2l0aCBULCBpdCBmYWlscy4KKyAgICAgICAgLSBJdCBiZWhhdmVzIGxpa2UgYSB0eXBlIHZh
cmlhYmxlIGZvciBwb2ludGVyIGFuZCBhcnJheSByZWZlcmVuY2UgdHlwZXMuCisgICAgICAgIC0g
SXQgYXJpc2VzIG9ubHkgaW4gYXJndW1lbnQgKFJIUykgcG9zaXRpb24uCisgICAgICAgIC0gT25j
ZSBDaGVja2VyIGZpbmRzIGl0IHRvIGJlIGVxdWFscyB0byBzb21ldGhpbmcsIHdlIG5lZWQgdG8g
cmVtZW1iZXIgd2hhdCB0aGF0IHdhcy4KKyAgICAgICAgCisgICAgICAgIEkgcmVmYWN0b3JlZCBz
b21lIG9mIHRoZSB0eXBlIHN5c3RlbSBjb2RlIHRvIGFsbG93IGZvciB0aGUgcG9zc2liaWxpdHkg
b2YgdHlwZSB2YXJpYWJsZXMgYmVpbmcKKyAgICAgICAgdW5pZmllZCBkdXJpbmcgZXF1YWxzKCkg
dGVzdHMuIEl0IHR1cm5zIG91dCB0aGF0IHdlIHdlcmUgcGxheWluZyBmYXN0IGFuZCBsb29zZSBo
ZXJlOyBJIG5lZWRlZAorICAgICAgICB0byBiZWVmIHVwIFVuaWZpY2F0aW9uQ29udGV4dC5wcm90
b3R5cGUudmVyaWZ5LiBJIGFkZGVkIHRlc3RzIGZvciB0aGlzLgorICAgICAgICAKKyAgICAgICAg
SSBhZGRlZCBhbiBlcXVhbHNXaXRoQ29tbWl0KCkgdGhhdCB0cmlnZ2VycyBjb21taXRVbmlmaWNh
dGlvbigpLCB3aGljaCBhbGxvd3MgTnVsbFR5cGUgdG8KKyAgICAgICAgcmVtZW1iZXIgd2hhdCB0
eXBlIGl0IGdvdCB1bmlmaWVkIHdpdGguCisgICAgICAgIAorICAgICAgICBOdWxsTGl0ZXJhbCB0
aGVuIGp1c3QgaW5zdGFudGlhdGVzIGl0cyBvd24gTnVsbFR5cGUsIHdoaWNoIGlzIHdoYXQgQ2hl
Y2tlciB1c2VzIGFzIHRoZSB0eXBlIG9mCisgICAgICAgIHRoZSBOdWxsTGl0ZXJhbC4gRXZlcnl0
aGluZyBlbHNlIGp1c3Qgd29ya3MuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgYSBidW5j
aCBvZiB0ZXN0cyB0byBtYWtlIHN1cmUgd2UgZ2VuZXJhdGUgdHlwZSBlcnJvcnMgaW4gdmFyaW91
cyB3ZWlyZCBjYXNlcyB3aGlsZQorICAgICAgICBhbHNvIGFjY2VwdGluZyBhIG51bWJlciBvZiBz
YWZlIGNhc2VzLgorICAgICAgICAKKyAgICAgICAgSSBhbHNvIGFkZGVkIGEgd2F5IHRvIHJ1biB0
aGUgdGVzdHMgaW4tYnJvd3Nlci4KKworICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0FsbC5qczoKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVJlZlR5cGUu
anM6CisgICAgICAgIChBcnJheVJlZlR5cGUucHJvdG90eXBlLmdldCBpc0FycmF5UmVmKToKKyAg
ICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzOgorICAgICAgICAoQ2hl
Y2tlci5wcm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wuc2V0IHRocm93KToKKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Db25zdGV4cHJUeXBlUGFyYW1ldGVyLmpzOgorICAgICAg
ICAoQ29uc3RleHByVHlwZVBhcmFtZXRlci5wcm90b3R5cGUudHlwZVZhcmlhYmxlVW5pZnkpOgor
ICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qczoKKyAgICAgICAg
KEV2YWx1YXRvci5wcm90b3R5cGUudmlzaXREZXJlZmVyZW5jZUV4cHJlc3Npb24pOgorICAgICAg
ICAoRXZhbHVhdG9yLnByb3RvdHlwZS52aXNpdE51bGxMaXRlcmFsKToKKyAgICAgICAgKiBXZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jLmpzOgorICAgICAgICAoRnVuYy5wcm90b3R5cGUudG9T
dHJpbmcpOgorICAgICAgICAoRnVuYyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvSW50cmluc2ljcy5qczoKKyAgICAgICAgKEludHJpbnNpY3MpOgorICAgICAgICAqIFdlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL05hdGl2ZUZ1bmMuanM6CisgICAgICAgIChOYXRpdmVGdW5jLnBy
b3RvdHlwZS50b0RlY2xTdHJpbmcpOgorICAgICAgICAoTmF0aXZlRnVuYyk6CisgICAgICAgIChO
YXRpdmVGdW5jLnByb3RvdHlwZS50b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuY0luc3RhbmNlLmpzOgorICAgICAgICAoTmF0aXZl
RnVuY0luc3RhbmNlLnByb3RvdHlwZS50b0RlY2xTdHJpbmcpOgorICAgICAgICAoTmF0aXZlRnVu
Y0luc3RhbmNlKToKKyAgICAgICAgKE5hdGl2ZUZ1bmNJbnN0YW5jZS5wcm90b3R5cGUudG9TdHJp
bmcpOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vZGUuanM6
CisgICAgICAgIChOb2RlLnVuaWZ5KToKKyAgICAgICAgKE5vZGUucHJvdG90eXBlLl90eXBlVmFy
aWFibGVVbmlmeUltcGwpOgorICAgICAgICAoTm9kZS5wcm90b3R5cGUuZXF1YWxzKToKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OdWxsTGl0ZXJhbC5qczogQWRkZWQuCisgICAg
ICAgIChOdWxsTGl0ZXJhbCk6CisgICAgICAgIChOdWxsTGl0ZXJhbC5wcm90b3R5cGUudG9TdHJp
bmcpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL051bGxUeXBlLmpzOgorICAg
ICAgICAoTnVsbFR5cGUpOgorICAgICAgICAoTnVsbFR5cGUucHJvdG90eXBlLmdldCBpc1ByaW1p
dGl2ZSk6CisgICAgICAgIChOdWxsVHlwZS5wcm90b3R5cGUuZ2V0IGlzVW5pZmlhYmxlKToKKyAg
ICAgICAgKE51bGxUeXBlLnByb3RvdHlwZS50eXBlVmFyaWFibGVVbmlmeSk6CisgICAgICAgIChO
dWxsVHlwZS5wcm90b3R5cGUudW5pZnlJbXBsKToKKyAgICAgICAgKE51bGxUeXBlLnByb3RvdHlw
ZS52ZXJpZnlBc0FyZ3VtZW50KToKKyAgICAgICAgKE51bGxUeXBlLnByb3RvdHlwZS52ZXJpZnlB
c1BhcmFtZXRlcik6CisgICAgICAgIChOdWxsVHlwZS5wcm90b3R5cGUudG9TdHJpbmcpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpzOgorICAgICAgICAocGFyc2VU
ZXJtKToKKyAgICAgICAgKHBhcnNlVHlwZS5nZXRBZGRyZXNzU3BhY2UpOgorICAgICAgICAocGFy
c2VUeXBlKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qczoK
KyAgICAgICAgKFJld3JpdGVyLnByb3RvdHlwZS52aXNpdE51bGxMaXRlcmFsKToKKyAgICAgICAg
KiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIFdl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanM6CisgICAgICAgICh0aGlzLndpbmRvdy50aGlz
LnByaW50KToKKyAgICAgICAgKFRFU1RfZG91YmxlR2VuZXJpY0NhbGxzU2luZ2xlR2VuZXJpYyk6
CisgICAgICAgIChURVNUX2RlcmVmZXJlbmNlRGVmYXVsdE51bGwpOgorICAgICAgICAoVEVTVF9k
ZXJlZmVyZW5jZURlZmF1bHROdWxsQXJyYXlSZWYpOgorICAgICAgICAoZG9UZXN0KToKKyAgICAg
ICAgKGxldC5zLmluLnRoaXMucy5zdGFydHNXaXRoLnN0cmluZ19hcHBlYXJlZF9oZXJlLnMubWF0
Y2gpOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGUuanM6
CisgICAgICAgIChUeXBlLnByb3RvdHlwZS5nZXQgaXNBcnJheVJlZik6CisgICAgICAgICogV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVZhcmlhYmxlLmpzOgorICAgICAgICAoVHlwZVZhcmlh
YmxlLnByb3RvdHlwZS50eXBlVmFyaWFibGVVbmlmeSk6CisgICAgICAgICogV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvVW5pZmljYXRpb25Db250ZXh0LmpzOgorICAgICAgICAoVW5pZmljYXRpb25D
b250ZXh0LnByb3RvdHlwZS52ZXJpZnkpOgorICAgICAgICAoVW5pZmljYXRpb25Db250ZXh0KToK
KyAgICAgICAgKFVuaWZpY2F0aW9uQ29udGV4dC5wcm90b3R5cGUuaXNVbnVuaWZpZWQpOiBEZWxl
dGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ZhcmlhYmxlUmVmLmpzOgor
ICAgICAgICAoVmFyaWFibGVSZWYucHJvdG90eXBlLmdldCB1bmlmeU5vZGUpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanM6CisgICAgICAgIChWaXNpdG9yLnBy
b3RvdHlwZS52aXNpdE51bGxMaXRlcmFsKToKKwogMjAxNy0wOS0wMSAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFdTTCBzaG91bGQgY2hlY2sgdW5yZWFjaGFibGUg
Y29kZSBhbmQgbm8gcmV0dXJucwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
QWxsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5q
cwkocmV2aXNpb24gMjIxNTM5KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxs
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIGxvYWQoIkNhbGxBc3NpZ25tZW50
LmpzIik7CiBsb2FkKCJDYWxsRXhwcmVzc2lvbi5qcyIpOwogbG9hZCgiQ2FsbEZ1bmN0aW9uLmpz
Iik7CiBsb2FkKCJDaGVjay5qcyIpOworbG9hZCgiQ2hlY2tMaXRlcmFsVHlwZXMuanMiKTsKIGxv
YWQoIkNoZWNrUmV0dXJucy5qcyIpOwogbG9hZCgiQ2hlY2tVbnJlYWNoYWJsZUNvZGUuanMiKTsK
IGxvYWQoIkNoZWNrZXIuanMiKTsKQEAgLTY2LDYgKzY3LDcgQEAgbG9hZCgiSW50TGl0ZXJhbC5q
cyIpOwogbG9hZCgiSW50cmluc2ljcy5qcyIpOwogbG9hZCgiTGV4ZXIuanMiKTsKIGxvYWQoIkxl
eGVyVG9rZW4uanMiKTsKK2xvYWQoIkxpdGVyYWxUeXBlQ2hlY2tlci5qcyIpOwogbG9hZCgiTWFr
ZVB0ckV4cHJlc3Npb24uanMiKTsKIGxvYWQoIk5hbWVDb250ZXh0LmpzIik7CiBsb2FkKCJOYW1l
UmVzb2x2ZXIuanMiKTsKQEAgLTczLDYgKzc1LDcgQEAgbG9hZCgiTmF0aXZlRnVuYy5qcyIpOwog
bG9hZCgiTmF0aXZlRnVuY0luc3RhbmNlLmpzIik7CiBsb2FkKCJOYXRpdmVUeXBlLmpzIik7CiBs
b2FkKCJOYXRpdmVUeXBlSW5zdGFuY2UuanMiKTsKK2xvYWQoIk51bGxMaXRlcmFsLmpzIik7CiBs
b2FkKCJOdWxsVHlwZS5qcyIpOwogbG9hZCgiUGFyc2UuanMiKTsKIGxvYWQoIlByZXBhcmUuanMi
KTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVJlZlR5cGUu
anMJKHJldmlzaW9uIDIyMTUzOSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fy
cmF5UmVmVHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsOCBAQCBjbGFzcyBBcnJh
eVJlZlR5cGUgZXh0ZW5kcyBSZWZlcmVuY2VUeXBlCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IHRoaXMuZWxlbWVudFR5cGUudW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlci5lbGVtZW50
VHlwZSk7CiAgICAgfQorICAgIAorICAgIGdldCBpc0FycmF5UmVmKCkgeyByZXR1cm4gdHJ1ZTsg
fQogCiAgICAgdG9TdHJpbmcoKQogICAgIHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0NoZWNrTGl0ZXJhbFR5cGVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0NoZWNrTGl0ZXJhbFR5cGVzLmpzCShub25leGlzdGVudCkKKysrIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrTGl0ZXJhbFR5cGVzLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24gY2hlY2tMaXRlcmFsVHlwZXMo
cHJvZ3JhbSkKK3sKKyAgICBwcm9ncmFtLnZpc2l0KG5ldyBMaXRlcmFsVHlwZUNoZWNrZXIoKSk7
Cit9CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMJKHJldmlz
aW9uIDIyMTUzOSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZp
c2l0b3IgewogICAgICAgICAgICAgICAgIGlmICghdHlwZUFyZ3VtZW50c1tpXS5pbmhlcml0cyh0
eXBlQXJndW1lbnRzW2ldKSkKICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJy
b3Iob3JpZ2luLm9yaWdpblN0cmluZywgIlR5cGUgYXJndW1lbnQgZG9lcyBub3QgaW5oZXJpdCBw
cm90b2NvbCIpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoIXJl
c3VsdC5lcXVhbHModHlwZVBhcmFtZXRlcnNbaV0udHlwZSkpCisgICAgICAgICAgICAgICAgaWYg
KCFyZXN1bHQuZXF1YWxzV2l0aENvbW1pdCh0eXBlUGFyYW1ldGVyc1tpXS50eXBlKSkKICAgICAg
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iob3JpZ2luLm9yaWdpblN0cmluZywg
Ildyb25nIHR5cGUgZm9yIGNvbnN0ZXhwciIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC0xMTYsNyArMTE2LDcgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAg
ICBpZiAobm9kZS5pbml0aWFsaXplcikgewogICAgICAgICAgICAgbGV0IGxoc1R5cGUgPSBub2Rl
LnR5cGU7CiAgICAgICAgICAgICBsZXQgcmhzVHlwZSA9IG5vZGUuaW5pdGlhbGl6ZXIudmlzaXQo
dGhpcyk7Ci0gICAgICAgICAgICBpZiAoIWxoc1R5cGUuZXF1YWxzKHJoc1R5cGUpKQorICAgICAg
ICAgICAgaWYgKCFsaHNUeXBlLmVxdWFsc1dpdGhDb21taXQocmhzVHlwZSkpCiAgICAgICAgICAg
ICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiVHlw
ZSBtaXNtYXRjaCBpbiB2YXJpYWJsZSBpbml0aWFsaXphdGlvbjogIiArIGxoc1R5cGUgKyAiIHZl
cnN1cyAiICsgcmhzVHlwZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMjcsNyArMTI3LDcgQEAg
Y2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICAgICAgdGhyb3cgbmV3IFdU
eXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiTEhTIG9mIGFzc2lnbm1lbnQgaXMg
bm90IGFuIExWYWx1ZTogIiArIG5vZGUubGhzKTsKICAgICAgICAgbGV0IGxoc1R5cGUgPSBub2Rl
Lmxocy52aXNpdCh0aGlzKTsKICAgICAgICAgbGV0IHJoc1R5cGUgPSBub2RlLnJocy52aXNpdCh0
aGlzKTsKLSAgICAgICAgaWYgKCFsaHNUeXBlLmVxdWFscyhyaHNUeXBlKSkKKyAgICAgICAgaWYg
KCFsaHNUeXBlLmVxdWFsc1dpdGhDb21taXQocmhzVHlwZSkpCiAgICAgICAgICAgICB0aHJvdyBu
ZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJUeXBlIG1pc21hdGNoIGlu
IGFzc2lnbm1lbnQ6ICIgKyBsaHNUeXBlICsgIiB2ZXJzdXMgIiArIHJoc1R5cGUpOwogICAgICAg
ICBub2RlLnR5cGUgPSBsaHNUeXBlOwogICAgICAgICByZXR1cm4gbGhzVHlwZTsKQEAgLTE2NCwx
MiArMTY0LDEyIEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgICAg
IGxldCByZXN1bHRUeXBlID0gbm9kZS52YWx1ZS52aXNpdCh0aGlzKTsKICAgICAgICAgICAgIGlm
ICghcmVzdWx0VHlwZSkKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgcmVz
dWx0IHR5cGUgZnJvbSAiICsgbm9kZS52YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUuZnVu
Yy5yZXR1cm5UeXBlLmVxdWFscyhyZXN1bHRUeXBlKSkKKyAgICAgICAgICAgIGlmICghbm9kZS5m
dW5jLnJldHVyblR5cGUuZXF1YWxzV2l0aENvbW1pdChyZXN1bHRUeXBlKSkKICAgICAgICAgICAg
ICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJUcnlp
bmcgdG8gcmV0dXJuICIgKyByZXN1bHRUeXBlICsgIiBpbiBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJu
cyAiICsgbm9kZS5mdW5jLnJldHVyblR5cGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBpZiAoIW5vZGUuZnVuYy5yZXR1cm5UeXBlLmVxdWFscyh0
aGlzLl9wcm9ncmFtLmludHJpbnNpY3Mudm9pZCkpCisgICAgICAgIGlmICghbm9kZS5mdW5jLnJl
dHVyblR5cGUuZXF1YWxzV2l0aENvbW1pdCh0aGlzLl9wcm9ncmFtLmludHJpbnNpY3Mudm9pZCkp
CiAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJp
bmcsICJOb24tdm9pZCBmdW5jdGlvbiBtdXN0IHJldHVybiBhIHZhbHVlIik7CiAgICAgfQogICAg
IApAQCAtMTg2LDYgKzE4NiwxMiBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAg
ICAgICAgIHJldHVybiB0aGlzLl9wcm9ncmFtLmludHJpbnNpY3MudWludDMyOwogICAgIH0KICAg
ICAKKyAgICB2aXNpdE51bGxMaXRlcmFsKG5vZGUpCisgICAgeworICAgICAgICAvLyBSZXR1cm4g
dGhlIG51bGwgbGl0ZXJhbCdzIHR5cGUgdmFyaWFibGUuCisgICAgICAgIHJldHVybiBub2RlLnR5
cGU7CisgICAgfQorICAgIAogICAgIHZpc2l0Q29tbWFFeHByZXNzaW9uKG5vZGUpCiAgICAgewog
ICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDsKQEAgLTIzMSwxMiArMjM3LDIwIEBAIGNsYXNzIENo
ZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZSA9ICJE
aWQgbm90IGZpbmQgZnVuY3Rpb24gZm9yIGNhbGwiOwogICAgICAgICAgICAgICAgIGlmIChmYWls
dXJlcy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgbGV0IHN0cmluZ2lmeUZhaWx1cmUg
PQotICAgICAgICAgICAgICAgICAgICAgICAgZmFpbHVyZSA9PiBmYWlsdXJlLmZ1bmMgKyAiIGRp
ZCBub3QgbWF0Y2ggYmVjYXVzZTogIiArIGZhaWx1cmUucmVhc29uOworICAgICAgICAgICAgICAg
ICAgICAgICAgZmFpbHVyZSA9PiBmYWlsdXJlLmZ1bmMudG9EZWNsU3RyaW5nKCkgKyAiIGRpZCBu
b3QgbWF0Y2ggYmVjYXVzZTogIiArIGZhaWx1cmUucmVhc29uOwogICAgICAgICAgICAgICAgICAg
ICBtZXNzYWdlICs9ICIsIGJ1dCBjb25zaWRlcmVkOlxuIiArIGZhaWx1cmVzLm1hcChzdHJpbmdp
ZnlGYWlsdXJlKS5qb2luKCJcbiIpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgbWVzc2FnZSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBh
cmd1bWVudFR5cGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBsZXQgYXJndW1lbnRUeXBl
ID0gYXJndW1lbnRUeXBlc1tpXTsKKyAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJUeXBlID0gb3Zl
cmxvYWQuZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGUuc3Vic3RpdHV0ZVRvVW5pZmljYXRpb24oCisg
ICAgICAgICAgICAgICAgb3ZlcmxvYWQuZnVuYy50eXBlUGFyYW1ldGVycywgb3ZlcmxvYWQudW5p
ZmljYXRpb25Db250ZXh0KTsKKyAgICAgICAgICAgIGxldCByZXN1bHQgPSBhcmd1bWVudFR5cGUu
ZXF1YWxzV2l0aENvbW1pdChwYXJhbWV0ZXJUeXBlKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0
KQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQXQgIiArIG5vZGUub3JpZ2luLm9y
aWdpblN0cmluZyArICIgYXJndW1lbnQgYW5kIHBhcmFtZXRlciB0eXBlcyBub3QgZXF1YWwgYWZ0
ZXIgdHlwZSBhcmd1bWVudCBzdWJzdGl0dXRpb246IGFyZ3VtZW50ID0gIiArIGFyZ3VtZW50VHlw
ZSArICIsIHBhcmFtZXRlciA9ICIgKyBwYXJhbWV0ZXJUeXBlKTsKKyAgICAgICAgfQogICAgICAg
ICByZXR1cm4gbm9kZS5yZXNvbHZlKG92ZXJsb2FkKTsKICAgICB9CiB9CkluZGV4OiBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Db25zdGV4cHJUeXBlUGFyYW1ldGVyLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NvbnN0ZXhwclR5cGVQYXJhbWV0
ZXIuanMJKHJldmlzaW9uIDIyMTUzOSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0NvbnN0ZXhwclR5cGVQYXJhbWV0ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDE2ICs0NSw4
IEBAIGNsYXNzIENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIgZXh0ZW5kcyBWYWwKIAogICAgICAgICBp
ZiAoIXRoaXMudHlwZS51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyLnR5cGUpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGxldCByZWFsVGhpcyA9IHVuaWZpY2F0
aW9uQ29udGV4dC5maW5kKHRoaXMpOwotICAgICAgICBpZiAocmVhbFRoaXMgIT0gdGhpcykKLSAg
ICAgICAgICAgIHJldHVybiByZWFsVGhpcy51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVy
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChvdGhlciBpbnN0YW5jZW9mIFZhcmlhYmxlUmVmKQot
ICAgICAgICAgICAgb3RoZXIgPSBvdGhlci52YXJpYWJsZTsKICAgICAgICAgCi0gICAgICAgIHVu
aWZpY2F0aW9uQ29udGV4dC51bmlmeSh0aGlzLCBvdGhlcik7Ci0gICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICByZXR1cm4gdGhpcy5fdHlwZVZhcmlhYmxlVW5pZnlJbXBsKHVuaWZpY2F0aW9u
Q29udGV4dCwgb3RoZXIpOwogICAgIH0KICAgICAKICAgICB1bmlmeUltcGwodW5pZmljYXRpb25D
b250ZXh0LCBvdGhlcikKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1
YXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FdmFs
dWF0b3IuanMJKHJldmlzaW9uIDIyMTUzOSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL0V2YWx1YXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsMTAgQEAgY2xhc3Mg
RXZhbHVhdG9yIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgCiAgICAgdmlzaXREZXJlZmVyZW5jZUV4
cHJlc3Npb24obm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBub2RlLnB0ci52aXNpdCh0aGlz
KS5sb2FkVmFsdWUoKTsKKyAgICAgICAgbGV0IHB0ciA9IG5vZGUucHRyLnZpc2l0KHRoaXMpLmxv
YWRWYWx1ZSgpOworICAgICAgICBpZiAoIXB0cikKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHJh
cEVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIk51bGwgZGVyZWZlcmVuY2UiKTsKKyAg
ICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAgICAgCiAgICAgdmlzaXRNYWtlUHRyRXhwcmVzc2lv
bihub2RlKQpAQCAtMTI2LDYgKzEyOSwxMSBAQCBjbGFzcyBFdmFsdWF0b3IgZXh0ZW5kcyBWaXNp
dG9yIHsKICAgICAgICAgcmV0dXJuIEVQdHIuYm94KG5vZGUudmFsdWUpOwogICAgIH0KICAgICAK
KyAgICB2aXNpdE51bGxMaXRlcmFsKG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gRVB0ci5i
b3gobnVsbCk7CisgICAgfQorICAgIAogICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKICAg
ICB7CiAgICAgICAgIC8vIFdlIGV2YWx1YXRlIGlubGluZWQgQVNUcywgc28gdGhpcyBjYW4gb25s
eSBiZSBhIG5hdGl2ZSBjYWxsLgpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
RnVuYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5j
LmpzCShyZXZpc2lvbiAyMjE1MzkpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9G
dW5jLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCwxNCBAQCBjbGFzcyBGdW5jIGV4dGVu
ZHMgTm9kZSB7CiAgICAgCiAgICAgZ2V0IGtpbmQoKSB7IHJldHVybiBGdW5jOyB9CiAgICAgCi0g
ICAgdG9TdHJpbmcoKQorICAgIHRvRGVjbFN0cmluZygpCiAgICAgewogICAgICAgICByZXR1cm4g
dGhpcy5yZXR1cm5UeXBlICsgIiAiICsgdGhpcy5uYW1lICsgIjwiICsgdGhpcy50eXBlUGFyYW1l
dGVycyArICI+KCIgKyB0aGlzLnBhcmFtZXRlcnMgKyAiKSI7CiAgICAgfQorICAgIAorICAgIHRv
U3RyaW5nKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLnRvRGVjbFN0cmluZygpOworICAg
IH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50cmluc2ljcy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNz
LmpzCShyZXZpc2lvbiAyMjE1MzkpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9J
bnRyaW5zaWNzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw4IEBAIGNsYXNzIEludHJp
bnNpY3MgewogICAgICAgICBsZXQgYXJyYXlFbGVtZW50UHRyID0gZnVuYyA9PiB7CiAgICAgICAg
ICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFtyZWYsIGluZGV4XSwgbm9kZSkgPT4gewogICAg
ICAgICAgICAgICAgIHJlZiA9IHJlZi5sb2FkVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBpZiAo
IXJlZikKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFwRXJyb3Iobm9kZS5vcmln
aW4ub3JpZ2luU3RyaW5nLCAiTnVsbCBkZXJlZmVyZW5jZSIpOwogICAgICAgICAgICAgICAgIGlu
ZGV4ID0gaW5kZXgubG9hZFZhbHVlKCk7CiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gcmVm
Lmxlbmd0aCkKICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFwRXJyb3Iobm9kZS5v
cmlnaW4ub3JpZ2luU3RyaW5nLCAiQXJyYXkgaW5kZXggIiArIGluZGV4ICsgIiBpcyBvdXQgb2Yg
Ym91bmRzIG9mICIgKyByZWYpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
TGl0ZXJhbFR5cGVDaGVja2VyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0xpdGVyYWxUeXBlQ2hlY2tlci5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MaXRlcmFsVHlwZUNoZWNrZXIuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworInVzZSBzdHJpY3QiOworCisvLyBUaGlzIHBoYXNlIGlzIGZvciBhc3NlcnRpbmcg
dGhhdCB0aGUgY29tcGlsZXIgZGlkbid0IHZpb2xhdGUgaXRzIGludGVybmFsIGNvbnN0cmFpbnRz
LCBzbyBpdAorLy8gdGhyb3dzIEVycm9yIG5vdCBXVHlwZUVycm9yLgorLy8KKy8vIFRoZSByZWFz
b24gdGhpcyBwaGFzZSBleGlzdHMgaXMgdGhhdCBpbiBhIGNvbXBpbGVyLCB3ZSBuZWVkIGxpdGVy
YWxzIGxpa2UgbnVsbCBhbmQgMCB0byBrbm93IHRoZWlyCisvLyBleGFjdCB0eXBlIHNvIHRoYXQg
dGhleSBrbm93IGhvdyBtYW55IGJ5dGVzIHRoZXkgb2NjdXB5IGFuZCBob3cgdG8gc2V0IHRoZWly
IGRlZmF1bHQgdmFsdWUuIEZvcgorLy8gZXhhbXBsZSwgbnVsbCBmb3IgXiB3aWxsIHByb2JhYmx5
IHRha2Ugb25lIHBvaW50ZXItc2l6ZWQgd29yZCB3aGlsZSBudWxsIGZvciBbXSB3aWxsIHRha2Ug
dHdvIHdvcmRzCisvLyAob25lIGZvciBiYXNlIGFuZCBvbmUgZm9yIGxlbmd0aCkuIFRoZSB0eXBl
IGNoZWNrZXIgaXMgZXF1aXBwZWQgdG8gaW5mZXIgdGhpcywgYW5kIHRoaXMgcGhhc2UncyBqb2IK
Ky8vIGlzIGp1c3QgdG8gdmVyaWZ5IHRoYXQgdGhlIHR5cGUgY2hlY2tlciBzdWNjZWVkZWQuCitj
bGFzcyBMaXRlcmFsVHlwZUNoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICB2aXNpdE51bGxU
eXBlKG5vZGUpCisgICAgeworICAgICAgICBpZiAoIW5vZGUudHlwZSkKKyAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiTnVsbCBhdCAiICsgbm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nICsgIiBk
b2VzIG5vdCBoYXZlIHR5cGUiKTsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL05hdGl2ZUZ1bmMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuYy5qcwkocmV2aXNpb24gMjIxNTM5KQorKysgVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuYy5qcwkod29ya2luZyBjb3B5KQpAQCAt
MzIsOSArMzIsOSBAQCBjbGFzcyBOYXRpdmVGdW5jIGV4dGVuZHMgRnVuYyB7CiAgICAgCiAgICAg
Z2V0IGlzTmF0aXZlKCkgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdG9TdHJpbmcoKQorICAgIHRv
RGVjbFN0cmluZygpCiAgICAgewotICAgICAgICByZXR1cm4gIm5hdGl2ZSAiICsgc3VwZXIudG9T
dHJpbmcoKTsKKyAgICAgICAgcmV0dXJuICJuYXRpdmUgIiArIHN1cGVyLnRvRGVjbFN0cmluZygp
OwogICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZl
RnVuY0luc3RhbmNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL05hdGl2ZUZ1bmNJbnN0YW5jZS5qcwkocmV2aXNpb24gMjIxNTM5KQorKysgVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuY0luc3RhbmNlLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw5ICszMyw5IEBAIGNsYXNzIE5hdGl2ZUZ1bmNJbnN0YW5jZSBleHRlbmRzIEZ1bmMg
ewogICAgIGdldCBmdW5jKCkgeyByZXR1cm4gdGhpcy5fZnVuYzsgfQogICAgIGdldCBpc05hdGl2
ZSgpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHRvU3RyaW5nKCkKKyAgICB0b0RlY2xTdHJpbmco
KQogICAgIHsKLSAgICAgICAgcmV0dXJuICJuYXRpdmUgIiArIHN1cGVyLnRvU3RyaW5nKCk7Cisg
ICAgICAgIHJldHVybiAibmF0aXZlICIgKyBzdXBlci50b0RlY2xTdHJpbmcoKTsKICAgICB9CiB9
CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vZGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwkocmV2aXNpb24gMjIx
NTM5KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwkod29ya2luZyBj
b3B5KQpAQCAtNDIsNiArNDIsOCBAQCBjbGFzcyBOb2RlIHsKICAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvcigiTnVsbCBvdGhlciIpOwogICAgICAgICBsZXQgdW5pZnlUaGlzID0gdGhpcy51bmlm
eU5vZGU7CiAgICAgICAgIGxldCB1bmlmeU90aGVyID0gb3RoZXIudW5pZnlOb2RlOworICAgICAg
ICBpZiAodW5pZnlUaGlzID09IHVuaWZ5T3RoZXIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgaWYgKHVuaWZ5T3RoZXIudHlwZVZhcmlhYmxlVW5pZnkodW5pZmljYXRpb25Db250
ZXh0LCB1bmlmeVRoaXMpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIHJldHVy
biB1bmlmeVRoaXMudW5pZnlJbXBsKHVuaWZpY2F0aW9uQ29udGV4dCwgdW5pZnlPdGhlcik7CkBA
IC01OSw2ICs2MSwxOSBAQCBjbGFzcyBOb2RlIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KICAgICAKKyAgICBfdHlwZVZhcmlhYmxlVW5pZnlJbXBsKHVuaWZpY2F0aW9uQ29udGV4dCwg
b3RoZXIpCisgICAgeworICAgICAgICBsZXQgcmVhbFRoaXMgPSB1bmlmaWNhdGlvbkNvbnRleHQu
ZmluZCh0aGlzKTsKKyAgICAgICAgaWYgKHJlYWxUaGlzICE9IHRoaXMpCisgICAgICAgICAgICBy
ZXR1cm4gcmVhbFRoaXMudW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlcik7CisgICAgICAg
IAorICAgICAgICB1bmlmaWNhdGlvbkNvbnRleHQudW5pb24odGhpcywgb3RoZXIpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgLy8gTW9zdCB0eXBlIHZhcmlhYmxlcyBk
b24ndCBjYXJlIGFib3V0IHRoaXMuCisgICAgY29tbWl0VW5pZmljYXRpb24odW5pZmljYXRvaW5D
b250ZXh0KSB7IH0KKyAgICAKICAgICBnZXQgdW5pZnlOb2RlKCkgeyByZXR1cm4gdGhpczsgfQog
ICAgIGdldCBpc1VuaWZpYWJsZSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgCkBAIC02Nyw3ICs4
MiwxOCBAQCBjbGFzcyBOb2RlIHsKICAgICBlcXVhbHMob3RoZXIpCiAgICAgewogICAgICAgICBs
ZXQgdW5pZmljYXRpb25Db250ZXh0ID0gbmV3IFVuaWZpY2F0aW9uQ29udGV4dCgpOwotICAgICAg
ICByZXR1cm4gdGhpcy51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyKSAmJiB1bmlmaWNh
dGlvbkNvbnRleHQuaXNVbnVuaWZpZWQoKTsKKyAgICAgICAgaWYgKHRoaXMudW5pZnkodW5pZmlj
YXRpb25Db250ZXh0LCBvdGhlcikgJiYgdW5pZmljYXRpb25Db250ZXh0LnZlcmlmeSgpKQorICAg
ICAgICAgICAgcmV0dXJuIHVuaWZpY2F0aW9uQ29udGV4dDsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAKKyAgICBlcXVhbHNXaXRoQ29tbWl0KG90aGVyKQorICAgIHsKKyAgICAg
ICAgbGV0IHVuaWZpY2F0aW9uQ29udGV4dCA9IHRoaXMuZXF1YWxzKG90aGVyKTsKKyAgICAgICAg
aWYgKCF1bmlmaWNhdGlvbkNvbnRleHQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHVuaWZpY2F0aW9uQ29udGV4dC5jb21taXQoKTsKKyAgICAgICAgcmV0dXJuIHVuaWZpY2F0
aW9uQ29udGV4dDsKICAgICB9CiAgICAgCiAgICAgc3Vic3RpdHV0ZShwYXJhbWV0ZXJzLCBhcmd1
bWVudExpc3QpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OdWxsTGl0ZXJh
bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OdWxsTGl0
ZXJhbC5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9O
dWxsTGl0ZXJhbC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNz
IE51bGxMaXRlcmFsIGV4dGVuZHMgRXhwcmVzc2lvbiB7CisgICAgY29uc3RydWN0b3Iob3JpZ2lu
KQorICAgIHsKKyAgICAgICAgc3VwZXIob3JpZ2luKTsKKyAgICAgICAgdGhpcy50eXBlID0gbmV3
IE51bGxUeXBlKG9yaWdpbik7CisgICAgfQorICAgIAorICAgIHRvU3RyaW5nKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiAibnVsbCI7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9OdWxsVHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9OdWxsVHlwZS5qcwkocmV2aXNpb24gMjIxNTM5KQorKysgVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvTnVsbFR5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTI1LDkg
KzI1LDUzIEBACiAidXNlIHN0cmljdCI7CiAKIGNsYXNzIE51bGxUeXBlIGV4dGVuZHMgVHlwZSB7
Ci0gICAgLy8gRklYTUU6IFRoaXMgd2lsbCBoYXZlIHRvIGJlaGF2ZSBsaWtlIGEgdHlwZSB2YXJp
YWJsZSBmb3IgdGhlIHB1cnBvc2VzIG9mIHVuaWZpY2F0aW9uLCBzbyB0aGF0Ci0gICAgLy8gaXQg
Y2FuIGJlIHVuaWZpZWQgd2l0aCBhbnkgcG9pbnRlciB0eXBlLiBUaGVuLCB3ZSBjYW4gZG8gYSB2
ZXJpZmljYXRpb24gYXQgdGhlIGVuZCB0byBzZWUgaWYKLSAgICAvLyB3ZSBnb3QgdW5pZmllZCB3
aXRoIGEgcG9pbnRlciB0eXBlLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzYyMzUKKyAgICBjb25zdHJ1Y3RvcihvcmlnaW4pCisgICAgeworICAgICAg
ICBzdXBlcigpOworICAgICAgICB0aGlzLl9vcmlnaW4gPSBvcmlnaW47CisgICAgfQorICAgIAor
ICAgIGdldCBvcmlnaW4oKSB7IHJldHVybiB0aGlzLl9vcmlnaW47IH0KKyAgICAKKyAgICAvLyBG
b3Igbm93IHdlIGFuc3dlciBmYWxzZSBmb3IgaXNQdHIgYW5kIGlzQXJyYXlSZWYgYmVjYXVzZSB0
aGF0IGhhcHBlbnMgdG8gbWFrZSBhbGwgb2YgdGhlIGxvZ2ljCisgICAgLy8gd29yay4gQnV0LCBp
dCdzIHN0cmFuZ2UsIHNpbmNlIGFzIGEgYm90dG9tIHR5cGUgaXQgcmVhbGx5IGlzIHRoZSBjYXNl
IHRoYXQgdGhpcyBpcyBib3RoIGlzUHRyIGFuZAorICAgIC8vIGlzQXJyYXlSZWYuCisgICAgCisg
ICAgZ2V0IGlzUHJpbWl0aXZlKCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGdldCBpc1VuaWZpYWJs
ZSgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAKKyAgICB0eXBlVmFyaWFibGVVbmlmeSh1bmlmaWNh
dGlvbkNvbnRleHQsIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2Vv
ZiBUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHJl
dHVybiB0aGlzLl90eXBlVmFyaWFibGVVbmlmeUltcGwodW5pZmljYXRpb25Db250ZXh0LCBvdGhl
cik7CisgICAgfQorICAgIAorICAgIHVuaWZ5SW1wbCh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVy
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMudHlwZVZhcmlhYmxlVW5pZnkodW5pZmljYXRp
b25Db250ZXh0LCBvdGhlcik7CisgICAgfQorICAgIAorICAgIHZlcmlmeUFzQXJndW1lbnQodW5p
ZmljYXRpb25Db250ZXh0KQorICAgIHsKKyAgICAgICAgbGV0IHJlYWxUaGlzID0gdW5pZmljYXRp
b25Db250ZXh0LmZpbmQodGhpcyk7CisgICAgICAgIHJldHVybiByZWFsVGhpcy5pc1B0ciB8fCBy
ZWFsVGhpcy5pc0FycmF5UmVmOworICAgIH0KKyAgICAKKyAgICB2ZXJpZnlBc1BhcmFtZXRlcih1
bmlmaWNhdGlvbkNvbnRleHQpCisgICAgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGxU
eXBlIHNob3VsZCBuZXZlciBiZSB1c2VkIGFzIGEgdHlwZSBwYXJhbWV0ZXIiKTsKKyAgICB9Cisg
ICAgCisgICAgY29tbWl0VW5pZmljYXRpb24odW5pZmljYXRpb25Db250ZXh0KQorICAgIHsKKyAg
ICAgICAgdGhpcy50eXBlID0gdW5pZmljYXRpb25Db250ZXh0LmZpbmQodGhpcyk7CisgICAgfQor
ICAgIAorICAgIHRvU3RyaW5nKCkKKyAgICB7CisgICAgICAgIHJldHVybiAibnVsbCI7CisgICAg
fQogfQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qcwkocmV2aXNp
b24gMjIxNTM5KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUGFyc2UuanMJKHdv
cmtpbmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNyBAQCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBv
cmlnaW4sIGxpbmVOdW1iCiAgICAgewogICAgICAgICBsZXQgdG9rZW47CiAgICAgICAgIGlmICh0
b2tlbiA9IHRyeUNvbnN1bWUoIm51bGwiKSkKLSAgICAgICAgICAgIHJldHVybiBuZXcgTnVsbCh0
b2tlbik7CisgICAgICAgICAgICByZXR1cm4gbmV3IE51bGxMaXRlcmFsKHRva2VuKTsKICAgICAg
ICAgaWYgKHRva2VuID0gdHJ5Q29uc3VtZUtpbmQoImlkZW50aWZpZXIiKSkKICAgICAgICAgICAg
IHJldHVybiBuZXcgVmFyaWFibGVSZWYodG9rZW4sIHRva2VuLnRleHQpOwogICAgICAgICBpZiAo
dG9rZW4gPSB0cnlDb25zdW1lS2luZCgiaW50TGl0ZXJhbCIpKSB7CkBAIC0yNjAsNyArMjYwLDgg
QEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBsaW5lTnVtYgogICAgICAgICAgICAg
YWRkcmVzc1NwYWNlQ29uc3VtZWQgPSB0cnVlOwogICAgICAgICAgICAgaWYgKGFkZHJlc3NTcGFj
ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gYWRkcmVzc1NwYWNlOwotICAgICAgICAgICAgcmV0
dXJuIHRyeUNvbnN1bWUoLi4uYWRkcmVzc1NwYWNlcyk7CisgICAgICAgICAgICBhZGRyZXNzU3Bh
Y2UgPSBjb25zdW1lKC4uLmFkZHJlc3NTcGFjZXMpOworICAgICAgICAgICAgcmV0dXJuIGFkZHJl
c3NTcGFjZTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgd2hpbGUgKHRva2VuID0gdHJ5
Q29uc3VtZSgiXiIsICJbIikpIHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1ByZXBhcmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UHJlcGFyZS5qcwkocmV2aXNpb24gMjIxNTM5KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUHJlcGFyZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQCBmdW5jdGlv
biBwcmVwYXJlKG9yaWdpbiwgbGluZU51bWJlck9mZnNlCiAgICAgcmVzb2x2ZU5hbWVzKHByb2dy
YW0pOwogICAgIHJlc29sdmVUeXBlRGVmcyhwcm9ncmFtKTsKICAgICBjaGVjayhwcm9ncmFtKTsK
KyAgICBjaGVja0xpdGVyYWxUeXBlcyhwcm9ncmFtKTsKICAgICBjaGVja1JldHVybnMocHJvZ3Jh
bSk7CiAgICAgY2hlY2tVbnJlYWNoYWJsZUNvZGUocHJvZ3JhbSk7CiAgICAgaW5saW5lKHByb2dy
YW0pOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMJKHJl
dmlzaW9uIDIyMTUzOSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVy
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsNyArMTk0LDIxIEBAIGNsYXNzIFJld3JpdGVyIHsK
ICAgICB7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KLQorICAgIAorICAgIHZpc2l0TnVs
bExpdGVyYWwobm9kZSkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgTnVsbExpdGVy
YWwobm9kZS5vcmlnaW4pOworICAgICAgICByZXN1bHQudHlwZSA9IG5vZGUudHlwZS52aXNpdCh0
aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdmlzaXROdWxs
VHlwZShub2RlKQorICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBOdWxsVHlwZShub2Rl
Lm9yaWdpbik7CisgICAgICAgIHJlc3VsdC50eXBlID0gbm9kZS50eXBlID8gbm9kZS50eXBlLnZp
c2l0KHRoaXMpIDogbnVsbDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCiAg
ICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAgbGV0IHJlc3VsdCA9
IG5ldyBDYWxsRXhwcmVzc2lvbigKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1Rlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9U
ZXN0Lmh0bWwJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
VGVzdC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKzxodG1sPgorPGhlYWQ+
Cis8dGl0bGU+V1NMIFRlc3Q8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ik5vZGUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9IlR5cGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlJlZmVyZW5j
ZVR5cGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlZhbHVlLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJSZXdyaXRl
ci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iVmlzaXRvci5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iQWRkcmVzc1NwYWNlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJBcnJheVJl
ZlR5cGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkFycmF5VHlwZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iQXNzaWdubWVudC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iQmxv
Y2suanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkNhbGxBc3NpZ25tZW50LmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJDYWxsRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iQ2FsbEZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJDaGVjay5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iQ2hlY2tSZXR1cm5zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJDaGVja1VucmVhY2hhYmxlQ29kZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iQ2hl
Y2tlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iQ29tbWFFeHByZXNzaW9uLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJDb25zdGV4cHJUeXBlUGFyYW1ldGVyLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJEZXJlZmVyZW5jZUV4cHJlc3Npb24uanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9IkVBcnJheVJlZi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iRUJ1ZmZlci5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iRUJ1ZmZlckJ1aWxkZXIuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9IkVQdHIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkV2YWx1YXRpb25Db21t
b24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkV2YWx1YXRvci5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iRmllbGQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkZ1bmMuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9IkZ1bmNEZWYuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
IkZ1bmNJbnN0YW50aWF0b3IuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkZ1bmNQYXJhbWV0
ZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkZ1bmN0aW9uTGlrZUJsb2NrLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJJbmxpbmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Iklu
bGluZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ikluc3RhbnRpYXRlSW1tZWRpYXRlcy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iSW50TGl0ZXJhbC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iSW50cmluc2ljcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iTGV4ZXIuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkxleGVyVG9rZW4uanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ik1ha2VQdHJFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJOYW1l
Q29udGV4dC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iTmFtZVJlc29sdmVyLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJOYXRpdmVGdW5jLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJOYXRpdmVGdW5jSW5zdGFuY2UuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ik5hdGl2ZVR5
cGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ik5hdGl2ZVR5cGVJbnN0YW5jZS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iTnVsbExpdGVyYWwuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ik51bGxUeXBlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJQYXJzZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iUHJlcGFyZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iUHJv
Z3JhbS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iUHJvdG9jb2wuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9IlByb3RvY29sRGVjbC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iUHJv
dG9jb2xGdW5jRGVjbC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iUHJvdG9jb2xSZWYuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlB0clR5cGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9IlJlc29sdmVOYW1lcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iUmVzb2x2ZU92ZXJs
b2FkSW1wbC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iUmVzb2x2ZVR5cGVEZWZzLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJSZXR1cm4uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
IlJldHVybkNoZWNrZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlJldHVybkV4Y2VwdGlv
bi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iU3RhbmRhcmRMaWJyYXJ5LmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJTdHJ1Y3RUeXBlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJT
dWJzdGl0dXRpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlN1ZmZpeENhbGxBc3NpZ25t
ZW50LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJUeXBlRGVmLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJUeXBlRGVmUmVzb2x2ZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlR5
cGVPclZhcmlhYmxlUmVmLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJUeXBlUmVmLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJUeXBlVmFyaWFibGUuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9IlR5cGVkVmFsdWUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlVpbnRMaXRlcmFs
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJVbmlmaWNhdGlvbkNvbnRleHQuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9IlVucmVhY2hhYmxlQ29kZUNoZWNrZXIuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9IlZhcmlhYmxlRGVjbC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iVmFy
aWFibGVSZWYuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlZpc2l0aW5nU2V0LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJXU3ludGF4RXJyb3IuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9IldUcmFwRXJyb3IuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IldUeXBlRXJyb3IuanMi
Pjwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iVGVzdC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keSBvbmxvYWQ9ImRvVGVzdCh0aGlzKSI+Cis8ZGl2IGlkPSJtZXNzYWdlcyI+PC9kaXY+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMJ
KHJldmlzaW9uIDIyMTUzOSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3Qu
anMJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDE1IEBACiAgKi8KICJ1c2Ugc3RyaWN0IjsK
IAotbG9hZCgiQWxsLmpzIik7CitpZiAodGhpcy53aW5kb3cpIHsKKyAgICB0aGlzLnByaW50ID0g
KHRleHQpID0+IHsKKyAgICAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJz
cGFuIik7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtZXNzYWdlcyIpLmFwcGVu
ZENoaWxkKHNwYW4pOworICAgICAgICBzcGFuLmlubmVySFRNTCA9IHRleHQgKyAiPGJyPiI7Cisg
ICAgfTsKKyAgICB0aGlzLnByZWNpc2VUaW1lID0gKCkgPT4gcGVyZm9ybWFuY2Uubm93KCkgLyAx
MDAwOworfSBlbHNlCisgICAgbG9hZCgiQWxsLmpzIik7CiAKIGZ1bmN0aW9uIGRvUHJlcChjb2Rl
KQogewpAQCAtMzc2LDcgKzM4NCwyMjcgQEAgZnVuY3Rpb24gVEVTVF9zaW1wbGVVbnJlYWNoYWJs
ZUNvZGUoKQogICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpOwogfQogCi1s
ZXQgYmVmb3JlID0gcHJlY2lzZVRpbWUoKTsKK2Z1bmN0aW9uIFRFU1RfZG91YmxlR2VuZXJpY0Nh
bGxzRG91YmxlR2VuZXJpYygpCit7CisgICAgZG9QcmVwKGAKKyAgICAgICAgdm9pZCBmb288VCwg
VT4oVCwgVSkgeyB9CisgICAgICAgIHZvaWQgYmFyPFYsIFc+KFYgeCwgVyB5KSB7IGZvbyh4LCB5
KTsgfQorICAgIGApOworfQorCitmdW5jdGlvbiBURVNUX2RvdWJsZUdlbmVyaWNDYWxsc1Npbmds
ZUdlbmVyaWMoKQoreworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gZG9QcmVwKGAKKyAg
ICAgICAgICAgIHZvaWQgZm9vPFQ+KFQsIFQpIHsgfQorICAgICAgICAgICAgdm9pZCBiYXI8Viwg
Vz4oViB4LCBXIHkpIHsgZm9vKHgsIHkpOyB9CisgICAgICAgIGApLAorICAgICAgICAoZSkgPT4g
ZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpOworfQorCitmdW5jdGlvbiBURVNUX2xvYWROdWxsKCkK
K3sKKyAgICBjaGVja0ZhaWwoCisgICAgICAgICgpID0+IGRvUHJlcChgCisgICAgICAgICAgICB2
b2lkIHNpbms8VD4oVCkgeyB9CisgICAgICAgICAgICB2b2lkIGZvbygpIHsgc2luayhebnVsbCk7
IH0KKyAgICAgICAgYCksCisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvciAm
JiBlLm1lc3NhZ2UuaW5kZXhPZigiVHlwZSBwYXNzZWQgdG8gZGVyZWZlcmVuY2UgaXMgbm90IGEg
cG9pbnRlcjogbnVsbCIpICE9IC0xKTsKK30KKworZnVuY3Rpb24gVEVTVF9zdG9yZU51bGwoKQor
eworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gZG9QcmVwKGAKKyAgICAgICAgICAgIHZv
aWQgZm9vKCkgeyBebnVsbCA9IDQyOyB9CisgICAgICAgIGApLAorICAgICAgICAoZSkgPT4gZSBp
bnN0YW5jZW9mIFdUeXBlRXJyb3IgJiYgZS5tZXNzYWdlLmluZGV4T2YoIlR5cGUgcGFzc2VkIHRv
IGRlcmVmZXJlbmNlIGlzIG5vdCBhIHBvaW50ZXI6IG51bGwiKSAhPSAtMSk7Cit9CisKK2Z1bmN0
aW9uIFRFU1RfcmV0dXJuTnVsbCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAg
ICAgICB0aHJlYWQgaW50XiBmb28oKSB7IHJldHVybiBudWxsOyB9CisgICAgYCk7CisgICAgbGV0
IHJlc3VsdCA9IGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFtdKTsKKyAgICBpZiAo
IXJlc3VsdC50eXBlLmlzUHRyKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlJldHVybiB0eXBl
IGlzIG5vdCBhIHBvaW50ZXI6ICIgKyByZXN1bHQudHlwZSk7CisgICAgaWYgKCFyZXN1bHQudHlw
ZS5lbGVtZW50VHlwZS5lcXVhbHMocHJvZ3JhbS5pbnRyaW5zaWNzLmludDMyKSkKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJSZXR1cm4gdHlwZSBpcyBub3QgYSBwb2ludGVyIHRvIGFuIGludDog
IiArIHJlc3VsdC50eXBlKTsKKyAgICBpZiAocmVzdWx0LnZhbHVlICE9IG51bGwpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcigiUmV0dXJuIHZhbHVlIGlzIG5vdCBudWxsOiAiICsgcmVzdWx0LnZh
bHVlKTsKK30KKworZnVuY3Rpb24gVEVTVF9kZXJlZmVyZW5jZURlZmF1bHROdWxsKCkKK3sKKyAg
ICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGludCBmb28oKQorICAgICAgICB7Cisg
ICAgICAgICAgICB0aHJlYWQgaW50XiBwOworICAgICAgICAgICAgcmV0dXJuIF5wOworICAgICAg
ICB9CisgICAgYCk7CisgICAgY2hlY2tGYWlsKAorICAgICAgICAoKSA9PiBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFtdLCBbXSksCisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1Ry
YXBFcnJvcik7Cit9CisKK2Z1bmN0aW9uIFRFU1RfZGVmYXVsdEluaXRpYWxpemVkTnVsbCgpCit7
CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAg
eworICAgICAgICAgICAgdGhyZWFkIGludF4gcCA9IG51bGw7OworICAgICAgICAgICAgcmV0dXJu
IF5wOworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tGYWlsKAorICAgICAgICAoKSA9PiBj
YWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbXSksCisgICAgICAgIChlKSA9PiBlIGlu
c3RhbmNlb2YgV1RyYXBFcnJvcik7Cit9CisKK2Z1bmN0aW9uIFRFU1RfcGFzc051bGxUb1B0ck1v
bm9tb3JwaGljKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGludCBm
b28odGhyZWFkIGludF4gcHRyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gXnB0cjsK
KyAgICAgICAgfQorICAgICAgICBpbnQgYmFyKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGZvbyhudWxsKTsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrRmFpbCgKKyAgICAg
ICAgKCkgPT4gY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbXSwgW10pLAorICAgICAgICAo
ZSkgPT4gZSBpbnN0YW5jZW9mIFdUcmFwRXJyb3IpOworfQorCitmdW5jdGlvbiBURVNUX3Bhc3NO
dWxsVG9QdHJQb2x5bW9ycGhpYygpCit7CisgICAgY2hlY2tGYWlsKAorICAgICAgICAoKSA9PiBk
b1ByZXAoYAorICAgICAgICAgICAgVCBmb288VD4odGhyZWFkIFReIHB0cikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gXnB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGludCBiYXIoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmb28o
bnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgIGApLAorICAgICAgICAoZSkgPT4gZSBpbnN0
YW5jZW9mIFdUeXBlRXJyb3IpOworfQorCitmdW5jdGlvbiBURVNUX3Bhc3NOdWxsVG9Qb2x5bW9y
cGhpYygpCit7CisgICAgY2hlY2tGYWlsKAorICAgICAgICAoKSA9PiBkb1ByZXAoYAorICAgICAg
ICAgICAgVCBmb288VD4oVCBwdHIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBiYXIoKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmb28obnVsbCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIGApLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpOworfQor
CitmdW5jdGlvbiBURVNUX2xvYWROdWxsQXJyYXlSZWYoKQoreworICAgIGNoZWNrRmFpbCgKKyAg
ICAgICAgKCkgPT4gZG9QcmVwKGAKKyAgICAgICAgICAgIHZvaWQgc2luazxUPihUKSB7IH0KKyAg
ICAgICAgICAgIHZvaWQgZm9vKCkgeyBzaW5rKG51bGxbMHVdKTsgfQorICAgICAgICBgKSwKKyAg
ICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yICYmIGUubWVzc2FnZS5pbmRleE9m
KCJEaWQgbm90IGZpbmQgZnVuY3Rpb24gZm9yIGNhbGwiKSAhPSAtMSk7Cit9CisKK2Z1bmN0aW9u
IFRFU1Rfc3RvcmVOdWxsQXJyYXlSZWYoKQoreworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkg
PT4gZG9QcmVwKGAKKyAgICAgICAgICAgIHZvaWQgZm9vKCkgeyBudWxsWzB1XSA9IDQyOyB9Cisg
ICAgICAgIGApLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IgJiYgZS5t
ZXNzYWdlLmluZGV4T2YoIkRpZCBub3QgZmluZCBmdW5jdGlvbiBmb3IgY2FsbCIpICE9IC0xKTsK
K30KKworZnVuY3Rpb24gVEVTVF9yZXR1cm5OdWxsQXJyYXlSZWYoKQoreworICAgIGxldCBwcm9n
cmFtID0gZG9QcmVwKGAKKyAgICAgICAgdGhyZWFkIGludFtdIGZvbygpIHsgcmV0dXJuIG51bGw7
IH0KKyAgICBgKTsKKyAgICBsZXQgcmVzdWx0ID0gY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbXSwgW10pOworICAgIGlmICghcmVzdWx0LnR5cGUuaXNBcnJheVJlZikKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJSZXR1cm4gdHlwZSBpcyBub3QgYW4gYXJyYXkgcmVmZXJlbmNlOiAiICsg
cmVzdWx0LnR5cGUpOworICAgIGlmICghcmVzdWx0LnR5cGUuZWxlbWVudFR5cGUuZXF1YWxzKHBy
b2dyYW0uaW50cmluc2ljcy5pbnQzMikpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiUmV0dXJu
IHR5cGUgaXMgbm90IGFuIGludCBhcnJheSByZWZlcmVuY2U6ICIgKyByZXN1bHQudHlwZSk7Cisg
ICAgaWYgKHJlc3VsdC52YWx1ZSAhPSBudWxsKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlJl
dHVybiB2YWx1ZSBpcyBub3QgbnVsbDogIiArIHJlc3VsdC52YWx1ZSk7Cit9CisKK2Z1bmN0aW9u
IFRFU1RfZGVyZWZlcmVuY2VEZWZhdWx0TnVsbEFycmF5UmVmKCkKK3sKKyAgICBsZXQgcHJvZ3Jh
bSA9IGRvUHJlcChgCisgICAgICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICB0
aHJlYWQgaW50W10gcDsKKyAgICAgICAgICAgIHJldHVybiBwWzB1XTsKKyAgICAgICAgfQorICAg
IGApOworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gY2FsbEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbXSwgW10pLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUcmFwRXJyb3Ip
OworfQorCitmdW5jdGlvbiBURVNUX2RlZmF1bHRJbml0aWFsaXplZE51bGxBcnJheVJlZigpCit7
CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAg
eworICAgICAgICAgICAgdGhyZWFkIGludFtdIHAgPSBudWxsOworICAgICAgICAgICAgcmV0dXJu
IHBbMHVdOworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tGYWlsKAorICAgICAgICAoKSA9
PiBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbXSksCisgICAgICAgIChlKSA9PiBl
IGluc3RhbmNlb2YgV1RyYXBFcnJvcik7Cit9CisKK2Z1bmN0aW9uIFRFU1RfcGFzc051bGxUb1B0
ck1vbm9tb3JwaGljQXJyYXlSZWYoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAg
ICAgICAgaW50IGZvbyh0aHJlYWQgaW50W10gcHRyKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gcHRyWzB1XTsKKyAgICAgICAgfQorICAgICAgICBpbnQgYmFyKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGZvbyhudWxsKTsKKyAgICAgICAgfQorICAgIGApOworICAgIGNo
ZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbXSwg
W10pLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUcmFwRXJyb3IpOworfQorCitmdW5j
dGlvbiBURVNUX3Bhc3NOdWxsVG9QdHJQb2x5bW9ycGhpY0FycmF5UmVmKCkKK3sKKyAgICBjaGVj
a0ZhaWwoCisgICAgICAgICgpID0+IGRvUHJlcChgCisgICAgICAgICAgICBUIGZvbzxUPih0aHJl
YWQgVFtdIHB0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcHRyWzB1
XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBiYXIoKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBmb28obnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAg
IGApLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpOworfQogCiBsZXQg
ZmlsdGVyID0gLy4qLzsgLy8gcnVuIGV2ZXJ5dGhpbmcgYnkgZGVmYXVsdAogaWYgKHRoaXNbImFy
Z3VtZW50cyJdKSB7CkBAIC0zOTEsMTUgKzYxOSwyMiBAQCBpZiAodGhpc1siYXJndW1lbnRzIl0p
IHsKICAgICB9CiB9CiAKK2Z1bmN0aW9uIGRvVGVzdChvYmplY3QpCit7CisgICAgbGV0IGJlZm9y
ZSA9IHByZWNpc2VUaW1lKCk7CiAKLWZvciAobGV0IHMgaW4gdGhpcykgewotICAgIGlmIChzLnN0
YXJ0c1dpdGgoIlRFU1RfIikgJiYgcy5tYXRjaChmaWx0ZXIpKSB7Ci0gICAgICAgIHByaW50KHMg
KyAiLi4uIik7Ci0gICAgICAgIHRoaXNbc10oKTsKLSAgICAgICAgcHJpbnQoIiAgICBPSyEiKTsK
KyAgICBmb3IgKGxldCBzIGluIG9iamVjdCkgeworICAgICAgICBpZiAocy5zdGFydHNXaXRoKCJU
RVNUXyIpICYmIHMubWF0Y2goZmlsdGVyKSkgeworICAgICAgICAgICAgcHJpbnQocyArICIuLi4i
KTsKKyAgICAgICAgICAgIG9iamVjdFtzXSgpOworICAgICAgICAgICAgcHJpbnQoIiAgICBPSyEi
KTsKKyAgICAgICAgfQogICAgIH0KLX0KIAotbGV0IGFmdGVyID0gcHJlY2lzZVRpbWUoKTsKKyAg
ICBsZXQgYWZ0ZXIgPSBwcmVjaXNlVGltZSgpOworICAgIAorICAgIHByaW50KCJUaGF0IHRvb2sg
IiArIChhZnRlciAtIGJlZm9yZSkgKiAxMDAwICsgIiBtcy4iKTsKK30KIAotcHJpbnQoIlRoYXQg
dG9vayAiICsgKGFmdGVyIC0gYmVmb3JlKSAqIDEwMDAgKyAiIG1zLiIpOworaWYgKCF0aGlzLndp
bmRvdykKKyAgICBkb1Rlc3QodGhpcyk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9UeXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1R5cGUuanMJKHJldmlzaW9uIDIyMTUzOSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1R5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAgY2xhc3MgVHlwZSBl
eHRlbmRzIE5vZGUgewogICAgIGdldCB0eXBlUGFyYW1ldGVycygpIHsgcmV0dXJuIFtdOyB9CiAg
ICAgZ2V0IGtpbmQoKSB7IHJldHVybiBUeXBlOyB9CiAgICAgZ2V0IGlzUHRyKCkgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICBnZXQgaXNBcnJheVJlZigpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgCiAg
ICAgaW5oZXJpdHMocHJvdG9jb2wpCiAgICAgewpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvVHlwZVZhcmlhYmxlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1R5cGVWYXJpYWJsZS5qcwkocmV2aXNpb24gMjIxNTM5KQorKysgVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVZhcmlhYmxlLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC01NiwxMiArNTYsOCBAQCBjbGFzcyBUeXBlVmFyaWFibGUgZXh0ZW5kcyBUeXBlIHsKICAgICB7
CiAgICAgICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgVHlwZSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGxldCByZWFsVGhpcyA9IHVuaWZpY2F0aW9uQ29udGV4dC5maW5k
KHRoaXMpOwotICAgICAgICBpZiAocmVhbFRoaXMgIT0gdGhpcykKLSAgICAgICAgICAgIHJldHVy
biByZWFsVGhpcy51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyKTsKICAgICAgICAgCi0g
ICAgICAgIHVuaWZpY2F0aW9uQ29udGV4dC51bmlvbih0aGlzLCBvdGhlcik7Ci0gICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICByZXR1cm4gdGhpcy5fdHlwZVZhcmlhYmxlVW5pZnlJbXBsKHVu
aWZpY2F0aW9uQ29udGV4dCwgb3RoZXIpOwogICAgIH0KICAgICAKICAgICB1bmlmeUltcGwodW5p
ZmljYXRpb25Db250ZXh0LCBvdGhlcikKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1VuaWZpY2F0aW9uQ29udGV4dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9VbmlmaWNhdGlvbkNvbnRleHQuanMJKHJldmlzaW9uIDIyMTUzOSkKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1VuaWZpY2F0aW9uQ29udGV4dC5qcwkod29y
a2luZyBjb3B5KQpAQCAtNzcsMjYgKzc3LDM5IEBAIGNsYXNzIFVuaWZpY2F0aW9uQ29udGV4dCB7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAotICAgIHZlcmlmeSgpCisgICAg
dHlwZVBhcmFtZXRlcnMoKSB7IHJldHVybiB0aGlzLl90eXBlUGFyYW1ldGVyczsgfQorICAgICp0
eXBlQXJndW1lbnRzKCkKICAgICB7Ci0gICAgICAgIGZvciAobGV0IHR5cGVQYXJhbWV0ZXIgb2Yg
dGhpcy5fdHlwZVBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgIGlmICghdHlwZVBhcmFtZXRlci52
ZXJpZnlBc1BhcmFtZXRlcih0aGlzKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KICAgICAgICAgZm9yIChsZXQgdHlwZUFyZ3VtZW50IG9mIHRoaXMubm9kZXMpIHsK
ICAgICAgICAgICAgIGlmICghdHlwZUFyZ3VtZW50LmlzVW5pZmlhYmxlKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGVQYXJhbWV0ZXJzLmhhcyh0
eXBlQXJndW1lbnQpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgeWll
bGQgdHlwZUFyZ3VtZW50OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZlcmlmeSgpCisg
ICAgeworICAgICAgICBmb3IgKGxldCB0eXBlUGFyYW1ldGVyIG9mIHRoaXMuX3R5cGVQYXJhbWV0
ZXJzKSB7CisgICAgICAgICAgICBpZiAoIXR5cGVQYXJhbWV0ZXIudmVyaWZ5QXNQYXJhbWV0ZXIo
dGhpcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGxldCBudW1UeXBlVmFyaWFibGVBcmd1bWVudHMgPSAwOworICAgICAgICBsZXQgYXJndW1lbnRT
ZXQgPSBuZXcgU2V0KCk7CisgICAgICAgIGZvciAobGV0IHR5cGVBcmd1bWVudCBvZiB0aGlzLnR5
cGVBcmd1bWVudHMoKSkgewogICAgICAgICAgICAgaWYgKCF0eXBlQXJndW1lbnQudmVyaWZ5QXNB
cmd1bWVudCh0aGlzKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBhcmd1bWVudFNldC5hZGQodGhpcy5maW5kKHR5cGVBcmd1bWVudCkpOworICAgICAgICAgICAg
bnVtVHlwZVZhcmlhYmxlQXJndW1lbnRzKys7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIHJldHVybiBhcmd1bWVudFNldC5zaXplID09IG51bVR5cGVWYXJpYWJsZUFy
Z3VtZW50czsKICAgICB9CiAgICAgCi0gICAgaXNVbnVuaWZpZWQoKQorICAgIGNvbW1pdCgpCiAg
ICAgewotICAgICAgICByZXR1cm4gIXRoaXMuX25leHRNYXAuc2l6ZTsKKyAgICAgICAgZm9yIChs
ZXQgdHlwZUFyZ3VtZW50IG9mIHRoaXMudHlwZUFyZ3VtZW50cygpKQorICAgICAgICAgICAgdHlw
ZUFyZ3VtZW50LmNvbW1pdFVuaWZpY2F0aW9uKHRoaXMpOwogICAgIH0KIH0KIApJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFyaWFibGVSZWYuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFyaWFibGVSZWYuanMJKHJldmlzaW9uIDIy
MTUzOSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ZhcmlhYmxlUmVmLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBAIGNsYXNzIFZhcmlhYmxlUmVmIGV4dGVuZHMg
RXhwcmVzc2lvbiB7CiAgICAgZ2V0IHVuaWZ5Tm9kZSgpIHsgcmV0dXJuIHRoaXMudmFyaWFibGUu
dW5pZnlOb2RlOyB9CiAgICAgZ2V0IGlzTFZhbHVlKCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGdl
dCBhZGRyZXNzU3BhY2UoKSB7IHJldHVybiAidGhyZWFkIjsgfQorICAgIGdldCB1bmlmeU5vZGUo
KSB7IHJldHVybiB0aGlzLnZhcmlhYmxlOyB9CiAgICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qcwkocmV2aXNpb24g
MjIxNTM5KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qcwkod29y
a2luZyBjb3B5KQpAQCAtMjUsNiArMjUsMTAgQEAKICJ1c2Ugc3RyaWN0IjsKIAogY2xhc3MgVmlz
aXRvciB7CisgICAgY29uc3RydWN0b3IoKQorICAgIHsKKyAgICB9CisgICAgCiAgICAgdmlzaXRQ
cm9ncmFtKG5vZGUpCiAgICAgewogICAgICAgICBmb3IgKGxldCBzdGF0ZW1lbnQgb2Ygbm9kZS50
b3BMZXZlbFN0YXRlbWVudHMpCkBAIC0yMDYsNiArMjEwLDE3IEBAIGNsYXNzIFZpc2l0b3Igewog
ICAgIHsKICAgICB9CiAgICAgCisgICAgdmlzaXROdWxsTGl0ZXJhbChub2RlKQorICAgIHsKKyAg
ICAgICAgbm9kZS50eXBlLnZpc2l0KHRoaXMpOworICAgIH0KKyAgICAKKyAgICB2aXNpdE51bGxU
eXBlKG5vZGUpCisgICAgeworICAgICAgICBpZiAobm9kZS50eXBlKQorICAgICAgICAgICAgbm9k
ZS50eXBlLnZpc2l0KHRoaXMpOworICAgIH0KKyAgICAKICAgICB2aXNpdENhbGxFeHByZXNzaW9u
KG5vZGUpCiAgICAgewogICAgICAgICBmb3IgKGxldCB0eXBlQXJndW1lbnQgb2Ygbm9kZS50eXBl
QXJndW1lbnRzKQo=
</data>
<flag name="review"
          id="339985"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
          </attachment>
      

    </bug>

</bugzilla>