<?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>177044</bug_id>
          
          <creation_ts>2017-09-16 19:18:18 -0700</creation_ts>
          <short_desc>WSL needs a way to verify that structs are not cyclic</short_desc>
          <delta_ts>2018-10-13 16:36:45 -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>JavaScriptCore</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>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1349702</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-16 19:18:18 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351135</commentid>
    <comment_count>1</comment_count>
      <attachid>321412</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-20 23:00:46 -0700</bug_when>
    <thetext>Created attachment 321412
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351213</commentid>
    <comment_count>2</comment_count>
      <attachid>321412</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-09-21 09:29:05 -0700</bug_when>
    <thetext>Comment on attachment 321412
the patch

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

&gt; Tools/WebGPUShadingLanguageRI/Checker.js:64
&gt; +        let shaderType = node;

This doesn’t seem right. Should this be shaderType = node.shaderType;?

&gt; Tools/WebGPUShadingLanguageRI/Checker.js:85
&gt;          switch (node.shaderType) {

... and you can use it here?

&gt; Tools/WebGPUShadingLanguageRI/RecursiveTypeChecker.js:44
&gt; +        this._visiting.doVisit(node, () =&gt; super.visitStructType(node));

So linked lists will work, but struct Foo { Foo x; int y; } won’t.

&gt; Tools/WebGPUShadingLanguageRI/Test.js:4436
&gt; +        () =&gt; checkInt(program, callFunction(program, &quot;foo&quot;, [], []), -511),

I thought callFunction() caught theTrapError?

&gt; Tools/WebGPUShadingLanguageRI/Test.js:4463
&gt; +}

Can we test linked lists?

&gt; Tools/WebGPUShadingLanguageRI/Visitor.js:-98
&gt; -        Node.visit(node.type, this);

Why not? Because this type would be visited in some other part of the tree?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351225</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-21 09:43:11 -0700</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #2)
&gt; Comment on attachment 321412 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=321412&amp;action=review
&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Checker.js:64
&gt; &gt; +        let shaderType = node;
&gt; 
&gt; This doesn’t seem right. Should this be shaderType = node.shaderType;?

This should say &quot;let shaderFunc = node&quot;

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Checker.js:85
&gt; &gt;          switch (node.shaderType) {
&gt; 
&gt; ... and you can use it here?
&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/RecursiveTypeChecker.js:44
&gt; &gt; +        this._visiting.doVisit(node, () =&gt; super.visitStructType(node));
&gt; 
&gt; So linked lists will work, but struct Foo { Foo x; int y; } won’t.

Yeah

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Test.js:4436
&gt; &gt; +        () =&gt; checkInt(program, callFunction(program, &quot;foo&quot;, [], []), -511),
&gt; 
&gt; I thought callFunction() caught theTrapError?

I will fix this.  We need two versions of callFunction():

- A low-level version that does not catch trap error.
- A high-level version that does catch trap error.

We need the low-level one to write tests.

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Test.js:4463
&gt; &gt; +}
&gt; 
&gt; Can we test linked lists?

I can add that.

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Visitor.js:-98
&gt; &gt; -        Node.visit(node.type, this);
&gt; 
&gt; Why not? Because this type would be visited in some other part of the tree?

If we visit it here, then we&apos;ll get a JS stack overflow error anytime we try to typecheck a program with a linked list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351243</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-21 10:21:40 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #3)
&gt; (In reply to Myles C. Maxfield from comment #2)
&gt; &gt; Comment on attachment 321412 [details]
&gt; &gt; the patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=321412&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Tools/WebGPUShadingLanguageRI/Checker.js:64
&gt; &gt; &gt; +        let shaderType = node;
&gt; &gt; 
&gt; &gt; This doesn’t seem right. Should this be shaderType = node.shaderType;?
&gt; 
&gt; This should say &quot;let shaderFunc = node&quot;
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Tools/WebGPUShadingLanguageRI/Checker.js:85
&gt; &gt; &gt;          switch (node.shaderType) {
&gt; &gt; 
&gt; &gt; ... and you can use it here?
&gt; &gt; 
&gt; &gt; &gt; Tools/WebGPUShadingLanguageRI/RecursiveTypeChecker.js:44
&gt; &gt; &gt; +        this._visiting.doVisit(node, () =&gt; super.visitStructType(node));
&gt; &gt; 
&gt; &gt; So linked lists will work, but struct Foo { Foo x; int y; } won’t.
&gt; 
&gt; Yeah
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Tools/WebGPUShadingLanguageRI/Test.js:4436
&gt; &gt; &gt; +        () =&gt; checkInt(program, callFunction(program, &quot;foo&quot;, [], []), -511),
&gt; &gt; 
&gt; &gt; I thought callFunction() caught theTrapError?
&gt; 
&gt; I will fix this.  We need two versions of callFunction():
&gt; 
&gt; - A low-level version that does not catch trap error.
&gt; - A high-level version that does catch trap error.
&gt; 
&gt; We need the low-level one to write tests.

Oh snap.  This &quot;worked&quot; because you added a TrapException instead of using WTrapError, and then you didn&apos;t convert all of the places that used WTrapError to use TrapException.

Please use WTrapError. :-)  I&apos;ll fix that part of your code, and refactor callFunction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351258</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-21 10:41:33 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/222328/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353743</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:56:07 -0700</bug_when>
    <thetext>&lt;rdar://problem/34694297&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468929</commentid>
    <comment_count>7</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-10-13 16:36:45 -0700</bug_when>
    <thetext>Migrated to https://github.com/gpuweb/WHLSL/issues/130</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321412</attachid>
            <date>2017-09-20 23:00:46 -0700</date>
            <delta_ts>2017-09-21 09:29:05 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>19676</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMjMxMykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDUwIEBACisyMDE3LTA5LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgV1NMIG5lZWRzIGEgd2F5IHRvIHZlcmlmeSB0aGF0IHN0cnVjdHMgYXJlIG5vdCBj
eWNsaWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NzA0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBhZGRzIGEgcmVjdXJzaXZlIHR5cGUgY2hlY2tpbmcgcGhhc2UuIEV2ZW4gYmVm
b3JlIGFkZGluZyB0aGlzIHBoYXNlLCB0aGUgY29tcGlsZXIgd291bGQKKyAgICAgICAgc3VjY2Vz
c2Z1bGx5IGRldGVjdCByZWN1cnNpdmUgdHlwZXMgLSBidXQgYXQgdGhlIGNvc3Qgb2YgYWxzbyBy
ZWplY3RpbmcgcHJvZ3JhbXMgdGhhdCBoYWQKKyAgICAgICAgcmVjdXJzaXZlIHR5cGVzIGluZGly
ZWN0bHkgdGhyb3VnaCBwb2ludGVycy4gVG8gbWFrZSBib3RoIHRoaW5ncyB3b3JrLCBJIGhhZCB0
byBjaGFuZ2UgVmlzaXRvcgorICAgICAgICB0byBubyBsb25nZXIgdmlzaXQgVHlwZVJlZi50eXBl
IGJ5IGRlZmF1bHQuIFRoaXMgcmVzdWx0ZWQgaW4gc29tZSBvdGhlciBjaGFuZ2VzIGluIGEgZmV3
IG90aGVyCisgICAgICAgIHBhcnRzIG9mIHRoZSBjb2RlIHRoYXQgcHJldmlvdXNseSByZWxpZWQg
b24gdGhhdCBiZWhhdmlvci4KKworICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fs
bC5qczoKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja1JlY3Vyc2l2ZVR5
cGVzLmpzOiBBZGRlZC4KKyAgICAgICAgKGNoZWNrUmVjdXJzaXZlVHlwZXMpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanM6CisgICAgICAgIChDaGVja2VyLnBy
b3RvdHlwZS5fY2hlY2tTaGFkZXJUeXBlLk5vbk51bWVyaWNTZWFyY2hlci5wcm90b3R5cGUudmlz
aXRBcnJheVJlZlR5cGUpOgorICAgICAgICAoQ2hlY2tlci5wcm90b3R5cGUuX2NoZWNrU2hhZGVy
VHlwZS5Ob25OdW1lcmljU2VhcmNoZXIucHJvdG90eXBlLnZpc2l0UHRyVHlwZSk6CisgICAgICAg
IChDaGVja2VyLnByb3RvdHlwZS5fY2hlY2tTaGFkZXJUeXBlLk5vbk51bWVyaWNTZWFyY2hlci5w
cm90b3R5cGUudmlzaXRUeXBlUmVmKToKKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLl9jaGVj
a1NoYWRlclR5cGUuTm9uTnVtZXJpY1NlYXJjaGVyKToKKyAgICAgICAgKENoZWNrZXIucHJvdG90
eXBlLl9jaGVja1NoYWRlclR5cGUpOgorICAgICAgICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRU
eXBlUmVmKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIu
anM6CisgICAgICAgIChOYW1lUmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0UHJvdG9jb2xEZWNsKToK
KyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJlLmpzOgorICAgICAgICAo
bGV0LnByZXBhcmUpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JlY3Vyc2l2
ZVR5cGVDaGVja2VyLmpzOiBBZGRlZC4KKyAgICAgICAgKFJlY3Vyc2l2ZVR5cGVDaGVja2VyKToK
KyAgICAgICAgKFJlY3Vyc2l2ZVR5cGVDaGVja2VyLnByb3RvdHlwZS52aXNpdEZ1bmNEZWYpOgor
ICAgICAgICAoUmVjdXJzaXZlVHlwZUNoZWNrZXIucHJvdG90eXBlLnZpc2l0TmF0aXZlRnVuYyk6
CisgICAgICAgIChSZWN1cnNpdmVUeXBlQ2hlY2tlci5wcm90b3R5cGUudmlzaXRTdHJ1Y3RUeXBl
KToKKyAgICAgICAgKFJlY3Vyc2l2ZVR5cGVDaGVja2VyLnByb3RvdHlwZS52aXNpdFJlZmVyZW5j
ZVR5cGUpOgorICAgICAgICAoUmVjdXJzaXZlVHlwZUNoZWNrZXIucHJvdG90eXBlLnZpc2l0VHlw
ZVJlZik6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RydWN0TGF5b3V0QnVp
bGRlci5qczoKKyAgICAgICAgKFN0cnVjdExheW91dEJ1aWxkZXIucHJvdG90eXBlLnZpc2l0VHlw
ZVJlZik6CisgICAgICAgIChTdHJ1Y3RMYXlvdXRCdWlsZGVyKToKKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWw6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvVGVzdC5qczoKKyAgICAgICAgKFRFU1Rfc2ltcGxlUmVjdXJzaXZlU3RydWN0KToKKyAg
ICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlRGVmUmVzb2x2ZXIuanM6CisgICAg
ICAgIChUeXBlRGVmUmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0VHlwZVJlZik6CisgICAgICAgIChU
eXBlRGVmUmVzb2x2ZXIpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0
b3IuanM6CisgICAgICAgIChWaXNpdG9yLnByb3RvdHlwZS52aXNpdFByb3RvY29sRGVjbCk6Cisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvaW5kZXguaHRtbDoKKwogMjAxNy0wOS0y
MCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0
ZSB0ZXN0MjYyIHRlc3RzCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCShy
ZXZpc2lvbiAyMjIzMTIpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAgbG9hZCgiQ2FsbEZ1bmN0aW9uLmpzIik7
CiBsb2FkKCJDaGVjay5qcyIpOwogbG9hZCgiQ2hlY2tMaXRlcmFsVHlwZXMuanMiKTsKIGxvYWQo
IkNoZWNrTG9vcHMuanMiKTsKK2xvYWQoIkNoZWNrUmVjdXJzaXZlVHlwZXMuanMiKTsKIGxvYWQo
IkNoZWNrUmVjdXJzaW9uLmpzIik7CiBsb2FkKCJDaGVja1JldHVybnMuanMiKTsKIGxvYWQoIkNo
ZWNrVW5yZWFjaGFibGVDb2RlLmpzIik7CkBAIC0xMzEsNiArMTMyLDcgQEAgbG9hZCgiUHJvdG9j
b2xSZWYuanMiKTsKIGxvYWQoIlB0clR5cGUuanMiKTsKIGxvYWQoIlJlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24uanMiKTsKIGxvYWQoIlJlY3Vyc2lvbkNoZWNrZXIuanMiKTsKK2xvYWQoIlJlY3Vy
c2l2ZVR5cGVDaGVja2VyLmpzIik7CiBsb2FkKCJSZXNvbHZlTmFtZXMuanMiKTsKIGxvYWQoIlJl
c29sdmVPdmVybG9hZEltcGwuanMiKTsKIGxvYWQoIlJlc29sdmVQcm9wZXJ0aWVzLmpzIik7Cklu
ZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja1JlY3Vyc2l2ZVR5cGVzLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrUmVjdXJz
aXZlVHlwZXMuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvQ2hlY2tSZWN1cnNpdmVUeXBlcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmlj
dCI7CisKK2Z1bmN0aW9uIGNoZWNrUmVjdXJzaXZlVHlwZXMocHJvZ3JhbSkKK3sKKyAgICBwcm9n
cmFtLnZpc2l0KG5ldyBSZWN1cnNpdmVUeXBlQ2hlY2tlcigpKTsKK30KSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwkocmV2aXNpb24gMjIyMzEyKQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwkod29ya2luZyBjb3B5KQpAQCAt
NjAsNyArNjAsOCBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgewogICAg
ICAgICAvLyBGSVhNRTogUmVsYXggdGhlc2UgY2hlY2tzIG9uY2Ugd2UgaGF2ZSBpbXBsZW1lbnRl
ZCBzdXBwb3J0IGZvciB0ZXh0dXJlcyBhbmQgc2FtcGxlcnMuCiAgICAgICAgIGlmIChub2RlLnR5
cGVQYXJhbWV0ZXJzLmxlbmd0aCAhPSAwKQotICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJy
b3IoIkVudHJ5IHBvaW50ICIgKyBub2RlLm5hbWUgKyAiIG11c3Qgbm90IGhhdmUgdHlwZSBhcmd1
bWVudHMuIik7CisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5v
cmlnaW5TdHJpbmcsICJFbnRyeSBwb2ludCAiICsgbm9kZS5uYW1lICsgIiBtdXN0IG5vdCBoYXZl
IHR5cGUgYXJndW1lbnRzLiIpOworICAgICAgICBsZXQgc2hhZGVyVHlwZSA9IG5vZGU7CiAgICAg
ICAgIGNsYXNzIE5vbk51bWVyaWNTZWFyY2hlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICAg
ICAgY29uc3RydWN0b3IobmFtZSkKICAgICAgICAgICAgIHsKQEAgLTY5LDQyICs3MCw0NyBAQCBj
bGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB2aXNpdEFycmF5UmVmVHlwZShub2RlKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHRocm93IG5ldyBXVHlwZUVycm9yKHRoaXMuX25hbWUgKyAiIG11c3QgdHJhbnNpdGl2ZWx5IG9u
bHkgaGF2ZSBudW1lcmljIHR5cGVzLiIpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlw
ZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgc2hhZGVyVHlwZS5uYW1lICsgIiBtdXN0
IHRyYW5zaXRpdmVseSBvbmx5IGhhdmUgbnVtZXJpYyB0eXBlcy4iKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHZpc2l0UHRyVHlwZShub2RlKQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKHRoaXMuX25hbWUgKyAiIG11c3QgdHJhbnNpdGl2
ZWx5IG9ubHkgaGF2ZSBudW1lcmljIHR5cGVzLiIpOworICAgICAgICAgICAgICAgIHRocm93IG5l
dyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgc2hhZGVyVHlwZS5uYW1lICsg
IiBtdXN0IHRyYW5zaXRpdmVseSBvbmx5IGhhdmUgbnVtZXJpYyB0eXBlcy4iKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHZpc2l0VHlwZVJlZihub2RlKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHN1cGVyLnZpc2l0VHlwZVJlZihub2RlKTsKKyAgICAgICAgICAgICAgICBu
b2RlLnR5cGUudmlzaXQodGhpcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
c3dpdGNoIChub2RlLnNoYWRlclR5cGUpIHsKICAgICAgICAgY2FzZSAidmVydGV4IjoKICAgICAg
ICAgICAgIGlmICh0aGlzLl92ZXJ0ZXhFbnRyeVBvaW50cy5oYXMobm9kZS5uYW1lKSkKLSAgICAg
ICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcigiRHVwbGljYXRlIHZlcnRleCBlbnRyeSBw
b2ludCBuYW1lICIgKyBub2RlLm5hbWUpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlw
ZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkR1cGxpY2F0ZSB2ZXJ0ZXggZW50cnkg
cG9pbnQgbmFtZSAiICsgbm9kZS5uYW1lKTsKICAgICAgICAgICAgIHRoaXMuX3ZlcnRleEVudHJ5
UG9pbnRzLmFkZChub2RlLm5hbWUpOwogICAgICAgICAgICAgaWYgKCEobm9kZS5yZXR1cm5UeXBl
LnR5cGUgaW5zdGFuY2VvZiBTdHJ1Y3RUeXBlKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcg
V1R5cGVFcnJvcigiVmVydGV4IHNoYWRlciAiICsgbm9kZS5uYW1lICsgIiBtdXN0IHJldHVybiBh
IHN0cnVjdC4iKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9y
aWdpbi5vcmlnaW5TdHJpbmcsICJWZXJ0ZXggc2hhZGVyICIgKyBub2RlLm5hbWUgKyAiIG11c3Qg
cmV0dXJuIGEgc3RydWN0LiIpOwogICAgICAgICAgICAgZm9yIChsZXQgcGFyYW1ldGVyIG9mIG5v
ZGUucGFyYW1ldGVycykgewogICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXIudHlwZS50eXBl
IGluc3RhbmNlb2YgU3RydWN0VHlwZSkKICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLnR5
cGUudmlzaXQobmV3IE5vbk51bWVyaWNTZWFyY2hlcihub2RlLm5hbWUpKTsKICAgICAgICAgICAg
ICAgICBlbHNlIGlmICghKHBhcmFtZXRlci50eXBlLnR5cGUgaW5zdGFuY2VvZiBBcnJheVJlZlR5
cGUpKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm5hbWUg
KyAiIGFjY2VwdHMgYSBwYXJhbWV0ZXIgIiArIHBhcmFtZXRlci5uYW1lICsgIiB3aGljaCBpc24n
dCBhIHN0cnVjdCBhbmQgaXNuJ3QgYW4gQXJyYXlSZWYuIik7CisgICAgICAgICAgICAgICAgICAg
IHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgbm9kZS5uYW1l
ICsgIiBhY2NlcHRzIGEgcGFyYW1ldGVyICIgKyBwYXJhbWV0ZXIubmFtZSArICIgd2hpY2ggaXNu
J3QgYSBzdHJ1Y3QgYW5kIGlzbid0IGFuIEFycmF5UmVmLiIpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgbm9kZS5yZXR1cm5UeXBlLnR5cGUudmlzaXQobmV3IE5vbk51bWVyaWNTZWFyY2hl
cik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAiZnJhZ21lbnQiOgogICAgICAg
ICAgICAgaWYgKHRoaXMuX2ZyYWdtZW50RW50cnlQb2ludHMuaGFzKG5vZGUubmFtZSkpCi0gICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3IoIkR1cGxpY2F0ZSBmcmFnbWVudCBlbnRy
eSBwb2ludCBuYW1lICIgKyBub2RlLm5hbWUpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBX
VHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkR1cGxpY2F0ZSBmcmFnbWVudCBl
bnRyeSBwb2ludCBuYW1lICIgKyBub2RlLm5hbWUpOwogICAgICAgICAgICAgdGhpcy5fZnJhZ21l
bnRFbnRyeVBvaW50cy5hZGQobm9kZS5uYW1lKTsKICAgICAgICAgICAgIGlmICghKG5vZGUucmV0
dXJuVHlwZS50eXBlIGluc3RhbmNlb2YgU3RydWN0VHlwZSkpCi0gICAgICAgICAgICAgICAgdGhy
b3cgbmV3IFdUeXBlRXJyb3IoIkZyYWdtZW50IHNoYWRlciAiICsgbm9kZS5uYW1lICsgIiBtdXN0
IHJldHVybiBhIHN0cnVjdC4iKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJv
cihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJGcmFnbWVudCBzaGFkZXIgIiArIG5vZGUubmFt
ZSArICIgbXVzdCByZXR1cm4gYSBzdHJ1Y3QuIik7CiAgICAgICAgICAgICBmb3IgKGxldCBwYXJh
bWV0ZXIgb2Ygbm9kZS5wYXJhbWV0ZXJzKSB7CiAgICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRl
ci5uYW1lID09ICJzdGFnZUluIikgewogICAgICAgICAgICAgICAgICAgICBpZiAoIShwYXJhbWV0
ZXIudHlwZS50eXBlIGluc3RhbmNlb2YgU3RydWN0VHlwZSkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcigiRnJhZ21lbnQgZW50cnkgcG9pbnRzJyBzdGFnZUlu
IHBhcmFtZXRlciAob2YgIiArIG5vZGUubmFtZSArICIpIG11c3QgYmUgYSBzdHJ1Y3QgdHlwZS4i
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3Jp
Z2luLm9yaWdpblN0cmluZywgIkZyYWdtZW50IGVudHJ5IHBvaW50cycgc3RhZ2VJbiBwYXJhbWV0
ZXIgKG9mICIgKyBub2RlLm5hbWUgKyAiKSBtdXN0IGJlIGEgc3RydWN0IHR5cGUuIik7CiAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtZXRlci50eXBlLnZpc2l0KG5ldyBOb25OdW1lcmljU2VhcmNo
ZXIobm9kZS5uYW1lKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCEocGFyYW1ldGVyLnR5cGUudHlwZSBpbnN0YW5jZW9mIEFycmF5UmVmVHlwZSkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcigiRnJhZ21lbnQg
ZW50cnkgcG9pbnQncyAiICsgcGFyYW1ldGVyLm5hbWUgKyAiIHBhcmFtZXRlciBpcyBub3QgYW4g
YXJyYXkgcmVmZXJlbmNlLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdU
eXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiRnJhZ21lbnQgZW50cnkgcG9pbnQn
cyAiICsgcGFyYW1ldGVyLm5hbWUgKyAiIHBhcmFtZXRlciBpcyBub3QgYW4gYXJyYXkgcmVmZXJl
bmNlLiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG5v
ZGUucmV0dXJuVHlwZS50eXBlLnZpc2l0KG5ldyBOb25OdW1lcmljU2VhcmNoZXIpOwpAQCAtMjA5
LDcgKzIxNSw4IEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICB7CiAgICAg
ICAgIGlmICghbm9kZS50eXBlKQogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUeXBlIHJl
ZmVyZW5jZSB3aXRob3V0IGEgdHlwZSBpbiBjaGVja2VyOiAiICsgbm9kZSArICIgYXQgIiArIG5v
ZGUub3JpZ2luKTsKLSAgICAgICAgbm9kZS50eXBlLnZpc2l0KHRoaXMpOworICAgICAgICBpZiAo
IShub2RlLnR5cGUgaW5zdGFuY2VvZiBTdHJ1Y3RUeXBlKSkKKyAgICAgICAgICAgIG5vZGUudHlw
ZS52aXNpdCh0aGlzKTsKICAgICAgICAgdGhpcy5fY2hlY2tUeXBlQXJndW1lbnRzKG5vZGUub3Jp
Z2luLCBub2RlLnR5cGUudHlwZVBhcmFtZXRlcnMsIG5vZGUudHlwZUFyZ3VtZW50cyk7CiAgICAg
fQogICAgIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZVJlc29sdmVy
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVSZXNv
bHZlci5qcwkocmV2aXNpb24gMjIyMzEyKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvTmFtZVJlc29sdmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsOCArMjExLDYgQEAgY2xh
c3MgTmFtZVJlc29sdmVyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgICAgICBpZiAoIXBhcmFt
ZXRlcklzVHlwZSAmJiBhcmd1bWVudElzVHlwZSkKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcg
V1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJFeHBlY3RlZCB2YWx1ZSwgYnV0
IGdvdCB0eXBlIGF0IGFyZ3VtZW50ICMiICsgaSk7CiAgICAgICAgIH0KLQotICAgICAgICBzdXBl
ci52aXNpdFR5cGVSZWYobm9kZSk7CiAgICAgfQogICAgIAogICAgIHZpc2l0UmVmZXJlbmNlVHlw
ZShub2RlKQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJlLmpzCShy
ZXZpc2lvbiAyMjIzMTIpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJl
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC00NSw4ICs0NSw3IEBAIGxldCBwcmVwYXJlID0gKCgpID0+
IHsKICAgICAgICAgcmVzb2x2ZU5hbWVzSW5Qcm90b2NvbHMocHJvZ3JhbSwgbmFtZVJlc29sdmVy
KTsKICAgICAgICAgcmVzb2x2ZVR5cGVEZWZzSW5UeXBlcyhwcm9ncmFtKTsKICAgICAgICAgcmVz
b2x2ZVR5cGVEZWZzSW5Qcm90b2NvbHMocHJvZ3JhbSk7Ci0gICAgICAgIC8vIEZJWE1FOiBOZWVk
IHRvIHZlcmlmeSB0aGF0IHN0cnVjdHJlIGFyZSBub3QgY3ljbGljLgotICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MDQ0CisgICAgICAgIGNoZWNr
UmVjdXJzaXZlVHlwZXMocHJvZ3JhbSk7CiAgICAgICAgIHN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3Nv
cnMocHJvZ3JhbSk7CiAgICAgICAgIHN5bnRoZXNpemVFbnVtRnVuY3Rpb25zKHByb2dyYW0pOwog
ICAgICAgICByZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpOwpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVjdXJzaXZlVHlwZUNoZWNrZXIu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVjdXJzaXZl
VHlwZUNoZWNrZXIuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUmVjdXJzaXZlVHlwZUNoZWNrZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBz
dHJpY3QiOworCitjbGFzcyBSZWN1cnNpdmVUeXBlQ2hlY2tlciBleHRlbmRzIFZpc2l0b3Igewor
ICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CisgICAgICAgIHRoaXMu
X3Zpc2l0aW5nID0gbmV3IFZpc2l0aW5nU2V0KCk7CisgICAgfQorICAgIAorICAgIHZpc2l0RnVu
Y0RlZihub2RlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdmlzaXROYXRpdmVGdW5jKG5vZGUp
CisgICAgeworICAgIH0KKyAgICAKKyAgICB2aXNpdFN0cnVjdFR5cGUobm9kZSkKKyAgICB7Cisg
ICAgICAgIHRoaXMuX3Zpc2l0aW5nLmRvVmlzaXQobm9kZSwgKCkgPT4gc3VwZXIudmlzaXRTdHJ1
Y3RUeXBlKG5vZGUpKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRSZWZlcmVuY2VUeXBlKG5vZGUp
CisgICAgeworICAgIH0KKyAgICAKKyAgICB2aXNpdFR5cGVSZWYobm9kZSkKKyAgICB7CisgICAg
ICAgIHN1cGVyLnZpc2l0VHlwZVJlZihub2RlKTsKKyAgICAgICAgbm9kZS50eXBlLnZpc2l0KHRo
aXMpOworICAgIH0KK30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3Ry
dWN0TGF5b3V0QnVpbGRlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9TdHJ1Y3RMYXlvdXRCdWlsZGVyLmpzCShyZXZpc2lvbiAyMjIzMTIpCisrKyBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RMYXlvdXRCdWlsZGVyLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC02NSw1ICs2NSwxMSBAQCBjbGFzcyBTdHJ1Y3RMYXlvdXRCdWlsZGVyIGV4dGVu
ZHMgVmlzaXRvCiAgICAgICAgIHN1cGVyLnZpc2l0TmF0aXZlRnVuY0luc3RhbmNlKG5vZGUpOwog
ICAgICAgICBub2RlLmZ1bmMuZGlkTGF5b3V0U3RydWN0c0luSW1wbGVtZW50YXRpb25EYXRhKG5v
ZGUuaW1wbGVtZW50YXRpb25EYXRhKTsKICAgICB9CisgICAgCisgICAgdmlzaXRUeXBlUmVmKG5v
ZGUpCisgICAgeworICAgICAgICBzdXBlci52aXNpdFR5cGVSZWYobm9kZSk7CisgICAgICAgIG5v
ZGUudHlwZS52aXNpdCh0aGlzKTsKKyAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9UZXN0Lmh0bWwJKHJldmlzaW9uIDIyMjMxMikKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogPHNjcmlwdCBzcmM9IkNoZWNrTGl0ZXJhbFR5cGVzLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQg
c3JjPSJDaGVja0xvb3BzLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJDaGVja1JlY3Vyc2lv
bi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iQ2hlY2tSZWN1cnNpdmVUeXBlcy5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHNyYz0iQ2hlY2tSZXR1cm5zLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQg
c3JjPSJDaGVja1VucmVhY2hhYmxlQ29kZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQ2hl
Y2tXcmFwcGVkLmpzIj48L3NjcmlwdD4KQEAgLTEwOCw2ICsxMDksNyBAQAogPHNjcmlwdCBzcmM9
IlB0clR5cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlJlY3Vyc2lvbkNoZWNrZXIuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9IlJlY3Vyc2l2ZVR5cGVDaGVja2VyLmpzIj48L3NjcmlwdD4K
IDxzY3JpcHQgc3JjPSJSZXNvbHZlTmFtZXMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlJl
c29sdmVPdmVybG9hZEltcGwuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlJlc29sdmVQcm9w
ZXJ0aWVzLmpzIj48L3NjcmlwdD4KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1Rlc3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVz
dC5qcwkocmV2aXNpb24gMjIyMzEyKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
VGVzdC5qcwkod29ya2luZyBjb3B5KQpAQCAtNDM4Nyw2ICs0Mzg3LDgxIEBAIGZ1bmN0aW9uIFRF
U1Rfc3dpenpsZSgpCiAgICAgY2hlY2tGbG9hdChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbzMiLCBbXSwgW10pLCA0KTsKIH0KIAorZnVuY3Rpb24gVEVTVF9zaW1wbGVSZWN1cnNp
dmVTdHJ1Y3QoKQoreworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gZG9QcmVwKGAKKyAg
ICAgICAgICAgIHN0cnVjdCBGb28geworICAgICAgICAgICAgICAgIEZvbyBmb287CisgICAgICAg
ICAgICB9CisgICAgICAgIGApLAorICAgICAgICBlID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9y
KTsKK30KKworZnVuY3Rpb24gVEVTVF9tdXR1YWxseVJlY3Vyc2l2ZVN0cnVjdCgpCit7CisgICAg
Y2hlY2tGYWlsKAorICAgICAgICAoKSA9PiBkb1ByZXAoYAorICAgICAgICAgICAgc3RydWN0IEZv
byB7CisgICAgICAgICAgICAgICAgQmFyIGJhcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHN0cnVjdCBCYXIgeworICAgICAgICAgICAgICAgIEZvbyBmb287CisgICAgICAgICAgICB9Cisg
ICAgICAgIGApLAorICAgICAgICBlID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yKTsKK30KKwor
ZnVuY3Rpb24gVEVTVF9tdXR1YWxseVJlY3Vyc2l2ZVN0cnVjdFdpdGhQb2ludGVyc0Jyb2tlbigp
Cit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBzdHJ1Y3QgRm9vIHsKKyAg
ICAgICAgICAgIHRocmVhZCBCYXJeIGJhcjsKKyAgICAgICAgICAgIGludCBmb287CisgICAgICAg
IH0KKyAgICAgICAgc3RydWN0IEJhciB7CisgICAgICAgICAgICB0aHJlYWQgRm9vXiBmb287Cisg
ICAgICAgICAgICBpbnQgYmFyOworICAgICAgICB9CisgICAgICAgIGludCBmb28oKQorICAgICAg
ICB7CisgICAgICAgICAgICBGb28gZm9vOworICAgICAgICAgICAgQmFyIGJhcjsKKyAgICAgICAg
ICAgIGZvby5mb28gPSA1NjQ7CisgICAgICAgICAgICBiYXIuYmFyID0gNTM7CisgICAgICAgICAg
ICByZXR1cm4gZm9vLmJhci0+YmFyIC0gYmFyLmZvby0+Zm9vOworICAgICAgICB9CisgICAgYCk7
CisgICAgY2hlY2tGYWlsKAorICAgICAgICAoKSA9PiBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbXSksIC01MTEpLAorICAgICAgICBlID0+IGUgaW5z
dGFuY2VvZiBXVHJhcEVycm9yKTsKK30KKworZnVuY3Rpb24gVEVTVF9tdXR1YWxseVJlY3Vyc2l2
ZVN0cnVjdFdpdGhQb2ludGVycygpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAg
ICAgICBzdHJ1Y3QgRm9vIHsKKyAgICAgICAgICAgIHRocmVhZCBCYXJeIGJhcjsKKyAgICAgICAg
ICAgIGludCBmb287CisgICAgICAgIH0KKyAgICAgICAgc3RydWN0IEJhciB7CisgICAgICAgICAg
ICB0aHJlYWQgRm9vXiBmb287CisgICAgICAgICAgICBpbnQgYmFyOworICAgICAgICB9CisgICAg
ICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBGb28gZm9vOworICAgICAgICAg
ICAgQmFyIGJhcjsKKyAgICAgICAgICAgIGZvby5iYXIgPSAmYmFyOworICAgICAgICAgICAgYmFy
LmZvbyA9ICZmb287CisgICAgICAgICAgICBmb28uZm9vID0gNTY0OworICAgICAgICAgICAgYmFy
LmJhciA9IDUzOworICAgICAgICAgICAgcmV0dXJuIGZvby5iYXItPmJhciAtIGJhci5mb28tPmZv
bzsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW10sIFtdKSwgLTUxMSk7Cit9CisKIGxldCBmaWx0ZXIgPSAvLiov
OyAvLyBydW4gZXZlcnl0aGluZyBieSBkZWZhdWx0CiBpZiAodGhpc1siYXJndW1lbnRzIl0pIHsK
ICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewpAQCAtNDQy
NCw3ICs0NDk5LDEwIEBAIGZ1bmN0aW9uKiBkb1Rlc3Qob2JqZWN0KQogICAgIHByaW50KCJUaGF0
IHRvb2sgIiArIChhZnRlciAtIGJlZm9yZSkgKiAxMDAwICsgIiBtcy4iKTsKIH0KIAotaWYgKCF0
aGlzLndpbmRvdykKK2lmICghdGhpcy53aW5kb3cpIHsKKyAgICBFcnJvci5zdGFja1RyYWNlTGlt
aXQgPSBJbmZpbml0eTsKICAgICBmb3IgKGxldCBfIG9mIGRvVGVzdCh0aGlzKSkgeyB9Cit9CisK
IAogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlRGVmUmVzb2x2ZXIu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZURlZlJl
c29sdmVyLmpzCShyZXZpc2lvbiAyMjIzMTIpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9UeXBlRGVmUmVzb2x2ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDggQEAg
Y2xhc3MgVHlwZURlZlJlc29sdmVyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgdmlzaXRUeXBlUmVm
KG5vZGUpCiAgICAgewogICAgICAgICB0aGlzLl92aXNpdGluZy5kb1Zpc2l0KG5vZGUsICgpID0+
IHsKLSAgICAgICAgICAgIHN1cGVyLnZpc2l0VHlwZVJlZihub2RlKTsKKyAgICAgICAgICAgIGZv
ciAobGV0IHR5cGVBcmd1bWVudCBvZiBub2RlLnR5cGVBcmd1bWVudHMpCisgICAgICAgICAgICAg
ICAgdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMpOwogICAgICAgICAgICAgaWYgKG5vZGUudHlwZSBp
bnN0YW5jZW9mIFR5cGVEZWYpIHsKICAgICAgICAgICAgICAgICBsZXQgdW5pZmljYXRpb25Db250
ZXh0ID0gbmV3IFVuaWZpY2F0aW9uQ29udGV4dChub2RlLnR5cGUudHlwZVBhcmFtZXRlcnMpOwog
ICAgICAgICAgICAgICAgIGlmIChub2RlLnR5cGVBcmd1bWVudHMubGVuZ3RoICE9IG5vZGUudHlw
ZS50eXBlUGFyYW1ldGVycy5sZW5ndGgpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9WaXNpdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1Zpc2l0b3IuanMJKHJldmlzaW9uIDIyMjMxMikKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1Zpc2l0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDYgQEAgY2xh
c3MgVmlzaXRvciB7CiAgICAgewogICAgICAgICBmb3IgKGxldCB0eXBlQXJndW1lbnQgb2Ygbm9k
ZS50eXBlQXJndW1lbnRzKQogICAgICAgICAgICAgdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMpOwot
ICAgICAgICBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7CiAgICAgfQogICAgIAogICAgIHZp
c2l0TmF0aXZlVHlwZShub2RlKQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
aW5kZXguaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9p
bmRleC5odG1sCShyZXZpc2lvbiAyMjIzMTIpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9pbmRleC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiA8c2NyaXB0
IHNyYz0iQ2hlY2tMaXRlcmFsVHlwZXMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkNoZWNr
TG9vcHMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkNoZWNrUmVjdXJzaW9uLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJDaGVja1JlY3Vyc2l2ZVR5cGVzLmpzIj48L3NjcmlwdD4KIDxz
Y3JpcHQgc3JjPSJDaGVja1JldHVybnMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkNoZWNr
VW5yZWFjaGFibGVDb2RlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJDaGVja1dyYXBwZWQu
anMiPjwvc2NyaXB0PgpAQCAtMTA4LDYgKzEwOSw3IEBACiA8c2NyaXB0IHNyYz0iUHRyVHlwZS5q
cyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5qcyI+
PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmVjdXJzaW9uQ2hlY2tlci5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iUmVjdXJzaXZlVHlwZUNoZWNrZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBz
cmM9IlJlc29sdmVOYW1lcy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmVzb2x2ZU92ZXJs
b2FkSW1wbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmVzb2x2ZVByb3BlcnRpZXMuanMi
Pjwvc2NyaXB0Pgo=
</data>
<flag name="review"
          id="341402"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
          </attachment>
      

    </bug>

</bugzilla>