<?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>154759</bug_id>
          
          <creation_ts>2016-02-26 15:59:52 -0800</creation_ts>
          <short_desc>[ES6] Implement Proxy.[[DefineOwnProperty]]</short_desc>
          <delta_ts>2016-03-03 17:08:55 -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>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>1168738</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-26 15:59:52 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169026</commentid>
    <comment_count>1</comment_count>
      <attachid>272462</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-28 13:10:17 -0800</bug_when>
    <thetext>Created attachment 272462
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169041</commentid>
    <comment_count>2</comment_count>
      <attachid>272466</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-28 14:58:05 -0800</bug_when>
    <thetext>Created attachment 272466
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169955</commentid>
    <comment_count>3</comment_count>
      <attachid>272466</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-03-02 14:42:26 -0800</bug_when>
    <thetext>Comment on attachment 272466
patch

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

r=me

&gt; Source/JavaScriptCore/runtime/ObjectConstructor.h:96
&gt; +inline JSObject* fromPropertyDescriptor(ExecState* exec, const PropertyDescriptor&amp; descriptor)

Let&apos;s call this constructObject or constructObjectFromPropertyDescriptor.

&gt; Source/JavaScriptCore/runtime/ProxyObject.cpp:620
&gt; +    } else {

This should be an early return instead of an else.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169962</commentid>
    <comment_count>4</comment_count>
      <attachid>272466</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-03-02 14:55:53 -0800</bug_when>
    <thetext>Comment on attachment 272466
patch

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

I see lots of opportunities to use vm.hadException() instead of exec-&gt;hadException().  Please change where applicable.

&gt; Source/JavaScriptCore/runtime/ObjectConstructor.cpp:236
&gt;      if (exec-&gt;hadException())
&gt;          return jsUndefined();

You can check for (!result) here instead of (exec-&gt;hadException()) and save on the exec-&gt;vm() lookup.

&gt; Source/JavaScriptCore/runtime/ObjectConstructor.h:99
&gt; +    if (exec-&gt;hadException())

You should cache the vm from exec-&gt;vm() in a local first especially since you need the vm below.

&gt; Source/JavaScriptCore/runtime/ProxyObject.cpp:581
&gt; +    if (exec-&gt;hadException())

Replace with a null check of descriptorObject, or vm.hasException() instead.

&gt; Source/JavaScriptCore/runtime/ProxyObject.cpp:586
&gt; +    arguments.append(identifierToSafePublicJSValue(vm, Identifier::fromUid(&amp;vm, propertyName.uid())));

Should we be trapping private symbols?

&gt; Source/JavaScriptCore/runtime/ProxyObject.cpp:605
&gt; +    bool isConfigurableFalse;

The spec calls this &quot;settingConfigFalse&quot;.  Maybe we should use that name here too.  I do thing &quot;settingConfigFalse&quot; is clearer than &quot;isConfigurableFalse&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170414</commentid>
    <comment_count>5</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-03-03 17:07:44 -0800</bug_when>
    <thetext>landed in:
http://trac.webkit.org/changeset/197533</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170415</commentid>
    <comment_count>6</comment_count>
      <attachid>272466</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-03-03 17:08:55 -0800</bug_when>
    <thetext>Comment on attachment 272466
patch

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

&gt;&gt; Source/JavaScriptCore/runtime/ObjectConstructor.cpp:236
&gt;&gt;          return jsUndefined();
&gt; 
&gt; You can check for (!result) here instead of (exec-&gt;hadException()) and save on the exec-&gt;vm() lookup.

did.

&gt;&gt; Source/JavaScriptCore/runtime/ObjectConstructor.h:96
&gt;&gt; +inline JSObject* fromPropertyDescriptor(ExecState* exec, const PropertyDescriptor&amp; descriptor)
&gt; 
&gt; Let&apos;s call this constructObject or constructObjectFromPropertyDescriptor.

I went with constructObjectFromPropertyDescriptor

&gt;&gt; Source/JavaScriptCore/runtime/ObjectConstructor.h:99
&gt;&gt; +    if (exec-&gt;hadException())
&gt; 
&gt; You should cache the vm from exec-&gt;vm() in a local first especially since you need the vm below.

Done.

&gt;&gt; Source/JavaScriptCore/runtime/ProxyObject.cpp:581
&gt;&gt; +    if (exec-&gt;hadException())
&gt; 
&gt; Replace with a null check of descriptorObject, or vm.hasException() instead.

went with vm.exception()

&gt;&gt; Source/JavaScriptCore/runtime/ProxyObject.cpp:586
&gt;&gt; +    arguments.append(identifierToSafePublicJSValue(vm, Identifier::fromUid(&amp;vm, propertyName.uid())));
&gt; 
&gt; Should we be trapping private symbols?

No we shouldn&apos;t. The landed patch fixes it.

&gt;&gt; Source/JavaScriptCore/runtime/ProxyObject.cpp:605
&gt;&gt; +    bool isConfigurableFalse;
&gt; 
&gt; The spec calls this &quot;settingConfigFalse&quot;.  Maybe we should use that name here too.  I do thing &quot;settingConfigFalse&quot; is clearer than &quot;isConfigurableFalse&quot;.

I went with &quot;settingConfigurableToFalse&quot;

&gt;&gt; Source/JavaScriptCore/runtime/ProxyObject.cpp:620
&gt;&gt; +    } else {
&gt; 
&gt; This should be an early return instead of an else.

done.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272462</attachid>
            <date>2016-02-28 13:10:17 -0800</date>
            <delta_ts>2016-02-28 14:58:05 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>9307</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25z
dHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE5NzI5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDIzICsy
MzEsMTAgQEAgSlNWYWx1ZSBvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RAogICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAK
LSAgICBKU09iamVjdCogZGVzY3JpcHRpb24gPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsK
KyAgICBKU09iamVjdCogcmVzdWx0ID0gZnJvbVByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBkZXNj
cmlwdG9yKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotICAgIGlmICghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigp
KSB7Ci0gICAgICAgIGRlc2NyaXB0aW9uLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLnZhbHVlLCBkZXNjcmlwdG9yLnZhbHVlKCkgPyBkZXNjcmlwdG9yLnZhbHVl
KCkgOiBqc1VuZGVmaW5lZCgpLCAwKTsKLSAgICAgICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdChl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkud3JpdGFibGUsIGpzQm9vbGVhbihkZXNj
cmlwdG9yLndyaXRhYmxlKCkpLCAwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQoZGVz
Y3JpcHRvci5nZXR0ZXIoKSk7Ci0gICAgICAgIEFTU0VSVChkZXNjcmlwdG9yLnNldHRlcigpKTsK
LSAgICAgICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuZ2V0LCBkZXNjcmlwdG9yLmdldHRlcigpLCAwKTsKLSAgICAgICAgZGVzY3JpcHRp
b24tPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc2V0LCBkZXNj
cmlwdG9yLnNldHRlcigpLCAwKTsKLSAgICB9Ci0gICAgCi0gICAgZGVzY3JpcHRpb24tPnB1dERp
cmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZW51bWVyYWJsZSwganNCb29s
ZWFuKGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKSwgMCk7Ci0gICAgZGVzY3JpcHRpb24tPnB1dERp
cmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uZmlndXJhYmxlLCBqc0Jv
b2xlYW4oZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSksIDApOwotCi0gICAgcmV0dXJuIGRlc2Ny
aXB0aW9uOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEpTVmFsdWUgb2JqZWN0Q29uc3RydWN0
b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9i
amVjdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVj
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0
Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMTk3Mjk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEs
MzIgQEAgaW5saW5lIEpTT2JqZWN0KiBjb25zdHJ1Y3RFbXB0eU9iamVjdChFeAogICAgIHJldHVy
biBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
Pm9iamVjdFByb3RvdHlwZSgpKTsKIH0KIAorLy8gU2VjdGlvbiA2LjIuNC40IG9mIHRoZSBFUzYg
c3BlY2lmaWNhdGlvbi4KKy8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWZy
b21wcm9wZXJ0eWRlc2NyaXB0b3IKK0pTT2JqZWN0KiBmcm9tUHJvcGVydHlEZXNjcmlwdG9yKEV4
ZWNTdGF0ZSosIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYpOworSlNPYmplY3QqIGZyb21Qcm9w
ZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IpCit7CisgICAgSlNPYmplY3QqIGRlc2NyaXB0aW9uID0gY29uc3RydWN0RW1w
dHlPYmplY3QoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGlmICghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRv
cigpKSB7CisgICAgICAgIGRlc2NyaXB0aW9uLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLnZhbHVlLCBkZXNjcmlwdG9yLnZhbHVlKCkgPyBkZXNjcmlwdG9yLnZh
bHVlKCkgOiBqc1VuZGVmaW5lZCgpLCAwKTsKKyAgICAgICAgZGVzY3JpcHRpb24tPnB1dERpcmVj
dChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkud3JpdGFibGUsIGpzQm9vbGVhbihk
ZXNjcmlwdG9yLndyaXRhYmxlKCkpLCAwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQo
ZGVzY3JpcHRvci5nZXR0ZXIoKSk7CisgICAgICAgIEFTU0VSVChkZXNjcmlwdG9yLnNldHRlcigp
KTsKKyAgICAgICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuZ2V0LCBkZXNjcmlwdG9yLmdldHRlcigpLCAwKTsKKyAgICAgICAgZGVzY3Jp
cHRpb24tPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc2V0LCBk
ZXNjcmlwdG9yLnNldHRlcigpLCAwKTsKKyAgICB9CisgICAgCisgICAgZGVzY3JpcHRpb24tPnB1
dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZW51bWVyYWJsZSwganNC
b29sZWFuKGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKSwgMCk7CisgICAgZGVzY3JpcHRpb24tPnB1
dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uZmlndXJhYmxlLCBq
c0Jvb2xlYW4oZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSksIDApOworCisgICAgcmV0dXJuIGRl
c2NyaXB0aW9uOworfQorCisKIEpTT2JqZWN0KiBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShFeGVj
U3RhdGUqLCBKU09iamVjdCopOwogSlNWYWx1ZSBvYmplY3RDb25zdHJ1Y3RvckdldFByb3RvdHlw
ZU9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CiBKU1ZhbHVlIG9iamVjdENvbnN0cnVjdG9yR2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRp
ZmllciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2Jq
ZWN0LmNwcAkocmV2aXNpb24gMTk3Mjk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJveHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTcsNiArNTU3LDkxIEBAIGJv
b2wgUHJveHlPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCgKICAgICByZXR1cm4gdGhpc09i
amVjdC0+cGVyZm9ybURlbGV0ZShleGVjLCBpZGVudC5pbXBsKCksIGRlZmF1bHREZWxldGUpOwog
fQogCitib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtRGVmaW5lT3duUHJvcGVydHkoRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBKU1ZhbHVlIGhhbmRsZXJWYWx1ZSA9IHRoaXMtPmhhbmRsZXIoKTsKKyAgICBp
ZiAoaGFuZGxlclZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhl
YywgQVNDSUlMaXRlcmFsKCJQcm94eSAnaGFuZGxlcicgaXMgbnVsbC4gSXQgc2hvdWxkIGJlIGFu
IE9iamVjdC4iKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBKU09iamVj
dCogaGFuZGxlciA9IGpzQ2FzdDxKU09iamVjdCo+KGhhbmRsZXJWYWx1ZSk7CisgICAgQ2FsbERh
dGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CisgICAgSlNWYWx1ZSBkZWZpbmVQ
cm9wZXJ0eU1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5
cGUsIHZtLnByb3BlcnR5TmFtZXMtPmRlZmluZVByb3BlcnR5LCBBU0NJSUxpdGVyYWwoIidkZWZp
bmVQcm9wZXJ0eScgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxh
YmxlLiIpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsKKyAgICBpZiAo
ZGVmaW5lUHJvcGVydHlNZXRob2QuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIHRhcmdl
dC0+bWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eSh0YXJnZXQsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworCisgICAgSlNPYmplY3QqIGRlc2Ny
aXB0b3JPYmplY3QgPSBmcm9tUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIGRlc2NyaXB0b3IpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOworICAgIGFyZ3VtZW50cy5hcHBlbmQo
dGFyZ2V0KTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1Zh
bHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tVWlkKCZ2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwor
ICAgIGFyZ3VtZW50cy5hcHBlbmQoZGVzY3JpcHRvck9iamVjdCk7CisgICAgSlNWYWx1ZSB0cmFw
UmVzdWx0ID0gY2FsbChleGVjLCBkZWZpbmVQcm9wZXJ0eU1ldGhvZCwgY2FsbFR5cGUsIGNhbGxE
YXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCB0cmFwUmVzdWx0QXNCb29sID0gdHJh
cFJlc3VsdC50b0Jvb2xlYW4oZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXRyYXBSZXN1bHRBc0Jvb2wpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIFByb3BlcnR5RGVzY3JpcHRvciB0YXJnZXREZXNjcmlw
dG9yOworICAgIGJvb2wgaXNUYXJnZXREZXNjcmlwdG9yRGVmaW5lZCA9IHRhcmdldC0+Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGFyZ2V0RGVzY3JpcHRvcik7
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBib29sIHRhcmdldElzRXh0ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKCk7Cisg
ICAgYm9vbCBpc0NvbmZpZ3VyYWJsZUZhbHNlOworICAgIGlmIChkZXNjcmlwdG9yLmlzQ29uZmln
dXJhYmxlUHJlc2VudCgpICYmICFkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgpKQorICAgICAgICBp
c0NvbmZpZ3VyYWJsZUZhbHNlID0gdHJ1ZTsKKyAgICBlbHNlCisgICAgICAgIGlzQ29uZmlndXJh
YmxlRmFsc2UgPSBmYWxzZTsKKworICAgIGlmICghaXNUYXJnZXREZXNjcmlwdG9yRGVmaW5lZCkg
eworICAgICAgICBpZiAoIXRhcmdldElzRXh0ZW5zaWJsZSkgeworICAgICAgICAgICAgdGhyb3dW
TVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlByb3h5J3MgJ2RlZmluZVByb3BlcnR5JyB0
cmFwIHJldHVybmVkIHRydWUgZXZlbiB0aG91Z2ggZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIG9m
IHRoZSBQcm94eSdzIHRhcmdldCByZXR1cm5lZCB1bmRlZmluZWQgYW5kIHRoZSB0YXJnZXQgaXMg
bm9uLWV4dGVuc2libGUuIikpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGlmIChpc0NvbmZpZ3VyYWJsZUZhbHNlKSB7CisgICAgICAgICAgICB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiUHJveHkncyAnZGVmaW5lUHJvcGVydHknIHRy
YXAgcmV0dXJuZWQgdHJ1ZSBmb3IgYSBub24tY29uZmlndXJhYmxlIGZpZWxkIGV2ZW4gdGhvdWdo
IGdldE93blByb3BlcnR5RGVzY3JpcHRvciBvZiB0aGUgUHJveHkncyB0YXJnZXQgcmV0dXJuZWQg
dW5kZWZpbmVkLiIpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChpc1RhcmdldERlc2NyaXB0b3JEZWZpbmVkKTsKKyAg
ICAgICAgYm9vbCBpc0N1cnJlbnREZWZpbmVkID0gaXNUYXJnZXREZXNjcmlwdG9yRGVmaW5lZDsK
KyAgICAgICAgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBjdXJyZW50ID0gdGFyZ2V0RGVzY3Jp
cHRvcjsKKyAgICAgICAgYm9vbCB0aHJvd0V4Y2VwdGlvbiA9IGZhbHNlOyAvLyBGSVhNRTogaXMg
dGhpcyByaWdodD8KKyAgICAgICAgYm9vbCBpc0NvbXBhdGlibGVEZXNjcmlwdG9yID0gdmFsaWRh
dGVBbmRBcHBseVByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBudWxscHRyLCBwcm9wZXJ0eU5hbWUs
IHRhcmdldElzRXh0ZW5zaWJsZSwgZGVzY3JpcHRvciwgaXNDdXJyZW50RGVmaW5lZCwgY3VycmVu
dCwgdGhyb3dFeGNlcHRpb24pOworICAgICAgICBpZiAoIWlzQ29tcGF0aWJsZURlc2NyaXB0b3Ip
IHsKKyAgICAgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJQcm94
eSdzICdkZWZpbmVQcm9wZXJ0eScgdHJhcCBkaWQgbm90IGRlZmluZSBhIHByb3BlcnR5IG9uIGl0
cyB0YXJnZXQgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHRyYXAncyBpbnB1dCBkZXNjcmlw
dG9yLiIpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoaXNDb25maWd1cmFibGVGYWxzZSAmJiB0YXJnZXREZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgp
KSB7CisgICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiUHJv
eHkncyAnZGVmaW5lUHJvcGVydHknIHRyYXAgZGlkIG5vdCBkZWZpbmUgYSBub24tY29uZmlndXJh
YmxlIHByb3BlcnR5IG9uIGl0cyB0YXJnZXQgZXZlbiB0aG91Z2ggdGhlIGlucHV0IGRlc2NyaXB0
b3IgdG8gdGhlIHRyYXAgc2FpZCBpdCBtdXN0IGRvIHNvLiIpKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBQcm94eU9iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgUHJveHlPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihjZWxsKTsKKyAgICByZXR1cm4g
dGhpc09iamVjdC0+cGVyZm9ybURlZmluZU93blByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworfQorCiB2b2lkIFByb3h5T2JqZWN0Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUHJveHlP
YmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihjZWxsKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkocmV2aXNpb24gMTk3
Mjk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBDb25zdHJ1
Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYpOwogICAgIHN0
YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSk7CiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3du
UHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90Q29tbW9uKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkBA
IC03OCw2ICs3OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBwZXJmb3JtRGVsZXRlKEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgRGVmYXVsdERlbGV0ZUZ1bmN0aW9uKTsKICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgUGVyZm9ybURlZmF1bHRQdXRGdW5jdGlvbj4KICAgICB2b2lkIHBlcmZvcm1QdXQo
RXhlY1N0YXRlKiwgSlNWYWx1ZSBwdXRWYWx1ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSwgUGVyZm9ybURlZmF1bHRQdXRGdW5jdGlvbik7CisgICAgYm9vbCBwZXJmb3JtRGVmaW5l
T3duUHJvcGVydHkoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2Ny
aXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIAogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4g
bV90YXJnZXQ7CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1faGFuZGxlcjsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHJveHktZGVmaW5lLW93bi1wcm9wZXJ0
eS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272466</attachid>
            <date>2016-02-28 14:58:05 -0800</date>
            <delta_ts>2016-03-02 14:42:26 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>28876</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk3MzAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBA
CisyMDE2LTAyLTI4ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFtFUzZdIEltcGxlbWVudCBQcm94eS5bW0RlZmluZU93blByb3BlcnR5XV0KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDc1OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgYSBzdHJh
aWdodCBmb3J3YXJkIGltcGxlbWVudGF0aW9uIG9mIFByb3h5LltbRGVmaW5lT3duUHJvcGVydHld
XQorICAgICAgICB3aXRoIHJlc3BlY3QgdG8gc2VjdGlvbiA5LjUuNiBvZiB0aGUgRUNNQVNjcmlw
dCBzcGVjLgorICAgICAgICBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1wcm94
eS1vYmplY3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xvdHMtZGVmaW5lb3ducHJv
cGVydHktcC1kZXNjCisKKyAgICAgICAgKiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ip
OgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RGVzY3JpcHRv
cnMpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpT
Qzo6Y29uc3RydWN0RW1wdHlPYmplY3QpOgorICAgICAgICAoSlNDOjpmcm9tUHJvcGVydHlEZXNj
cmlwdG9yKToKKyAgICAgICAgKiBydW50aW1lL1Byb3h5T2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6UHJveHlPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChKU0M6OlBy
b3h5T2JqZWN0OjpwZXJmb3JtRGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpQcm94
eU9iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6
dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9Qcm94eU9iamVjdC5oOgorICAgICAg
ICAqIHRlc3RzL2VzNi55YW1sOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9wcm94eS1kZWZpbmUt
b3duLXByb3BlcnR5LmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgICh0aHJv
dy5uZXcuRXJyb3IpOgorICAgICAgICAoYXNzZXJ0LmxldC5oYW5kbGVyLmdldCBkZWZpbmVQcm9w
ZXJ0eSk6CisgICAgICAgIChhc3NlcnQubGV0LmhhbmRsZXIuZGVmaW5lUHJvcGVydHkpOgorICAg
ICAgICAobGV0LmhhbmRsZXIuZGVmaW5lUHJvcGVydHkpOgorICAgICAgICAoaS5jYXRjaCk6Cisg
ICAgICAgIChhc3NlcnQudHJ5Lik6CisgICAgICAgIChhc3NlcnQuc2V0IGdldCBjYXRjaCk6Cisg
ICAgICAgIChhc3NlcnQubGV0LnNldHRlcik6CisgICAgICAgIChhc3NlcnQubGV0LmdldHRlcik6
CisgICAgICAgIChhc3NlcnQuc2V0IGdldCBsZXQuaGFuZGxlci5kZWZpbmVQcm9wZXJ0eSk6Cisg
ICAgICAgIChhc3NlcnQuc2V0IGdldCBsZXQpOgorICAgICAgICAoYXNzZXJ0Lik6CisKIDIwMTYt
MDItMjggIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFNocmlu
ayBVbmxpbmtlZENvZGVCbG9jayBhIGJpdC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE5NzI5NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjMxLDIzICsyMzEsMTAgQEAgSlNWYWx1ZSBvYmplY3RDb25zdHJ1
Y3RvckdldE93blByb3BlcnR5RAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBKU09iamVjdCogZGVzY3JpcHRpb24gPSBj
b25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKKyAgICBKU09iamVjdCogcmVzdWx0ID0gZnJvbVBy
b3BlcnR5RGVzY3JpcHRvcihleGVjLCBkZXNjcmlwdG9yKTsKICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIGlmICghZGVzY3Jp
cHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7Ci0gICAgICAgIGRlc2NyaXB0aW9uLT5wdXRE
aXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnZhbHVlLCBkZXNjcmlwdG9y
LnZhbHVlKCkgPyBkZXNjcmlwdG9yLnZhbHVlKCkgOiBqc1VuZGVmaW5lZCgpLCAwKTsKLSAgICAg
ICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkud3JpdGFibGUsIGpzQm9vbGVhbihkZXNjcmlwdG9yLndyaXRhYmxlKCkpLCAwKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBBU1NFUlQoZGVzY3JpcHRvci5nZXR0ZXIoKSk7Ci0gICAgICAgIEFT
U0VSVChkZXNjcmlwdG9yLnNldHRlcigpKTsKLSAgICAgICAgZGVzY3JpcHRpb24tPnB1dERpcmVj
dChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZ2V0LCBkZXNjcmlwdG9yLmdldHRl
cigpLCAwKTsKLSAgICAgICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuc2V0LCBkZXNjcmlwdG9yLnNldHRlcigpLCAwKTsKLSAgICB9Ci0g
ICAgCi0gICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuZW51bWVyYWJsZSwganNCb29sZWFuKGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKSwg
MCk7Ci0gICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuY29uZmlndXJhYmxlLCBqc0Jvb2xlYW4oZGVzY3JpcHRvci5jb25maWd1cmFibGUo
KSksIDApOwotCi0gICAgcmV0dXJuIGRlc2NyaXB0aW9uOworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIEpTVmFsdWUgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMTk3Mjk0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEsMzEgQEAgaW5saW5lIEpTT2JqZWN0KiBjb25zdHJ1
Y3RFbXB0eU9iamVjdChFeAogICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKTsKIH0KIAorLy8g
U2VjdGlvbiA2LjIuNC40IG9mIHRoZSBFUzYgc3BlY2lmaWNhdGlvbi4KKy8vIGh0dHBzOi8vdGMz
OS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3IKK2lubGluZSBK
U09iamVjdCogZnJvbVByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU09iamVjdCogZGVzY3JpcHRp
b24gPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFkZXNjcmlwdG9yLmlz
QWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdChl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFsdWUsIGRlc2NyaXB0b3IudmFsdWUo
KSA/IGRlc2NyaXB0b3IudmFsdWUoKSA6IGpzVW5kZWZpbmVkKCksIDApOworICAgICAgICBkZXNj
cmlwdGlvbi0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS53cml0
YWJsZSwganNCb29sZWFuKGRlc2NyaXB0b3Iud3JpdGFibGUoKSksIDApOworICAgIH0gZWxzZSB7
CisgICAgICAgIEFTU0VSVChkZXNjcmlwdG9yLmdldHRlcigpKTsKKyAgICAgICAgQVNTRVJUKGRl
c2NyaXB0b3Iuc2V0dGVyKCkpOworICAgICAgICBkZXNjcmlwdGlvbi0+cHV0RGlyZWN0KGV4ZWMt
PnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5nZXQsIGRlc2NyaXB0b3IuZ2V0dGVyKCksIDAp
OworICAgICAgICBkZXNjcmlwdGlvbi0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5zZXQsIGRlc2NyaXB0b3Iuc2V0dGVyKCksIDApOworICAgIH0KKyAgICAKKyAg
ICBkZXNjcmlwdGlvbi0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5lbnVtZXJhYmxlLCBqc0Jvb2xlYW4oZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpLCAwKTsKKyAg
ICBkZXNjcmlwdGlvbi0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5jb25maWd1cmFibGUsIGpzQm9vbGVhbihkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgpKSwgMCk7
CisKKyAgICByZXR1cm4gZGVzY3JpcHRpb247Cit9CisKKwogSlNPYmplY3QqIG9iamVjdENvbnN0
cnVjdG9yRnJlZXplKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CiBKU1ZhbHVlIG9iamVjdENvbnN0
cnVjdG9yR2V0UHJvdG90eXBlT2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKIEpTVmFsdWUgb2Jq
ZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBjb25zdCBJZGVudGlmaWVyJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm94eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCShyZXZpc2lvbiAxOTcyOTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1
Nyw2ICs1NTcsOTEgQEAgYm9vbCBQcm94eU9iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KAog
ICAgIHJldHVybiB0aGlzT2JqZWN0LT5wZXJmb3JtRGVsZXRlKGV4ZWMsIGlkZW50LmltcGwoKSwg
ZGVmYXVsdERlbGV0ZSk7CiB9CiAKK2Jvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1EZWZpbmVPd25Q
cm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTVmFsdWUgaGFuZGxlclZhbHVlID0gdGhpcy0+
aGFuZGxlcigpOworICAgIGlmIChoYW5kbGVyVmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgdGhy
b3dWTVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlByb3h5ICdoYW5kbGVyJyBpcyBudWxs
LiBJdCBzaG91bGQgYmUgYW4gT2JqZWN0LiIpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIEpTT2JqZWN0KiBoYW5kbGVyID0ganNDYXN0PEpTT2JqZWN0Kj4oaGFuZGxlclZh
bHVlKTsKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZTsKKyAg
ICBKU1ZhbHVlIGRlZmluZVByb3BlcnR5TWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMs
IGNhbGxEYXRhLCBjYWxsVHlwZSwgdm0ucHJvcGVydHlOYW1lcy0+ZGVmaW5lUHJvcGVydHksIEFT
Q0lJTGl0ZXJhbCgiJ2RlZmluZVByb3BlcnR5JyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxl
ciBzaG91bGQgYmUgY2FsbGFibGUuIikpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRh
cmdldCgpOworICAgIGlmIChkZWZpbmVQcm9wZXJ0eU1ldGhvZC5pc1VuZGVmaW5lZCgpKQorICAg
ICAgICByZXR1cm4gdGFyZ2V0LT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KHRh
cmdldCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7CisKKyAg
ICBKU09iamVjdCogZGVzY3JpcHRvck9iamVjdCA9IGZyb21Qcm9wZXJ0eURlc2NyaXB0b3IoZXhl
YywgZGVzY3JpcHRvcik7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CisgICAg
YXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOworICAgIGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRpZmll
clRvU2FmZVB1YmxpY0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCBwcm9wZXJ0
eU5hbWUudWlkKCkpKSk7CisgICAgYXJndW1lbnRzLmFwcGVuZChkZXNjcmlwdG9yT2JqZWN0KTsK
KyAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGRlZmluZVByb3BlcnR5TWV0aG9k
LCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7CisgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIHRyYXBS
ZXN1bHRBc0Jvb2wgPSB0cmFwUmVzdWx0LnRvQm9vbGVhbihleGVjKTsKKyAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghdHJhcFJl
c3VsdEFzQm9vbCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUHJvcGVydHlEZXNjcmlw
dG9yIHRhcmdldERlc2NyaXB0b3I7CisgICAgYm9vbCBpc1RhcmdldERlc2NyaXB0b3JEZWZpbmVk
ID0gdGFyZ2V0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCB0
YXJnZXREZXNjcmlwdG9yKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgdGFyZ2V0SXNFeHRlbnNpYmxlID0gdGFyZ2V0LT5p
c0V4dGVuc2libGUoKTsKKyAgICBib29sIGlzQ29uZmlndXJhYmxlRmFsc2U7CisgICAgaWYgKGRl
c2NyaXB0b3IuY29uZmlndXJhYmxlUHJlc2VudCgpICYmICFkZXNjcmlwdG9yLmNvbmZpZ3VyYWJs
ZSgpKQorICAgICAgICBpc0NvbmZpZ3VyYWJsZUZhbHNlID0gdHJ1ZTsKKyAgICBlbHNlCisgICAg
ICAgIGlzQ29uZmlndXJhYmxlRmFsc2UgPSBmYWxzZTsKKworICAgIGlmICghaXNUYXJnZXREZXNj
cmlwdG9yRGVmaW5lZCkgeworICAgICAgICBpZiAoIXRhcmdldElzRXh0ZW5zaWJsZSkgeworICAg
ICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlByb3h5J3MgJ2Rl
ZmluZVByb3BlcnR5JyB0cmFwIHJldHVybmVkIHRydWUgZXZlbiB0aG91Z2ggZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yIG9mIHRoZSBQcm94eSdzIHRhcmdldCByZXR1cm5lZCB1bmRlZmluZWQgYW5k
IHRoZSB0YXJnZXQgaXMgbm9uLWV4dGVuc2libGUuIikpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIGlmIChpc0NvbmZpZ3VyYWJsZUZhbHNlKSB7CisgICAg
ICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiUHJveHkncyAnZGVm
aW5lUHJvcGVydHknIHRyYXAgcmV0dXJuZWQgdHJ1ZSBmb3IgYSBub24tY29uZmlndXJhYmxlIGZp
ZWxkIGV2ZW4gdGhvdWdoIGdldE93blByb3BlcnR5RGVzY3JpcHRvciBvZiB0aGUgUHJveHkncyB0
YXJnZXQgcmV0dXJuZWQgdW5kZWZpbmVkLiIpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChpc1RhcmdldERlc2NyaXB0
b3JEZWZpbmVkKTsKKyAgICAgICAgYm9vbCBpc0N1cnJlbnREZWZpbmVkID0gaXNUYXJnZXREZXNj
cmlwdG9yRGVmaW5lZDsKKyAgICAgICAgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBjdXJyZW50
ID0gdGFyZ2V0RGVzY3JpcHRvcjsKKyAgICAgICAgYm9vbCB0aHJvd0V4Y2VwdGlvbiA9IGZhbHNl
OworICAgICAgICBib29sIGlzQ29tcGF0aWJsZURlc2NyaXB0b3IgPSB2YWxpZGF0ZUFuZEFwcGx5
UHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIG51bGxwdHIsIHByb3BlcnR5TmFtZSwgdGFyZ2V0SXNF
eHRlbnNpYmxlLCBkZXNjcmlwdG9yLCBpc0N1cnJlbnREZWZpbmVkLCBjdXJyZW50LCB0aHJvd0V4
Y2VwdGlvbik7CisgICAgICAgIGlmICghaXNDb21wYXRpYmxlRGVzY3JpcHRvcikgeworICAgICAg
ICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlByb3h5J3MgJ2RlZmlu
ZVByb3BlcnR5JyB0cmFwIGRpZCBub3QgZGVmaW5lIGEgcHJvcGVydHkgb24gaXRzIHRhcmdldCB0
aGF0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgdHJhcCdzIGlucHV0IGRlc2NyaXB0b3IuIikpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChpc0NvbmZp
Z3VyYWJsZUZhbHNlICYmIHRhcmdldERlc2NyaXB0b3IuY29uZmlndXJhYmxlKCkpIHsKKyAgICAg
ICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJQcm94eSdzICdkZWZp
bmVQcm9wZXJ0eScgdHJhcCBkaWQgbm90IGRlZmluZSBhIG5vbi1jb25maWd1cmFibGUgcHJvcGVy
dHkgb24gaXRzIHRhcmdldCBldmVuIHRob3VnaCB0aGUgaW5wdXQgZGVzY3JpcHRvciB0byB0aGUg
dHJhcCBzYWlkIGl0IG11c3QgZG8gc28uIikpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb3h5
T2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBQcm94eU9iamVjdCogdGhpc09i
amVjdCA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KG9iamVjdCk7CisgICAgcmV0dXJuIHRoaXNPYmpl
Y3QtPnBlcmZvcm1EZWZpbmVPd25Qcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3IsIHNob3VsZFRocm93KTsKK30KKwogdm9pZCBQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFByb3h5T2JqZWN0KiB0
aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHJldmlzaW9uIDE5NzI5NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY5LDYgKzY5LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBn
ZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsKICAgICBzdGF0aWMgYm9v
bCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwogICAg
IHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2Ny
aXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBib29sIGdldE93blByb3BlcnR5U2xvdENv
bW1vbihFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpAQCAtNzgsNiAr
NzksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgcGVyZm9ybURlbGV0ZShFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIERlZmF1bHREZWxldGVGdW5jdGlvbik7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFBlcmZvcm1EZWZhdWx0UHV0RnVuY3Rpb24+CiAgICAgdm9pZCBwZXJmb3JtUHV0KEV4ZWNTdGF0
ZSosIEpTVmFsdWUgcHV0VmFsdWUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIFBl
cmZvcm1EZWZhdWx0UHV0RnVuY3Rpb24pOworICAgIGJvb2wgcGVyZm9ybURlZmluZU93blByb3Bl
cnR5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwg
Ym9vbCBzaG91bGRUaHJvdyk7CiAKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fdGFyZ2V0
OwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX2hhbmRsZXI7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvZXM2LnlhbWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL2VzNi55YW1sCShyZXZpc2lvbiAxOTcyOTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvZXM2LnlhbWwJKHdvcmtpbmcgY29weSkKQEAgLTkxNSw3ICs5MTUsNyBA
QAogLSBwYXRoOiBlczYvUHJveHlfY29uc3RydWN0b3JfcmVxdWlyZXNfbmV3LmpzCiAgIGNtZDog
cnVuRVM2IDpub3JtYWwKIC0gcGF0aDogZXM2L1Byb3h5X2RlZmluZVByb3BlcnR5X2hhbmRsZXIu
anMKLSAgY21kOiBydW5FUzYgOmZhaWwKKyAgY21kOiBydW5FUzYgOm5vcm1hbAogLSBwYXRoOiBl
czYvUHJveHlfZGVsZXRlUHJvcGVydHlfaGFuZGxlci5qcwogICBjbWQ6IHJ1bkVTNiA6bm9ybWFs
CiAtIHBhdGg6IGVzNi9Qcm94eV9lbnVtZXJhdGVfaGFuZGxlci5qcwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm94eS1kZWZpbmUtb3duLXByb3BlcnR5LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHJveHktZGVm
aW5lLW93bi1wcm9wZXJ0eS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvcHJveHktZGVmaW5lLW93bi1wcm9wZXJ0eS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDYxNCBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbi4iKTsKK30KKworeworICAgIGxl
dCB0YXJnZXQgPSB7fTsKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgZGVmaW5lUHJvcGVy
dHk6IDI1CisgICAgfTsKKworICAgIGxldCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIGhhbmRs
ZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyBpKyspIHsKKyAgICAgICAgbGV0IHRo
cmV3ID0gZmFsc2U7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkocHJveHksICJ4IiwgeworICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAorICAgICAgICAgICAgICAgIHZhbHVl
OiA1NQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAg
dGhyZXcgPSB0cnVlOworICAgICAgICAgICAgYXNzZXJ0KGUudG9TdHJpbmcoKSA9PT0gIlR5cGVF
cnJvcjogJ2RlZmluZVByb3BlcnR5JyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91
bGQgYmUgY2FsbGFibGUuIik7CisgICAgICAgIH0KKworICAgICAgICBhc3NlcnQodGhyZXcpOwor
ICAgIH0KKworfQorCit7CisgICAgbGV0IHRhcmdldCA9IHt9OworICAgIGxldCBlcnJvciA9IG51
bGw7CisgICAgbGV0IGhhbmRsZXIgPSB7CisgICAgICAgIGdldCBkZWZpbmVQcm9wZXJ0eSgpIHsK
KyAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yOworICAgICAgICAgICAgdGhyb3cgZXJyb3I7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwg
aGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBs
ZXQgdGhyZXcgPSBmYWxzZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShwcm94eSwgIngiLCB7CisgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCisgICAgICAgICAgICAgICAg
dmFsdWU6IDU1CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAg
ICAgICB0aHJldyA9IHRydWU7CisgICAgICAgICAgICBhc3NlcnQoZSA9PT0gZXJyb3IpOworICAg
ICAgICB9CisKKyAgICAgICAgYXNzZXJ0KHRocmV3KTsKKyAgICB9Cit9CisKK3sKKyAgICBsZXQg
dGFyZ2V0ID0ge307CisgICAgbGV0IGVycm9yID0gbnVsbDsKKyAgICBsZXQgaGFuZGxlciA9IHsK
KyAgICAgICAgZGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZXJyb3Ig
PSBuZXcgRXJyb3I7CisgICAgICAgICAgICB0aHJvdyBlcnJvcjsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGxldCB0aHJldyA9IGZhbHNlOwor
ICAgICAgICB0cnkgeworICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3h5LCAi
eCIsIHsKKyAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICAgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICAgICAgICAgICAgICB2YWx1ZTogNTUKKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgIHRocmV3ID0gdHJ1ZTsK
KyAgICAgICAgICAgIGFzc2VydChlID09PSBlcnJvcik7CisgICAgICAgIH0KKworICAgICAgICBh
c3NlcnQodGhyZXcpOworICAgIH0KK30KKworeworICAgIGxldCB0YXJnZXQgPSB7fTsKKyAgICBs
ZXQgaGFuZGxlciA9IHsKKyAgICAgICAgZGVmaW5lUHJvcGVydHk6IG51bGwKKyAgICB9OworCisg
ICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQg
aSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJv
eHksICJ4IiwgeworICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICAgICAgICAgIHZhbHVlOiBpCisgICAgICAgIH0pOworCisg
ICAgICAgIGZvciAobGV0IG9iaiBvZiBbdGFyZ2V0LCBwcm94eV0pIHsKKyAgICAgICAgICAgIGxl
dCBwRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCAieCIpOworICAg
ICAgICAgICAgYXNzZXJ0KHBEZXNjLnZhbHVlID09PSBpKTsKKyAgICAgICAgICAgIGFzc2VydChw
RGVzYy5jb25maWd1cmFibGUgPT09IHRydWUpOworICAgICAgICAgICAgYXNzZXJ0KHBEZXNjLmVu
dW1lcmFibGUgPT09IHRydWUpOworICAgICAgICB9CisgICAgfQorfQorCit7CisgICAgbGV0IHRh
cmdldCA9IHt9OworICAgIGxldCBoYW5kbGVyID0geworICAgICAgICBkZWZpbmVQcm9wZXJ0eTog
dW5kZWZpbmVkCisgICAgfTsKKworICAgIGxldCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIGhh
bmRsZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyBpKyspIHsKKyAgICAgICAgbGV0
IHJlc3VsdCA9IFJlZmxlY3QuZGVmaW5lUHJvcGVydHkocHJveHksICJ4IiwgeworICAgICAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgICAgIHZhbHVlOiBpCisgICAgICAgIH0pOworICAgICAgICBhc3NlcnQocmVzdWx0KTsK
KworICAgICAgICBmb3IgKGxldCBvYmogb2YgW3RhcmdldCwgcHJveHldKSB7CisgICAgICAgICAg
ICBsZXQgcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgIngiKTsK
KyAgICAgICAgICAgIGFzc2VydChwRGVzYy52YWx1ZSA9PT0gaSk7CisgICAgICAgICAgICBhc3Nl
cnQocERlc2MuY29uZmlndXJhYmxlID09PSB0cnVlKTsKKyAgICAgICAgICAgIGFzc2VydChwRGVz
Yy5lbnVtZXJhYmxlID09PSB0cnVlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworeworICAgIGxl
dCB0YXJnZXQgPSB7fTsKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgbGV0IGhhbmRsZXIg
PSB7CisgICAgICAgIGRlZmluZVByb3BlcnR5OiBmdW5jdGlvbih0aGVUYXJnZXQsIHByb3BOYW1l
LCBkZXNjcmlwdG9yKSB7CisgICAgICAgICAgICBjYWxsZWQgPSB0cnVlOworICAgICAgICAgICAg
cmV0dXJuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGhlVGFyZ2V0LCBwcm9wTmFtZSwgZGVzY3Jp
cHRvcik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRh
cmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAg
ICAgICBsZXQgcmVzdWx0ID0gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eSwgIngiLCB7Cisg
ICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlLAorICAgICAgICAgICAgdmFsdWU6IGkKKyAgICAgICAgfSk7CisgICAgICAgIGFzc2VydChy
ZXN1bHQpOworICAgICAgICBhc3NlcnQoY2FsbGVkKTsKKyAgICAgICAgY2FsbGVkID0gZmFsc2U7
CisKKyAgICAgICAgZm9yIChsZXQgb2JqIG9mIFt0YXJnZXQsIHByb3h5XSkgeworICAgICAgICAg
ICAgbGV0IHBEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosICJ4Iik7
CisgICAgICAgICAgICBhc3NlcnQocERlc2MudmFsdWUgPT09IGkpOworICAgICAgICAgICAgYXNz
ZXJ0KHBEZXNjLmNvbmZpZ3VyYWJsZSA9PT0gdHJ1ZSk7CisgICAgICAgICAgICBhc3NlcnQocERl
c2MuZW51bWVyYWJsZSA9PT0gdHJ1ZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3sKKyAgICBs
ZXQgdGFyZ2V0ID0ge307CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOworICAgIGxldCBoYW5kbGVy
ID0geworICAgICAgICBkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24odGhlVGFyZ2V0LCBwcm9wTmFt
ZSwgZGVzY3JpcHRvcikgeworICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IFJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGhlVGFyZ2V0LCBwcm9wTmFtZSwgZGVzY3JpcHRvcik7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9OworCisgICAgbGV0
IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCA1MDA7IGkrKykgeworICAgICAgICBsZXQgcmVzdWx0ID0gUmVmbGVjdC5kZWZpbmVQcm9w
ZXJ0eShwcm94eSwgIngiLCB7CisgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAorICAgICAgICAgICAgdmFsdWU6IGkKKyAgICAgICAg
fSk7CisgICAgICAgIGFzc2VydCghcmVzdWx0KTsKKyAgICAgICAgYXNzZXJ0KGNhbGxlZCk7Cisg
ICAgICAgIGNhbGxlZCA9IGZhbHNlOworCisgICAgICAgIGZvciAobGV0IG9iaiBvZiBbdGFyZ2V0
LCBwcm94eV0pIHsKKyAgICAgICAgICAgIGxldCBwRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3Iob2JqLCAieCIpOworICAgICAgICAgICAgYXNzZXJ0KHBEZXNjLnZhbHVlID09
PSBpKTsKKyAgICAgICAgICAgIGFzc2VydChwRGVzYy5jb25maWd1cmFibGUgPT09IHRydWUpOwor
ICAgICAgICAgICAgYXNzZXJ0KHBEZXNjLmVudW1lcmFibGUgPT09IHRydWUpOworICAgICAgICB9
CisgICAgfQorfQorCit7CisgICAgbGV0IHRhcmdldCA9IHt9OworICAgIGxldCBjYWxsZWQgPSBm
YWxzZTsKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgZGVmaW5lUHJvcGVydHk6IGZ1bmN0
aW9uKHRoZVRhcmdldCwgcHJvcE5hbWUsIGRlc2NyaXB0b3IpIHsKKyAgICAgICAgICAgIGNhbGxl
ZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGxldCB0aHJldyA9IGZhbHNlOworICAg
ICAgICB0cnkgeworICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eSwgIngi
LCB7CisgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgICAgICAgICBj
b25maWd1cmFibGU6IGZhbHNlLAorICAgICAgICAgICAgICAgIHZhbHVlOiBpCisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICB0aHJldyA9IHRydWU7Cisg
ICAgICAgICAgICBhc3NlcnQoZS50b1N0cmluZygpID09PSAiVHlwZUVycm9yOiBQcm94eSdzICdk
ZWZpbmVQcm9wZXJ0eScgdHJhcCByZXR1cm5lZCB0cnVlIGZvciBhIG5vbi1jb25maWd1cmFibGUg
ZmllbGQgZXZlbiB0aG91Z2ggZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIG9mIHRoZSBQcm94eSdz
IHRhcmdldCByZXR1cm5lZCB1bmRlZmluZWQuIik7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0
KGNhbGxlZCk7CisgICAgICAgIGFzc2VydCh0aHJldyk7CisgICAgICAgIGNhbGxlZCA9IGZhbHNl
OworICAgIH0KK30KKworeworICAgIGxldCB0YXJnZXQgPSB7fTsKKyAgICBsZXQgY2FsbGVkID0g
ZmFsc2U7CisgICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHRhcmdldCk7CisgICAgbGV0IGhh
bmRsZXIgPSB7CisgICAgICAgIGRlZmluZVByb3BlcnR5OiBmdW5jdGlvbih0aGVUYXJnZXQsIHBy
b3BOYW1lLCBkZXNjcmlwdG9yKSB7CisgICAgICAgICAgICBjYWxsZWQgPSB0cnVlOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9OworCisgICAgbGV0IHByb3h5ID0g
bmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7
IGkrKykgeworICAgICAgICBsZXQgdGhyZXcgPSBmYWxzZTsKKyAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkocHJveHksICJ4IiwgeworICAgICAgICAgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
LAorICAgICAgICAgICAgICAgIHZhbHVlOiBpCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBj
YXRjaChlKSB7CisgICAgICAgICAgICB0aHJldyA9IHRydWU7CisgICAgICAgICAgICBhc3NlcnQo
ZS50b1N0cmluZygpID09PSAiVHlwZUVycm9yOiBQcm94eSdzICdkZWZpbmVQcm9wZXJ0eScgdHJh
cCByZXR1cm5lZCB0cnVlIGV2ZW4gdGhvdWdoIGdldE93blByb3BlcnR5RGVzY3JpcHRvciBvZiB0
aGUgUHJveHkncyB0YXJnZXQgcmV0dXJuZWQgdW5kZWZpbmVkIGFuZCB0aGUgdGFyZ2V0IGlzIG5v
bi1leHRlbnNpYmxlLiIpOworICAgICAgICB9CisgICAgICAgIGFzc2VydChjYWxsZWQpOworICAg
ICAgICBhc3NlcnQodGhyZXcpOworICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAgICB9Cit9CisK
K3sKKyAgICBsZXQgdGFyZ2V0ID0ge307CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOworICAgIGxl
dCBoYW5kbGVyID0geworICAgICAgICBkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24odGhlVGFyZ2V0
LCBwcm9wTmFtZSwgZGVzY3JpcHRvcikgeworICAgICAgICAgICAgYXNzZXJ0KHByb3BOYW1lID09
PSAieCIpOworICAgICAgICAgICAgYXNzZXJ0KGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID09PSBm
YWxzZSk7CisgICAgICAgICAgICBjYWxsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIFJl
ZmxlY3QuZGVmaW5lUHJvcGVydHkodGhlVGFyZ2V0LCAieCIsIHsKKyAgICAgICAgICAgICAgICBl
bnVtZXJhYmxlOiB0cnVlLAorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgICAgICAgICB2YWx1ZTogZGVzY3JpcHRvci52YWx1ZQorICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFu
ZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICB0cnkg
eworICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eSwgIngiLCB7CisgICAg
ICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgICAgICAgICBjb25maWd1cmFi
bGU6IGZhbHNlLAorICAgICAgICAgICAgICAgIHZhbHVlOiBpCisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICB0aHJldyA9IHRydWU7CisgICAgICAgICAg
ICBhc3NlcnQoZS50b1N0cmluZygpID09PSAiVHlwZUVycm9yOiBQcm94eSdzICdkZWZpbmVQcm9w
ZXJ0eScgdHJhcCBkaWQgbm90IGRlZmluZSBhIG5vbi1jb25maWd1cmFibGUgcHJvcGVydHkgb24g
aXRzIHRhcmdldCBldmVuIHRob3VnaCB0aGUgaW5wdXQgZGVzY3JpcHRvciB0byB0aGUgdHJhcCBz
YWlkIGl0IG11c3QgZG8gc28uIik7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KGNhbGxlZCk7
CisgICAgICAgIGFzc2VydCh0aHJldyk7CisgICAgICAgIGNhbGxlZCA9IGZhbHNlOworCisgICAg
ICAgIGZvciAobGV0IG9iaiBvZiBbdGFyZ2V0LCBwcm94eV0pIHsKKyAgICAgICAgICAgIGxldCBw
RGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCAieCIpOworICAgICAg
ICAgICAgYXNzZXJ0KHBEZXNjLnZhbHVlID09PSBpKTsKKyAgICAgICAgICAgIGFzc2VydChwRGVz
Yy5jb25maWd1cmFibGUgPT09IHRydWUpOworICAgICAgICAgICAgYXNzZXJ0KHBEZXNjLmVudW1l
cmFibGUgPT09IHRydWUpOworICAgICAgICB9CisgICAgfQorfQorCit7CisgICAgbGV0IHRhcmdl
dCA9IHt9OworICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkodGFyZ2V0LCAieCIsIHsKKyAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSwKKyAgICAgICAg
d3JpdGFibGU6IHRydWUsCisgICAgICAgIHZhbHVlOiA1NQorICAgIH0pOworICAgIGxldCBoYW5k
bGVyID0geworICAgICAgICBkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24odGhlVGFyZ2V0LCBwcm9w
TmFtZSwgZGVzY3JpcHRvcikgeworICAgICAgICAgICAgYXNzZXJ0KHByb3BOYW1lID09PSAieCIp
OworICAgICAgICAgICAgYXNzZXJ0KGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID09PSB0cnVlKTsK
KyAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7CisgICAgICAgICAgICBSZWZsZWN0LmRlZmluZVBy
b3BlcnR5KHRoZVRhcmdldCwgIngiLCB7CisgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCisgICAgICAgICAgICAgICAg
dmFsdWU6IGRlc2NyaXB0b3IudmFsdWUKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9OworCisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5
KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgewor
ICAgICAgICBsZXQgdGhyZXcgPSBmYWxzZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFJl
ZmxlY3QuZGVmaW5lUHJvcGVydHkocHJveHksICJ4IiwgeworICAgICAgICAgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZSwKKyAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsCisgICAgICAg
ICAgICAgICAgdmFsdWU6IDQ1CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBjYXRjaChlKSB7
CisgICAgICAgICAgICB0aHJldyA9IHRydWU7CisgICAgICAgICAgICBhc3NlcnQoZS50b1N0cmlu
ZygpID09PSAiVHlwZUVycm9yOiBQcm94eSdzICdkZWZpbmVQcm9wZXJ0eScgdHJhcCBkaWQgbm90
IGRlZmluZSBhIHByb3BlcnR5IG9uIGl0cyB0YXJnZXQgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGgg
dGhlIHRyYXAncyBpbnB1dCBkZXNjcmlwdG9yLiIpOworICAgICAgICB9CisgICAgICAgIGFzc2Vy
dChjYWxsZWQpOworICAgICAgICBhc3NlcnQodGhyZXcpOworICAgICAgICBjYWxsZWQgPSBmYWxz
ZTsKKworICAgICAgICBmb3IgKGxldCBvYmogb2YgW3RhcmdldCwgcHJveHldKSB7CisgICAgICAg
ICAgICBsZXQgcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgIngi
KTsKKyAgICAgICAgICAgIGFzc2VydChwRGVzYy52YWx1ZSA9PT0gNTUpOworICAgICAgICAgICAg
YXNzZXJ0KHBEZXNjLmNvbmZpZ3VyYWJsZSA9PT0gZmFsc2UpOworICAgICAgICB9CisgICAgfQor
fQorCit7CisgICAgbGV0IHRhcmdldCA9IHt9OworICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCAieCIsIHsKKyAgICAgICAgY29uZmlndXJh
YmxlOiBmYWxzZSwKKyAgICAgICAgd3JpdGFibGU6IHRydWUsCisgICAgICAgIHZhbHVlOiA1NQor
ICAgIH0pOworICAgIGxldCBoYW5kbGVyID0geworICAgICAgICBkZWZpbmVQcm9wZXJ0eTogZnVu
Y3Rpb24odGhlVGFyZ2V0LCBwcm9wTmFtZSwgZGVzY3JpcHRvcikgeworICAgICAgICAgICAgYXNz
ZXJ0KHByb3BOYW1lID09PSAieCIpOworICAgICAgICAgICAgYXNzZXJ0KGRlc2NyaXB0b3IuY29u
ZmlndXJhYmxlID09PSB0cnVlKTsKKyAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7CisgICAgICAg
ICAgICBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRoZVRhcmdldCwgIngiLCBkZXNjcmlwdG9yKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfTsKKworICAgIGxldCBw
cm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgNTAwOyBpKyspIHsKKyAgICAgICAgbGV0IHRocmV3ID0gZmFsc2U7CisgICAgICAgIHRyeSB7
CisgICAgICAgICAgICBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHByb3h5LCAieCIsIHsKKyAgICAg
ICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCisgICAgICAgICAgICAgICAgc2V0OmZ1bmN0
aW9uKCl7fSwKKyAgICAgICAgICAgICAgICBnZXQ6ZnVuY3Rpb24oKXt9CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICB0aHJldyA9IHRydWU7CisgICAg
ICAgICAgICBhc3NlcnQoZS50b1N0cmluZygpID09PSAiVHlwZUVycm9yOiBQcm94eSdzICdkZWZp
bmVQcm9wZXJ0eScgdHJhcCBkaWQgbm90IGRlZmluZSBhIHByb3BlcnR5IG9uIGl0cyB0YXJnZXQg
dGhhdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHRyYXAncyBpbnB1dCBkZXNjcmlwdG9yLiIpOwor
ICAgICAgICB9CisgICAgICAgIGFzc2VydChjYWxsZWQpOworICAgICAgICBhc3NlcnQodGhyZXcp
OworICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKworICAgICAgICBmb3IgKGxldCBvYmogb2YgW3Rh
cmdldCwgcHJveHldKSB7CisgICAgICAgICAgICBsZXQgcERlc2MgPSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKG9iaiwgIngiKTsKKyAgICAgICAgICAgIGFzc2VydChwRGVzYy52YWx1
ZSA9PT0gNTUpOworICAgICAgICAgICAgYXNzZXJ0KHBEZXNjLmNvbmZpZ3VyYWJsZSA9PT0gZmFs
c2UpOworICAgICAgICB9CisgICAgfQorfQorCit7CisgICAgbGV0IHRhcmdldCA9IHt9OworICAg
IGxldCBjYWxsZWQgPSBmYWxzZTsKKyAgICBsZXQgc2V0dGVyID0gZnVuY3Rpb24oKXt9OworICAg
IGxldCBnZXR0ZXIgPSBmdW5jdGlvbigpe307CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRh
cmdldCwgIngiLCB7CisgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsCisgICAgICAgIGdldDog
Z2V0dGVyLAorICAgICAgICBzZXQ6IHNldHRlcgorICAgIH0pOworICAgIGxldCBoYW5kbGVyID0g
eworICAgICAgICBkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24odGhlVGFyZ2V0LCBwcm9wTmFtZSwg
ZGVzY3JpcHRvcikgeworICAgICAgICAgICAgYXNzZXJ0KHByb3BOYW1lID09PSAieCIpOworICAg
ICAgICAgICAgYXNzZXJ0KGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID09PSB0cnVlKTsKKyAgICAg
ICAgICAgIGNhbGxlZCA9IHRydWU7CisgICAgICAgICAgICBSZWZsZWN0LmRlZmluZVByb3BlcnR5
KHRoZVRhcmdldCwgIngiLCBkZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIGxldCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIGhh
bmRsZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyBpKyspIHsKKyAgICAgICAgbGV0
IHRocmV3ID0gZmFsc2U7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBSZWZsZWN0LmRlZmlu
ZVByb3BlcnR5KHByb3h5LCAieCIsIHsKKyAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUsCisgICAgICAgICAgICAgICAgdmFsdWU6IDQ1CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fSBjYXRjaChlKSB7CisgICAgICAgICAgICB0aHJldyA9IHRydWU7CisgICAgICAgICAgICBhc3Nl
cnQoZS50b1N0cmluZygpID09PSAiVHlwZUVycm9yOiBQcm94eSdzICdkZWZpbmVQcm9wZXJ0eScg
dHJhcCBkaWQgbm90IGRlZmluZSBhIHByb3BlcnR5IG9uIGl0cyB0YXJnZXQgdGhhdCBpcyBjb21w
YXRpYmxlIHdpdGggdGhlIHRyYXAncyBpbnB1dCBkZXNjcmlwdG9yLiIpOworICAgICAgICB9Cisg
ICAgICAgIGFzc2VydChjYWxsZWQpOworICAgICAgICBhc3NlcnQodGhyZXcpOworICAgICAgICBj
YWxsZWQgPSBmYWxzZTsKKworICAgICAgICBmb3IgKGxldCBvYmogb2YgW3RhcmdldCwgcHJveHld
KSB7CisgICAgICAgICAgICBsZXQgcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKG9iaiwgIngiKTsKKyAgICAgICAgICAgIGFzc2VydChwRGVzYy52YWx1ZSA9PT0gdW5kZWZp
bmVkKTsKKyAgICAgICAgICAgIGFzc2VydChwRGVzYy5jb25maWd1cmFibGUgPT09IGZhbHNlKTsK
KyAgICAgICAgICAgIGFzc2VydChwRGVzYy5nZXQgPT09IGdldHRlcik7CisgICAgICAgICAgICBh
c3NlcnQocERlc2Muc2V0ID09PSBzZXR0ZXIpOworICAgICAgICB9CisgICAgfQorfQorCit7Cisg
ICAgbGV0IHRhcmdldCA9IHt9OworICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKKyAgICBsZXQgc2V0
dGVyID0gZnVuY3Rpb24oKXt9OworICAgIGxldCBnZXR0ZXIgPSBmdW5jdGlvbigpe307CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgIngiLCB7CisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogZmFsc2UsCisgICAgICAgIGdldDogZ2V0dGVyLAorICAgICAgICBzZXQ6IHNldHRlcgorICAg
IH0pOworICAgIGxldCBoYW5kbGVyID0geworICAgICAgICBkZWZpbmVQcm9wZXJ0eTogZnVuY3Rp
b24odGhlVGFyZ2V0LCBwcm9wTmFtZSwgZGVzY3JpcHRvcikgeworICAgICAgICAgICAgYXNzZXJ0
KHByb3BOYW1lID09PSAieCIpOworICAgICAgICAgICAgYXNzZXJ0KGRlc2NyaXB0b3IuY29uZmln
dXJhYmxlID09PSB0cnVlKTsKKyAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7CisgICAgICAgICAg
ICByZXR1cm4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0aGVUYXJnZXQsICJ4IiwgZGVzY3JpcHRv
cik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdl
dCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAg
ICBsZXQgcmVzdWx0ID0gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eSwgIngiLCB7CisgICAg
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCisgICAgICAgICAgICB2YWx1ZTogNDUKKyAgICAg
ICAgfSk7CisgICAgICAgIGFzc2VydCghcmVzdWx0KTsKKyAgICAgICAgYXNzZXJ0KGNhbGxlZCk7
CisgICAgICAgIGNhbGxlZCA9IGZhbHNlOworCisgICAgICAgIGZvciAobGV0IG9iaiBvZiBbdGFy
Z2V0LCBwcm94eV0pIHsKKyAgICAgICAgICAgIGxldCBwRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3Iob2JqLCAieCIpOworICAgICAgICAgICAgYXNzZXJ0KHBEZXNjLnZhbHVl
ID09PSB1bmRlZmluZWQpOworICAgICAgICAgICAgYXNzZXJ0KHBEZXNjLmNvbmZpZ3VyYWJsZSA9
PT0gZmFsc2UpOworICAgICAgICAgICAgYXNzZXJ0KHBEZXNjLmdldCA9PT0gZ2V0dGVyKTsKKyAg
ICAgICAgICAgIGFzc2VydChwRGVzYy5zZXQgPT09IHNldHRlcik7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3sKKyAgICBsZXQgZXJyb3IgPSBmYWxzZTsKKyAgICBsZXQgdGFyZ2V0ID0gbmV3IFBy
b3h5KHt9LCB7CisgICAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcjsKKyAgICAgICAgICAgIHRocm93IGVycm9y
OworICAgICAgICB9CisgICAgfSk7CisKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgZGVm
aW5lUHJvcGVydHk6IGZ1bmN0aW9uKHRoZVRhcmdldCwgcHJvcE5hbWUsIGRlc2NyaXB0b3IpIHsK
KyAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRoZVRhcmdldCwgcHJv
cE5hbWUsIGRlc2NyaXB0b3IpOworICAgICAgICB9CisgICAgfTsKKworICAgIGxldCBwcm94eSA9
IG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAw
OyBpKyspIHsKKyAgICAgICAgbGV0IHRocmV3ID0gZmFsc2U7CisgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHByb3h5LCAieCIsIHsKKyAgICAgICAgICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUsCisgICAgICAgICAgICAgICAgdmFsdWU6IDQ1CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICB0aHJldyA9IHRy
dWU7CisgICAgICAgICAgICBhc3NlcnQoZSA9PT0gZXJyb3IpOworICAgICAgICB9CisgICAgICAg
IGFzc2VydCh0aHJldyk7CisgICAgfQorfQorCit7CisgICAgbGV0IHRhcmdldCA9IHt9OworICAg
IFJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCAieCIsIHsKKyAgICAgICAgd3JpdGFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsCisgICAgICAgIHZhbHVlOiA1NQor
ICAgIH0pOworCisgICAgbGV0IGhhbmRsZXIgPSB7CisgICAgICAgIGRlZmluZVByb3BlcnR5OiBm
dW5jdGlvbih0aGVUYXJnZXQsIHByb3BOYW1lLCBkZXNjcmlwdG9yKSB7CisgICAgICAgICAgICBh
c3NlcnQodGhlVGFyZ2V0ID09PSB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3Qu
ZGVmaW5lUHJvcGVydHkodGhlVGFyZ2V0LCBwcm9wTmFtZSwgZGVzY3JpcHRvcik7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7
CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBsZXQgcmVzdWx0
ID0gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eSwgIngiLCB7CisgICAgICAgICAgICBjb25m
aWd1cmFibGU6IGZhbHNlLAorICAgICAgICAgICAgdmFsdWU6IDU1CisgICAgICAgIH0pOworICAg
ICAgICBhc3NlcnQocmVzdWx0KTsKKyAgICAgICAgYXNzZXJ0KHRhcmdldC54ID09PSA1NSk7Cisg
ICAgICAgIGRlbGV0ZSB0YXJnZXQueDsKKyAgICAgICAgYXNzZXJ0KHRhcmdldC54ID09PSA1NSk7
CisgICAgfQorfQorCit7CisgICAgbGV0IHRhcmdldCA9IHt9OworICAgIFJlZmxlY3QuZGVmaW5l
UHJvcGVydHkodGFyZ2V0LCAieCIsIHsKKyAgICAgICAgd3JpdGFibGU6IGZhbHNlLAorICAgICAg
ICBjb25maWd1cmFibGU6IGZhbHNlLAorICAgICAgICB2YWx1ZTogNTUKKyAgICB9KTsKKworICAg
IGxldCBoYW5kbGVyID0geworICAgICAgICBkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24odGhlVGFy
Z2V0LCBwcm9wTmFtZSwgZGVzY3JpcHRvcikgeworICAgICAgICAgICAgYXNzZXJ0KHRoZVRhcmdl
dCA9PT0gdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmRlZmluZVByb3BlcnR5
KHRoZVRhcmdldCwgcHJvcE5hbWUsIGRlc2NyaXB0b3IpOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIGxldCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpOworICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgNTAwOyBpKyspIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IFJlZmxlY3QuZGVm
aW5lUHJvcGVydHkocHJveHksICJ4IiwgeworICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLAor
ICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSwKKyAgICAgICAgICAgIHZhbHVlOiA1NQor
ICAgICAgICB9KTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdCk7CisgICAgICAgIGFzc2VydCh0YXJn
ZXQueCA9PT0gNTUpOworICAgICAgICBkZWxldGUgdGFyZ2V0Lng7CisgICAgICAgIGFzc2VydCh0
YXJnZXQueCA9PT0gNTUpOworICAgIH0KK30KKworeworICAgIGxldCB0YXJnZXQgPSB7fTsKKyAg
ICBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgIngiLCB7CisgICAgICAgIHdyaXRhYmxl
OiBmYWxzZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSwKKyAgICAgICAgdmFsdWU6IDU1
CisgICAgfSk7CisKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgZGVmaW5lUHJvcGVydHk6
IGZ1bmN0aW9uKHRoZVRhcmdldCwgcHJvcE5hbWUsIGRlc2NyaXB0b3IpIHsKKyAgICAgICAgICAg
IGFzc2VydCh0aGVUYXJnZXQgPT09IHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm4gUmVmbGVj
dC5kZWZpbmVQcm9wZXJ0eSh0aGVUYXJnZXQsIHByb3BOYW1lLCBkZXNjcmlwdG9yKTsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVy
KTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGxldCByZXN1
bHQgPSBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHByb3h5LCAieCIsIHsKKyAgICAgICAgICAgIHdy
aXRhYmxlOiBmYWxzZSwKKyAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsCisgICAgICAg
ICAgICB2YWx1ZTogIm5vdCA1NSIKKyAgICAgICAgfSk7CisgICAgICAgIGFzc2VydCghcmVzdWx0
KTsKKyAgICAgICAgYXNzZXJ0KHRhcmdldC54ID09PSA1NSk7CisgICAgICAgIGRlbGV0ZSB0YXJn
ZXQueDsKKyAgICAgICAgYXNzZXJ0KHRhcmdldC54ID09PSA1NSk7CisgICAgfQorfQorCit7Cisg
ICAgbGV0IHRhcmdldCA9IHt9OworICAgIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCAi
eCIsIHsKKyAgICAgICAgd3JpdGFibGU6IGZhbHNlLAorICAgICAgICBjb25maWd1cmFibGU6IGZh
bHNlLAorICAgICAgICB2YWx1ZTogNTUKKyAgICB9KTsKKworICAgIGxldCBoYW5kbGVyID0gewor
ICAgICAgICBkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24odGhlVGFyZ2V0LCBwcm9wTmFtZSwgZGVz
Y3JpcHRvcikgeworICAgICAgICAgICAgYXNzZXJ0KHRoZVRhcmdldCA9PT0gdGFyZ2V0KTsKKyAg
ICAgICAgICAgIHJldHVybiBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRoZVRhcmdldCwgcHJvcE5h
bWUsIGRlc2NyaXB0b3IpOworICAgICAgICB9CisgICAgfTsKKworICAgIGxldCBwcm94eSA9IG5l
dyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyBp
KyspIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IFJlZmxlY3QuZGVmaW5lUHJvcGVydHkocHJveHks
ICJ4IiwgeworICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCisgICAgICAgICAgICBjb25maWd1
cmFibGU6IGZhbHNlLAorICAgICAgICAgICAgdmFsdWU6ICJ3aGF0ZXZlciB2YWx1ZSBnb2VzIGhl
cmUuIgorICAgICAgICB9KTsKKyAgICAgICAgYXNzZXJ0KCFyZXN1bHQpOworICAgICAgICBhc3Nl
cnQodGFyZ2V0LnggPT09IDU1KTsKKyAgICAgICAgZGVsZXRlIHRhcmdldC54OworICAgICAgICBh
c3NlcnQodGFyZ2V0LnggPT09IDU1KTsKKyAgICB9Cit9Cg==
</data>
<flag name="review"
          id="297241"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>