<?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>155099</bug_id>
          
          <creation_ts>2016-03-06 16:04:58 -0800</creation_ts>
          <short_desc>[ES6] Implement Proxy.[[GetPrototypeOf]]</short_desc>
          <delta_ts>2016-03-07 15:28:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sukolsak</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1171479</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-03-06 16:04:58 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171733</commentid>
    <comment_count>1</comment_count>
      <attachid>273207</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-03-07 13:53:31 -0800</bug_when>
    <thetext>Created attachment 273207
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171735</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-07 13:55:37 -0800</bug_when>
    <thetext>Attachment 273207 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/ProxyObject.cpp:1051:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/ProxyObject.cpp:1053:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 2 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171742</commentid>
    <comment_count>3</comment_count>
      <attachid>273207</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-03-07 14:11:03 -0800</bug_when>
    <thetext>Comment on attachment 273207
patch

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

&gt; Source/JavaScriptCore/runtime/ProxyObject.cpp:1035
&gt; +    if (handlerValue.isNull()) {
&gt; +        throwVMTypeError(exec, ASCIILiteral(&quot;Proxy &apos;handler&apos; is null. It should be an Object.&quot;));
&gt; +        return JSValue();
&gt; +    }

The only way to get to performGetPrototype() is thru performProxyGet().  The only way to get to performProxyGet() is thru ProxyObject::getOwnPropertySlotCommon() returning a slot getter.  And ProxyObject::getOwnPropertySlotCommon() can only be called on a ProxyObject.  Hence, shouldn&apos;t this be an assert instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171748</commentid>
    <comment_count>4</comment_count>
      <attachid>273207</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-03-07 14:21:00 -0800</bug_when>
    <thetext>Comment on attachment 273207
patch

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

&gt;&gt; Source/JavaScriptCore/runtime/ProxyObject.cpp:1035
&gt;&gt; +    }
&gt; 
&gt; The only way to get to performGetPrototype() is thru performProxyGet().  The only way to get to performProxyGet() is thru ProxyObject::getOwnPropertySlotCommon() returning a slot getter.  And ProxyObject::getOwnPropertySlotCommon() can only be called on a ProxyObject.  Hence, shouldn&apos;t this be an assert instead?

My mistake.  I didn&apos;t see the call from ProxyObject::getPrototype() below.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171751</commentid>
    <comment_count>5</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-03-07 14:24:21 -0800</bug_when>
    <thetext>I spoke with Mark in person.
For posterity:
calls to &quot;proxy.__proto__&quot; will route through performProxyGet.
Reflect/Object.getOwnPrototype will call straight through
to the method table implementation which calls through
to performProxyGet(.).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171767</commentid>
    <comment_count>6</comment_count>
      <attachid>273207</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-03-07 14:51:21 -0800</bug_when>
    <thetext>Comment on attachment 273207
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171805</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-03-07 15:28:31 -0800</bug_when>
    <thetext>thanks for the review.
Landed in:
http://trac.webkit.org/changeset/197711</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273207</attachid>
            <date>2016-03-07 13:53:31 -0800</date>
            <delta_ts>2016-03-07 14:51:21 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>17824</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk3NzA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBA
CisyMDE2LTAzLTA3ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFtFUzZdIEltcGxlbWVudCBQcm94eS5bW0dldFByb3RvdHlwZU9mXV0KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTA5OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdo
dCBmb3J3YXJkIGltcGxlbWVudGF0aW9uIG9mIFByb3h5LltbR2V0UHJvdG90eXBlT2ZdXQorICAg
ICAgICB3aXRoIHJlc3BlY3QgdG8gc2VjdGlvbiA5LjUuMSBvZiB0aGUgRUNNQVNjcmlwdCBzcGVj
LgorICAgICAgICBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1wcm94eS1vYmpl
Y3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xvdHMtZ2V0cHJvdG90eXBlb2YKKwor
ICAgICAgICAqIHJ1bnRpbWUvUHJveHlPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpwZXJmb3Jt
UHJveHlHZXQpOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6c2V0UHJvdG90eXBlKToKKyAg
ICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1HZXRQcm90b3R5cGUpOgorICAgICAgICAo
SlNDOjpQcm94eU9iamVjdDo6Z2V0UHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6UHJveHlPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvUHJveHlPYmplY3QuaDoKKyAg
ICAgICAgKiB0ZXN0cy9lczYueWFtbDoKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvcHJveHktZ2V0
LXByb3RvdHlwZS1vZi5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAodGhy
b3cubmV3LkVycm9yLmxldC5oYW5kbGVyLmdldCBnZXRQcm90b3R5cGVPZik6CisgICAgICAgICh0
aHJvdy5uZXcuRXJyb3IuZ2V0IGxldCk6CisgICAgICAgICh0aHJvdy5uZXcuRXJyb3IuZ2V0IGNh
dGNoKToKKyAgICAgICAgKHRocm93Lm5ldy5FcnJvcik6CisgICAgICAgIChhc3NlcnQubGV0Lmhh
bmRsZXIuZ2V0UHJvdG90eXBlT2YpOgorICAgICAgICAoYXNzZXJ0LmdldCBsZXQpOgorICAgICAg
ICAoYXNzZXJ0LmdldCBjYXRjaCk6CisgICAgICAgIChhc3NlcnQuKToKKyAgICAgICAgKGxldC5o
YW5kbGVyLmdldFByb3RvdHlwZU9mKToKKyAgICAgICAgKGdldCBsZXQpOgorICAgICAgICAobGV0
LmhhbmRsZXIuaGFzKToKKwogMjAxNi0wMy0wNyAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNv
bT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiByZW5hbWUgZ2VuZXJhdGVkICpFbnVtQ29udmVy
c2lvbkhlbHBlcnMuaCB0byAqVHlwZUNvbnZlcnNpb25zLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHJldmlzaW9uIDE5NzY5NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTAxLDYgKzEwMSw5IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBwZXJmb3JtUHJv
eHlHZXQoRXgKICAgICBQcm94eU9iamVjdCogcHJveHlPYmplY3QgPSBqc0Nhc3Q8UHJveHlPYmpl
Y3QqPihwcm94eU9iamVjdEFzT2JqZWN0KTsKICAgICBKU09iamVjdCogdGFyZ2V0ID0gcHJveHlP
YmplY3QtPnRhcmdldCgpOwogCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5h
bWVzLT51bmRlcnNjb3JlUHJvdG8pCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocHJv
eHlPYmplY3QtPnBlcmZvcm1HZXRQcm90b3R5cGUoZXhlYykpOworCiAgICAgYXV0byBwZXJmb3Jt
RGVmYXVsdEdldCA9IFsmXSB7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGFyZ2V0
LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lKSk7CiAgICAgfTsKQEAgLTEwMjEsNiArMTAyNCw2MCBA
QCBib29sIFByb3h5T2JqZWN0OjpzZXRQcm90b3R5cGUoSlNPYmplY3QqCiAgICAgcmV0dXJuIGpz
Q2FzdDxQcm94eU9iamVjdCo+KG9iamVjdCktPnBlcmZvcm1TZXRQcm90b3R5cGUoZXhlYywgcHJv
dG90eXBlLCBzaG91bGRUaHJvd0lmQ2FudFNldCk7CiB9CiAKK0pTVmFsdWUgUHJveHlPYmplY3Q6
OnBlcmZvcm1HZXRQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisKKyAgICBKU1ZhbHVlIGhhbmRsZXJWYWx1ZSA9IHRoaXMtPmhhbmRsZXIoKTsK
KyAgICBpZiAoaGFuZGxlclZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJy
b3IoZXhlYywgQVNDSUlMaXRlcmFsKCJQcm94eSAnaGFuZGxlcicgaXMgbnVsbC4gSXQgc2hvdWxk
IGJlIGFuIE9iamVjdC4iKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgfQorCisg
ICAgSlNPYmplY3QqIGhhbmRsZXIgPSBqc0Nhc3Q8SlNPYmplY3QqPihoYW5kbGVyVmFsdWUpOwor
ICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBlOworICAgIEpTVmFs
dWUgZ2V0UHJvdG90eXBlT2ZNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERh
dGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgImdldFByb3RvdHlwZU9mIiksIEFTQ0lJ
TGl0ZXJhbCgiJ2dldFByb3RvdHlwZU9mJyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBz
aG91bGQgYmUgY2FsbGFibGUuIikpOworICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWUoKTsKKworICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQo
KTsKKyAgICBpZiAoZ2V0UHJvdG90eXBlT2ZNZXRob2QuaXNVbmRlZmluZWQoKSkKKyAgICAgICAg
cmV0dXJuIHRhcmdldC0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKKworICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGFyZ3VtZW50czsKKyAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CisgICAg
SlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBnZXRQcm90b3R5cGVPZk1ldGhvZCwgY2Fs
bFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOworICAgIGlmICh2bS5leGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgCisgICAg
aWYgKCF0cmFwUmVzdWx0LmlzT2JqZWN0KCkgJiYgIXRyYXBSZXN1bHQuaXNOdWxsKCkpIHsKKyAg
ICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlByb3h5IGhhbmRsZXIn
cyAnZ2V0UHJvdG90eXBlT2YnIHRyYXAgc2hvdWxkIGVpdGhlciByZXR1cm4gYW4gb2JqZWN0IG9y
IG51bGwuIikpOworICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgIH0KKworICAgIGJvb2wg
dGFyZ2V0SXNFeHRlbnNpYmxlID0gdGFyZ2V0LT5pc0V4dGVuc2libGUoZXhlYyk7CisgICAgaWYg
KHZtLmV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgIGlmICh0YXJn
ZXRJc0V4dGVuc2libGUpCisgICAgICAgIHJldHVybiB0cmFwUmVzdWx0OworCisgICAgSlNWYWx1
ZSB0YXJnZXRQcm90b3R5cGUgPSB0YXJnZXQtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7CisgICAg
aWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgIGlmICgh
c2FtZVZhbHVlKGV4ZWMsIHRhcmdldFByb3RvdHlwZSwgdHJhcFJlc3VsdCkpIHsKKyAgICAgICAg
dGhyb3dWTVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlByb3h5J3MgJ2dldFByb3RvdHlw
ZU9mJyB0cmFwIGZvciBhIG5vbi1leHRlbnNpYmxlIHRhcmdldCBzaG91bGQgcmV0dXJuIHRoZSBz
YW1lIHZhbHVlIGFzIHRoZSB0YXJnZXQncyBwcm90b3R5cGUuIikpOworICAgICAgICByZXR1cm4g
SlNWYWx1ZSgpOworICAgIH0KKworICAgIHJldHVybiB0cmFwUmVzdWx0OworfQorCitKU1ZhbHVl
IFByb3h5T2JqZWN0OjpnZXRQcm90b3R5cGUoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIHJldHVybiBqc0Nhc3Q8UHJveHlPYmplY3QqPihvYmplY3QpLT5wZXJmb3Jt
R2V0UHJvdG90eXBlKGV4ZWMpOworfQorCiB2b2lkIFByb3h5T2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUHJveHlPYmplY3Qq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkocmV2aXNpb24gMTk3Njk2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNjUsNiArNjUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2Vs
bCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7
CiAgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIHZvaWQgcHV0
QnlJbmRleENvbW1vbihFeGVjU3RhdGUqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHB1dFZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBKU1Zh
bHVlIHBlcmZvcm1HZXRQcm90b3R5cGUoRXhlY1N0YXRlKik7CiAKIHByaXZhdGU6CiAgICAgUHJv
eHlPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqKTsKQEAgLTg0LDYgKzg1LDcgQEAgcHJpdmF0ZToKICAg
ICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldFN0cnVjdHVyZVByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSk7CiAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBnZXRHZW5l
cmljUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5
JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBzdGF0aWMgYm9vbCBzZXRQcm90b3R5cGUoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlIHByb3RvdHlwZSwgYm9vbCBzaG91bGRUaHJvd0lmQ2Fu
dFNldCk7CisgICAgc3RhdGljIEpTVmFsdWUgZ2V0UHJvdG90eXBlKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOwogCiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9lczYueWFtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
ZXM2LnlhbWwJKHJldmlzaW9uIDE5NzY5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9lczYueWFtbAkod29ya2luZyBjb3B5KQpAQCAtOTI3LDcgKzkyNyw3IEBACiAtIHBhdGg6IGVz
Ni9Qcm94eV9nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JfaGFuZGxlci5qcwogICBjbWQ6IHJ1bkVT
NiA6bm9ybWFsCiAtIHBhdGg6IGVzNi9Qcm94eV9nZXRQcm90b3R5cGVPZl9oYW5kbGVyLmpzCi0g
IGNtZDogcnVuRVM2IDpmYWlsCisgIGNtZDogcnVuRVM2IDpub3JtYWwKIC0gcGF0aDogZXM2L1By
b3h5X2hhc19oYW5kbGVyLmpzCiAgIGNtZDogcnVuRVM2IDpub3JtYWwKIC0gcGF0aDogZXM2L1By
b3h5X2hhc19oYW5kbGVyX2luc3RhbmNlc19vZl9wcm94aWVzLmpzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3h5LWdldC1wcm90b3R5cGUtb2YuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm94eS1nZXQtcHJv
dG90eXBlLW9mLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9wcm94eS1nZXQtcHJvdG90eXBlLW9mLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDQyIEBACitmdW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uLiIpOworfQorCit7CisgICAgbGV0IHRhcmdldCA9
IHt9OworICAgIGxldCBlcnJvciA9IG51bGw7CisgICAgbGV0IGhhbmRsZXIgPSB7CisgICAgICAg
IGdldCBnZXRQcm90b3R5cGVPZigpIHsKKyAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yOwor
ICAgICAgICAgICAgdGhyb3cgZXJyb3I7CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAgIGxl
dCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpOworICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgNTAwOyBpKyspIHsKKyAgICAgICAgbGV0IGdldHRlcnMgPSBbCisgICAgICAgICAgICAo
KSA9PiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHByb3h5KSwKKyAgICAgICAgICAgICgpID0+IE9i
amVjdC5nZXRQcm90b3R5cGVPZihwcm94eSksCisgICAgICAgICAgICAoKSA9PiBwcm94eS5fX3By
b3RvX18sCisgICAgICAgIF07CisgICAgICAgIGZvciAobGV0IGdldCBvZiBnZXR0ZXJzKSB7Cisg
ICAgICAgICAgICBsZXQgdGhyZXcgPSBmYWxzZTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAg
ICAgICAgICAgZ2V0KCk7CisgICAgICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgICAg
ICBhc3NlcnQoZSA9PT0gZXJyb3IpOworICAgICAgICAgICAgICAgIHRocmV3ID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGFzc2VydCh0aHJldyk7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3sKKyAgICBsZXQgdGFyZ2V0ID0ge307CisgICAgbGV0IGVycm9yID0gbnVsbDsKKyAg
ICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3I7CisgICAgICAgICAgICB0aHJvdyBlcnJvcjsK
KyAgICAgICAgfQorICAgIH07CisgICAgCisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdl
dCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAg
ICBsZXQgZ2V0dGVycyA9IFsKKyAgICAgICAgICAgICgpID0+IFJlZmxlY3QuZ2V0UHJvdG90eXBl
T2YocHJveHkpLAorICAgICAgICAgICAgKCkgPT4gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3h5
KSwKKyAgICAgICAgICAgICgpID0+IHByb3h5Ll9fcHJvdG9fXywKKyAgICAgICAgXTsKKyAgICAg
ICAgZm9yIChsZXQgZ2V0IG9mIGdldHRlcnMpIHsKKyAgICAgICAgICAgIGxldCB0aHJldyA9IGZh
bHNlOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBnZXQoKTsKKyAgICAgICAg
ICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgICAgIGFzc2VydChlID09PSBlcnJvcik7Cisg
ICAgICAgICAgICAgICAgdGhyZXcgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YXNzZXJ0KHRocmV3KTsKKyAgICAgICAgfQorICAgIH0KK30KKworeworICAgIGxldCBlcnJvciA9
IG51bGw7CisgICAgbGV0IHRhcmdldCA9IG5ldyBQcm94eSh7fSwgeworICAgICAgICBpc0V4dGVu
c2libGU6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3I7CisgICAg
ICAgICAgICB0aHJvdyBlcnJvcjsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgbGV0IGhhbmRs
ZXIgPSB7CisgICAgICAgIGdldFByb3RvdHlwZU9mOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
IHJldHVybiB0YXJnZXQuX19wcm90b19fOworICAgICAgICB9CisgICAgfTsKKyAgICAKKyAgICBs
ZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3IgKGxldCBpID0g
MDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGxldCBnZXR0ZXJzID0gWworICAgICAgICAgICAg
KCkgPT4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihwcm94eSksCisgICAgICAgICAgICAoKSA9PiBP
YmplY3QuZ2V0UHJvdG90eXBlT2YocHJveHkpLAorICAgICAgICAgICAgKCkgPT4gcHJveHkuX19w
cm90b19fLAorICAgICAgICBdOworICAgICAgICBmb3IgKGxldCBnZXQgb2YgZ2V0dGVycykgewor
ICAgICAgICAgICAgbGV0IHRocmV3ID0gZmFsc2U7CisgICAgICAgICAgICB0cnkgeworICAgICAg
ICAgICAgICAgIGdldCgpOworICAgICAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0KGUgPT09IGVycm9yKTsKKyAgICAgICAgICAgICAgICB0aHJldyA9IHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBhc3NlcnQodGhyZXcpOworICAgICAgICB9CisgICAg
fQorfQorCit7CisgICAgbGV0IHRhcmdldCA9IHt9OworICAgIGxldCBoYW5kbGVyID0geworICAg
ICAgICBnZXRQcm90b3R5cGVPZjogMjUKKyAgICB9OworICAgIAorICAgIGxldCBwcm94eSA9IG5l
dyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyBp
KyspIHsKKyAgICAgICAgbGV0IGdldHRlcnMgPSBbCisgICAgICAgICAgICAoKSA9PiBSZWZsZWN0
LmdldFByb3RvdHlwZU9mKHByb3h5KSwKKyAgICAgICAgICAgICgpID0+IE9iamVjdC5nZXRQcm90
b3R5cGVPZihwcm94eSksCisgICAgICAgICAgICAoKSA9PiBwcm94eS5fX3Byb3RvX18sCisgICAg
ICAgIF07CisgICAgICAgIGZvciAobGV0IGdldCBvZiBnZXR0ZXJzKSB7CisgICAgICAgICAgICBs
ZXQgdGhyZXcgPSBmYWxzZTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgZ2V0
KCk7CisgICAgICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnQoZS50
b1N0cmluZygpID09PSAiVHlwZUVycm9yOiAnZ2V0UHJvdG90eXBlT2YnIHByb3BlcnR5IG9mIGEg
UHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZS4iKTsKKyAgICAgICAgICAgICAgICB0
aHJldyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhc3NlcnQodGhyZXcpOwor
ICAgICAgICB9CisgICAgfQorfQorCit7CisgICAgbGV0IHRhcmdldCA9IHt9OworICAgIGxldCBo
YW5kbGVyID0geworICAgICAgICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICByZXR1cm4gMjU7CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAgIGxldCBwcm94eSA9
IG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAw
OyBpKyspIHsKKyAgICAgICAgbGV0IGdldHRlcnMgPSBbCisgICAgICAgICAgICAoKSA9PiBSZWZs
ZWN0LmdldFByb3RvdHlwZU9mKHByb3h5KSwKKyAgICAgICAgICAgICgpID0+IE9iamVjdC5nZXRQ
cm90b3R5cGVPZihwcm94eSksCisgICAgICAgICAgICAoKSA9PiBwcm94eS5fX3Byb3RvX18sCisg
ICAgICAgIF07CisgICAgICAgIGZvciAobGV0IGdldCBvZiBnZXR0ZXJzKSB7CisgICAgICAgICAg
ICBsZXQgdGhyZXcgPSBmYWxzZTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAg
Z2V0KCk7CisgICAgICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnQo
ZS50b1N0cmluZygpID09PSAiVHlwZUVycm9yOiBQcm94eSBoYW5kbGVyJ3MgJ2dldFByb3RvdHlw
ZU9mJyB0cmFwIHNob3VsZCBlaXRoZXIgcmV0dXJuIGFuIG9iamVjdCBvciBudWxsLiIpOworICAg
ICAgICAgICAgICAgIHRocmV3ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFz
c2VydCh0aHJldyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3sKKyAgICBsZXQgdGFyZ2V0ID0g
e307CisgICAgbGV0IGhhbmRsZXIgPSB7CisgICAgICAgIGdldFByb3RvdHlwZU9mOiBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIHJldHVybiBTeW1ib2woKTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgCisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBsZXQgZ2V0dGVycyA9IFsKKyAg
ICAgICAgICAgICgpID0+IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YocHJveHkpLAorICAgICAgICAg
ICAgKCkgPT4gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3h5KSwKKyAgICAgICAgICAgICgpID0+
IHByb3h5Ll9fcHJvdG9fXywKKyAgICAgICAgXTsKKyAgICAgICAgZm9yIChsZXQgZ2V0IG9mIGdl
dHRlcnMpIHsKKyAgICAgICAgICAgIGxldCB0aHJldyA9IGZhbHNlOworICAgICAgICAgICAgdHJ5
IHsKKyAgICAgICAgICAgICAgICBnZXQoKTsKKyAgICAgICAgICAgIH0gY2F0Y2goZSkgeworICAg
ICAgICAgICAgICAgIGFzc2VydChlLnRvU3RyaW5nKCkgPT09ICJUeXBlRXJyb3I6IFByb3h5IGhh
bmRsZXIncyAnZ2V0UHJvdG90eXBlT2YnIHRyYXAgc2hvdWxkIGVpdGhlciByZXR1cm4gYW4gb2Jq
ZWN0IG9yIG51bGwuIik7CisgICAgICAgICAgICAgICAgdGhyZXcgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYXNzZXJ0KHRocmV3KTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
eworICAgIGxldCB0YXJnZXQgPSB7fTsKKyAgICBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zKHRh
cmdldCk7CisgICAgbGV0IGhhbmRsZXIgPSB7CisgICAgICAgIGdldFByb3RvdHlwZU9mOiBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgfTsKKyAg
ICAKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGxldCBnZXR0ZXJzID0gWworICAg
ICAgICAgICAgKCkgPT4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihwcm94eSksCisgICAgICAgICAg
ICAoKSA9PiBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJveHkpLAorICAgICAgICAgICAgKCkgPT4g
cHJveHkuX19wcm90b19fLAorICAgICAgICBdOworICAgICAgICBmb3IgKGxldCBnZXQgb2YgZ2V0
dGVycykgeworICAgICAgICAgICAgbGV0IHRocmV3ID0gZmFsc2U7CisgICAgICAgICAgICB0cnkg
eworICAgICAgICAgICAgICAgIGdldCgpOworICAgICAgICAgICAgfSBjYXRjaChlKSB7CisgICAg
ICAgICAgICAgICAgYXNzZXJ0KGUudG9TdHJpbmcoKSA9PT0gIlR5cGVFcnJvcjogUHJveHkncyAn
Z2V0UHJvdG90eXBlT2YnIHRyYXAgZm9yIGEgbm9uLWV4dGVuc2libGUgdGFyZ2V0IHNob3VsZCBy
ZXR1cm4gdGhlIHNhbWUgdmFsdWUgYXMgdGhlIHRhcmdldCdzIHByb3RvdHlwZS4iKTsKKyAgICAg
ICAgICAgICAgICB0aHJldyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhc3Nl
cnQodGhyZXcpOworICAgICAgICB9CisgICAgfQorfQorCit7CisgICAgbGV0IG5vdFByb3RvID0g
e307CisgICAgbGV0IHRhcmdldCA9IHt9OworICAgIFJlZmxlY3QucHJldmVudEV4dGVuc2lvbnMo
dGFyZ2V0KTsKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgZ2V0UHJvdG90eXBlT2Y6IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgcmV0dXJuIG5vdFByb3RvOworICAgICAgICB9CisgICAg
fTsKKyAgICAKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGxldCBnZXR0ZXJzID0g
WworICAgICAgICAgICAgKCkgPT4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihwcm94eSksCisgICAg
ICAgICAgICAoKSA9PiBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJveHkpLAorICAgICAgICAgICAg
KCkgPT4gcHJveHkuX19wcm90b19fLAorICAgICAgICBdOworICAgICAgICBmb3IgKGxldCBnZXQg
b2YgZ2V0dGVycykgeworICAgICAgICAgICAgbGV0IHRocmV3ID0gZmFsc2U7CisgICAgICAgICAg
ICB0cnkgeworICAgICAgICAgICAgICAgIGdldCgpOworICAgICAgICAgICAgfSBjYXRjaChlKSB7
CisgICAgICAgICAgICAgICAgYXNzZXJ0KGUudG9TdHJpbmcoKSA9PT0gIlR5cGVFcnJvcjogUHJv
eHkncyAnZ2V0UHJvdG90eXBlT2YnIHRyYXAgZm9yIGEgbm9uLWV4dGVuc2libGUgdGFyZ2V0IHNo
b3VsZCByZXR1cm4gdGhlIHNhbWUgdmFsdWUgYXMgdGhlIHRhcmdldCdzIHByb3RvdHlwZS4iKTsK
KyAgICAgICAgICAgICAgICB0aHJldyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBhc3NlcnQodGhyZXcpOworICAgICAgICB9CisgICAgfQorfQorCit7CisgICAgbGV0IHRhcmdl
dCA9IHt9OworICAgIFJlZmxlY3QucHJldmVudEV4dGVuc2lvbnModGFyZ2V0KTsKKyAgICBsZXQg
Y2FsbGVkID0gZmFsc2U7CisgICAgbGV0IGhhbmRsZXIgPSB7CisgICAgICAgIGdldFByb3RvdHlw
ZU9mOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7CisgICAgICAgICAg
ICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZTsKKyAgICAgICAgfQorICAgIH07CisgICAgCisgICAg
bGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBsZXQgZ2V0dGVycyA9IFsKKyAgICAgICAgICAg
ICgpID0+IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YocHJveHkpLAorICAgICAgICAgICAgKCkgPT4g
T2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3h5KSwKKyAgICAgICAgICAgICgpID0+IHByb3h5Ll9f
cHJvdG9fXywKKyAgICAgICAgXTsKKyAgICAgICAgZm9yIChsZXQgZ2V0IG9mIGdldHRlcnMpIHsK
KyAgICAgICAgICAgIGxldCByZXN1bHQgPSBnZXQoKTsKKyAgICAgICAgICAgIGFzc2VydChyZXN1
bHQgPT09IE9iamVjdC5wcm90b3R5cGUpOworICAgICAgICAgICAgYXNzZXJ0KGNhbGxlZCk7Cisg
ICAgICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK30KKworeworICAg
IGxldCB0YXJnZXQgPSB7fTsKKyAgICBsZXQgdGhlUHJvdG8gPSB7eDogNDV9OworICAgIHRhcmdl
dC5fX3Byb3RvX18gPSB0aGVQcm90bzsKKyAgICBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zKHRh
cmdldCk7CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOworICAgIGxldCBoYW5kbGVyID0geworICAg
ICAgICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24odGhlVGFyZ2V0KSB7CisgICAgICAgICAgICBh
c3NlcnQodGhlVGFyZ2V0ID09PSB0YXJnZXQpOworICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHRoZVRhcmdldCk7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIAorICAgIGxldCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQs
IGhhbmRsZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyBpKyspIHsKKyAgICAgICAg
bGV0IGdldHRlcnMgPSBbCisgICAgICAgICAgICAoKSA9PiBSZWZsZWN0LmdldFByb3RvdHlwZU9m
KHByb3h5KSwKKyAgICAgICAgICAgICgpID0+IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm94eSks
CisgICAgICAgICAgICAoKSA9PiBwcm94eS5fX3Byb3RvX18sCisgICAgICAgIF07CisgICAgICAg
IGZvciAobGV0IGdldCBvZiBnZXR0ZXJzKSB7CisgICAgICAgICAgICBsZXQgcmVzdWx0ID0gZ2V0
KCk7CisgICAgICAgICAgICBhc3NlcnQocmVzdWx0ID09PSB0aGVQcm90byk7CisgICAgICAgICAg
ICBhc3NlcnQoY2FsbGVkKTsKKyAgICAgICAgICAgIGNhbGxlZCA9IGZhbHNlOworICAgICAgICB9
CisgICAgfQorfQorCit7CisgICAgbGV0IHRhcmdldCA9IHt9OworICAgIGxldCBoYW5kbGVyID0g
eworICAgICAgICBnZXRQcm90b3R5cGVPZjogbnVsbAorICAgIH07CisgICAgCisgICAgbGV0IHBy
b3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCA1MDA7IGkrKykgeworICAgICAgICBsZXQgcHJvdG8gPSBPYmplY3QucHJvdG90eXBlOworICAg
ICAgICBsZXQgZ2V0dGVycyA9IFsKKyAgICAgICAgICAgICgpID0+IFJlZmxlY3QuZ2V0UHJvdG90
eXBlT2YocHJveHkpLAorICAgICAgICAgICAgKCkgPT4gT2JqZWN0LmdldFByb3RvdHlwZU9mKHBy
b3h5KSwKKyAgICAgICAgICAgICgpID0+IHByb3h5Ll9fcHJvdG9fXywKKyAgICAgICAgXTsKKyAg
ICAgICAgZm9yIChsZXQgZ2V0IG9mIGdldHRlcnMpIHsKKyAgICAgICAgICAgIGFzc2VydChnZXQo
KSA9PT0gcHJvdG8pOworICAgICAgICB9CisgICAgfQorfQorCit7CisgICAgbGV0IHRhcmdldCA9
IHt9OworICAgIGxldCBwcm90byA9IHt9OworICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKKyAgICBs
ZXQgaGFuZGxlciA9IHsKKyAgICAgICAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uKHRoZVRhcmdl
dCkgeworICAgICAgICAgICAgYXNzZXJ0KHRoZVRhcmdldCA9PT0gdGFyZ2V0KTsKKyAgICAgICAg
ICAgIGNhbGxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcHJvdG87CisgICAgICAgIH0K
KyAgICB9OworICAgIAorICAgIGxldCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXIp
OworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyBpKyspIHsKKyAgICAgICAgbGV0IGdldHRl
cnMgPSBbCisgICAgICAgICAgICAoKSA9PiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHByb3h5KSwK
KyAgICAgICAgICAgICgpID0+IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm94eSksCisgICAgICAg
ICAgICAoKSA9PiBwcm94eS5fX3Byb3RvX18sCisgICAgICAgIF07CisgICAgICAgIGZvciAobGV0
IGdldCBvZiBnZXR0ZXJzKSB7CisgICAgICAgICAgICBhc3NlcnQoZ2V0KCkgPT09IHByb3RvKTsK
KyAgICAgICAgICAgIGFzc2VydChjYWxsZWQpOworICAgICAgICAgICAgY2FsbGVkID0gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK3sKKyAgICBsZXQgdGFyZ2V0ID0ge307CisgICAgbGV0
IHByb3RvID0gbnVsbDsKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgbGV0IGhhbmRsZXIg
PSB7CisgICAgICAgIGdldFByb3RvdHlwZU9mOiBmdW5jdGlvbih0aGVUYXJnZXQpIHsKKyAgICAg
ICAgICAgIGFzc2VydCh0aGVUYXJnZXQgPT09IHRhcmdldCk7CisgICAgICAgICAgICBjYWxsZWQg
PSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHByb3RvOworICAgICAgICB9CisgICAgfTsKKyAg
ICAKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGxldCBnZXR0ZXJzID0gWworICAg
ICAgICAgICAgKCkgPT4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihwcm94eSksCisgICAgICAgICAg
ICAoKSA9PiBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJveHkpLAorICAgICAgICAgICAgKCkgPT4g
cHJveHkuX19wcm90b19fLAorICAgICAgICBdOworICAgICAgICBmb3IgKGxldCBnZXQgb2YgZ2V0
dGVycykgeworICAgICAgICAgICAgYXNzZXJ0KGdldCgpID09PSBwcm90byk7CisgICAgICAgICAg
ICBhc3NlcnQoY2FsbGVkKTsKKyAgICAgICAgICAgIGNhbGxlZCA9IGZhbHNlOworICAgICAgICB9
CisgICAgfQorfQorCit7CisgICAgbGV0IHRhcmdldCA9IHt9OworICAgIGxldCBwcm90byA9IG51
bGw7CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOworICAgIGxldCBoYW5kbGVyID0geworICAgICAg
ICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24odGhlVGFyZ2V0KSB7CisgICAgICAgICAgICBhc3Nl
cnQodGhlVGFyZ2V0ID09PSB0YXJnZXQpOworICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIHJldHVybiBwcm90bzsKKyAgICAgICAgfQorICAgIH07CisgICAgCisgICAgbGV0
IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCA1MDA7IGkrKykgeworICAgICAgICBsZXQgZ2V0dGVycyA9IFsKKyAgICAgICAgICAgICgp
ID0+IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YocHJveHkpLAorICAgICAgICAgICAgKCkgPT4gT2Jq
ZWN0LmdldFByb3RvdHlwZU9mKHByb3h5KSwKKyAgICAgICAgICAgICgpID0+IHByb3h5Ll9fcHJv
dG9fXywKKyAgICAgICAgXTsKKyAgICAgICAgZm9yIChsZXQgZ2V0IG9mIGdldHRlcnMpIHsKKyAg
ICAgICAgICAgIGFzc2VydChnZXQoKSA9PT0gcHJvdG8pOworICAgICAgICAgICAgYXNzZXJ0KGNh
bGxlZCk7CisgICAgICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK30K
KworeworICAgIGxldCB0YXJnZXQgPSB7fTsKKyAgICBsZXQgcHJvdG8gPSBudWxsOworICAgIGxl
dCBjYWxsZWQgPSBmYWxzZTsKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgZ2V0UHJvdG90
eXBlT2Y6IGZ1bmN0aW9uKHRoZVRhcmdldCkgeworICAgICAgICAgICAgYXNzZXJ0KHRoZVRhcmdl
dCA9PT0gdGFyZ2V0KTsKKyAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7CisgICAgICAgICAgICBy
ZXR1cm4gcHJvdG87CisgICAgICAgIH0sCisgICAgICAgIGhhczogZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAgIGxldCBw
cm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgNTAwOyBpKyspIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9ICJ4IiBpbiBwcm94eTsKKyAgICAg
ICAgYXNzZXJ0KGNhbGxlZCk7CisgICAgICAgIGNhbGxlZCA9IGZhbHNlOworICAgIH0KK30KKwor
eworICAgIGxldCB0YXJnZXQgPSB7fTsKKyAgICBsZXQgcHJvdG8gPSBudWxsOworICAgIGxldCBj
YWxsZWQgPSBmYWxzZTsKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgZ2V0UHJvdG90eXBl
T2Y6IGZ1bmN0aW9uKHRoZVRhcmdldCkgeworICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIHJldHVybiBwcm90bzsKKyAgICAgICAgfSwKKyAgICAgICAgaGFzOiBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfTsKKyAgICAK
KyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGxldCByZXN1bHQgPSAieCIgaW4gcHJv
eHk7CisgICAgICAgIGFzc2VydCghY2FsbGVkKTsKKyAgICB9Cit9Cg==
</data>
<flag name="review"
          id="297811"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>