<?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>143140</bug_id>
          
          <creation_ts>2015-03-27 12:07:40 -0700</creation_ts>
          <short_desc>IteratorClose should be called when jumping over the target for-of loop</short_desc>
          <delta_ts>2015-04-01 02:37:06 -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>528+ (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="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>benjamin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1080691</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-27 12:07:40 -0700</bug_when>
    <thetext>When executing the following script,

var iter = ...;

outer: for (var i of array) {
    for (var j of iter) {
        break outer;
    }
}

iter.return should be called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080692</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-27 12:08:23 -0700</bug_when>
    <thetext>The patch is already submitted in https://bugs.webkit.org/show_bug.cgi?id=142575,
I&apos;ll move it to here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080925</commentid>
    <comment_count>2</comment_count>
      <attachid>249659</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-28 02:12:12 -0700</bug_when>
    <thetext>Created attachment 249659
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080927</commentid>
    <comment_count>3</comment_count>
      <attachid>249660</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-28 02:27:06 -0700</bug_when>
    <thetext>Created attachment 249660
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080931</commentid>
    <comment_count>4</comment_count>
      <attachid>249661</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-28 02:47:32 -0700</bug_when>
    <thetext>Created attachment 249661
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081221</commentid>
    <comment_count>5</comment_count>
      <attachid>249743</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-30 10:39:51 -0700</bug_when>
    <thetext>Created attachment 249743
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081831</commentid>
    <comment_count>6</comment_count>
      <attachid>249743</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-03-31 16:55:57 -0700</bug_when>
    <thetext>Comment on attachment 249743
Patch

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

r=me

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2358
&gt; +            } else if (finallyContext.iterator) {

This should be an else with an ASSERT. It shouldn&apos;t be possible to have a finally context without either a block of code or an iterator close.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081950</commentid>
    <comment_count>7</comment_count>
      <attachid>249743</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-01 02:35:28 -0700</bug_when>
    <thetext>Comment on attachment 249743
Patch

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

Thank you for your review! I&apos;ll fix and land it.

&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2358
&gt;&gt; +            } else if (finallyContext.iterator) {
&gt; 
&gt; This should be an else with an ASSERT. It shouldn&apos;t be possible to have a finally context without either a block of code or an iterator close.

You&apos;re right. Use else and ASSERT instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081951</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-01 02:37:06 -0700</bug_when>
    <thetext>Committed r182226: &lt;http://trac.webkit.org/changeset/182226&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249659</attachid>
            <date>2015-03-28 02:12:12 -0700</date>
            <delta_ts>2015-03-28 02:27:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143140-20150328181132.patch</filename>
            <type>text/plain</type>
            <size>29670</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyMTA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
MDNiMDY3YmVkM2RmMzc2ZWNjOTQ0NzcyZjJiNWQxNjQ3YzYzY2JjLi45MjJiZmU3NTc1YmI1YTdl
MzVjOTBlOGE5ODZiZDhmOTg5N2YwZjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NSBAQAorMjAxNS0wMy0yOCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBJdGVyYXRvckNsb3NlIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBicmVh
ayBzdGF0ZW1lbnQganVtcHMgb3ZlciB0aGUgdGFyZ2V0IGZvci1vZiBsb29wCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1NzUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGZpeGVzIGxh
YmVsZWQgYnJlYWsvY29udGludWUgYmVoYXZpb3JzIHdpdGggZm9yLW9mIGFuZCBpdGVyYXRvcnMu
CisKKyAgICAgICAgMS4gU3VwcG9ydCBJdGVyYXRvckNsb3NlIGJleW9uZCBtdWx0aXBsZSBsb29w
IGNvbnRleHRzCisgICAgICAgIFByZXZpb3VzbHksIEl0ZXJhdG9yQ2xvc2UgaXMgb25seSBleGVj
dXRlZCBpbiBmb3Itb2YncyBicmVha1RhcmdldCgpLgorICAgICAgICBIb3dldmVyLCB0aGlzIG1p
c3NlcyBJdGVyYXRvckNsb3NlIGV4ZWN1dGlvbiB3aGVuIHN0YXRlbWVudCByb2xsLXVwcyBtdWx0
aXBsZSBjb250cm9sIGZsb3cgY29udGV4dHMuCisgICAgICAgIEZvciBleGFtcGxlLAorICAgICAg
ICBvdXRlcjogZm9yICh2YXIgZTEgb2Ygb3V0ZXIpIHsKKyAgICAgICAgICAgIGlubmVyOiBmb3Ig
KHZhciBlMiBvZiBpbm5lcikgeworICAgICAgICAgICAgICAgIGJyZWFrIG91dGVyOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIEluIHRoaXMgY2FzZSwgcmV0dXJuIG1ldGhvZCBv
ZiBpbm5lciBzaG91bGQgYmUgY2FsbGVkLgorICAgICAgICBXZSBsZXZlcmFnZSB0aGUgZXhpc3Rp
bmcgc3lzdGVtIGZvciBgZmluYWxseWAgdG8gZXhlY3V0ZSBpbm5lci5yZXR1cm4gbWV0aG9kIGNv
cnJlY3RseS4KKworICAgICAgICAyLiBJbmNvcnJlY3QgTGFiZWxTY29wZSBjcmVhdGlvbiBpcyBk
b25lIGluIEZvck9mTm9kZQorICAgICAgICBGb3JPZk5vZGUgY3JlYXRlcyBkdXBsaWNhdGVkIExh
YmVsU2NvcGUuCisgICAgICAgIEl0IGNhdXNlcyBpbmZpbml0ZSBsb29wIHdoZW4gZXhlY3V0aW5n
IHRoZSBmb2xsb3dpbmcgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zCisgICAgICAgIGV4cGxpY2l0bHkg
bGFiZWxlZCBmb3Itb2YgbG9vcC4KKyAgICAgICAgRm9yIGV4YW1wbGUsCisgICAgICAgIGlubmVy
OiBmb3IgKHZhciBlbG0gb2YgYXJyYXkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlIGlubmVyOwor
ICAgICAgICB9CisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEZpbmFsbHlDb250ZXh0KToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hJdGVyYXRvckNsb3NlQ29udGV4
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGaW5hbGx5Q29udGV4dCk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BJdGVyYXRvckNsb3NlQ29udGV4
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29tcGxleFBvcFNjb3Bl
cyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRpb24pOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEl0ZXJhdG9yQ2xvc2UpOgorICAg
ICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAqIGJ5dGVj
b21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpGb3JPZk5vZGU6OmVtaXRC
eXRlY29kZSk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2l0ZXJhdG9yLXJldHVybi1iZXlvbmQt
bXVsdGlwbGUtaXRlcmF0aW9uLXNjb3Blcy5qczogQWRkZWQuCisgICAgICAgIChjcmVhdGVJdGVy
YXRvci5pdGVyYXRvci5yZXR1cm4pOgorICAgICAgICAoY3JlYXRlSXRlcmF0b3IpOgorICAgICAg
ICAqIHRlc3RzL3N0cmVzcy9wc2V1ZG8tYXJyYXktbGVuZ3RoLXNob3J0ZW4uanM6IEFkZGVkLgor
ICAgICAgICAodGVzdExlbmd0aFNob3J0ZW5pbmcpOgorICAgICAgICAoZGVuc2VJbnQzMkVsZW1l
bnRzKToKKyAgICAgICAgKGRlbnNlRG91YmxlRWxlbWVudHMpOgorICAgICAgICAoZGVuc2VPYmpl
Y3RFbGVtZW50cyk6CisgICAgICAgIChob2xleUludDMyRWxlbWVudHMpOgorICAgICAgICAoaG9s
ZXlEb3VibGVFbGVtZW50cyk6CisgICAgICAgIChob2xleU9iamVjdEVsZW1lbnRzKToKKyAgICAg
ICAgKGFycmF5U3RvcmFnZUludDMyRWxlbWVudHMpOgorICAgICAgICAoYXJyYXlTdG9yYWdlRG91
YmxlRWxlbWVudHMpOgorICAgICAgICAoYXJyYXlTdG9yYWdlT2JqZWN0RWxlbWVudHMpOgorICAg
ICAgICAoc3BhcnNlSW50MzJFbGVtZW50cyk6CisgICAgICAgIChzcGFyc2VEb3VibGVFbGVtZW50
cyk6CisgICAgICAgIChzcGFyc2VPYmplY3RFbGVtZW50cyk6CisgICAgICAgICogdGVzdHMvc3Ry
ZXNzL3JhaXNlLWVycm9yLWluLWl0ZXJhdG9yLWNsb3NlLmpzOiBBZGRlZC4KKyAgICAgICAgKGNy
ZWF0ZUl0ZXJhdG9yLml0ZXJhdG9yLnJldHVybik6CisgICAgICAgIChjcmVhdGVJdGVyYXRvcik6
CisKIDIwMTUtMDMtMjcgIFNhYW0gQmFyYXRpICA8c2FhbWJhcmF0aTFAZ21haWwuY29tPgogCiAg
ICAgICAgIERlY29uc3RydWN0aW9uIHBhcmFtZXRlcnMgYXJlIGJvdW5kIHRvbyBsYXRlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCmluZGV4IDhmOGQxNjU1MWNhMjViNWMyYWExZmMyYmM5ZTM0ODQ1YmI1MjE1NTUu
LmU0NDgyNzVkYTcxMDc5Mjg5MWZiYzcxYzgxNzhiNDk2ZGIwODA1NGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCkBAIC0yMTIyLDYgKzIxMjIsMzMgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEZp
bmFsbHlDb250ZXh0KFN0YXRlbWVudE5vZGUqIGZpbmFsbHlCbG9jaykKICAgICBzY29wZS5pc0Zp
bmFsbHlCbG9jayA9IHRydWU7CiAgICAgRmluYWxseUNvbnRleHQgY29udGV4dCA9IHsKICAgICAg
ICAgZmluYWxseUJsb2NrLAorICAgICAgICBudWxscHRyLAorICAgICAgICBudWxscHRyLAorICAg
ICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9zY29wZUNvbnRleHRTdGFjay5zaXplKCkpLAor
ICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9zd2l0Y2hDb250ZXh0U3RhY2suc2l6ZSgp
KSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZm9ySW5Db250ZXh0U3RhY2suc2l6
ZSgpKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdHJ5Q29udGV4dFN0YWNrLnNp
emUoKSksCisgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2xhYmVsU2NvcGVzLnNpemUo
KSksCisgICAgICAgIG1fZmluYWxseURlcHRoLAorICAgICAgICBtX2xvY2FsU2NvcGVEZXB0aAor
ICAgIH07CisgICAgc2NvcGUuZmluYWxseUNvbnRleHQgPSBjb250ZXh0OworICAgIG1fc2NvcGVD
b250ZXh0U3RhY2suYXBwZW5kKHNjb3BlKTsKKyAgICBtX2ZpbmFsbHlEZXB0aCsrOworfQorCit2
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoSXRlcmF0b3JDbG9zZUNvbnRleHQoUmVnaXN0ZXJJ
RCogaXRlcmF0b3IsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKiBub2RlKQoreworICAgIC8vIFJl
Y2xhaW0gZnJlZSBsYWJlbCBzY29wZXMuCisgICAgd2hpbGUgKG1fbGFiZWxTY29wZXMuc2l6ZSgp
ICYmICFtX2xhYmVsU2NvcGVzLmxhc3QoKS5yZWZDb3VudCgpKQorICAgICAgICBtX2xhYmVsU2Nv
cGVzLnJlbW92ZUxhc3QoKTsKKworICAgIENvbnRyb2xGbG93Q29udGV4dCBzY29wZTsKKyAgICBz
Y29wZS5pc0ZpbmFsbHlCbG9jayA9IHRydWU7CisgICAgRmluYWxseUNvbnRleHQgY29udGV4dCA9
IHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgaXRlcmF0b3IsCisgICAgICAgIG5vZGUsCiAg
ICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3Njb3BlQ29udGV4dFN0YWNrLnNpemUoKSks
CiAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3N3aXRjaENvbnRleHRTdGFjay5zaXpl
KCkpLAogICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9mb3JJbkNvbnRleHRTdGFjay5z
aXplKCkpLApAQCAtMjEzOSw2ICsyMTY2LDIxIEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBv
cEZpbmFsbHlDb250ZXh0KCkKIHsKICAgICBBU1NFUlQobV9zY29wZUNvbnRleHRTdGFjay5zaXpl
KCkpOwogICAgIEFTU0VSVChtX3Njb3BlQ29udGV4dFN0YWNrLmxhc3QoKS5pc0ZpbmFsbHlCbG9j
ayk7CisgICAgQVNTRVJUKG1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpLmZpbmFsbHlDb250ZXh0
LmZpbmFsbHlCbG9jayk7CisgICAgQVNTRVJUKCFtX3Njb3BlQ29udGV4dFN0YWNrLmxhc3QoKS5m
aW5hbGx5Q29udGV4dC5pdGVyYXRvcik7CisgICAgQVNTRVJUKCFtX3Njb3BlQ29udGV4dFN0YWNr
Lmxhc3QoKS5maW5hbGx5Q29udGV4dC5lbnVtZXJhdGlvbk5vZGUpOworICAgIEFTU0VSVChtX2Zp
bmFsbHlEZXB0aCA+IDApOworICAgIG1fc2NvcGVDb250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwor
ICAgIG1fZmluYWxseURlcHRoLS07Cit9CisKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEl0
ZXJhdG9yQ2xvc2VDb250ZXh0KCkKK3sKKyAgICBBU1NFUlQobV9zY29wZUNvbnRleHRTdGFjay5z
aXplKCkpOworICAgIEFTU0VSVChtX3Njb3BlQ29udGV4dFN0YWNrLmxhc3QoKS5pc0ZpbmFsbHlC
bG9jayk7CisgICAgQVNTRVJUKCFtX3Njb3BlQ29udGV4dFN0YWNrLmxhc3QoKS5maW5hbGx5Q29u
dGV4dC5maW5hbGx5QmxvY2spOworICAgIEFTU0VSVChtX3Njb3BlQ29udGV4dFN0YWNrLmxhc3Qo
KS5maW5hbGx5Q29udGV4dC5pdGVyYXRvcik7CisgICAgQVNTRVJUKG1fc2NvcGVDb250ZXh0U3Rh
Y2subGFzdCgpLmZpbmFsbHlDb250ZXh0LmVudW1lcmF0aW9uTm9kZSk7CiAgICAgQVNTRVJUKG1f
ZmluYWxseURlcHRoID4gMCk7CiAgICAgbV9zY29wZUNvbnRleHRTdGFjay5yZW1vdmVMYXN0KCk7
CiAgICAgbV9maW5hbGx5RGVwdGgtLTsKQEAgLTIzMTAsOSArMjM1MiwxNCBAQCB2b2lkIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0Q29tcGxleFBvcFNjb3BlcyhSZWdpc3RlcklEKiBzY29wZSwgQ29u
dHJvbEZsb3dDb250ZQogICAgICAgICAgICAgaW50IHNhdmVkRHluYW1pY1Njb3BlRGVwdGggPSBt
X2xvY2FsU2NvcGVEZXB0aDsKICAgICAgICAgICAgIG1fbG9jYWxTY29wZURlcHRoID0gZmluYWxs
eUNvbnRleHQuZHluYW1pY1Njb3BlRGVwdGg7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8v
IEVtaXQgdGhlIGZpbmFsbHkgYmxvY2suCi0gICAgICAgICAgICBlbWl0Tm9kZShmaW5hbGx5Q29u
dGV4dC5maW5hbGx5QmxvY2spOwotICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoZmluYWxs
eUNvbnRleHQuZmluYWxseUJsb2NrKSB7CisgICAgICAgICAgICAgICAgLy8gRW1pdCB0aGUgZmlu
YWxseSBibG9jay4KKyAgICAgICAgICAgICAgICBlbWl0Tm9kZShmaW5hbGx5Q29udGV4dC5maW5h
bGx5QmxvY2spOworICAgICAgICAgICAgfSBlbHNlIGlmIChmaW5hbGx5Q29udGV4dC5pdGVyYXRv
cikgeworICAgICAgICAgICAgICAgIC8vIEVtaXQgdGhlIEl0ZXJhdG9yQ2xvc2UgYmxvY2suCisg
ICAgICAgICAgICAgICAgZW1pdEl0ZXJhdG9yQ2xvc2UoZmluYWxseUNvbnRleHQuaXRlcmF0b3Is
IGZpbmFsbHlDb250ZXh0LmVudW1lcmF0aW9uTm9kZSk7CisgICAgICAgICAgICB9CisKICAgICAg
ICAgICAgIFJlZlB0cjxMYWJlbD4gYWZ0ZXJGaW5hbGx5ID0gZW1pdExhYmVsKG5ld0xhYmVsKCku
Z2V0KCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBzdGF0ZSBv
ZiB0aGUgd29ybGQuCkBAIC0yNTg1LDcgKzI2MzIsNiBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0UmVhZE9ubHlFeGNlcHRpb25JZk5lZWRlZCgpCiAgICAgCiB2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0RW51bWVyYXRpb24oVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUsIEV4
cHJlc3Npb25Ob2RlKiBzdWJqZWN0Tm9kZSwgY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKEJ5dGVj
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCopPiYgY2FsbEJhY2spCiB7Ci0gICAgTGFiZWxTY29w
ZVB0ciBzY29wZSA9IG5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7CiAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHN1YmplY3QgPSBuZXdUZW1wb3JhcnkoKTsKICAgICBlbWl0Tm9kZShzdWJq
ZWN0LmdldCgpLCBzdWJqZWN0Tm9kZSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGl0ZXJhdG9y
ID0gZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIHN1YmplY3QuZ2V0KCksIHByb3BlcnR5TmFt
ZXMoKS5pdGVyYXRvclByaXZhdGVOYW1lKTsKQEAgLTI1OTQsNzcgKzI2NDAsNzggQEAgdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKFRocm93YWJsZUV4cHJlc3Npb25EYXRh
KiBub2RlLCBFeHByZXNzaW8KICAgICAgICAgZW1pdE1vdmUoYXJncy50aGlzUmVnaXN0ZXIoKSwg
c3ViamVjdC5nZXQoKSk7CiAgICAgICAgIGVtaXRDYWxsKGl0ZXJhdG9yLmdldCgpLCBpdGVyYXRv
ci5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBhcmdzLCBub2RlLT5kaXZvdCgpLCBub2RlLT5k
aXZvdFN0YXJ0KCksIG5vZGUtPmRpdm90RW5kKCkpOwogICAgIH0KLSAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gdmFsdWUgPSBuZXdUZW1wb3JhcnkoKTsKLSAgICBlbWl0TG9hZCh2YWx1ZS5nZXQoKSwg
anNVbmRlZmluZWQoKSk7Ci0gICAgCi0gICAgZW1pdEp1bXAoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0
KCkpOwotICAgIAotICAgIFJlZlB0cjxMYWJlbD4gbG9vcFN0YXJ0ID0gbmV3TGFiZWwoKTsKLSAg
ICBSZWZQdHI8TGFiZWw+IGl0ZXJhdG9yRG9uZSA9IG5ld0xhYmVsKCk7Ci0gICAgZW1pdExhYmVs
KGxvb3BTdGFydC5nZXQoKSk7Ci0gICAgZW1pdExvb3BIaW50KCk7Ci0KLSAgICBSZWZQdHI8TGFi
ZWw+IHRyeVN0YXJ0TGFiZWwgPSBuZXdMYWJlbCgpOwotICAgIGVtaXRMYWJlbCh0cnlTdGFydExh
YmVsLmdldCgpKTsKLSAgICBUcnlEYXRhKiB0cnlEYXRhID0gcHVzaFRyeSh0cnlTdGFydExhYmVs
LmdldCgpKTsKLSAgICBjYWxsQmFjaygqdGhpcywgdmFsdWUuZ2V0KCkpOwotICAgIFJlZlB0cjxM
YWJlbD4gY2F0Y2hIZXJlID0gZW1pdExhYmVsKG5ld0xhYmVsKCkuZ2V0KCkpOwotCi0gICAgZW1p
dExhYmVsKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBuZXh0ID0gZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIGl0ZXJhdG9yLmdl
dCgpLCBwcm9wZXJ0eU5hbWVzKCkubmV4dCk7Ci0gICAgICAgIENhbGxBcmd1bWVudHMgbmV4dEFy
Z3VtZW50cygqdGhpcywgbnVsbHB0cik7Ci0gICAgICAgIGVtaXRNb3ZlKG5leHRBcmd1bWVudHMu
dGhpc1JlZ2lzdGVyKCksIGl0ZXJhdG9yLmdldCgpKTsKLSAgICAgICAgZW1pdENhbGwodmFsdWUu
Z2V0KCksIG5leHQuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgbmV4dEFyZ3VtZW50cywgbm9k
ZS0+ZGl2b3QoKSwgbm9kZS0+ZGl2b3RTdGFydCgpLCBub2RlLT5kaXZvdEVuZCgpKTsKLSAgICB9
Ci0gICAgewotICAgICAgICBSZWZQdHI8TGFiZWw+IHR5cGVJc09iamVjdCA9IG5ld0xhYmVsKCk7
Ci0gICAgICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc09iamVjdChuZXdUZW1wb3JhcnkoKSwgdmFs
dWUuZ2V0KCkpLCB0eXBlSXNPYmplY3QuZ2V0KCkpOwotICAgICAgICBlbWl0VGhyb3dUeXBlRXJy
b3IoQVNDSUlMaXRlcmFsKCJJdGVyYXRvciByZXN1bHQgaW50ZXJmYWNlIGlzIG5vdCBhbiBvYmpl
Y3QuIikpOwotICAgICAgICBlbWl0TGFiZWwodHlwZUlzT2JqZWN0LmdldCgpKTsKLSAgICB9Ci0g
ICAgZW1pdEp1bXBJZlRydWUoZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIHZhbHVlLmdldCgp
LCBwcm9wZXJ0eU5hbWVzKCkuZG9uZSksIGl0ZXJhdG9yRG9uZS5nZXQoKSk7Ci0gICAgZW1pdEdl
dEJ5SWQodmFsdWUuZ2V0KCksIHZhbHVlLmdldCgpLCBwcm9wZXJ0eU5hbWVzKCkudmFsdWUpOwot
ICAgIGVtaXRKdW1wKGxvb3BTdGFydC5nZXQoKSk7CiAKLSAgICAvLyBJdGVyYXRvckNsb3NlIHNl
cXVlbmNlIGZvciB0aHJvdy1lZCBjb250cm9sIGZsb3cuCisgICAgUmVmUHRyPExhYmVsPiBsb29w
RG9uZSA9IG5ld0xhYmVsKCk7CisgICAgLy8gUmVmUHRyPFJlZ2lzdGVyPiBpdGVyYXRvcidzIGxp
ZmV0aW1lIG11c3QgYmUgbG9uZ2VyIHRoYW4gSXRlcmF0b3JDbG9zZUNvbnRleHQuCisgICAgcHVz
aEl0ZXJhdG9yQ2xvc2VDb250ZXh0KGl0ZXJhdG9yLmdldCgpLCBub2RlKTsKICAgICB7Ci0gICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBleGNlcHRpb25SZWdpc3RlciA9IHBvcFRyeUFuZEVtaXRD
YXRjaCh0cnlEYXRhLCBuZXdUZW1wb3JhcnkoKSwgY2F0Y2hIZXJlLmdldCgpKTsKLSAgICAgICAg
UmVmUHRyPExhYmVsPiByZXRocm93ID0gbmV3TGFiZWwoKTsKKyAgICAgICAgTGFiZWxTY29wZVB0
ciBzY29wZSA9IG5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7CisgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiB2YWx1ZSA9IG5ld1RlbXBvcmFyeSgpOworICAgICAgICBlbWl0TG9hZCh2
YWx1ZS5nZXQoKSwganNVbmRlZmluZWQoKSk7CiAKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHJldHVybk1ldGhvZCA9IGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBpdGVyYXRvci5nZXQo
KSwgcHJvcGVydHlOYW1lcygpLnJldHVybktleXdvcmQpOwotICAgICAgICBlbWl0SnVtcElmVHJ1
ZShlbWl0SXNVbmRlZmluZWQobmV3VGVtcG9yYXJ5KCksIHJldHVybk1ldGhvZC5nZXQoKSksIHJl
dGhyb3cuZ2V0KCkpOworICAgICAgICBlbWl0SnVtcChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7
CiAKLSAgICAgICAgUmVmUHRyPExhYmVsPiByZXR1cm5DYWxsVHJ5U3RhcnQgPSBuZXdMYWJlbCgp
OwotICAgICAgICBlbWl0TGFiZWwocmV0dXJuQ2FsbFRyeVN0YXJ0LmdldCgpKTsKLSAgICAgICAg
VHJ5RGF0YSogcmV0dXJuQ2FsbFRyeURhdGEgPSBwdXNoVHJ5KHJldHVybkNhbGxUcnlTdGFydC5n
ZXQoKSk7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gbG9vcFN0YXJ0ID0gbmV3TGFiZWwoKTsKKyAg
ICAgICAgZW1pdExhYmVsKGxvb3BTdGFydC5nZXQoKSk7CisgICAgICAgIGVtaXRMb29wSGludCgp
OwogCi0gICAgICAgIENhbGxBcmd1bWVudHMgcmV0dXJuQXJndW1lbnRzKCp0aGlzLCBudWxscHRy
KTsKLSAgICAgICAgZW1pdE1vdmUocmV0dXJuQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBpdGVy
YXRvci5nZXQoKSk7Ci0gICAgICAgIGVtaXRDYWxsKHZhbHVlLmdldCgpLCByZXR1cm5NZXRob2Qu
Z2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgcmV0dXJuQXJndW1lbnRzLCBub2RlLT5kaXZvdCgp
LCBub2RlLT5kaXZvdFN0YXJ0KCksIG5vZGUtPmRpdm90RW5kKCkpOworICAgICAgICBSZWZQdHI8
TGFiZWw+IHRyeVN0YXJ0TGFiZWwgPSBuZXdMYWJlbCgpOworICAgICAgICBlbWl0TGFiZWwodHJ5
U3RhcnRMYWJlbC5nZXQoKSk7CisgICAgICAgIFRyeURhdGEqIHRyeURhdGEgPSBwdXNoVHJ5KHRy
eVN0YXJ0TGFiZWwuZ2V0KCkpOworICAgICAgICBjYWxsQmFjaygqdGhpcywgdmFsdWUuZ2V0KCkp
OworICAgICAgICBlbWl0SnVtcChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CiAKLSAgICAgICAg
UmVmUHRyPExhYmVsPiByZXR1cm5DYWxsQ2F0Y2hIZXJlID0gZW1pdExhYmVsKG5ld0xhYmVsKCku
Z2V0KCkpOwotICAgICAgICBlbWl0SnVtcChyZXRocm93LmdldCgpKTsKKyAgICAgICAgLy8gSXRl
cmF0b3JDbG9zZSBzZXF1ZW5jZSBmb3IgdGhyb3ctZWQgY29udHJvbCBmbG93LgorICAgICAgICB7
CisgICAgICAgICAgICBSZWZQdHI8TGFiZWw+IGNhdGNoSGVyZSA9IGVtaXRMYWJlbChuZXdMYWJl
bCgpLmdldCgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBleGNlcHRpb25SZWdp
c3RlciA9IHBvcFRyeUFuZEVtaXRDYXRjaCh0cnlEYXRhLCBuZXdUZW1wb3JhcnkoKSwgY2F0Y2hI
ZXJlLmdldCgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxMYWJlbD4gY2F0Y2hEb25lID0gbmV3TGFi
ZWwoKTsKIAotICAgICAgICBwb3BUcnlBbmRFbWl0Q2F0Y2gocmV0dXJuQ2FsbFRyeURhdGEsIG5l
d1RlbXBvcmFyeSgpLCByZXR1cm5DYWxsQ2F0Y2hIZXJlLmdldCgpKTsKLSAgICAgICAgZW1pdExh
YmVsKHJldGhyb3cuZ2V0KCkpOwotICAgICAgICBlbWl0VGhyb3coZXhjZXB0aW9uUmVnaXN0ZXIu
Z2V0KCkpOwotICAgIH0KKyAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5NZXRo
b2QgPSBlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgaXRlcmF0b3IuZ2V0KCksIHByb3BlcnR5
TmFtZXMoKS5yZXR1cm5LZXl3b3JkKTsKKyAgICAgICAgICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJ
c1VuZGVmaW5lZChuZXdUZW1wb3JhcnkoKSwgcmV0dXJuTWV0aG9kLmdldCgpKSwgY2F0Y2hEb25l
LmdldCgpKTsKIAotICAgIC8vIEl0ZXJhdG9yQ2xvc2Ugc2VxdWVuY2UgZm9yIGJyZWFrLWVkIGNv
bnRyb2wgZmxvdy4KLSAgICBlbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOwotICAgIHsK
LSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVybk1ldGhvZCA9IGVtaXRHZXRCeUlkKG5l
d1RlbXBvcmFyeSgpLCBpdGVyYXRvci5nZXQoKSwgcHJvcGVydHlOYW1lcygpLnJldHVybktleXdv
cmQpOwotICAgICAgICBlbWl0SnVtcElmVHJ1ZShlbWl0SXNVbmRlZmluZWQobmV3VGVtcG9yYXJ5
KCksIHJldHVybk1ldGhvZC5nZXQoKSksIGl0ZXJhdG9yRG9uZS5nZXQoKSk7CisgICAgICAgICAg
ICBSZWZQdHI8TGFiZWw+IHJldHVybkNhbGxUcnlTdGFydCA9IG5ld0xhYmVsKCk7CisgICAgICAg
ICAgICBlbWl0TGFiZWwocmV0dXJuQ2FsbFRyeVN0YXJ0LmdldCgpKTsKKyAgICAgICAgICAgIFRy
eURhdGEqIHJldHVybkNhbGxUcnlEYXRhID0gcHVzaFRyeShyZXR1cm5DYWxsVHJ5U3RhcnQuZ2V0
KCkpOwogCi0gICAgICAgIENhbGxBcmd1bWVudHMgcmV0dXJuQXJndW1lbnRzKCp0aGlzLCBudWxs
cHRyKTsKLSAgICAgICAgZW1pdE1vdmUocmV0dXJuQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBp
dGVyYXRvci5nZXQoKSk7Ci0gICAgICAgIGVtaXRDYWxsKHZhbHVlLmdldCgpLCByZXR1cm5NZXRo
b2QuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgcmV0dXJuQXJndW1lbnRzLCBub2RlLT5kaXZv
dCgpLCBub2RlLT5kaXZvdFN0YXJ0KCksIG5vZGUtPmRpdm90RW5kKCkpOwotICAgICAgICBlbWl0
SnVtcElmVHJ1ZShlbWl0SXNPYmplY3QobmV3VGVtcG9yYXJ5KCksIHZhbHVlLmdldCgpKSwgaXRl
cmF0b3JEb25lLmdldCgpKTsKLSAgICAgICAgZW1pdFRocm93VHlwZUVycm9yKEFTQ0lJTGl0ZXJh
bCgiSXRlcmF0b3IgcmVzdWx0IGludGVyZmFjZSBpcyBub3QgYW4gb2JqZWN0LiIpKTsKKyAgICAg
ICAgICAgIENhbGxBcmd1bWVudHMgcmV0dXJuQXJndW1lbnRzKCp0aGlzLCBudWxscHRyKTsKKyAg
ICAgICAgICAgIGVtaXRNb3ZlKHJldHVybkFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgaXRlcmF0
b3IuZ2V0KCkpOworICAgICAgICAgICAgZW1pdENhbGwodmFsdWUuZ2V0KCksIHJldHVybk1ldGhv
ZC5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCByZXR1cm5Bcmd1bWVudHMsIG5vZGUtPmRpdm90
KCksIG5vZGUtPmRpdm90U3RhcnQoKSwgbm9kZS0+ZGl2b3RFbmQoKSk7CisKKyAgICAgICAgICAg
IGVtaXRMYWJlbChjYXRjaERvbmUuZ2V0KCkpOworICAgICAgICAgICAgZW1pdFRocm93KGV4Y2Vw
dGlvblJlZ2lzdGVyLmdldCgpKTsKKworICAgICAgICAgICAgLy8gQWJzb3JiIGV4Y2VwdGlvbi4K
KyAgICAgICAgICAgIHBvcFRyeUFuZEVtaXRDYXRjaChyZXR1cm5DYWxsVHJ5RGF0YSwgbmV3VGVt
cG9yYXJ5KCksIGNhdGNoRG9uZS5nZXQoKSk7CisgICAgICAgICAgICBlbWl0VGhyb3coZXhjZXB0
aW9uUmVnaXN0ZXIuZ2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAgZW1pdExhYmVsKHNjb3Bl
LT5jb250aW51ZVRhcmdldCgpKTsKKyAgICAgICAgeworICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBuZXh0ID0gZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5
KCksIGl0ZXJhdG9yLmdldCgpLCBwcm9wZXJ0eU5hbWVzKCkubmV4dCk7CisgICAgICAgICAgICAg
ICAgQ2FsbEFyZ3VtZW50cyBuZXh0QXJndW1lbnRzKCp0aGlzLCBudWxscHRyKTsKKyAgICAgICAg
ICAgICAgICBlbWl0TW92ZShuZXh0QXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBpdGVyYXRvci5n
ZXQoKSk7CisgICAgICAgICAgICAgICAgZW1pdENhbGwodmFsdWUuZ2V0KCksIG5leHQuZ2V0KCks
IE5vRXhwZWN0ZWRGdW5jdGlvbiwgbmV4dEFyZ3VtZW50cywgbm9kZS0+ZGl2b3QoKSwgbm9kZS0+
ZGl2b3RTdGFydCgpLCBub2RlLT5kaXZvdEVuZCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8TGFiZWw+IHR5cGVJc09iamVjdCA9IG5ld0xh
YmVsKCk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBJZlRydWUoZW1pdElzT2JqZWN0KG5ld1Rl
bXBvcmFyeSgpLCB2YWx1ZS5nZXQoKSksIHR5cGVJc09iamVjdC5nZXQoKSk7CisgICAgICAgICAg
ICAgICAgZW1pdFRocm93VHlwZUVycm9yKEFTQ0lJTGl0ZXJhbCgiSXRlcmF0b3IgcmVzdWx0IGlu
dGVyZmFjZSBpcyBub3QgYW4gb2JqZWN0LiIpKTsKKyAgICAgICAgICAgICAgICBlbWl0TGFiZWwo
dHlwZUlzT2JqZWN0LmdldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVtaXRKdW1w
SWZUcnVlKGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCB2YWx1ZS5nZXQoKSwgcHJvcGVydHlO
YW1lcygpLmRvbmUpLCBsb29wRG9uZS5nZXQoKSk7CisgICAgICAgICAgICBlbWl0R2V0QnlJZCh2
YWx1ZS5nZXQoKSwgdmFsdWUuZ2V0KCksIHByb3BlcnR5TmFtZXMoKS52YWx1ZSk7CisgICAgICAg
ICAgICBlbWl0SnVtcChsb29wU3RhcnQuZ2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAgZW1p
dExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsKICAgICB9CiAKLSAgICBlbWl0TGFiZWwoaXRl
cmF0b3JEb25lLmdldCgpKTsKKyAgICAvLyBJdGVyYXRvckNsb3NlIHNlcXVlbmNlIGZvciBicmVh
ay1lZCBjb250cm9sIGZsb3cuCisgICAgcG9wSXRlcmF0b3JDbG9zZUNvbnRleHQoKTsKKyAgICBl
bWl0SXRlcmF0b3JDbG9zZShpdGVyYXRvci5nZXQoKSwgbm9kZSk7CisgICAgZW1pdExhYmVsKGxv
b3BEb25lLmdldCgpKTsKIH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRH
ZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSkKQEAg
LTI3NTYsNiArMjgwMywyMSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdElz
VW5kZWZpbmVkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKQogICAgIHJldHVybiBk
c3Q7CiB9CiAKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJdGVyYXRvckNsb3NlKFJlZ2lz
dGVySUQqIGl0ZXJhdG9yLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSogbm9kZSkKK3sKKyAgICBS
ZWZQdHI8TGFiZWw+IGRvbmUgPSBuZXdMYWJlbCgpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBy
ZXR1cm5NZXRob2QgPSBlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgaXRlcmF0b3IsIHByb3Bl
cnR5TmFtZXMoKS5yZXR1cm5LZXl3b3JkKTsKKyAgICBlbWl0SnVtcElmVHJ1ZShlbWl0SXNVbmRl
ZmluZWQobmV3VGVtcG9yYXJ5KCksIHJldHVybk1ldGhvZC5nZXQoKSksIGRvbmUuZ2V0KCkpOwor
CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gbmV3VGVtcG9yYXJ5KCk7CisgICAgQ2Fs
bEFyZ3VtZW50cyByZXR1cm5Bcmd1bWVudHMoKnRoaXMsIG51bGxwdHIpOworICAgIGVtaXRNb3Zl
KHJldHVybkFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgaXRlcmF0b3IpOworICAgIGVtaXRDYWxs
KHZhbHVlLmdldCgpLCByZXR1cm5NZXRob2QuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgcmV0
dXJuQXJndW1lbnRzLCBub2RlLT5kaXZvdCgpLCBub2RlLT5kaXZvdFN0YXJ0KCksIG5vZGUtPmRp
dm90RW5kKCkpOworICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc09iamVjdChuZXdUZW1wb3Jhcnko
KSwgdmFsdWUuZ2V0KCkpLCBkb25lLmdldCgpKTsKKyAgICBlbWl0VGhyb3dUeXBlRXJyb3IoQVND
SUlMaXRlcmFsKCJJdGVyYXRvciByZXN1bHQgaW50ZXJmYWNlIGlzIG5vdCBhbiBvYmplY3QuIikp
OworICAgIGVtaXRMYWJlbChkb25lLmdldCgpKTsKK30KKwogdm9pZCBCeXRlY29kZUdlbmVyYXRv
cjo6cHVzaEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lz
dGVySUQqIGluZGV4UmVnaXN0ZXIpCiB7CiAgICAgaWYgKCFsb2NhbFJlZ2lzdGVyKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5oCmluZGV4IDRmZmVmNmI0MDk3ZjAyNDZkYzFiYWU4OWVlOGFhYjhlYzk1YzYwZmEuLjJlNTkw
MzlkM2E0ODRhMzQ3MjgxNDQwZWVmOWMxYjgxOWY3MjY1ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTgy
LDYgKzgyLDggQEAKIAogICAgIHN0cnVjdCBGaW5hbGx5Q29udGV4dCB7CiAgICAgICAgIFN0YXRl
bWVudE5vZGUqIGZpbmFsbHlCbG9jazsKKyAgICAgICAgUmVnaXN0ZXJJRCogaXRlcmF0b3I7Cisg
ICAgICAgIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKiBlbnVtZXJhdGlvbk5vZGU7CiAgICAgICAg
IHVuc2lnbmVkIHNjb3BlQ29udGV4dFN0YWNrU2l6ZTsKICAgICAgICAgdW5zaWduZWQgc3dpdGNo
Q29udGV4dFN0YWNrU2l6ZTsKICAgICAgICAgdW5zaWduZWQgZm9ySW5Db250ZXh0U3RhY2tTaXpl
OwpAQCAtNTI2LDYgKzUyOCw4IEBACiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc09iamVjdChS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRJc1VuZGVmaW5lZChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7CiAKKyAgICAg
ICAgdm9pZCBlbWl0SXRlcmF0b3JDbG9zZShSZWdpc3RlcklEKiBpdGVyYXRvciwgVGhyb3dhYmxl
RXhwcmVzc2lvbkRhdGEqIG5vZGUpOworCiAgICAgICAgIHZvaWQgZW1pdFJlYWRPbmx5RXhjZXB0
aW9uSWZOZWVkZWQoKTsKIAogICAgICAgICAvLyBTdGFydCBhIHRyeSBibG9jay4gJ3N0YXJ0JyBt
dXN0IGhhdmUgYmVlbiBlbWl0dGVkLgpAQCAtNTU2LDYgKzU2MCw4IEBACiAKICAgICAgICAgdm9p
ZCBwdXNoRmluYWxseUNvbnRleHQoU3RhdGVtZW50Tm9kZSogZmluYWxseUJsb2NrKTsKICAgICAg
ICAgdm9pZCBwb3BGaW5hbGx5Q29udGV4dCgpOworICAgICAgICB2b2lkIHB1c2hJdGVyYXRvckNs
b3NlQ29udGV4dChSZWdpc3RlcklEKiBpdGVyYXRvciwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEq
IGVudW1lcmF0aW9uTm9kZSk7CisgICAgICAgIHZvaWQgcG9wSXRlcmF0b3JDbG9zZUNvbnRleHQo
KTsKIAogICAgICAgICB2b2lkIHB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2Nh
bCwgUmVnaXN0ZXJJRCogaW5kZXgpOwogICAgICAgICB2b2lkIHBvcEluZGV4ZWRGb3JJblNjb3Bl
KFJlZ2lzdGVySUQqIGxvY2FsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRleCA2MTU5Yzc5Yzk5MzFlY2Q0NTg1ZjFhN2Rl
ZmIxYTc2MTE1NzNlOGEzLi5kYjVjYWU4NjdjMzc3YzNhMDA4YWQwNTc4ZGU3ODczZDIxNWY2ODky
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29k
ZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0Nv
ZGVnZW4uY3BwCkBAIC0yMjg3LDkgKzIyODcsNyBAQCB2b2lkIEZvck9mTm9kZTo6ZW1pdEJ5dGVj
b2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKICAgICAg
ICAgZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoZ2VuZXJhdG9yLCBBU0NJSUxpdGVyYWwoIkxlZnQg
c2lkZSBvZiBmb3Itb2Ygc3RhdGVtZW50IGlzIG5vdCBhIHJlZmVyZW5jZS4iKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgCi0gICAgTGFiZWxTY29wZVB0ciBzY29wZSA9IGdlbmVyYXRv
ci5uZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxvb3ApOwotICAgIAorCiAgICAgZ2VuZXJhdG9y
LmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBzdGFydE9m
ZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CiAgICAgYXV0byBleHRyYWN0b3IgPSBbdGhpcywg
ZHN0XShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiB2YWx1ZSkKICAg
ICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2l0ZXJh
dG9yLXJldHVybi1iZXlvbmQtbXVsdGlwbGUtaXRlcmF0aW9uLXNjb3Blcy5qcyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvaXRlcmF0b3ItcmV0dXJuLWJleW9uZC1tdWx0aXBs
ZS1pdGVyYXRpb24tc2NvcGVzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQwODRkNmZjZDI2NzE3MmNkZTM2NWI5
YTM0NzVmNzhkMDk4NDZjZWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL2l0ZXJhdG9yLXJldHVybi1iZXlvbmQtbXVsdGlwbGUtaXRlcmF0aW9u
LXNjb3Blcy5qcwpAQCAtMCwwICsxLDEzMCBAQAorCitmdW5jdGlvbiBjcmVhdGVJdGVyYXRvcihj
YWxsYmFjaykgeworICAgIHZhciBhcnJheSA9IFswLDEsMiwzLDQsNV07CisgICAgdmFyIGl0ZXJh
dG9yID0gYXJyYXlbU3ltYm9sLml0ZXJhdG9yXSgpOworICAgIGl0ZXJhdG9yLnJldHVybiA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgaXRlcmF0b3IucmV0dXJuZWQgPSB0cnVlOworICAgICAgICBp
ZiAoY2FsbGJhY2spCisgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sodGhpcyk7CisgICAgICAg
IHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTsKKyAgICB9OworICAgIGl0
ZXJhdG9yLnJldHVybmVkID0gZmFsc2U7CisgICAgcmV0dXJuIGl0ZXJhdG9yOworfQorCisoZnVu
Y3Rpb24gdGVzdCgpIHsKKyAgICB2YXIgb3V0ZXJJdGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yKCk7
CisgICAgdmFyIGlubmVySXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvcigpOworICAgIG91dGVyOiBm
b3IgKHZhciBlMSBvZiBvdXRlckl0ZXJhdG9yKSB7CisgICAgICAgIGlubmVyOiBmb3IgKHZhciBl
MiBvZiBpbm5lckl0ZXJhdG9yKSB7CisgICAgICAgICAgICBicmVhayBvdXRlcjsKKyAgICAgICAg
fQorICAgIH0KKyAgICBpZiAoIWlubmVySXRlcmF0b3IucmV0dXJuZWQpCisgICAgICAgIHRocm93
IG5ldyBFcnJvcigiYmFkIHZhbHVlOiAiICsgaW5uZXJJdGVyYXRvci5yZXR1cm5lZCk7CisgICAg
aWYgKCFvdXRlckl0ZXJhdG9yLnJldHVybmVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJh
ZCB2YWx1ZTogIiArIG91dGVySXRlcmF0b3IucmV0dXJuZWQpOworfSgpKTsKKworKGZ1bmN0aW9u
IHRlc3QoKSB7CisgICAgdmFyIG91dGVySXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvcigpOworICAg
IHZhciBpbm5lckl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IoKTsKKyAgICBvdXRlcjogZm9yICh2
YXIgZTEgb2Ygb3V0ZXJJdGVyYXRvcikgeworICAgICAgICBpbm5lcjogZm9yICh2YXIgZTIgb2Yg
aW5uZXJJdGVyYXRvcikgeworICAgICAgICAgICAgYnJlYWsgaW5uZXI7CisgICAgICAgIH0KKyAg
ICB9CisgICAgaWYgKCFpbm5lckl0ZXJhdG9yLnJldHVybmVkKQorICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoImJhZCB2YWx1ZTogIiArIGlubmVySXRlcmF0b3IucmV0dXJuZWQpOworICAgIGlmIChv
dXRlckl0ZXJhdG9yLnJldHVybmVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2YWx1
ZTogIiArIG91dGVySXRlcmF0b3IucmV0dXJuZWQpOworfSgpKTsKKworKGZ1bmN0aW9uIHRlc3Qo
KSB7CisgICAgdmFyIG91dGVySXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvcigpOworICAgIHZhciBp
bm5lckl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IoKTsKKyAgICBvdXRlcjogZm9yICh2YXIgZTEg
b2Ygb3V0ZXJJdGVyYXRvcikgeworICAgICAgICBpbm5lcjogZm9yICh2YXIgZTIgb2YgaW5uZXJJ
dGVyYXRvcikgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYg
KCFpbm5lckl0ZXJhdG9yLnJldHVybmVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2
YWx1ZTogIiArIGlubmVySXRlcmF0b3IucmV0dXJuZWQpOworICAgIGlmIChvdXRlckl0ZXJhdG9y
LnJldHVybmVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2YWx1ZTogIiArIG91dGVy
SXRlcmF0b3IucmV0dXJuZWQpOworfSgpKTsKKworCisoZnVuY3Rpb24gdGVzdCgpIHsKKyAgICB2
YXIgb3V0ZXJJdGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgdmFyIGlubmVySXRlcmF0
b3IgPSBjcmVhdGVJdGVyYXRvcigpOworICAgIG91dGVyOiBmb3IgKHZhciBlMSBvZiBvdXRlckl0
ZXJhdG9yKSB7CisgICAgICAgIGlubmVyOiBmb3IgKHZhciBlMiBvZiBpbm5lckl0ZXJhdG9yKSB7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoaW5uZXJJ
dGVyYXRvci5yZXR1cm5lZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgdmFsdWU6ICIg
KyBpbm5lckl0ZXJhdG9yLnJldHVybmVkKTsKKyAgICBpZiAob3V0ZXJJdGVyYXRvci5yZXR1cm5l
ZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgdmFsdWU6ICIgKyBvdXRlckl0ZXJhdG9y
LnJldHVybmVkKTsKK30oKSk7CisKKyhmdW5jdGlvbiB0ZXN0KCkgeworICAgIHZhciBvdXRlckl0
ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IoKTsKKyAgICB2YXIgaW5uZXJJdGVyYXRvciA9IGNyZWF0
ZUl0ZXJhdG9yKCk7CisgICAgb3V0ZXI6IGZvciAodmFyIGUxIG9mIG91dGVySXRlcmF0b3IpIHsK
KyAgICAgICAgaW5uZXI6IGZvciAodmFyIGUyIG9mIGlubmVySXRlcmF0b3IpIHsKKyAgICAgICAg
ICAgIGNvbnRpbnVlIGlubmVyOworICAgICAgICB9CisgICAgfQorICAgIGlmIChpbm5lckl0ZXJh
dG9yLnJldHVybmVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2YWx1ZTogIiArIGlu
bmVySXRlcmF0b3IucmV0dXJuZWQpOworICAgIGlmIChvdXRlckl0ZXJhdG9yLnJldHVybmVkKQor
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2YWx1ZTogIiArIG91dGVySXRlcmF0b3IucmV0
dXJuZWQpOworfSgpKTsKKworKGZ1bmN0aW9uIHRlc3QoKSB7CisgICAgdmFyIG91dGVySXRlcmF0
b3IgPSBjcmVhdGVJdGVyYXRvcigpOworICAgIHZhciBpbm5lckl0ZXJhdG9yID0gY3JlYXRlSXRl
cmF0b3IoKTsKKyAgICBvdXRlcjogZm9yICh2YXIgZTEgb2Ygb3V0ZXJJdGVyYXRvcikgeworICAg
ICAgICBpbm5lcjogZm9yICh2YXIgZTIgb2YgaW5uZXJJdGVyYXRvcikgeworICAgICAgICAgICAg
Y29udGludWUgb3V0ZXI7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFpbm5lckl0ZXJhdG9y
LnJldHVybmVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2YWx1ZTogIiArIGlubmVy
SXRlcmF0b3IucmV0dXJuZWQpOworICAgIGlmIChvdXRlckl0ZXJhdG9yLnJldHVybmVkKQorICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2YWx1ZTogIiArIG91dGVySXRlcmF0b3IucmV0dXJu
ZWQpOworfSgpKTsKKworKGZ1bmN0aW9uIHRlc3QoKSB7CisgICAgdmFyIG91dGVySXRlcmF0b3Ig
PSBjcmVhdGVJdGVyYXRvcigpOworICAgIHZhciBpbm5lckl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0
b3IoKTsKKyAgICAoZnVuY3Rpb24gKCkgeworICAgICAgICBvdXRlcjogZm9yICh2YXIgZTEgb2Yg
b3V0ZXJJdGVyYXRvcikgeworICAgICAgICAgICAgaW5uZXI6IGZvciAodmFyIGUyIG9mIGlubmVy
SXRlcmF0b3IpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9KCkpOworICAgIGlmICghaW5uZXJJdGVyYXRvci5yZXR1cm5lZCkKKyAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgdmFsdWU6ICIgKyBpbm5lckl0ZXJhdG9yLnJldHVybmVk
KTsKKyAgICBpZiAoIW91dGVySXRlcmF0b3IucmV0dXJuZWQpCisgICAgICAgIHRocm93IG5ldyBF
cnJvcigiYmFkIHZhbHVlOiAiICsgb3V0ZXJJdGVyYXRvci5yZXR1cm5lZCk7Cit9KCkpOworCiso
ZnVuY3Rpb24gdGVzdCgpIHsKKyAgICB2YXIgb3V0ZXJJdGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9y
KCk7CisgICAgdmFyIGlubmVySXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvcigpOworICAgIChmdW5j
dGlvbiAoKSB7CisgICAgICAgIG91dGVyOiBmb3IgKHZhciBlMSBvZiBvdXRlckl0ZXJhdG9yKSB7
CisgICAgICAgICAgICBpbm5lcjogZm9yICh2YXIgZTIgb2YgaW5uZXJJdGVyYXRvcikgeworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSgpKTsKKyAg
ICBpZiAoaW5uZXJJdGVyYXRvci5yZXR1cm5lZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJi
YWQgdmFsdWU6ICIgKyBpbm5lckl0ZXJhdG9yLnJldHVybmVkKTsKKyAgICBpZiAoIW91dGVySXRl
cmF0b3IucmV0dXJuZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHZhbHVlOiAiICsg
b3V0ZXJJdGVyYXRvci5yZXR1cm5lZCk7Cit9KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wc2V1ZG8tYXJyYXktbGVuZ3RoLXNob3J0ZW4uanMgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3BzZXVkby1hcnJheS1sZW5ndGgtc2hv
cnRlbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mMjU4NDJmMDVjNjNiN2Q2OTRhMGMyYmYyOTg4ZjczODgyY2M1
NWZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9wc2V1ZG8tYXJyYXktbGVuZ3RoLXNob3J0ZW4uanMKQEAgLTAsMCArMSwxMjEgQEAKKworZnVu
Y3Rpb24gdGVzdExlbmd0aFNob3J0ZW5pbmcoYXJyYXkpIHsKKyAgICB2YXIgY291bnQgPSAwOwor
ICAgIGFycmF5Lmxlbmd0aCA9IDE7CisgICAgZm9yICh2YXIgeCBvZiBhcnJheSkgeworICAgICAg
ICBjb3VudCsrOworICAgIH0KKyAgICBpZiAoY291bnQgIT09IDEpCisgICAgICAgIHRocm93IG5l
dyBFcnJvcigiYmFkIHZhbHVlICIgKyBjb3VudCk7CisgICAgaWYgKGFycmF5Lmxlbmd0aCAhPT0g
MSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgdmFsdWUgIiArIGNvdW50KTsKK30KKwor
Ly8gVGVzdCBPYmplY3RzIHdpdGggZGVuc2VseSBwYWNrZWQgaW5kZXhlZCBwcm9wZXJ0aWVzOgor
ZnVuY3Rpb24gZGVuc2VJbnQzMkVsZW1lbnRzKGFycikgeworICAgIGFyclswXSA9IDE7CisgICAg
YXJyWzFdID0gMjsKKyAgICByZXR1cm4gYXJyOworfQordGVzdExlbmd0aFNob3J0ZW5pbmcoZGVu
c2VJbnQzMkVsZW1lbnRzKE9iamVjdC5jcmVhdGUoQXJyYXkucHJvdG90eXBlKSkpOwordGVzdExl
bmd0aFNob3J0ZW5pbmcoZGVuc2VJbnQzMkVsZW1lbnRzKFtdKSk7CisKK2Z1bmN0aW9uIGRlbnNl
RG91YmxlRWxlbWVudHMoYXJyKSB7CisgICAgYXJyWzBdID0gMS41OworICAgIGFyclsxXSA9IDIu
NTsKKyAgICByZXR1cm4gYXJyOworfQordGVzdExlbmd0aFNob3J0ZW5pbmcoZGVuc2VEb3VibGVF
bGVtZW50cyhPYmplY3QuY3JlYXRlKEFycmF5LnByb3RvdHlwZSkpKTsKK3Rlc3RMZW5ndGhTaG9y
dGVuaW5nKGRlbnNlRG91YmxlRWxlbWVudHMoW10pKTsKKworZnVuY3Rpb24gZGVuc2VPYmplY3RF
bGVtZW50cyhhcnIpIHsKKyAgICBhcnJbMF0gPSB7fTsKKyAgICBhcnJbMV0gPSB7fTsKKyAgICBy
ZXR1cm4gYXJyOworfQordGVzdExlbmd0aFNob3J0ZW5pbmcoZGVuc2VPYmplY3RFbGVtZW50cyhP
YmplY3QuY3JlYXRlKEFycmF5LnByb3RvdHlwZSkpKTsKK3Rlc3RMZW5ndGhTaG9ydGVuaW5nKGRl
bnNlT2JqZWN0RWxlbWVudHMoW10pKTsKKworLy8gVGVzdCBPYmplY3RzIHdpdGggaG9sZS15IGlu
ZGV4ZWQgcHJvcGVydGllczoKK2Z1bmN0aW9uIGhvbGV5SW50MzJFbGVtZW50cyhhcnIpIHsKKyAg
ICBhcnJbMF0gPSAxOworICAgIGFyclsxXSA9IDI7CisgICAgYXJyWzRdID0gNDsKKyAgICByZXR1
cm4gYXJyOworfQordGVzdExlbmd0aFNob3J0ZW5pbmcoaG9sZXlJbnQzMkVsZW1lbnRzKE9iamVj
dC5jcmVhdGUoQXJyYXkucHJvdG90eXBlKSkpOwordGVzdExlbmd0aFNob3J0ZW5pbmcoaG9sZXlJ
bnQzMkVsZW1lbnRzKFtdKSk7CisKK2Z1bmN0aW9uIGhvbGV5RG91YmxlRWxlbWVudHMoYXJyKSB7
CisgICAgYXJyWzBdID0gMS41OworICAgIGFyclsxXSA9IDIuNTsKKyAgICBhcnJbNF0gPSA0LjU7
CisgICAgcmV0dXJuIGFycjsKK30KK3Rlc3RMZW5ndGhTaG9ydGVuaW5nKGhvbGV5RG91YmxlRWxl
bWVudHMoT2JqZWN0LmNyZWF0ZShBcnJheS5wcm90b3R5cGUpKSk7Cit0ZXN0TGVuZ3RoU2hvcnRl
bmluZyhob2xleURvdWJsZUVsZW1lbnRzKFtdKSk7CisKK2Z1bmN0aW9uIGhvbGV5T2JqZWN0RWxl
bWVudHMoYXJyKSB7CisgICAgYXJyWzBdID0ge307CisgICAgYXJyWzFdID0ge307CisgICAgYXJy
WzRdID0ge307CisgICAgcmV0dXJuIGFycjsKK30KK3Rlc3RMZW5ndGhTaG9ydGVuaW5nKGhvbGV5
T2JqZWN0RWxlbWVudHMoT2JqZWN0LmNyZWF0ZShBcnJheS5wcm90b3R5cGUpKSk7Cit0ZXN0TGVu
Z3RoU2hvcnRlbmluZyhob2xleU9iamVjdEVsZW1lbnRzKFtdKSk7CisKKy8vIFRlc3QgT2JqZWN0
cyB3aXRoIEFycmF5U3RvcmFnZSBpbmRleGVkIHByb3BlcnRpZXM6CitmdW5jdGlvbiBhcnJheVN0
b3JhZ2VJbnQzMkVsZW1lbnRzKGFycikgeworICAgIGFyclswXSA9IDE7CisgICAgYXJyWzFdID0g
MjsKKyAgICBhcnIudW5zaGlmdCgxMDApOyAvLyBGb3JjZSBjb252ZXJzaW9uIHRvIHVzaW5nIEFy
cmF5U3RvcmFnZS4KKyAgICByZXR1cm4gYXJyOworfQordGVzdExlbmd0aFNob3J0ZW5pbmcoYXJy
YXlTdG9yYWdlSW50MzJFbGVtZW50cyhPYmplY3QuY3JlYXRlKEFycmF5LnByb3RvdHlwZSkpKTsK
K3Rlc3RMZW5ndGhTaG9ydGVuaW5nKGFycmF5U3RvcmFnZUludDMyRWxlbWVudHMoW10pKTsKKwor
ZnVuY3Rpb24gYXJyYXlTdG9yYWdlRG91YmxlRWxlbWVudHMoYXJyKSB7CisgICAgYXJyWzBdID0g
MS41OworICAgIGFyclsxXSA9IDIuNTsKKyAgICBhcnIudW5zaGlmdCgxMDAuNSk7IC8vIEZvcmNl
IGNvbnZlcnNpb24gdG8gdXNpbmcgQXJyYXlTdG9yYWdlLgorICAgIHJldHVybiBhcnI7Cit9Cit0
ZXN0TGVuZ3RoU2hvcnRlbmluZyhhcnJheVN0b3JhZ2VEb3VibGVFbGVtZW50cyhPYmplY3QuY3Jl
YXRlKEFycmF5LnByb3RvdHlwZSkpKTsKK3Rlc3RMZW5ndGhTaG9ydGVuaW5nKGFycmF5U3RvcmFn
ZURvdWJsZUVsZW1lbnRzKFtdKSk7CisKK2Z1bmN0aW9uIGFycmF5U3RvcmFnZU9iamVjdEVsZW1l
bnRzKGFycikgeworICAgIGFyclswXSA9IHt9OworICAgIGFyclsxXSA9IHt9OworICAgIGFyci51
bnNoaWZ0KHt9KTsgLy8gRm9yY2UgY29udmVyc2lvbiB0byB1c2luZyBBcnJheVN0b3JhZ2UuCisg
ICAgcmV0dXJuIGFycjsKK30KK3Rlc3RMZW5ndGhTaG9ydGVuaW5nKGFycmF5U3RvcmFnZU9iamVj
dEVsZW1lbnRzKE9iamVjdC5jcmVhdGUoQXJyYXkucHJvdG90eXBlKSkpOwordGVzdExlbmd0aFNo
b3J0ZW5pbmcoYXJyYXlTdG9yYWdlT2JqZWN0RWxlbWVudHMoW10pKTsKKworLy8gVGVzdCBPYmpl
Y3RzIHdpdGggc3BhcnNlIGluZGV4ZWQgcHJvcGVydGllczoKK2Z1bmN0aW9uIHNwYXJzZUludDMy
RWxlbWVudHMoYXJyKSB7CisgICAgYXJyWzBdID0gMTsKKyAgICBhcnJbMV0gPSAyOworICAgIGFy
clsxMDAwMDBdID0gMTAwOworICAgIHJldHVybiBhcnI7Cit9Cit0ZXN0TGVuZ3RoU2hvcnRlbmlu
ZyhzcGFyc2VJbnQzMkVsZW1lbnRzKE9iamVjdC5jcmVhdGUoQXJyYXkucHJvdG90eXBlKSkpOwor
dGVzdExlbmd0aFNob3J0ZW5pbmcoc3BhcnNlSW50MzJFbGVtZW50cyhbXSkpOworCitmdW5jdGlv
biBzcGFyc2VEb3VibGVFbGVtZW50cyhhcnIpIHsKKyAgICBhcnJbMF0gPSAxLjU7CisgICAgYXJy
WzFdID0gMi41OworICAgIGFyclsxMDAwMDBdID0gMTAwLjU7CisgICAgcmV0dXJuIGFycjsKK30K
K3Rlc3RMZW5ndGhTaG9ydGVuaW5nKHNwYXJzZURvdWJsZUVsZW1lbnRzKE9iamVjdC5jcmVhdGUo
QXJyYXkucHJvdG90eXBlKSkpOwordGVzdExlbmd0aFNob3J0ZW5pbmcoc3BhcnNlRG91YmxlRWxl
bWVudHMoW10pKTsKKworZnVuY3Rpb24gc3BhcnNlT2JqZWN0RWxlbWVudHMoYXJyKSB7CisgICAg
YXJyWzBdID0ge307CisgICAgYXJyWzFdID0ge307CisgICAgYXJyWzEwMDAwMF0gPSB7fTsKKyAg
ICByZXR1cm4gYXJyOworfQordGVzdExlbmd0aFNob3J0ZW5pbmcoc3BhcnNlT2JqZWN0RWxlbWVu
dHMoT2JqZWN0LmNyZWF0ZShBcnJheS5wcm90b3R5cGUpKSk7Cit0ZXN0TGVuZ3RoU2hvcnRlbmlu
ZyhzcGFyc2VPYmplY3RFbGVtZW50cyhbXSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9yYWlzZS1lcnJvci1pbi1pdGVyYXRvci1jbG9zZS5qcyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcmFpc2UtZXJyb3ItaW4taXRlcmF0b3It
Y2xvc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODhmNmU4NjA0ZTFjNTg3YmYyMDdmMmY1ZThiNWE5ZTExMmUx
MmE4MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvcmFpc2UtZXJyb3ItaW4taXRlcmF0b3ItY2xvc2UuanMKQEAgLTAsMCArMSwxMTggQEAKKwor
ZnVuY3Rpb24gY3JlYXRlSXRlcmF0b3IoY2FsbGJhY2spIHsKKyAgICB2YXIgYXJyYXkgPSBbMCwx
LDIsMyw0LDVdOworICAgIHZhciBpdGVyYXRvciA9IGFycmF5W1N5bWJvbC5pdGVyYXRvcl0oKTsK
KyAgICBpdGVyYXRvci5yZXR1cm4gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGl0ZXJhdG9yLnJl
dHVybmVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKGNhbGxiYWNrKQorICAgICAgICAgICAgcmV0dXJu
IGNhbGxiYWNrKHRoaXMpOworICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5k
ZWZpbmVkIH07CisgICAgfTsKKyAgICBpdGVyYXRvci5yZXR1cm5lZCA9IGZhbHNlOworICAgIHJl
dHVybiBpdGVyYXRvcjsKK30KKworKGZ1bmN0aW9uIHRlc3QoKSB7CisgICAgdmFyIG91dGVySXRl
cmF0b3IgPSBjcmVhdGVJdGVyYXRvcigpOworICAgIHZhciBpbm5lckl0ZXJhdG9yID0gY3JlYXRl
SXRlcmF0b3IoZnVuY3Rpb24gKCkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIklubmVyIHJl
dHVybiBjYWxsZWQuIik7CisgICAgfSk7CisgICAgdmFyIGVycm9yID0gbnVsbDsKKyAgICB0cnkg
eworICAgICAgICBvdXRlcjogZm9yICh2YXIgZTEgb2Ygb3V0ZXJJdGVyYXRvcikgeworICAgICAg
ICAgICAgaW5uZXI6IGZvciAodmFyIGUyIG9mIGlubmVySXRlcmF0b3IpIHsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gY2F0Y2ggKGUpIHsK
KyAgICAgICAgZXJyb3IgPSBlOworICAgIH0KKyAgICBpZiAoIWVycm9yKQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIm5vIGVycm9yIik7CisgICAgaWYgKFN0cmluZyhlcnJvcikgIT09ICJFcnJv
cjogSW5uZXIgcmV0dXJuIGNhbGxlZC4iKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCBl
cnJvcjogIiArIFN0cmluZyhlcnJvcikpOworICAgIGlmICghaW5uZXJJdGVyYXRvci5yZXR1cm5l
ZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgdmFsdWU6ICIgKyBpbm5lckl0ZXJhdG9y
LnJldHVybmVkKTsKKyAgICBpZiAoIW91dGVySXRlcmF0b3IucmV0dXJuZWQpCisgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiYmFkIHZhbHVlOiAiICsgb3V0ZXJJdGVyYXRvci5yZXR1cm5lZCk7Cit9
KCkpOworCisoZnVuY3Rpb24gdGVzdCgpIHsKKyAgICB2YXIgb3V0ZXJJdGVyYXRvciA9IGNyZWF0
ZUl0ZXJhdG9yKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJPdXRlciBy
ZXR1cm4gY2FsbGVkLiIpOworICAgIH0pOworICAgIHZhciBpbm5lckl0ZXJhdG9yID0gY3JlYXRl
SXRlcmF0b3IoZnVuY3Rpb24gKCkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIklubmVyIHJl
dHVybiBjYWxsZWQuIik7CisgICAgfSk7CisgICAgdmFyIGVycm9yID0gbnVsbDsKKyAgICB0cnkg
eworICAgICAgICBvdXRlcjogZm9yICh2YXIgZTEgb2Ygb3V0ZXJJdGVyYXRvcikgeworICAgICAg
ICAgICAgaW5uZXI6IGZvciAodmFyIGUyIG9mIGlubmVySXRlcmF0b3IpIHsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gY2F0Y2ggKGUpIHsK
KyAgICAgICAgZXJyb3IgPSBlOworICAgIH0KKyAgICBpZiAoIWVycm9yKQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIm5vIGVycm9yIik7CisgICAgaWYgKFN0cmluZyhlcnJvcikgIT09ICJFcnJv
cjogSW5uZXIgcmV0dXJuIGNhbGxlZC4iKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCBl
cnJvcjogIiArIFN0cmluZyhlcnJvcikpOworICAgIGlmICghaW5uZXJJdGVyYXRvci5yZXR1cm5l
ZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgdmFsdWU6ICIgKyBpbm5lckl0ZXJhdG9y
LnJldHVybmVkKTsKKyAgICBpZiAoIW91dGVySXRlcmF0b3IucmV0dXJuZWQpCisgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiYmFkIHZhbHVlOiAiICsgb3V0ZXJJdGVyYXRvci5yZXR1cm5lZCk7Cit9
KCkpOworCisoZnVuY3Rpb24gdGVzdCgpIHsKKyAgICB2YXIgb3V0ZXJJdGVyYXRvciA9IGNyZWF0
ZUl0ZXJhdG9yKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJPdXRlciBy
ZXR1cm4gY2FsbGVkLiIpOworICAgIH0pOworICAgIHZhciBpbm5lckl0ZXJhdG9yID0gY3JlYXRl
SXRlcmF0b3IoKTsKKyAgICB2YXIgZXJyb3IgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIG91
dGVyOiBmb3IgKHZhciBlMSBvZiBvdXRlckl0ZXJhdG9yKSB7CisgICAgICAgICAgICBpbm5lcjog
Zm9yICh2YXIgZTIgb2YgaW5uZXJJdGVyYXRvcikgeworICAgICAgICAgICAgICAgIGJyZWFrIG91
dGVyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBjYXRjaCAoZSkgeworICAgICAg
ICBlcnJvciA9IGU7CisgICAgfQorICAgIGlmICghZXJyb3IpCisgICAgICAgIHRocm93IG5ldyBF
cnJvcigibm8gZXJyb3IiKTsKKyAgICBpZiAoU3RyaW5nKGVycm9yKSAhPT0gIkVycm9yOiBPdXRl
ciByZXR1cm4gY2FsbGVkLiIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIGVycm9yOiAi
ICsgU3RyaW5nKGVycm9yKSk7CisgICAgaWYgKCFpbm5lckl0ZXJhdG9yLnJldHVybmVkKQorICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2YWx1ZTogIiArIGlubmVySXRlcmF0b3IucmV0dXJu
ZWQpOworICAgIGlmICghb3V0ZXJJdGVyYXRvci5yZXR1cm5lZCkKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJiYWQgdmFsdWU6ICIgKyBvdXRlckl0ZXJhdG9yLnJldHVybmVkKTsKK30oKSk7CisK
KyhmdW5jdGlvbiB0ZXN0KCkgeworICAgIHZhciBvdXRlckl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0
b3IoZnVuY3Rpb24gKCkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk91dGVyIHJldHVybiBj
YWxsZWQuIik7CisgICAgfSk7CisgICAgdmFyIGlubmVySXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRv
cihmdW5jdGlvbiAoKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW5uZXIgcmV0dXJuIGNh
bGxlZC4iKTsKKyAgICB9KTsKKyAgICB2YXIgZXJyb3IgPSBudWxsOworICAgIHRyeSB7CisgICAg
ICAgIG91dGVyOiBmb3IgKHZhciBlMSBvZiBvdXRlckl0ZXJhdG9yKSB7CisgICAgICAgICAgICBp
bm5lcjogZm9yICh2YXIgZTIgb2YgaW5uZXJJdGVyYXRvcikgeworICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiTG9vcCByYWlzZXMgZXJyb3IuIik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGVycm9yID0gZTsKKyAgICB9CisgICAg
aWYgKCFlcnJvcikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJubyBlcnJvciIpOworICAgIGlm
IChTdHJpbmcoZXJyb3IpICE9PSAiRXJyb3I6IExvb3AgcmFpc2VzIGVycm9yLiIpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcigiYmFkIGVycm9yOiAiICsgU3RyaW5nKGVycm9yKSk7CisgICAgaWYg
KCFpbm5lckl0ZXJhdG9yLnJldHVybmVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2
YWx1ZTogIiArIGlubmVySXRlcmF0b3IucmV0dXJuZWQpOworICAgIGlmICghb3V0ZXJJdGVyYXRv
ci5yZXR1cm5lZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgdmFsdWU6ICIgKyBvdXRl
ckl0ZXJhdG9yLnJldHVybmVkKTsKK30oKSk7CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249660</attachid>
            <date>2015-03-28 02:27:06 -0700</date>
            <delta_ts>2015-03-28 02:47:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143140-20150328182625.patch</filename>
            <type>text/plain</type>
            <size>25297</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyMTA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
MDNiMDY3YmVkM2RmMzc2ZWNjOTQ0NzcyZjJiNWQxNjQ3YzYzY2JjLi5iZWQzYTYwMzQ3ZmU2MGVl
NTk0ZGJhMzYxNWE5MDhiZTNkY2ZjMGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MSBAQAorMjAxNS0wMy0yOCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBJdGVyYXRvckNsb3NlIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBicmVh
ayBzdGF0ZW1lbnQganVtcHMgb3ZlciB0aGUgdGFyZ2V0IGZvci1vZiBsb29wCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1NzUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGZpeGVzIGxh
YmVsZWQgYnJlYWsvY29udGludWUgYmVoYXZpb3JzIHdpdGggZm9yLW9mIGFuZCBpdGVyYXRvcnMu
CisKKyAgICAgICAgMS4gU3VwcG9ydCBJdGVyYXRvckNsb3NlIGJleW9uZCBtdWx0aXBsZSBsb29w
IGNvbnRleHRzCisgICAgICAgIFByZXZpb3VzbHksIEl0ZXJhdG9yQ2xvc2UgaXMgb25seSBleGVj
dXRlZCBpbiBmb3Itb2YncyBicmVha1RhcmdldCgpLgorICAgICAgICBIb3dldmVyLCB0aGlzIG1p
c3NlcyBJdGVyYXRvckNsb3NlIGV4ZWN1dGlvbiB3aGVuIHN0YXRlbWVudCByb2xsLXVwcyBtdWx0
aXBsZSBjb250cm9sIGZsb3cgY29udGV4dHMuCisgICAgICAgIEZvciBleGFtcGxlLAorICAgICAg
ICBvdXRlcjogZm9yICh2YXIgZTEgb2Ygb3V0ZXIpIHsKKyAgICAgICAgICAgIGlubmVyOiBmb3Ig
KHZhciBlMiBvZiBpbm5lcikgeworICAgICAgICAgICAgICAgIGJyZWFrIG91dGVyOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIEluIHRoaXMgY2FzZSwgcmV0dXJuIG1ldGhvZCBv
ZiBpbm5lciBzaG91bGQgYmUgY2FsbGVkLgorICAgICAgICBXZSBsZXZlcmFnZSB0aGUgZXhpc3Rp
bmcgc3lzdGVtIGZvciBgZmluYWxseWAgdG8gZXhlY3V0ZSBpbm5lci5yZXR1cm4gbWV0aG9kIGNv
cnJlY3RseS4KKworICAgICAgICAyLiBJbmNvcnJlY3QgTGFiZWxTY29wZSBjcmVhdGlvbiBpcyBk
b25lIGluIEZvck9mTm9kZQorICAgICAgICBGb3JPZk5vZGUgY3JlYXRlcyBkdXBsaWNhdGVkIExh
YmVsU2NvcGUuCisgICAgICAgIEl0IGNhdXNlcyBpbmZpbml0ZSBsb29wIHdoZW4gZXhlY3V0aW5n
IHRoZSBmb2xsb3dpbmcgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zCisgICAgICAgIGV4cGxpY2l0bHkg
bGFiZWxlZCBmb3Itb2YgbG9vcC4KKyAgICAgICAgRm9yIGV4YW1wbGUsCisgICAgICAgIGlubmVy
OiBmb3IgKHZhciBlbG0gb2YgYXJyYXkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlIGlubmVyOwor
ICAgICAgICB9CisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEZpbmFsbHlDb250ZXh0KToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hJdGVyYXRvckNsb3NlQ29udGV4
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGaW5hbGx5Q29udGV4dCk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BJdGVyYXRvckNsb3NlQ29udGV4
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29tcGxleFBvcFNjb3Bl
cyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRpb24pOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEl0ZXJhdG9yQ2xvc2UpOgorICAg
ICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAqIGJ5dGVj
b21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpGb3JPZk5vZGU6OmVtaXRC
eXRlY29kZSk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2l0ZXJhdG9yLXJldHVybi1iZXlvbmQt
bXVsdGlwbGUtaXRlcmF0aW9uLXNjb3Blcy5qczogQWRkZWQuCisgICAgICAgIChjcmVhdGVJdGVy
YXRvci5pdGVyYXRvci5yZXR1cm4pOgorICAgICAgICAoY3JlYXRlSXRlcmF0b3IpOgorICAgICAg
ICAqIHRlc3RzL3N0cmVzcy9yYWlzZS1lcnJvci1pbi1pdGVyYXRvci1jbG9zZS5qczogQWRkZWQu
CisgICAgICAgIChjcmVhdGVJdGVyYXRvci5pdGVyYXRvci5yZXR1cm4pOgorICAgICAgICAoY3Jl
YXRlSXRlcmF0b3IpOgorCiAyMDE1LTAzLTI3ICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdt
YWlsLmNvbT4KIAogICAgICAgICBEZWNvbnN0cnVjdGlvbiBwYXJhbWV0ZXJzIGFyZSBib3VuZCB0
b28gbGF0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCA4ZjhkMTY1NTFjYTI1YjVjMmFhMWZjMmJjOWUz
NDg0NWJiNTIxNTU1Li5lNDQ4Mjc1ZGE3MTA3OTI4OTFmYmM3MWM4MTc4YjQ5NmRiMDgwNTRmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcApAQCAtMjEyMiw2ICsyMTIyLDMzIEBAIHZvaWQgQnl0ZWNvZGVHZW5l
cmF0b3I6OnB1c2hGaW5hbGx5Q29udGV4dChTdGF0ZW1lbnROb2RlKiBmaW5hbGx5QmxvY2spCiAg
ICAgc2NvcGUuaXNGaW5hbGx5QmxvY2sgPSB0cnVlOwogICAgIEZpbmFsbHlDb250ZXh0IGNvbnRl
eHQgPSB7CiAgICAgICAgIGZpbmFsbHlCbG9jaywKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAg
bnVsbHB0ciwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc2NvcGVDb250ZXh0U3Rh
Y2suc2l6ZSgpKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc3dpdGNoQ29udGV4
dFN0YWNrLnNpemUoKSksCisgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2ZvckluQ29u
dGV4dFN0YWNrLnNpemUoKSksCisgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3RyeUNv
bnRleHRTdGFjay5zaXplKCkpLAorICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9sYWJl
bFNjb3Blcy5zaXplKCkpLAorICAgICAgICBtX2ZpbmFsbHlEZXB0aCwKKyAgICAgICAgbV9sb2Nh
bFNjb3BlRGVwdGgKKyAgICB9OworICAgIHNjb3BlLmZpbmFsbHlDb250ZXh0ID0gY29udGV4dDsK
KyAgICBtX3Njb3BlQ29udGV4dFN0YWNrLmFwcGVuZChzY29wZSk7CisgICAgbV9maW5hbGx5RGVw
dGgrKzsKK30KKwordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEl0ZXJhdG9yQ2xvc2VDb250
ZXh0KFJlZ2lzdGVySUQqIGl0ZXJhdG9yLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSogbm9kZSkK
K3sKKyAgICAvLyBSZWNsYWltIGZyZWUgbGFiZWwgc2NvcGVzLgorICAgIHdoaWxlIChtX2xhYmVs
U2NvcGVzLnNpemUoKSAmJiAhbV9sYWJlbFNjb3Blcy5sYXN0KCkucmVmQ291bnQoKSkKKyAgICAg
ICAgbV9sYWJlbFNjb3Blcy5yZW1vdmVMYXN0KCk7CisKKyAgICBDb250cm9sRmxvd0NvbnRleHQg
c2NvcGU7CisgICAgc2NvcGUuaXNGaW5hbGx5QmxvY2sgPSB0cnVlOworICAgIEZpbmFsbHlDb250
ZXh0IGNvbnRleHQgPSB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIGl0ZXJhdG9yLAorICAg
ICAgICBub2RlLAogICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9zY29wZUNvbnRleHRT
dGFjay5zaXplKCkpLAogICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9zd2l0Y2hDb250
ZXh0U3RhY2suc2l6ZSgpKSwKICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZm9ySW5D
b250ZXh0U3RhY2suc2l6ZSgpKSwKQEAgLTIxMzksNiArMjE2NiwyMSBAQCB2b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpwb3BGaW5hbGx5Q29udGV4dCgpCiB7CiAgICAgQVNTRVJUKG1fc2NvcGVDb250
ZXh0U3RhY2suc2l6ZSgpKTsKICAgICBBU1NFUlQobV9zY29wZUNvbnRleHRTdGFjay5sYXN0KCku
aXNGaW5hbGx5QmxvY2spOworICAgIEFTU0VSVChtX3Njb3BlQ29udGV4dFN0YWNrLmxhc3QoKS5m
aW5hbGx5Q29udGV4dC5maW5hbGx5QmxvY2spOworICAgIEFTU0VSVCghbV9zY29wZUNvbnRleHRT
dGFjay5sYXN0KCkuZmluYWxseUNvbnRleHQuaXRlcmF0b3IpOworICAgIEFTU0VSVCghbV9zY29w
ZUNvbnRleHRTdGFjay5sYXN0KCkuZmluYWxseUNvbnRleHQuZW51bWVyYXRpb25Ob2RlKTsKKyAg
ICBBU1NFUlQobV9maW5hbGx5RGVwdGggPiAwKTsKKyAgICBtX3Njb3BlQ29udGV4dFN0YWNrLnJl
bW92ZUxhc3QoKTsKKyAgICBtX2ZpbmFsbHlEZXB0aC0tOworfQorCit2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpwb3BJdGVyYXRvckNsb3NlQ29udGV4dCgpCit7CisgICAgQVNTRVJUKG1fc2NvcGVD
b250ZXh0U3RhY2suc2l6ZSgpKTsKKyAgICBBU1NFUlQobV9zY29wZUNvbnRleHRTdGFjay5sYXN0
KCkuaXNGaW5hbGx5QmxvY2spOworICAgIEFTU0VSVCghbV9zY29wZUNvbnRleHRTdGFjay5sYXN0
KCkuZmluYWxseUNvbnRleHQuZmluYWxseUJsb2NrKTsKKyAgICBBU1NFUlQobV9zY29wZUNvbnRl
eHRTdGFjay5sYXN0KCkuZmluYWxseUNvbnRleHQuaXRlcmF0b3IpOworICAgIEFTU0VSVChtX3Nj
b3BlQ29udGV4dFN0YWNrLmxhc3QoKS5maW5hbGx5Q29udGV4dC5lbnVtZXJhdGlvbk5vZGUpOwog
ICAgIEFTU0VSVChtX2ZpbmFsbHlEZXB0aCA+IDApOwogICAgIG1fc2NvcGVDb250ZXh0U3RhY2su
cmVtb3ZlTGFzdCgpOwogICAgIG1fZmluYWxseURlcHRoLS07CkBAIC0yMzEwLDkgKzIzNTIsMTQg
QEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTY29wZXMoUmVnaXN0ZXJJ
RCogc2NvcGUsIENvbnRyb2xGbG93Q29udGUKICAgICAgICAgICAgIGludCBzYXZlZER5bmFtaWNT
Y29wZURlcHRoID0gbV9sb2NhbFNjb3BlRGVwdGg7CiAgICAgICAgICAgICBtX2xvY2FsU2NvcGVE
ZXB0aCA9IGZpbmFsbHlDb250ZXh0LmR5bmFtaWNTY29wZURlcHRoOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICAvLyBFbWl0IHRoZSBmaW5hbGx5IGJsb2NrLgotICAgICAgICAgICAgZW1pdE5v
ZGUoZmluYWxseUNvbnRleHQuZmluYWxseUJsb2NrKTsKLSAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKGZpbmFsbHlDb250ZXh0LmZpbmFsbHlCbG9jaykgeworICAgICAgICAgICAgICAgIC8v
IEVtaXQgdGhlIGZpbmFsbHkgYmxvY2suCisgICAgICAgICAgICAgICAgZW1pdE5vZGUoZmluYWxs
eUNvbnRleHQuZmluYWxseUJsb2NrKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZmluYWxseUNv
bnRleHQuaXRlcmF0b3IpIHsKKyAgICAgICAgICAgICAgICAvLyBFbWl0IHRoZSBJdGVyYXRvckNs
b3NlIGJsb2NrLgorICAgICAgICAgICAgICAgIGVtaXRJdGVyYXRvckNsb3NlKGZpbmFsbHlDb250
ZXh0Lml0ZXJhdG9yLCBmaW5hbGx5Q29udGV4dC5lbnVtZXJhdGlvbk5vZGUpOworICAgICAgICAg
ICAgfQorCiAgICAgICAgICAgICBSZWZQdHI8TGFiZWw+IGFmdGVyRmluYWxseSA9IGVtaXRMYWJl
bChuZXdMYWJlbCgpLmdldCgpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gUmVzdG9y
ZSB0aGUgc3RhdGUgb2YgdGhlIHdvcmxkLgpAQCAtMjU4NSw3ICsyNjMyLDYgQEAgdm9pZCBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdFJlYWRPbmx5RXhjZXB0aW9uSWZOZWVkZWQoKQogICAgIAogdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKFRocm93YWJsZUV4cHJlc3Npb25E
YXRhKiBub2RlLCBFeHByZXNzaW9uTm9kZSogc3ViamVjdE5vZGUsIGNvbnN0IHN0ZDo6ZnVuY3Rp
b248dm9pZChCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqKT4mIGNhbGxCYWNrKQogewot
ICAgIExhYmVsU2NvcGVQdHIgc2NvcGUgPSBuZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxvb3Ap
OwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzdWJqZWN0ID0gbmV3VGVtcG9yYXJ5KCk7CiAgICAg
ZW1pdE5vZGUoc3ViamVjdC5nZXQoKSwgc3ViamVjdE5vZGUpOwogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBpdGVyYXRvciA9IGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBzdWJqZWN0LmdldCgp
LCBwcm9wZXJ0eU5hbWVzKCkuaXRlcmF0b3JQcml2YXRlTmFtZSk7CkBAIC0yNTk0LDc3ICsyNjQw
LDc4IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdGlvbihUaHJvd2FibGVF
eHByZXNzaW9uRGF0YSogbm9kZSwgRXhwcmVzc2lvCiAgICAgICAgIGVtaXRNb3ZlKGFyZ3MudGhp
c1JlZ2lzdGVyKCksIHN1YmplY3QuZ2V0KCkpOwogICAgICAgICBlbWl0Q2FsbChpdGVyYXRvci5n
ZXQoKSwgaXRlcmF0b3IuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgYXJncywgbm9kZS0+ZGl2
b3QoKSwgbm9kZS0+ZGl2b3RTdGFydCgpLCBub2RlLT5kaXZvdEVuZCgpKTsKICAgICB9Ci0gICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gbmV3VGVtcG9yYXJ5KCk7Ci0gICAgZW1pdExvYWQo
dmFsdWUuZ2V0KCksIGpzVW5kZWZpbmVkKCkpOwotICAgIAotICAgIGVtaXRKdW1wKHNjb3BlLT5j
b250aW51ZVRhcmdldCgpKTsKLSAgICAKLSAgICBSZWZQdHI8TGFiZWw+IGxvb3BTdGFydCA9IG5l
d0xhYmVsKCk7Ci0gICAgUmVmUHRyPExhYmVsPiBpdGVyYXRvckRvbmUgPSBuZXdMYWJlbCgpOwot
ICAgIGVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOwotICAgIGVtaXRMb29wSGludCgpOwotCi0g
ICAgUmVmUHRyPExhYmVsPiB0cnlTdGFydExhYmVsID0gbmV3TGFiZWwoKTsKLSAgICBlbWl0TGFi
ZWwodHJ5U3RhcnRMYWJlbC5nZXQoKSk7Ci0gICAgVHJ5RGF0YSogdHJ5RGF0YSA9IHB1c2hUcnko
dHJ5U3RhcnRMYWJlbC5nZXQoKSk7Ci0gICAgY2FsbEJhY2soKnRoaXMsIHZhbHVlLmdldCgpKTsK
LSAgICBSZWZQdHI8TGFiZWw+IGNhdGNoSGVyZSA9IGVtaXRMYWJlbChuZXdMYWJlbCgpLmdldCgp
KTsKLQotICAgIGVtaXRMYWJlbChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgewotICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbmV4dCA9IGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgp
LCBpdGVyYXRvci5nZXQoKSwgcHJvcGVydHlOYW1lcygpLm5leHQpOwotICAgICAgICBDYWxsQXJn
dW1lbnRzIG5leHRBcmd1bWVudHMoKnRoaXMsIG51bGxwdHIpOwotICAgICAgICBlbWl0TW92ZShu
ZXh0QXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBpdGVyYXRvci5nZXQoKSk7Ci0gICAgICAgIGVt
aXRDYWxsKHZhbHVlLmdldCgpLCBuZXh0LmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIG5leHRB
cmd1bWVudHMsIG5vZGUtPmRpdm90KCksIG5vZGUtPmRpdm90U3RhcnQoKSwgbm9kZS0+ZGl2b3RF
bmQoKSk7Ci0gICAgfQotICAgIHsKLSAgICAgICAgUmVmUHRyPExhYmVsPiB0eXBlSXNPYmplY3Qg
PSBuZXdMYWJlbCgpOwotICAgICAgICBlbWl0SnVtcElmVHJ1ZShlbWl0SXNPYmplY3QobmV3VGVt
cG9yYXJ5KCksIHZhbHVlLmdldCgpKSwgdHlwZUlzT2JqZWN0LmdldCgpKTsKLSAgICAgICAgZW1p
dFRocm93VHlwZUVycm9yKEFTQ0lJTGl0ZXJhbCgiSXRlcmF0b3IgcmVzdWx0IGludGVyZmFjZSBp
cyBub3QgYW4gb2JqZWN0LiIpKTsKLSAgICAgICAgZW1pdExhYmVsKHR5cGVJc09iamVjdC5nZXQo
KSk7Ci0gICAgfQotICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgp
LCB2YWx1ZS5nZXQoKSwgcHJvcGVydHlOYW1lcygpLmRvbmUpLCBpdGVyYXRvckRvbmUuZ2V0KCkp
OwotICAgIGVtaXRHZXRCeUlkKHZhbHVlLmdldCgpLCB2YWx1ZS5nZXQoKSwgcHJvcGVydHlOYW1l
cygpLnZhbHVlKTsKLSAgICBlbWl0SnVtcChsb29wU3RhcnQuZ2V0KCkpOwogCi0gICAgLy8gSXRl
cmF0b3JDbG9zZSBzZXF1ZW5jZSBmb3IgdGhyb3ctZWQgY29udHJvbCBmbG93LgorICAgIFJlZlB0
cjxMYWJlbD4gbG9vcERvbmUgPSBuZXdMYWJlbCgpOworICAgIC8vIFJlZlB0cjxSZWdpc3Rlcj4g
aXRlcmF0b3IncyBsaWZldGltZSBtdXN0IGJlIGxvbmdlciB0aGFuIEl0ZXJhdG9yQ2xvc2VDb250
ZXh0LgorICAgIHB1c2hJdGVyYXRvckNsb3NlQ29udGV4dChpdGVyYXRvci5nZXQoKSwgbm9kZSk7
CiAgICAgewotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhjZXB0aW9uUmVnaXN0ZXIgPSBw
b3BUcnlBbmRFbWl0Q2F0Y2godHJ5RGF0YSwgbmV3VGVtcG9yYXJ5KCksIGNhdGNoSGVyZS5nZXQo
KSk7Ci0gICAgICAgIFJlZlB0cjxMYWJlbD4gcmV0aHJvdyA9IG5ld0xhYmVsKCk7CisgICAgICAg
IExhYmVsU2NvcGVQdHIgc2NvcGUgPSBuZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxvb3ApOwor
ICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBuZXdUZW1wb3JhcnkoKTsKKyAgICAg
ICAgZW1pdExvYWQodmFsdWUuZ2V0KCksIGpzVW5kZWZpbmVkKCkpOwogCi0gICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiByZXR1cm5NZXRob2QgPSBlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwg
aXRlcmF0b3IuZ2V0KCksIHByb3BlcnR5TmFtZXMoKS5yZXR1cm5LZXl3b3JkKTsKLSAgICAgICAg
ZW1pdEp1bXBJZlRydWUoZW1pdElzVW5kZWZpbmVkKG5ld1RlbXBvcmFyeSgpLCByZXR1cm5NZXRo
b2QuZ2V0KCkpLCByZXRocm93LmdldCgpKTsKKyAgICAgICAgZW1pdEp1bXAoc2NvcGUtPmNvbnRp
bnVlVGFyZ2V0KCkpOwogCi0gICAgICAgIFJlZlB0cjxMYWJlbD4gcmV0dXJuQ2FsbFRyeVN0YXJ0
ID0gbmV3TGFiZWwoKTsKLSAgICAgICAgZW1pdExhYmVsKHJldHVybkNhbGxUcnlTdGFydC5nZXQo
KSk7Ci0gICAgICAgIFRyeURhdGEqIHJldHVybkNhbGxUcnlEYXRhID0gcHVzaFRyeShyZXR1cm5D
YWxsVHJ5U3RhcnQuZ2V0KCkpOworICAgICAgICBSZWZQdHI8TGFiZWw+IGxvb3BTdGFydCA9IG5l
d0xhYmVsKCk7CisgICAgICAgIGVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOworICAgICAgICBl
bWl0TG9vcEhpbnQoKTsKIAotICAgICAgICBDYWxsQXJndW1lbnRzIHJldHVybkFyZ3VtZW50cygq
dGhpcywgbnVsbHB0cik7Ci0gICAgICAgIGVtaXRNb3ZlKHJldHVybkFyZ3VtZW50cy50aGlzUmVn
aXN0ZXIoKSwgaXRlcmF0b3IuZ2V0KCkpOwotICAgICAgICBlbWl0Q2FsbCh2YWx1ZS5nZXQoKSwg
cmV0dXJuTWV0aG9kLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIHJldHVybkFyZ3VtZW50cywg
bm9kZS0+ZGl2b3QoKSwgbm9kZS0+ZGl2b3RTdGFydCgpLCBub2RlLT5kaXZvdEVuZCgpKTsKKyAg
ICAgICAgUmVmUHRyPExhYmVsPiB0cnlTdGFydExhYmVsID0gbmV3TGFiZWwoKTsKKyAgICAgICAg
ZW1pdExhYmVsKHRyeVN0YXJ0TGFiZWwuZ2V0KCkpOworICAgICAgICBUcnlEYXRhKiB0cnlEYXRh
ID0gcHVzaFRyeSh0cnlTdGFydExhYmVsLmdldCgpKTsKKyAgICAgICAgY2FsbEJhY2soKnRoaXMs
IHZhbHVlLmdldCgpKTsKKyAgICAgICAgZW1pdEp1bXAoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkp
OwogCi0gICAgICAgIFJlZlB0cjxMYWJlbD4gcmV0dXJuQ2FsbENhdGNoSGVyZSA9IGVtaXRMYWJl
bChuZXdMYWJlbCgpLmdldCgpKTsKLSAgICAgICAgZW1pdEp1bXAocmV0aHJvdy5nZXQoKSk7Cisg
ICAgICAgIC8vIEl0ZXJhdG9yQ2xvc2Ugc2VxdWVuY2UgZm9yIHRocm93LWVkIGNvbnRyb2wgZmxv
dy4KKyAgICAgICAgeworICAgICAgICAgICAgUmVmUHRyPExhYmVsPiBjYXRjaEhlcmUgPSBlbWl0
TGFiZWwobmV3TGFiZWwoKS5nZXQoKSk7CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
ZXhjZXB0aW9uUmVnaXN0ZXIgPSBwb3BUcnlBbmRFbWl0Q2F0Y2godHJ5RGF0YSwgbmV3VGVtcG9y
YXJ5KCksIGNhdGNoSGVyZS5nZXQoKSk7CisgICAgICAgICAgICBSZWZQdHI8TGFiZWw+IGNhdGNo
RG9uZSA9IG5ld0xhYmVsKCk7CiAKLSAgICAgICAgcG9wVHJ5QW5kRW1pdENhdGNoKHJldHVybkNh
bGxUcnlEYXRhLCBuZXdUZW1wb3JhcnkoKSwgcmV0dXJuQ2FsbENhdGNoSGVyZS5nZXQoKSk7Ci0g
ICAgICAgIGVtaXRMYWJlbChyZXRocm93LmdldCgpKTsKLSAgICAgICAgZW1pdFRocm93KGV4Y2Vw
dGlvblJlZ2lzdGVyLmdldCgpKTsKLSAgICB9CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gcmV0dXJuTWV0aG9kID0gZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIGl0ZXJhdG9yLmdl
dCgpLCBwcm9wZXJ0eU5hbWVzKCkucmV0dXJuS2V5d29yZCk7CisgICAgICAgICAgICBlbWl0SnVt
cElmVHJ1ZShlbWl0SXNVbmRlZmluZWQobmV3VGVtcG9yYXJ5KCksIHJldHVybk1ldGhvZC5nZXQo
KSksIGNhdGNoRG9uZS5nZXQoKSk7CiAKLSAgICAvLyBJdGVyYXRvckNsb3NlIHNlcXVlbmNlIGZv
ciBicmVhay1lZCBjb250cm9sIGZsb3cuCi0gICAgZW1pdExhYmVsKHNjb3BlLT5icmVha1Rhcmdl
dCgpKTsKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5NZXRob2QgPSBl
bWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgaXRlcmF0b3IuZ2V0KCksIHByb3BlcnR5TmFtZXMo
KS5yZXR1cm5LZXl3b3JkKTsKLSAgICAgICAgZW1pdEp1bXBJZlRydWUoZW1pdElzVW5kZWZpbmVk
KG5ld1RlbXBvcmFyeSgpLCByZXR1cm5NZXRob2QuZ2V0KCkpLCBpdGVyYXRvckRvbmUuZ2V0KCkp
OworICAgICAgICAgICAgUmVmUHRyPExhYmVsPiByZXR1cm5DYWxsVHJ5U3RhcnQgPSBuZXdMYWJl
bCgpOworICAgICAgICAgICAgZW1pdExhYmVsKHJldHVybkNhbGxUcnlTdGFydC5nZXQoKSk7Cisg
ICAgICAgICAgICBUcnlEYXRhKiByZXR1cm5DYWxsVHJ5RGF0YSA9IHB1c2hUcnkocmV0dXJuQ2Fs
bFRyeVN0YXJ0LmdldCgpKTsKIAotICAgICAgICBDYWxsQXJndW1lbnRzIHJldHVybkFyZ3VtZW50
cygqdGhpcywgbnVsbHB0cik7Ci0gICAgICAgIGVtaXRNb3ZlKHJldHVybkFyZ3VtZW50cy50aGlz
UmVnaXN0ZXIoKSwgaXRlcmF0b3IuZ2V0KCkpOwotICAgICAgICBlbWl0Q2FsbCh2YWx1ZS5nZXQo
KSwgcmV0dXJuTWV0aG9kLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIHJldHVybkFyZ3VtZW50
cywgbm9kZS0+ZGl2b3QoKSwgbm9kZS0+ZGl2b3RTdGFydCgpLCBub2RlLT5kaXZvdEVuZCgpKTsK
LSAgICAgICAgZW1pdEp1bXBJZlRydWUoZW1pdElzT2JqZWN0KG5ld1RlbXBvcmFyeSgpLCB2YWx1
ZS5nZXQoKSksIGl0ZXJhdG9yRG9uZS5nZXQoKSk7Ci0gICAgICAgIGVtaXRUaHJvd1R5cGVFcnJv
cihBU0NJSUxpdGVyYWwoIkl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9iamVj
dC4iKSk7CisgICAgICAgICAgICBDYWxsQXJndW1lbnRzIHJldHVybkFyZ3VtZW50cygqdGhpcywg
bnVsbHB0cik7CisgICAgICAgICAgICBlbWl0TW92ZShyZXR1cm5Bcmd1bWVudHMudGhpc1JlZ2lz
dGVyKCksIGl0ZXJhdG9yLmdldCgpKTsKKyAgICAgICAgICAgIGVtaXRDYWxsKHZhbHVlLmdldCgp
LCByZXR1cm5NZXRob2QuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgcmV0dXJuQXJndW1lbnRz
LCBub2RlLT5kaXZvdCgpLCBub2RlLT5kaXZvdFN0YXJ0KCksIG5vZGUtPmRpdm90RW5kKCkpOwor
CisgICAgICAgICAgICBlbWl0TGFiZWwoY2F0Y2hEb25lLmdldCgpKTsKKyAgICAgICAgICAgIGVt
aXRUaHJvdyhleGNlcHRpb25SZWdpc3Rlci5nZXQoKSk7CisKKyAgICAgICAgICAgIC8vIEFic29y
YiBleGNlcHRpb24uCisgICAgICAgICAgICBwb3BUcnlBbmRFbWl0Q2F0Y2gocmV0dXJuQ2FsbFRy
eURhdGEsIG5ld1RlbXBvcmFyeSgpLCBjYXRjaERvbmUuZ2V0KCkpOworICAgICAgICAgICAgZW1p
dFRocm93KGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGVt
aXRMYWJlbChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CisgICAgICAgIHsKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbmV4dCA9IGVtaXRHZXRCeUlk
KG5ld1RlbXBvcmFyeSgpLCBpdGVyYXRvci5nZXQoKSwgcHJvcGVydHlOYW1lcygpLm5leHQpOwor
ICAgICAgICAgICAgICAgIENhbGxBcmd1bWVudHMgbmV4dEFyZ3VtZW50cygqdGhpcywgbnVsbHB0
cik7CisgICAgICAgICAgICAgICAgZW1pdE1vdmUobmV4dEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIo
KSwgaXRlcmF0b3IuZ2V0KCkpOworICAgICAgICAgICAgICAgIGVtaXRDYWxsKHZhbHVlLmdldCgp
LCBuZXh0LmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIG5leHRBcmd1bWVudHMsIG5vZGUtPmRp
dm90KCksIG5vZGUtPmRpdm90U3RhcnQoKSwgbm9kZS0+ZGl2b3RFbmQoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUmVmUHRyPExhYmVsPiB0eXBlSXNP
YmplY3QgPSBuZXdMYWJlbCgpOworICAgICAgICAgICAgICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJ
c09iamVjdChuZXdUZW1wb3JhcnkoKSwgdmFsdWUuZ2V0KCkpLCB0eXBlSXNPYmplY3QuZ2V0KCkp
OworICAgICAgICAgICAgICAgIGVtaXRUaHJvd1R5cGVFcnJvcihBU0NJSUxpdGVyYWwoIkl0ZXJh
dG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9iamVjdC4iKSk7CisgICAgICAgICAgICAg
ICAgZW1pdExhYmVsKHR5cGVJc09iamVjdC5nZXQoKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbWl0SnVtcElmVHJ1ZShlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgdmFsdWUuZ2V0
KCksIHByb3BlcnR5TmFtZXMoKS5kb25lKSwgbG9vcERvbmUuZ2V0KCkpOworICAgICAgICAgICAg
ZW1pdEdldEJ5SWQodmFsdWUuZ2V0KCksIHZhbHVlLmdldCgpLCBwcm9wZXJ0eU5hbWVzKCkudmFs
dWUpOworICAgICAgICAgICAgZW1pdEp1bXAobG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7CiAgICAgfQogCi0gICAg
ZW1pdExhYmVsKGl0ZXJhdG9yRG9uZS5nZXQoKSk7CisgICAgLy8gSXRlcmF0b3JDbG9zZSBzZXF1
ZW5jZSBmb3IgYnJlYWstZWQgY29udHJvbCBmbG93LgorICAgIHBvcEl0ZXJhdG9yQ2xvc2VDb250
ZXh0KCk7CisgICAgZW1pdEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IuZ2V0KCksIG5vZGUpOworICAg
IGVtaXRMYWJlbChsb29wRG9uZS5nZXQoKSk7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0R2V0RW51bWVyYWJsZUxlbmd0aChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVy
SUQqIGJhc2UpCkBAIC0yNzU2LDYgKzI4MDMsMjEgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRJc1VuZGVmaW5lZChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykK
ICAgICByZXR1cm4gZHN0OwogfQogCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXRlcmF0
b3JDbG9zZShSZWdpc3RlcklEKiBpdGVyYXRvciwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5v
ZGUpCit7CisgICAgUmVmUHRyPExhYmVsPiBkb25lID0gbmV3TGFiZWwoKTsKKyAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcmV0dXJuTWV0aG9kID0gZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIGl0
ZXJhdG9yLCBwcm9wZXJ0eU5hbWVzKCkucmV0dXJuS2V5d29yZCk7CisgICAgZW1pdEp1bXBJZlRy
dWUoZW1pdElzVW5kZWZpbmVkKG5ld1RlbXBvcmFyeSgpLCByZXR1cm5NZXRob2QuZ2V0KCkpLCBk
b25lLmdldCgpKTsKKworICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IG5ld1RlbXBvcmFy
eSgpOworICAgIENhbGxBcmd1bWVudHMgcmV0dXJuQXJndW1lbnRzKCp0aGlzLCBudWxscHRyKTsK
KyAgICBlbWl0TW92ZShyZXR1cm5Bcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGl0ZXJhdG9yKTsK
KyAgICBlbWl0Q2FsbCh2YWx1ZS5nZXQoKSwgcmV0dXJuTWV0aG9kLmdldCgpLCBOb0V4cGVjdGVk
RnVuY3Rpb24sIHJldHVybkFyZ3VtZW50cywgbm9kZS0+ZGl2b3QoKSwgbm9kZS0+ZGl2b3RTdGFy
dCgpLCBub2RlLT5kaXZvdEVuZCgpKTsKKyAgICBlbWl0SnVtcElmVHJ1ZShlbWl0SXNPYmplY3Qo
bmV3VGVtcG9yYXJ5KCksIHZhbHVlLmdldCgpKSwgZG9uZS5nZXQoKSk7CisgICAgZW1pdFRocm93
VHlwZUVycm9yKEFTQ0lJTGl0ZXJhbCgiSXRlcmF0b3IgcmVzdWx0IGludGVyZmFjZSBpcyBub3Qg
YW4gb2JqZWN0LiIpKTsKKyAgICBlbWl0TGFiZWwoZG9uZS5nZXQoKSk7Cit9CisKIHZvaWQgQnl0
ZWNvZGVHZW5lcmF0b3I6OnB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbFJl
Z2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyKQogewogICAgIGlmICghbG9jYWxSZWdp
c3RlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuaAppbmRleCA0ZmZlZjZiNDA5N2YwMjQ2ZGMxYmFlODllZThhYWI4ZWM5
NWM2MGZhLi4yZTU5MDM5ZDNhNDg0YTM0NzI4MTQ0MGVlZjljMWI4MTlmNzI2NWRiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCkBAIC04Miw2ICs4Miw4IEBACiAKICAgICBzdHJ1Y3QgRmluYWxseUNvbnRleHQgewog
ICAgICAgICBTdGF0ZW1lbnROb2RlKiBmaW5hbGx5QmxvY2s7CisgICAgICAgIFJlZ2lzdGVySUQq
IGl0ZXJhdG9yOworICAgICAgICBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSogZW51bWVyYXRpb25O
b2RlOwogICAgICAgICB1bnNpZ25lZCBzY29wZUNvbnRleHRTdGFja1NpemU7CiAgICAgICAgIHVu
c2lnbmVkIHN3aXRjaENvbnRleHRTdGFja1NpemU7CiAgICAgICAgIHVuc2lnbmVkIGZvckluQ29u
dGV4dFN0YWNrU2l6ZTsKQEAgLTUyNiw2ICs1MjgsOCBAQAogICAgICAgICBSZWdpc3RlcklEKiBl
bWl0SXNPYmplY3QoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwogICAgICAgICBS
ZWdpc3RlcklEKiBlbWl0SXNVbmRlZmluZWQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBz
cmMpOwogCisgICAgICAgIHZvaWQgZW1pdEl0ZXJhdG9yQ2xvc2UoUmVnaXN0ZXJJRCogaXRlcmF0
b3IsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKiBub2RlKTsKKwogICAgICAgICB2b2lkIGVtaXRS
ZWFkT25seUV4Y2VwdGlvbklmTmVlZGVkKCk7CiAKICAgICAgICAgLy8gU3RhcnQgYSB0cnkgYmxv
Y2suICdzdGFydCcgbXVzdCBoYXZlIGJlZW4gZW1pdHRlZC4KQEAgLTU1Niw2ICs1NjAsOCBAQAog
CiAgICAgICAgIHZvaWQgcHVzaEZpbmFsbHlDb250ZXh0KFN0YXRlbWVudE5vZGUqIGZpbmFsbHlC
bG9jayk7CiAgICAgICAgIHZvaWQgcG9wRmluYWxseUNvbnRleHQoKTsKKyAgICAgICAgdm9pZCBw
dXNoSXRlcmF0b3JDbG9zZUNvbnRleHQoUmVnaXN0ZXJJRCogaXRlcmF0b3IsIFRocm93YWJsZUV4
cHJlc3Npb25EYXRhKiBlbnVtZXJhdGlvbk5vZGUpOworICAgICAgICB2b2lkIHBvcEl0ZXJhdG9y
Q2xvc2VDb250ZXh0KCk7CiAKICAgICAgICAgdm9pZCBwdXNoSW5kZXhlZEZvckluU2NvcGUoUmVn
aXN0ZXJJRCogbG9jYWwsIFJlZ2lzdGVySUQqIGluZGV4KTsKICAgICAgICAgdm9pZCBwb3BJbmRl
eGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKaW5kZXggNjE1OWM3OWM5OTMx
ZWNkNDU4NWYxYTdkZWZiMWE3NjExNTczZThhMy4uZGI1Y2FlODY3YzM3N2MzYTAwOGFkMDU3OGRl
Nzg3M2QyMTVmNjg5MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAtMjI4Nyw5ICsyMjg3LDcgQEAgdm9pZCBGb3JPZk5v
ZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklE
KiBkc3QpCiAgICAgICAgIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGdlbmVyYXRvciwgQVNDSUlM
aXRlcmFsKCJMZWZ0IHNpZGUgb2YgZm9yLW9mIHN0YXRlbWVudCBpcyBub3QgYSByZWZlcmVuY2Uu
IikpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIExhYmVsU2NvcGVQdHIgc2Nv
cGUgPSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKLSAgICAKKwog
ICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExp
bmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwogICAgIGF1dG8gZXh0cmFj
dG9yID0gW3RoaXMsIGRzdF0oQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCogdmFsdWUpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9pdGVyYXRvci1yZXR1cm4tYmV5b25kLW11bHRpcGxlLWl0ZXJhdGlvbi1zY29wZXMu
anMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2l0ZXJhdG9yLXJldHVybi1i
ZXlvbmQtbXVsdGlwbGUtaXRlcmF0aW9uLXNjb3Blcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMDg0ZDZmY2Qy
NjcxNzJjZGUzNjViOWEzNDc1Zjc4ZDA5ODQ2Y2VkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pdGVyYXRvci1yZXR1cm4tYmV5b25kLW11bHRp
cGxlLWl0ZXJhdGlvbi1zY29wZXMuanMKQEAgLTAsMCArMSwxMzAgQEAKKworZnVuY3Rpb24gY3Jl
YXRlSXRlcmF0b3IoY2FsbGJhY2spIHsKKyAgICB2YXIgYXJyYXkgPSBbMCwxLDIsMyw0LDVdOwor
ICAgIHZhciBpdGVyYXRvciA9IGFycmF5W1N5bWJvbC5pdGVyYXRvcl0oKTsKKyAgICBpdGVyYXRv
ci5yZXR1cm4gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGl0ZXJhdG9yLnJldHVybmVkID0gdHJ1
ZTsKKyAgICAgICAgaWYgKGNhbGxiYWNrKQorICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHRo
aXMpOworICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07Cisg
ICAgfTsKKyAgICBpdGVyYXRvci5yZXR1cm5lZCA9IGZhbHNlOworICAgIHJldHVybiBpdGVyYXRv
cjsKK30KKworKGZ1bmN0aW9uIHRlc3QoKSB7CisgICAgdmFyIG91dGVySXRlcmF0b3IgPSBjcmVh
dGVJdGVyYXRvcigpOworICAgIHZhciBpbm5lckl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IoKTsK
KyAgICBvdXRlcjogZm9yICh2YXIgZTEgb2Ygb3V0ZXJJdGVyYXRvcikgeworICAgICAgICBpbm5l
cjogZm9yICh2YXIgZTIgb2YgaW5uZXJJdGVyYXRvcikgeworICAgICAgICAgICAgYnJlYWsgb3V0
ZXI7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFpbm5lckl0ZXJhdG9yLnJldHVybmVkKQor
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2YWx1ZTogIiArIGlubmVySXRlcmF0b3IucmV0
dXJuZWQpOworICAgIGlmICghb3V0ZXJJdGVyYXRvci5yZXR1cm5lZCkKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJiYWQgdmFsdWU6ICIgKyBvdXRlckl0ZXJhdG9yLnJldHVybmVkKTsKK30oKSk7
CisKKyhmdW5jdGlvbiB0ZXN0KCkgeworICAgIHZhciBvdXRlckl0ZXJhdG9yID0gY3JlYXRlSXRl
cmF0b3IoKTsKKyAgICB2YXIgaW5uZXJJdGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yKCk7CisgICAg
b3V0ZXI6IGZvciAodmFyIGUxIG9mIG91dGVySXRlcmF0b3IpIHsKKyAgICAgICAgaW5uZXI6IGZv
ciAodmFyIGUyIG9mIGlubmVySXRlcmF0b3IpIHsKKyAgICAgICAgICAgIGJyZWFrIGlubmVyOwor
ICAgICAgICB9CisgICAgfQorICAgIGlmICghaW5uZXJJdGVyYXRvci5yZXR1cm5lZCkKKyAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgdmFsdWU6ICIgKyBpbm5lckl0ZXJhdG9yLnJldHVybmVk
KTsKKyAgICBpZiAob3V0ZXJJdGVyYXRvci5yZXR1cm5lZCkKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJiYWQgdmFsdWU6ICIgKyBvdXRlckl0ZXJhdG9yLnJldHVybmVkKTsKK30oKSk7CisKKyhm
dW5jdGlvbiB0ZXN0KCkgeworICAgIHZhciBvdXRlckl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3Io
KTsKKyAgICB2YXIgaW5uZXJJdGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgb3V0ZXI6
IGZvciAodmFyIGUxIG9mIG91dGVySXRlcmF0b3IpIHsKKyAgICAgICAgaW5uZXI6IGZvciAodmFy
IGUyIG9mIGlubmVySXRlcmF0b3IpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorICAgIGlmICghaW5uZXJJdGVyYXRvci5yZXR1cm5lZCkKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJiYWQgdmFsdWU6ICIgKyBpbm5lckl0ZXJhdG9yLnJldHVybmVkKTsKKyAgICBpZiAo
b3V0ZXJJdGVyYXRvci5yZXR1cm5lZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgdmFs
dWU6ICIgKyBvdXRlckl0ZXJhdG9yLnJldHVybmVkKTsKK30oKSk7CisKKworKGZ1bmN0aW9uIHRl
c3QoKSB7CisgICAgdmFyIG91dGVySXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvcigpOworICAgIHZh
ciBpbm5lckl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IoKTsKKyAgICBvdXRlcjogZm9yICh2YXIg
ZTEgb2Ygb3V0ZXJJdGVyYXRvcikgeworICAgICAgICBpbm5lcjogZm9yICh2YXIgZTIgb2YgaW5u
ZXJJdGVyYXRvcikgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgaWYgKGlubmVySXRlcmF0b3IucmV0dXJuZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigi
YmFkIHZhbHVlOiAiICsgaW5uZXJJdGVyYXRvci5yZXR1cm5lZCk7CisgICAgaWYgKG91dGVySXRl
cmF0b3IucmV0dXJuZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHZhbHVlOiAiICsg
b3V0ZXJJdGVyYXRvci5yZXR1cm5lZCk7Cit9KCkpOworCisoZnVuY3Rpb24gdGVzdCgpIHsKKyAg
ICB2YXIgb3V0ZXJJdGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgdmFyIGlubmVySXRl
cmF0b3IgPSBjcmVhdGVJdGVyYXRvcigpOworICAgIG91dGVyOiBmb3IgKHZhciBlMSBvZiBvdXRl
ckl0ZXJhdG9yKSB7CisgICAgICAgIGlubmVyOiBmb3IgKHZhciBlMiBvZiBpbm5lckl0ZXJhdG9y
KSB7CisgICAgICAgICAgICBjb250aW51ZSBpbm5lcjsKKyAgICAgICAgfQorICAgIH0KKyAgICBp
ZiAoaW5uZXJJdGVyYXRvci5yZXR1cm5lZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQg
dmFsdWU6ICIgKyBpbm5lckl0ZXJhdG9yLnJldHVybmVkKTsKKyAgICBpZiAob3V0ZXJJdGVyYXRv
ci5yZXR1cm5lZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgdmFsdWU6ICIgKyBvdXRl
ckl0ZXJhdG9yLnJldHVybmVkKTsKK30oKSk7CisKKyhmdW5jdGlvbiB0ZXN0KCkgeworICAgIHZh
ciBvdXRlckl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IoKTsKKyAgICB2YXIgaW5uZXJJdGVyYXRv
ciA9IGNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgb3V0ZXI6IGZvciAodmFyIGUxIG9mIG91dGVySXRl
cmF0b3IpIHsKKyAgICAgICAgaW5uZXI6IGZvciAodmFyIGUyIG9mIGlubmVySXRlcmF0b3IpIHsK
KyAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyOworICAgICAgICB9CisgICAgfQorICAgIGlmICgh
aW5uZXJJdGVyYXRvci5yZXR1cm5lZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgdmFs
dWU6ICIgKyBpbm5lckl0ZXJhdG9yLnJldHVybmVkKTsKKyAgICBpZiAob3V0ZXJJdGVyYXRvci5y
ZXR1cm5lZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgdmFsdWU6ICIgKyBvdXRlckl0
ZXJhdG9yLnJldHVybmVkKTsKK30oKSk7CisKKyhmdW5jdGlvbiB0ZXN0KCkgeworICAgIHZhciBv
dXRlckl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IoKTsKKyAgICB2YXIgaW5uZXJJdGVyYXRvciA9
IGNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgb3V0ZXI6IGZv
ciAodmFyIGUxIG9mIG91dGVySXRlcmF0b3IpIHsKKyAgICAgICAgICAgIGlubmVyOiBmb3IgKHZh
ciBlMiBvZiBpbm5lckl0ZXJhdG9yKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfSgpKTsKKyAgICBpZiAoIWlubmVySXRlcmF0b3IucmV0
dXJuZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHZhbHVlOiAiICsgaW5uZXJJdGVy
YXRvci5yZXR1cm5lZCk7CisgICAgaWYgKCFvdXRlckl0ZXJhdG9yLnJldHVybmVkKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2YWx1ZTogIiArIG91dGVySXRlcmF0b3IucmV0dXJuZWQp
OworfSgpKTsKKworKGZ1bmN0aW9uIHRlc3QoKSB7CisgICAgdmFyIG91dGVySXRlcmF0b3IgPSBj
cmVhdGVJdGVyYXRvcigpOworICAgIHZhciBpbm5lckl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3Io
KTsKKyAgICAoZnVuY3Rpb24gKCkgeworICAgICAgICBvdXRlcjogZm9yICh2YXIgZTEgb2Ygb3V0
ZXJJdGVyYXRvcikgeworICAgICAgICAgICAgaW5uZXI6IGZvciAodmFyIGUyIG9mIGlubmVySXRl
cmF0b3IpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0oKSk7CisgICAgaWYgKGlubmVySXRlcmF0b3IucmV0dXJuZWQpCisgICAgICAgIHRocm93
IG5ldyBFcnJvcigiYmFkIHZhbHVlOiAiICsgaW5uZXJJdGVyYXRvci5yZXR1cm5lZCk7CisgICAg
aWYgKCFvdXRlckl0ZXJhdG9yLnJldHVybmVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJh
ZCB2YWx1ZTogIiArIG91dGVySXRlcmF0b3IucmV0dXJuZWQpOworfSgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcmFpc2UtZXJyb3ItaW4taXRlcmF0
b3ItY2xvc2UuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3JhaXNlLWVy
cm9yLWluLWl0ZXJhdG9yLWNsb3NlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg4ZjZlODYwNGUxYzU4N2JmMjA3
ZjJmNWU4YjVhOWUxMTJlMTJhODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL3JhaXNlLWVycm9yLWluLWl0ZXJhdG9yLWNsb3NlLmpzCkBAIC0w
LDAgKzEsMTE4IEBACisKK2Z1bmN0aW9uIGNyZWF0ZUl0ZXJhdG9yKGNhbGxiYWNrKSB7CisgICAg
dmFyIGFycmF5ID0gWzAsMSwyLDMsNCw1XTsKKyAgICB2YXIgaXRlcmF0b3IgPSBhcnJheVtTeW1i
b2wuaXRlcmF0b3JdKCk7CisgICAgaXRlcmF0b3IucmV0dXJuID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICBpdGVyYXRvci5yZXR1cm5lZCA9IHRydWU7CisgICAgICAgIGlmIChjYWxsYmFjaykKKyAg
ICAgICAgICAgIHJldHVybiBjYWxsYmFjayh0aGlzKTsKKyAgICAgICAgcmV0dXJuIHsgZG9uZTog
dHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9OworICAgIH07CisgICAgaXRlcmF0b3IucmV0dXJuZWQg
PSBmYWxzZTsKKyAgICByZXR1cm4gaXRlcmF0b3I7Cit9CisKKyhmdW5jdGlvbiB0ZXN0KCkgewor
ICAgIHZhciBvdXRlckl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IoKTsKKyAgICB2YXIgaW5uZXJJ
dGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJJbm5lciByZXR1cm4gY2FsbGVkLiIpOworICAgIH0pOworICAgIHZhciBlcnJvciA9
IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgb3V0ZXI6IGZvciAodmFyIGUxIG9mIG91dGVySXRl
cmF0b3IpIHsKKyAgICAgICAgICAgIGlubmVyOiBmb3IgKHZhciBlMiBvZiBpbm5lckl0ZXJhdG9y
KSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9IGNhdGNoIChlKSB7CisgICAgICAgIGVycm9yID0gZTsKKyAgICB9CisgICAgaWYgKCFlcnJv
cikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJubyBlcnJvciIpOworICAgIGlmIChTdHJpbmco
ZXJyb3IpICE9PSAiRXJyb3I6IElubmVyIHJldHVybiBjYWxsZWQuIikKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJiYWQgZXJyb3I6ICIgKyBTdHJpbmcoZXJyb3IpKTsKKyAgICBpZiAoIWlubmVy
SXRlcmF0b3IucmV0dXJuZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHZhbHVlOiAi
ICsgaW5uZXJJdGVyYXRvci5yZXR1cm5lZCk7CisgICAgaWYgKCFvdXRlckl0ZXJhdG9yLnJldHVy
bmVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2YWx1ZTogIiArIG91dGVySXRlcmF0
b3IucmV0dXJuZWQpOworfSgpKTsKKworKGZ1bmN0aW9uIHRlc3QoKSB7CisgICAgdmFyIG91dGVy
SXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvcihmdW5jdGlvbiAoKSB7CisgICAgICAgIHRocm93IG5l
dyBFcnJvcigiT3V0ZXIgcmV0dXJuIGNhbGxlZC4iKTsKKyAgICB9KTsKKyAgICB2YXIgaW5uZXJJ
dGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJJbm5lciByZXR1cm4gY2FsbGVkLiIpOworICAgIH0pOworICAgIHZhciBlcnJvciA9
IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgb3V0ZXI6IGZvciAodmFyIGUxIG9mIG91dGVySXRl
cmF0b3IpIHsKKyAgICAgICAgICAgIGlubmVyOiBmb3IgKHZhciBlMiBvZiBpbm5lckl0ZXJhdG9y
KSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9IGNhdGNoIChlKSB7CisgICAgICAgIGVycm9yID0gZTsKKyAgICB9CisgICAgaWYgKCFlcnJv
cikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJubyBlcnJvciIpOworICAgIGlmIChTdHJpbmco
ZXJyb3IpICE9PSAiRXJyb3I6IElubmVyIHJldHVybiBjYWxsZWQuIikKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJiYWQgZXJyb3I6ICIgKyBTdHJpbmcoZXJyb3IpKTsKKyAgICBpZiAoIWlubmVy
SXRlcmF0b3IucmV0dXJuZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHZhbHVlOiAi
ICsgaW5uZXJJdGVyYXRvci5yZXR1cm5lZCk7CisgICAgaWYgKCFvdXRlckl0ZXJhdG9yLnJldHVy
bmVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2YWx1ZTogIiArIG91dGVySXRlcmF0
b3IucmV0dXJuZWQpOworfSgpKTsKKworKGZ1bmN0aW9uIHRlc3QoKSB7CisgICAgdmFyIG91dGVy
SXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvcihmdW5jdGlvbiAoKSB7CisgICAgICAgIHRocm93IG5l
dyBFcnJvcigiT3V0ZXIgcmV0dXJuIGNhbGxlZC4iKTsKKyAgICB9KTsKKyAgICB2YXIgaW5uZXJJ
dGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgdmFyIGVycm9yID0gbnVsbDsKKyAgICB0
cnkgeworICAgICAgICBvdXRlcjogZm9yICh2YXIgZTEgb2Ygb3V0ZXJJdGVyYXRvcikgeworICAg
ICAgICAgICAgaW5uZXI6IGZvciAodmFyIGUyIG9mIGlubmVySXRlcmF0b3IpIHsKKyAgICAgICAg
ICAgICAgICBicmVhayBvdXRlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gY2F0
Y2ggKGUpIHsKKyAgICAgICAgZXJyb3IgPSBlOworICAgIH0KKyAgICBpZiAoIWVycm9yKQorICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoIm5vIGVycm9yIik7CisgICAgaWYgKFN0cmluZyhlcnJvcikg
IT09ICJFcnJvcjogT3V0ZXIgcmV0dXJuIGNhbGxlZC4iKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoImJhZCBlcnJvcjogIiArIFN0cmluZyhlcnJvcikpOworICAgIGlmICghaW5uZXJJdGVyYXRv
ci5yZXR1cm5lZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgdmFsdWU6ICIgKyBpbm5l
ckl0ZXJhdG9yLnJldHVybmVkKTsKKyAgICBpZiAoIW91dGVySXRlcmF0b3IucmV0dXJuZWQpCisg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHZhbHVlOiAiICsgb3V0ZXJJdGVyYXRvci5yZXR1
cm5lZCk7Cit9KCkpOworCisoZnVuY3Rpb24gdGVzdCgpIHsKKyAgICB2YXIgb3V0ZXJJdGVyYXRv
ciA9IGNyZWF0ZUl0ZXJhdG9yKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJPdXRlciByZXR1cm4gY2FsbGVkLiIpOworICAgIH0pOworICAgIHZhciBpbm5lckl0ZXJhdG9y
ID0gY3JlYXRlSXRlcmF0b3IoZnVuY3Rpb24gKCkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IklubmVyIHJldHVybiBjYWxsZWQuIik7CisgICAgfSk7CisgICAgdmFyIGVycm9yID0gbnVsbDsK
KyAgICB0cnkgeworICAgICAgICBvdXRlcjogZm9yICh2YXIgZTEgb2Ygb3V0ZXJJdGVyYXRvcikg
eworICAgICAgICAgICAgaW5uZXI6IGZvciAodmFyIGUyIG9mIGlubmVySXRlcmF0b3IpIHsKKyAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkxvb3AgcmFpc2VzIGVycm9yLiIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBlcnJvciA9
IGU7CisgICAgfQorICAgIGlmICghZXJyb3IpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigibm8g
ZXJyb3IiKTsKKyAgICBpZiAoU3RyaW5nKGVycm9yKSAhPT0gIkVycm9yOiBMb29wIHJhaXNlcyBl
cnJvci4iKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCBlcnJvcjogIiArIFN0cmluZyhl
cnJvcikpOworICAgIGlmICghaW5uZXJJdGVyYXRvci5yZXR1cm5lZCkKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJiYWQgdmFsdWU6ICIgKyBpbm5lckl0ZXJhdG9yLnJldHVybmVkKTsKKyAgICBp
ZiAoIW91dGVySXRlcmF0b3IucmV0dXJuZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFk
IHZhbHVlOiAiICsgb3V0ZXJJdGVyYXRvci5yZXR1cm5lZCk7Cit9KCkpOworCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249661</attachid>
            <date>2015-03-28 02:47:32 -0700</date>
            <delta_ts>2015-03-30 10:39:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143140-20150328184652.patch</filename>
            <type>text/plain</type>
            <size>25451</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyMTA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
MDNiMDY3YmVkM2RmMzc2ZWNjOTQ0NzcyZjJiNWQxNjQ3YzYzY2JjLi40OGNkMjM3NWNkMjQzZmQw
YThhNzczMGZmMmM3OGYwMmRjNjU4MTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MyBAQAorMjAxNS0wMy0yOCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBJdGVyYXRvckNsb3NlIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBqdW1w
aW5nIG92ZXIgdGhlIHRhcmdldCBmb3Itb2YgbG9vcAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzMTQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBmaXhlcyBsYWJlbGVkIGJyZWFrL2Nv
bnRpbnVlIGJlaGF2aW9ycyB3aXRoIGZvci1vZiBhbmQgaXRlcmF0b3JzLgorCisgICAgICAgIDEu
IFN1cHBvcnQgSXRlcmF0b3JDbG9zZSBiZXlvbmQgbXVsdGlwbGUgbG9vcCBjb250ZXh0cworICAg
ICAgICBQcmV2aW91c2x5LCBJdGVyYXRvckNsb3NlIGlzIG9ubHkgZXhlY3V0ZWQgaW4gZm9yLW9m
J3MgYnJlYWtUYXJnZXQoKS4KKyAgICAgICAgSG93ZXZlciwgdGhpcyBtaXNzZXMgSXRlcmF0b3JD
bG9zZSBleGVjdXRpb24gd2hlbiBzdGF0ZW1lbnQgcm9sbC11cHMgbXVsdGlwbGUgY29udHJvbCBm
bG93IGNvbnRleHRzLgorICAgICAgICBGb3IgZXhhbXBsZSwKKyAgICAgICAgb3V0ZXI6IGZvciAo
dmFyIGUxIG9mIG91dGVyKSB7CisgICAgICAgICAgICBpbm5lcjogZm9yICh2YXIgZTIgb2YgaW5u
ZXIpIHsKKyAgICAgICAgICAgICAgICBicmVhayBvdXRlcjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBJbiB0aGlzIGNhc2UsIHJldHVybiBtZXRob2Qgb2YgaW5uZXIgc2hvdWxk
IGJlIGNhbGxlZC4KKyAgICAgICAgV2UgbGV2ZXJhZ2UgdGhlIGV4aXN0aW5nIHN5c3RlbSBmb3Ig
YGZpbmFsbHlgIHRvIGV4ZWN1dGUgaW5uZXIucmV0dXJuIG1ldGhvZCBjb3JyZWN0bHkuCisgICAg
ICAgIExldmVyYWdpbmcgYGZpbmFsbHlgIHN5c3RlbSBmaXhlcyBgYnJlYWtgLCBgY29udGludWVg
IGFuZCBgcmV0dXJuYCBjYXNlcy4KKyAgICAgICAgYHRocm93YCBjYXNlIGlzIGFscmVhZHkgc3Vw
cG9ydGVkIGJ5IGVtaXR0aW5nIHRyeS1jYXRjaCBoYW5kbGVycyBpbiBmb3Itb2YuCisKKyAgICAg
ICAgMi4gSW5jb3JyZWN0IExhYmVsU2NvcGUgY3JlYXRpb24gaXMgZG9uZSBpbiBGb3JPZk5vZGUK
KyAgICAgICAgRm9yT2ZOb2RlIGNyZWF0ZXMgZHVwbGljYXRlZCBMYWJlbFNjb3BlLgorICAgICAg
ICBJdCBjYXVzZXMgaW5maW5pdGUgbG9vcCB3aGVuIGV4ZWN1dGluZyB0aGUgZm9sbG93aW5nIHBy
b2dyYW0gdGhhdCBjb250YWlucworICAgICAgICBleHBsaWNpdGx5IGxhYmVsZWQgZm9yLW9mIGxv
b3AuCisgICAgICAgIEZvciBleGFtcGxlLAorICAgICAgICBpbm5lcjogZm9yICh2YXIgZWxtIG9m
IGFycmF5KSB7CisgICAgICAgICAgICBjb250aW51ZSBpbm5lcjsKKyAgICAgICAgfQorCisgICAg
ICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGaW5hbGx5Q29udGV4dCk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjpwdXNoSXRlcmF0b3JDbG9zZUNvbnRleHQpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wRmluYWxseUNvbnRleHQpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6cG9wSXRlcmF0b3JDbG9zZUNvbnRleHQpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTY29wZXMpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRJdGVyYXRvckNsb3NlKToKKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2Rl
Z2VuLmNwcDoKKyAgICAgICAgKEpTQzo6Rm9yT2ZOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAg
ICAqIHRlc3RzL3N0cmVzcy9pdGVyYXRvci1yZXR1cm4tYmV5b25kLW11bHRpcGxlLWl0ZXJhdGlv
bi1zY29wZXMuanM6IEFkZGVkLgorICAgICAgICAoY3JlYXRlSXRlcmF0b3IuaXRlcmF0b3IucmV0
dXJuKToKKyAgICAgICAgKGNyZWF0ZUl0ZXJhdG9yKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3Mv
cmFpc2UtZXJyb3ItaW4taXRlcmF0b3ItY2xvc2UuanM6IEFkZGVkLgorICAgICAgICAoY3JlYXRl
SXRlcmF0b3IuaXRlcmF0b3IucmV0dXJuKToKKyAgICAgICAgKGNyZWF0ZUl0ZXJhdG9yKToKKwog
MjAxNS0wMy0yNyAgU2FhbSBCYXJhdGkgIDxzYWFtYmFyYXRpMUBnbWFpbC5jb20+CiAKICAgICAg
ICAgRGVjb25zdHJ1Y3Rpb24gcGFyYW1ldGVycyBhcmUgYm91bmQgdG9vIGxhdGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAKaW5kZXggOGY4ZDE2NTUxY2EyNWI1YzJhYTFmYzJiYzllMzQ4NDViYjUyMTU1NS4uZTQ0
ODI3NWRhNzEwNzkyODkxZmJjNzFjODE3OGI0OTZkYjA4MDU0ZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAK
QEAgLTIxMjIsNiArMjEyMiwzMyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRmluYWxs
eUNvbnRleHQoU3RhdGVtZW50Tm9kZSogZmluYWxseUJsb2NrKQogICAgIHNjb3BlLmlzRmluYWxs
eUJsb2NrID0gdHJ1ZTsKICAgICBGaW5hbGx5Q29udGV4dCBjb250ZXh0ID0gewogICAgICAgICBm
aW5hbGx5QmxvY2ssCisgICAgICAgIG51bGxwdHIsCisgICAgICAgIG51bGxwdHIsCisgICAgICAg
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3Njb3BlQ29udGV4dFN0YWNrLnNpemUoKSksCisgICAg
ICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3N3aXRjaENvbnRleHRTdGFjay5zaXplKCkpLAor
ICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9mb3JJbkNvbnRleHRTdGFjay5zaXplKCkp
LAorICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV90cnlDb250ZXh0U3RhY2suc2l6ZSgp
KSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbGFiZWxTY29wZXMuc2l6ZSgpKSwK
KyAgICAgICAgbV9maW5hbGx5RGVwdGgsCisgICAgICAgIG1fbG9jYWxTY29wZURlcHRoCisgICAg
fTsKKyAgICBzY29wZS5maW5hbGx5Q29udGV4dCA9IGNvbnRleHQ7CisgICAgbV9zY29wZUNvbnRl
eHRTdGFjay5hcHBlbmQoc2NvcGUpOworICAgIG1fZmluYWxseURlcHRoKys7Cit9CisKK3ZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hJdGVyYXRvckNsb3NlQ29udGV4dChSZWdpc3RlcklEKiBp
dGVyYXRvciwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUpCit7CisgICAgLy8gUmVjbGFp
bSBmcmVlIGxhYmVsIHNjb3Blcy4KKyAgICB3aGlsZSAobV9sYWJlbFNjb3Blcy5zaXplKCkgJiYg
IW1fbGFiZWxTY29wZXMubGFzdCgpLnJlZkNvdW50KCkpCisgICAgICAgIG1fbGFiZWxTY29wZXMu
cmVtb3ZlTGFzdCgpOworCisgICAgQ29udHJvbEZsb3dDb250ZXh0IHNjb3BlOworICAgIHNjb3Bl
LmlzRmluYWxseUJsb2NrID0gdHJ1ZTsKKyAgICBGaW5hbGx5Q29udGV4dCBjb250ZXh0ID0gewor
ICAgICAgICBudWxscHRyLAorICAgICAgICBpdGVyYXRvciwKKyAgICAgICAgbm9kZSwKICAgICAg
ICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc2NvcGVDb250ZXh0U3RhY2suc2l6ZSgpKSwKICAg
ICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc3dpdGNoQ29udGV4dFN0YWNrLnNpemUoKSks
CiAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2ZvckluQ29udGV4dFN0YWNrLnNpemUo
KSksCkBAIC0yMTM5LDYgKzIxNjYsMjEgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wRmlu
YWxseUNvbnRleHQoKQogewogICAgIEFTU0VSVChtX3Njb3BlQ29udGV4dFN0YWNrLnNpemUoKSk7
CiAgICAgQVNTRVJUKG1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpLmlzRmluYWxseUJsb2NrKTsK
KyAgICBBU1NFUlQobV9zY29wZUNvbnRleHRTdGFjay5sYXN0KCkuZmluYWxseUNvbnRleHQuZmlu
YWxseUJsb2NrKTsKKyAgICBBU1NFUlQoIW1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpLmZpbmFs
bHlDb250ZXh0Lml0ZXJhdG9yKTsKKyAgICBBU1NFUlQoIW1fc2NvcGVDb250ZXh0U3RhY2subGFz
dCgpLmZpbmFsbHlDb250ZXh0LmVudW1lcmF0aW9uTm9kZSk7CisgICAgQVNTRVJUKG1fZmluYWxs
eURlcHRoID4gMCk7CisgICAgbV9zY29wZUNvbnRleHRTdGFjay5yZW1vdmVMYXN0KCk7CisgICAg
bV9maW5hbGx5RGVwdGgtLTsKK30KKwordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wSXRlcmF0
b3JDbG9zZUNvbnRleHQoKQoreworICAgIEFTU0VSVChtX3Njb3BlQ29udGV4dFN0YWNrLnNpemUo
KSk7CisgICAgQVNTRVJUKG1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpLmlzRmluYWxseUJsb2Nr
KTsKKyAgICBBU1NFUlQoIW1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpLmZpbmFsbHlDb250ZXh0
LmZpbmFsbHlCbG9jayk7CisgICAgQVNTRVJUKG1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpLmZp
bmFsbHlDb250ZXh0Lml0ZXJhdG9yKTsKKyAgICBBU1NFUlQobV9zY29wZUNvbnRleHRTdGFjay5s
YXN0KCkuZmluYWxseUNvbnRleHQuZW51bWVyYXRpb25Ob2RlKTsKICAgICBBU1NFUlQobV9maW5h
bGx5RGVwdGggPiAwKTsKICAgICBtX3Njb3BlQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKICAg
ICBtX2ZpbmFsbHlEZXB0aC0tOwpAQCAtMjMxMCw5ICsyMzUyLDE0IEBAIHZvaWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRDb21wbGV4UG9wU2NvcGVzKFJlZ2lzdGVySUQqIHNjb3BlLCBDb250cm9s
Rmxvd0NvbnRlCiAgICAgICAgICAgICBpbnQgc2F2ZWREeW5hbWljU2NvcGVEZXB0aCA9IG1fbG9j
YWxTY29wZURlcHRoOwogICAgICAgICAgICAgbV9sb2NhbFNjb3BlRGVwdGggPSBmaW5hbGx5Q29u
dGV4dC5keW5hbWljU2NvcGVEZXB0aDsKICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRW1p
dCB0aGUgZmluYWxseSBibG9jay4KLSAgICAgICAgICAgIGVtaXROb2RlKGZpbmFsbHlDb250ZXh0
LmZpbmFsbHlCbG9jayk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChmaW5hbGx5Q29u
dGV4dC5maW5hbGx5QmxvY2spIHsKKyAgICAgICAgICAgICAgICAvLyBFbWl0IHRoZSBmaW5hbGx5
IGJsb2NrLgorICAgICAgICAgICAgICAgIGVtaXROb2RlKGZpbmFsbHlDb250ZXh0LmZpbmFsbHlC
bG9jayk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGZpbmFsbHlDb250ZXh0Lml0ZXJhdG9yKSB7
CisgICAgICAgICAgICAgICAgLy8gRW1pdCB0aGUgSXRlcmF0b3JDbG9zZSBibG9jay4KKyAgICAg
ICAgICAgICAgICBlbWl0SXRlcmF0b3JDbG9zZShmaW5hbGx5Q29udGV4dC5pdGVyYXRvciwgZmlu
YWxseUNvbnRleHQuZW51bWVyYXRpb25Ob2RlKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAg
ICAgUmVmUHRyPExhYmVsPiBhZnRlckZpbmFsbHkgPSBlbWl0TGFiZWwobmV3TGFiZWwoKS5nZXQo
KSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIHN0YXRlIG9mIHRo
ZSB3b3JsZC4KQEAgLTI1ODUsNyArMjYzMiw2IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRSZWFkT25seUV4Y2VwdGlvbklmTmVlZGVkKCkKICAgICAKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRFbnVtZXJhdGlvbihUaHJvd2FibGVFeHByZXNzaW9uRGF0YSogbm9kZSwgRXhwcmVz
c2lvbk5vZGUqIHN1YmplY3ROb2RlLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoQnl0ZWNvZGVH
ZW5lcmF0b3ImLCBSZWdpc3RlcklEKik+JiBjYWxsQmFjaykKIHsKLSAgICBMYWJlbFNjb3BlUHRy
IHNjb3BlID0gbmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gc3ViamVjdCA9IG5ld1RlbXBvcmFyeSgpOwogICAgIGVtaXROb2RlKHN1YmplY3Qu
Z2V0KCksIHN1YmplY3ROb2RlKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaXRlcmF0b3IgPSBl
bWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgc3ViamVjdC5nZXQoKSwgcHJvcGVydHlOYW1lcygp
Lml0ZXJhdG9yUHJpdmF0ZU5hbWUpOwpAQCAtMjU5NCw3NyArMjY0MCw3OCBAQCB2b2lkIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRpb24oVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5v
ZGUsIEV4cHJlc3NpbwogICAgICAgICBlbWl0TW92ZShhcmdzLnRoaXNSZWdpc3RlcigpLCBzdWJq
ZWN0LmdldCgpKTsKICAgICAgICAgZW1pdENhbGwoaXRlcmF0b3IuZ2V0KCksIGl0ZXJhdG9yLmdl
dCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGFyZ3MsIG5vZGUtPmRpdm90KCksIG5vZGUtPmRpdm90
U3RhcnQoKSwgbm9kZS0+ZGl2b3RFbmQoKSk7CiAgICAgfQotICAgIFJlZlB0cjxSZWdpc3RlcklE
PiB2YWx1ZSA9IG5ld1RlbXBvcmFyeSgpOwotICAgIGVtaXRMb2FkKHZhbHVlLmdldCgpLCBqc1Vu
ZGVmaW5lZCgpKTsKLSAgICAKLSAgICBlbWl0SnVtcChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7
Ci0gICAgCi0gICAgUmVmUHRyPExhYmVsPiBsb29wU3RhcnQgPSBuZXdMYWJlbCgpOwotICAgIFJl
ZlB0cjxMYWJlbD4gaXRlcmF0b3JEb25lID0gbmV3TGFiZWwoKTsKLSAgICBlbWl0TGFiZWwobG9v
cFN0YXJ0LmdldCgpKTsKLSAgICBlbWl0TG9vcEhpbnQoKTsKLQotICAgIFJlZlB0cjxMYWJlbD4g
dHJ5U3RhcnRMYWJlbCA9IG5ld0xhYmVsKCk7Ci0gICAgZW1pdExhYmVsKHRyeVN0YXJ0TGFiZWwu
Z2V0KCkpOwotICAgIFRyeURhdGEqIHRyeURhdGEgPSBwdXNoVHJ5KHRyeVN0YXJ0TGFiZWwuZ2V0
KCkpOwotICAgIGNhbGxCYWNrKCp0aGlzLCB2YWx1ZS5nZXQoKSk7Ci0gICAgUmVmUHRyPExhYmVs
PiBjYXRjaEhlcmUgPSBlbWl0TGFiZWwobmV3TGFiZWwoKS5nZXQoKSk7Ci0KLSAgICBlbWl0TGFi
ZWwoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOwotICAgIHsKLSAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IG5leHQgPSBlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgaXRlcmF0b3IuZ2V0KCks
IHByb3BlcnR5TmFtZXMoKS5uZXh0KTsKLSAgICAgICAgQ2FsbEFyZ3VtZW50cyBuZXh0QXJndW1l
bnRzKCp0aGlzLCBudWxscHRyKTsKLSAgICAgICAgZW1pdE1vdmUobmV4dEFyZ3VtZW50cy50aGlz
UmVnaXN0ZXIoKSwgaXRlcmF0b3IuZ2V0KCkpOwotICAgICAgICBlbWl0Q2FsbCh2YWx1ZS5nZXQo
KSwgbmV4dC5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBuZXh0QXJndW1lbnRzLCBub2RlLT5k
aXZvdCgpLCBub2RlLT5kaXZvdFN0YXJ0KCksIG5vZGUtPmRpdm90RW5kKCkpOwotICAgIH0KLSAg
ICB7Ci0gICAgICAgIFJlZlB0cjxMYWJlbD4gdHlwZUlzT2JqZWN0ID0gbmV3TGFiZWwoKTsKLSAg
ICAgICAgZW1pdEp1bXBJZlRydWUoZW1pdElzT2JqZWN0KG5ld1RlbXBvcmFyeSgpLCB2YWx1ZS5n
ZXQoKSksIHR5cGVJc09iamVjdC5nZXQoKSk7Ci0gICAgICAgIGVtaXRUaHJvd1R5cGVFcnJvcihB
U0NJSUxpdGVyYWwoIkl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9iamVjdC4i
KSk7Ci0gICAgICAgIGVtaXRMYWJlbCh0eXBlSXNPYmplY3QuZ2V0KCkpOwotICAgIH0KLSAgICBl
bWl0SnVtcElmVHJ1ZShlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgdmFsdWUuZ2V0KCksIHBy
b3BlcnR5TmFtZXMoKS5kb25lKSwgaXRlcmF0b3JEb25lLmdldCgpKTsKLSAgICBlbWl0R2V0QnlJ
ZCh2YWx1ZS5nZXQoKSwgdmFsdWUuZ2V0KCksIHByb3BlcnR5TmFtZXMoKS52YWx1ZSk7Ci0gICAg
ZW1pdEp1bXAobG9vcFN0YXJ0LmdldCgpKTsKIAotICAgIC8vIEl0ZXJhdG9yQ2xvc2Ugc2VxdWVu
Y2UgZm9yIHRocm93LWVkIGNvbnRyb2wgZmxvdy4KKyAgICBSZWZQdHI8TGFiZWw+IGxvb3BEb25l
ID0gbmV3TGFiZWwoKTsKKyAgICAvLyBSZWZQdHI8UmVnaXN0ZXI+IGl0ZXJhdG9yJ3MgbGlmZXRp
bWUgbXVzdCBiZSBsb25nZXIgdGhhbiBJdGVyYXRvckNsb3NlQ29udGV4dC4KKyAgICBwdXNoSXRl
cmF0b3JDbG9zZUNvbnRleHQoaXRlcmF0b3IuZ2V0KCksIG5vZGUpOwogICAgIHsKLSAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGV4Y2VwdGlvblJlZ2lzdGVyID0gcG9wVHJ5QW5kRW1pdENhdGNo
KHRyeURhdGEsIG5ld1RlbXBvcmFyeSgpLCBjYXRjaEhlcmUuZ2V0KCkpOwotICAgICAgICBSZWZQ
dHI8TGFiZWw+IHJldGhyb3cgPSBuZXdMYWJlbCgpOworICAgICAgICBMYWJlbFNjb3BlUHRyIHNj
b3BlID0gbmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKKyAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHZhbHVlID0gbmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIGVtaXRMb2FkKHZhbHVl
LmdldCgpLCBqc1VuZGVmaW5lZCgpKTsKIAotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0
dXJuTWV0aG9kID0gZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIGl0ZXJhdG9yLmdldCgpLCBw
cm9wZXJ0eU5hbWVzKCkucmV0dXJuS2V5d29yZCk7Ci0gICAgICAgIGVtaXRKdW1wSWZUcnVlKGVt
aXRJc1VuZGVmaW5lZChuZXdUZW1wb3JhcnkoKSwgcmV0dXJuTWV0aG9kLmdldCgpKSwgcmV0aHJv
dy5nZXQoKSk7CisgICAgICAgIGVtaXRKdW1wKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKIAot
ICAgICAgICBSZWZQdHI8TGFiZWw+IHJldHVybkNhbGxUcnlTdGFydCA9IG5ld0xhYmVsKCk7Ci0g
ICAgICAgIGVtaXRMYWJlbChyZXR1cm5DYWxsVHJ5U3RhcnQuZ2V0KCkpOwotICAgICAgICBUcnlE
YXRhKiByZXR1cm5DYWxsVHJ5RGF0YSA9IHB1c2hUcnkocmV0dXJuQ2FsbFRyeVN0YXJ0LmdldCgp
KTsKKyAgICAgICAgUmVmUHRyPExhYmVsPiBsb29wU3RhcnQgPSBuZXdMYWJlbCgpOworICAgICAg
ICBlbWl0TGFiZWwobG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZW1pdExvb3BIaW50KCk7CiAK
LSAgICAgICAgQ2FsbEFyZ3VtZW50cyByZXR1cm5Bcmd1bWVudHMoKnRoaXMsIG51bGxwdHIpOwot
ICAgICAgICBlbWl0TW92ZShyZXR1cm5Bcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGl0ZXJhdG9y
LmdldCgpKTsKLSAgICAgICAgZW1pdENhbGwodmFsdWUuZ2V0KCksIHJldHVybk1ldGhvZC5nZXQo
KSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCByZXR1cm5Bcmd1bWVudHMsIG5vZGUtPmRpdm90KCksIG5v
ZGUtPmRpdm90U3RhcnQoKSwgbm9kZS0+ZGl2b3RFbmQoKSk7CisgICAgICAgIFJlZlB0cjxMYWJl
bD4gdHJ5U3RhcnRMYWJlbCA9IG5ld0xhYmVsKCk7CisgICAgICAgIGVtaXRMYWJlbCh0cnlTdGFy
dExhYmVsLmdldCgpKTsKKyAgICAgICAgVHJ5RGF0YSogdHJ5RGF0YSA9IHB1c2hUcnkodHJ5U3Rh
cnRMYWJlbC5nZXQoKSk7CisgICAgICAgIGNhbGxCYWNrKCp0aGlzLCB2YWx1ZS5nZXQoKSk7Cisg
ICAgICAgIGVtaXRKdW1wKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKIAotICAgICAgICBSZWZQ
dHI8TGFiZWw+IHJldHVybkNhbGxDYXRjaEhlcmUgPSBlbWl0TGFiZWwobmV3TGFiZWwoKS5nZXQo
KSk7Ci0gICAgICAgIGVtaXRKdW1wKHJldGhyb3cuZ2V0KCkpOworICAgICAgICAvLyBJdGVyYXRv
ckNsb3NlIHNlcXVlbmNlIGZvciB0aHJvdy1lZCBjb250cm9sIGZsb3cuCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFJlZlB0cjxMYWJlbD4gY2F0Y2hIZXJlID0gZW1pdExhYmVsKG5ld0xhYmVsKCku
Z2V0KCkpOworICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGV4Y2VwdGlvblJlZ2lzdGVy
ID0gcG9wVHJ5QW5kRW1pdENhdGNoKHRyeURhdGEsIG5ld1RlbXBvcmFyeSgpLCBjYXRjaEhlcmUu
Z2V0KCkpOworICAgICAgICAgICAgUmVmUHRyPExhYmVsPiBjYXRjaERvbmUgPSBuZXdMYWJlbCgp
OwogCi0gICAgICAgIHBvcFRyeUFuZEVtaXRDYXRjaChyZXR1cm5DYWxsVHJ5RGF0YSwgbmV3VGVt
cG9yYXJ5KCksIHJldHVybkNhbGxDYXRjaEhlcmUuZ2V0KCkpOwotICAgICAgICBlbWl0TGFiZWwo
cmV0aHJvdy5nZXQoKSk7Ci0gICAgICAgIGVtaXRUaHJvdyhleGNlcHRpb25SZWdpc3Rlci5nZXQo
KSk7Ci0gICAgfQorICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVybk1ldGhvZCA9
IGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBpdGVyYXRvci5nZXQoKSwgcHJvcGVydHlOYW1l
cygpLnJldHVybktleXdvcmQpOworICAgICAgICAgICAgZW1pdEp1bXBJZlRydWUoZW1pdElzVW5k
ZWZpbmVkKG5ld1RlbXBvcmFyeSgpLCByZXR1cm5NZXRob2QuZ2V0KCkpLCBjYXRjaERvbmUuZ2V0
KCkpOwogCi0gICAgLy8gSXRlcmF0b3JDbG9zZSBzZXF1ZW5jZSBmb3IgYnJlYWstZWQgY29udHJv
bCBmbG93LgotICAgIGVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7Ci0gICAgewotICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuTWV0aG9kID0gZW1pdEdldEJ5SWQobmV3VGVt
cG9yYXJ5KCksIGl0ZXJhdG9yLmdldCgpLCBwcm9wZXJ0eU5hbWVzKCkucmV0dXJuS2V5d29yZCk7
Ci0gICAgICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc1VuZGVmaW5lZChuZXdUZW1wb3JhcnkoKSwg
cmV0dXJuTWV0aG9kLmdldCgpKSwgaXRlcmF0b3JEb25lLmdldCgpKTsKKyAgICAgICAgICAgIFJl
ZlB0cjxMYWJlbD4gcmV0dXJuQ2FsbFRyeVN0YXJ0ID0gbmV3TGFiZWwoKTsKKyAgICAgICAgICAg
IGVtaXRMYWJlbChyZXR1cm5DYWxsVHJ5U3RhcnQuZ2V0KCkpOworICAgICAgICAgICAgVHJ5RGF0
YSogcmV0dXJuQ2FsbFRyeURhdGEgPSBwdXNoVHJ5KHJldHVybkNhbGxUcnlTdGFydC5nZXQoKSk7
CiAKLSAgICAgICAgQ2FsbEFyZ3VtZW50cyByZXR1cm5Bcmd1bWVudHMoKnRoaXMsIG51bGxwdHIp
OwotICAgICAgICBlbWl0TW92ZShyZXR1cm5Bcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGl0ZXJh
dG9yLmdldCgpKTsKLSAgICAgICAgZW1pdENhbGwodmFsdWUuZ2V0KCksIHJldHVybk1ldGhvZC5n
ZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCByZXR1cm5Bcmd1bWVudHMsIG5vZGUtPmRpdm90KCks
IG5vZGUtPmRpdm90U3RhcnQoKSwgbm9kZS0+ZGl2b3RFbmQoKSk7Ci0gICAgICAgIGVtaXRKdW1w
SWZUcnVlKGVtaXRJc09iamVjdChuZXdUZW1wb3JhcnkoKSwgdmFsdWUuZ2V0KCkpLCBpdGVyYXRv
ckRvbmUuZ2V0KCkpOwotICAgICAgICBlbWl0VGhyb3dUeXBlRXJyb3IoQVNDSUlMaXRlcmFsKCJJ
dGVyYXRvciByZXN1bHQgaW50ZXJmYWNlIGlzIG5vdCBhbiBvYmplY3QuIikpOworICAgICAgICAg
ICAgQ2FsbEFyZ3VtZW50cyByZXR1cm5Bcmd1bWVudHMoKnRoaXMsIG51bGxwdHIpOworICAgICAg
ICAgICAgZW1pdE1vdmUocmV0dXJuQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBpdGVyYXRvci5n
ZXQoKSk7CisgICAgICAgICAgICBlbWl0Q2FsbCh2YWx1ZS5nZXQoKSwgcmV0dXJuTWV0aG9kLmdl
dCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIHJldHVybkFyZ3VtZW50cywgbm9kZS0+ZGl2b3QoKSwg
bm9kZS0+ZGl2b3RTdGFydCgpLCBub2RlLT5kaXZvdEVuZCgpKTsKKworICAgICAgICAgICAgZW1p
dExhYmVsKGNhdGNoRG9uZS5nZXQoKSk7CisgICAgICAgICAgICBlbWl0VGhyb3coZXhjZXB0aW9u
UmVnaXN0ZXIuZ2V0KCkpOworCisgICAgICAgICAgICAvLyBBYnNvcmIgZXhjZXB0aW9uLgorICAg
ICAgICAgICAgcG9wVHJ5QW5kRW1pdENhdGNoKHJldHVybkNhbGxUcnlEYXRhLCBuZXdUZW1wb3Jh
cnkoKSwgY2F0Y2hEb25lLmdldCgpKTsKKyAgICAgICAgICAgIGVtaXRUaHJvdyhleGNlcHRpb25S
ZWdpc3Rlci5nZXQoKSk7CisgICAgICAgIH0KKworICAgICAgICBlbWl0TGFiZWwoc2NvcGUtPmNv
bnRpbnVlVGFyZ2V0KCkpOworICAgICAgICB7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG5leHQgPSBlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwg
aXRlcmF0b3IuZ2V0KCksIHByb3BlcnR5TmFtZXMoKS5uZXh0KTsKKyAgICAgICAgICAgICAgICBD
YWxsQXJndW1lbnRzIG5leHRBcmd1bWVudHMoKnRoaXMsIG51bGxwdHIpOworICAgICAgICAgICAg
ICAgIGVtaXRNb3ZlKG5leHRBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGl0ZXJhdG9yLmdldCgp
KTsKKyAgICAgICAgICAgICAgICBlbWl0Q2FsbCh2YWx1ZS5nZXQoKSwgbmV4dC5nZXQoKSwgTm9F
eHBlY3RlZEZ1bmN0aW9uLCBuZXh0QXJndW1lbnRzLCBub2RlLT5kaXZvdCgpLCBub2RlLT5kaXZv
dFN0YXJ0KCksIG5vZGUtPmRpdm90RW5kKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIFJlZlB0cjxMYWJlbD4gdHlwZUlzT2JqZWN0ID0gbmV3TGFiZWwo
KTsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcElmVHJ1ZShlbWl0SXNPYmplY3QobmV3VGVtcG9y
YXJ5KCksIHZhbHVlLmdldCgpKSwgdHlwZUlzT2JqZWN0LmdldCgpKTsKKyAgICAgICAgICAgICAg
ICBlbWl0VGhyb3dUeXBlRXJyb3IoQVNDSUlMaXRlcmFsKCJJdGVyYXRvciByZXN1bHQgaW50ZXJm
YWNlIGlzIG5vdCBhbiBvYmplY3QuIikpOworICAgICAgICAgICAgICAgIGVtaXRMYWJlbCh0eXBl
SXNPYmplY3QuZ2V0KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZW1pdEp1bXBJZlRy
dWUoZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIHZhbHVlLmdldCgpLCBwcm9wZXJ0eU5hbWVz
KCkuZG9uZSksIGxvb3BEb25lLmdldCgpKTsKKyAgICAgICAgICAgIGVtaXRHZXRCeUlkKHZhbHVl
LmdldCgpLCB2YWx1ZS5nZXQoKSwgcHJvcGVydHlOYW1lcygpLnZhbHVlKTsKKyAgICAgICAgICAg
IGVtaXRKdW1wKGxvb3BTdGFydC5nZXQoKSk7CisgICAgICAgIH0KKworICAgICAgICBlbWl0TGFi
ZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOwogICAgIH0KIAotICAgIGVtaXRMYWJlbChpdGVyYXRv
ckRvbmUuZ2V0KCkpOworICAgIC8vIEl0ZXJhdG9yQ2xvc2Ugc2VxdWVuY2UgZm9yIGJyZWFrLWVk
IGNvbnRyb2wgZmxvdy4KKyAgICBwb3BJdGVyYXRvckNsb3NlQ29udGV4dCgpOworICAgIGVtaXRJ
dGVyYXRvckNsb3NlKGl0ZXJhdG9yLmdldCgpLCBub2RlKTsKKyAgICBlbWl0TGFiZWwobG9vcERv
bmUuZ2V0KCkpOwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEVu
dW1lcmFibGVMZW5ndGgoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlKQpAQCAtMjc1
Niw2ICsyODAzLDIxIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNVbmRl
ZmluZWQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpCiAgICAgcmV0dXJuIGRzdDsK
IH0KIAordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEl0ZXJhdG9yQ2xvc2UoUmVnaXN0ZXJJ
RCogaXRlcmF0b3IsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKiBub2RlKQoreworICAgIFJlZlB0
cjxMYWJlbD4gZG9uZSA9IG5ld0xhYmVsKCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVy
bk1ldGhvZCA9IGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBpdGVyYXRvciwgcHJvcGVydHlO
YW1lcygpLnJldHVybktleXdvcmQpOworICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc1VuZGVmaW5l
ZChuZXdUZW1wb3JhcnkoKSwgcmV0dXJuTWV0aG9kLmdldCgpKSwgZG9uZS5nZXQoKSk7CisKKyAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBuZXdUZW1wb3JhcnkoKTsKKyAgICBDYWxsQXJn
dW1lbnRzIHJldHVybkFyZ3VtZW50cygqdGhpcywgbnVsbHB0cik7CisgICAgZW1pdE1vdmUocmV0
dXJuQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBpdGVyYXRvcik7CisgICAgZW1pdENhbGwodmFs
dWUuZ2V0KCksIHJldHVybk1ldGhvZC5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCByZXR1cm5B
cmd1bWVudHMsIG5vZGUtPmRpdm90KCksIG5vZGUtPmRpdm90U3RhcnQoKSwgbm9kZS0+ZGl2b3RF
bmQoKSk7CisgICAgZW1pdEp1bXBJZlRydWUoZW1pdElzT2JqZWN0KG5ld1RlbXBvcmFyeSgpLCB2
YWx1ZS5nZXQoKSksIGRvbmUuZ2V0KCkpOworICAgIGVtaXRUaHJvd1R5cGVFcnJvcihBU0NJSUxp
dGVyYWwoIkl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9iamVjdC4iKSk7Cisg
ICAgZW1pdExhYmVsKGRvbmUuZ2V0KCkpOworfQorCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpw
dXNoSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0ZXJJ
RCogaW5kZXhSZWdpc3RlcikKIHsKICAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgK
aW5kZXggNGZmZWY2YjQwOTdmMDI0NmRjMWJhZTg5ZWU4YWFiOGVjOTVjNjBmYS4uMmU1OTAzOWQz
YTQ4NGEzNDcyODE0NDBlZWY5YzFiODE5ZjcyNjVkYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtODIsNiAr
ODIsOCBAQAogCiAgICAgc3RydWN0IEZpbmFsbHlDb250ZXh0IHsKICAgICAgICAgU3RhdGVtZW50
Tm9kZSogZmluYWxseUJsb2NrOworICAgICAgICBSZWdpc3RlcklEKiBpdGVyYXRvcjsKKyAgICAg
ICAgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIGVudW1lcmF0aW9uTm9kZTsKICAgICAgICAgdW5z
aWduZWQgc2NvcGVDb250ZXh0U3RhY2tTaXplOwogICAgICAgICB1bnNpZ25lZCBzd2l0Y2hDb250
ZXh0U3RhY2tTaXplOwogICAgICAgICB1bnNpZ25lZCBmb3JJbkNvbnRleHRTdGFja1NpemU7CkBA
IC01MjYsNiArNTI4LDggQEAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdElzT2JqZWN0KFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdElz
VW5kZWZpbmVkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKTsKIAorICAgICAgICB2
b2lkIGVtaXRJdGVyYXRvckNsb3NlKFJlZ2lzdGVySUQqIGl0ZXJhdG9yLCBUaHJvd2FibGVFeHBy
ZXNzaW9uRGF0YSogbm9kZSk7CisKICAgICAgICAgdm9pZCBlbWl0UmVhZE9ubHlFeGNlcHRpb25J
Zk5lZWRlZCgpOwogCiAgICAgICAgIC8vIFN0YXJ0IGEgdHJ5IGJsb2NrLiAnc3RhcnQnIG11c3Qg
aGF2ZSBiZWVuIGVtaXR0ZWQuCkBAIC01NTYsNiArNTYwLDggQEAKIAogICAgICAgICB2b2lkIHB1
c2hGaW5hbGx5Q29udGV4dChTdGF0ZW1lbnROb2RlKiBmaW5hbGx5QmxvY2spOwogICAgICAgICB2
b2lkIHBvcEZpbmFsbHlDb250ZXh0KCk7CisgICAgICAgIHZvaWQgcHVzaEl0ZXJhdG9yQ2xvc2VD
b250ZXh0KFJlZ2lzdGVySUQqIGl0ZXJhdG9yLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSogZW51
bWVyYXRpb25Ob2RlKTsKKyAgICAgICAgdm9pZCBwb3BJdGVyYXRvckNsb3NlQ29udGV4dCgpOwog
CiAgICAgICAgIHZvaWQgcHVzaEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBS
ZWdpc3RlcklEKiBpbmRleCk7CiAgICAgICAgIHZvaWQgcG9wSW5kZXhlZEZvckluU2NvcGUoUmVn
aXN0ZXJJRCogbG9jYWwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwCmluZGV4IDYxNTljNzljOTkzMWVjZDQ1ODVmMWE3ZGVmYjFh
NzYxMTU3M2U4YTMuLmRiNWNhZTg2N2MzNzdjM2EwMDhhZDA1NzhkZTc4NzNkMjE1ZjY4OTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2Vu
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdl
bi5jcHAKQEAgLTIyODcsOSArMjI4Nyw3IEBAIHZvaWQgRm9yT2ZOb2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogICAgICAgICBl
bWl0VGhyb3dSZWZlcmVuY2VFcnJvcihnZW5lcmF0b3IsIEFTQ0lJTGl0ZXJhbCgiTGVmdCBzaWRl
IG9mIGZvci1vZiBzdGF0ZW1lbnQgaXMgbm90IGEgcmVmZXJlbmNlLiIpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICAKLSAgICBMYWJlbFNjb3BlUHRyIHNjb3BlID0gZ2VuZXJhdG9yLm5l
d0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7Ci0gICAgCisKICAgICBnZW5lcmF0b3IuZW1p
dERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIHN0YXJ0T2Zmc2V0
KCksIGxpbmVTdGFydE9mZnNldCgpKTsKICAgICBhdXRvIGV4dHJhY3RvciA9IFt0aGlzLCBkc3Rd
KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIHZhbHVlKQogICAgIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvaXRlcmF0b3It
cmV0dXJuLWJleW9uZC1tdWx0aXBsZS1pdGVyYXRpb24tc2NvcGVzLmpzIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pdGVyYXRvci1yZXR1cm4tYmV5b25kLW11bHRpcGxlLWl0
ZXJhdGlvbi1zY29wZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDA4NGQ2ZmNkMjY3MTcyY2RlMzY1YjlhMzQ3
NWY3OGQwOTg0NmNlZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvaXRlcmF0b3ItcmV0dXJuLWJleW9uZC1tdWx0aXBsZS1pdGVyYXRpb24tc2Nv
cGVzLmpzCkBAIC0wLDAgKzEsMTMwIEBACisKK2Z1bmN0aW9uIGNyZWF0ZUl0ZXJhdG9yKGNhbGxi
YWNrKSB7CisgICAgdmFyIGFycmF5ID0gWzAsMSwyLDMsNCw1XTsKKyAgICB2YXIgaXRlcmF0b3Ig
PSBhcnJheVtTeW1ib2wuaXRlcmF0b3JdKCk7CisgICAgaXRlcmF0b3IucmV0dXJuID0gZnVuY3Rp
b24gKCkgeworICAgICAgICBpdGVyYXRvci5yZXR1cm5lZCA9IHRydWU7CisgICAgICAgIGlmIChj
YWxsYmFjaykKKyAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayh0aGlzKTsKKyAgICAgICAgcmV0
dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9OworICAgIH07CisgICAgaXRlcmF0
b3IucmV0dXJuZWQgPSBmYWxzZTsKKyAgICByZXR1cm4gaXRlcmF0b3I7Cit9CisKKyhmdW5jdGlv
biB0ZXN0KCkgeworICAgIHZhciBvdXRlckl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IoKTsKKyAg
ICB2YXIgaW5uZXJJdGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgb3V0ZXI6IGZvciAo
dmFyIGUxIG9mIG91dGVySXRlcmF0b3IpIHsKKyAgICAgICAgaW5uZXI6IGZvciAodmFyIGUyIG9m
IGlubmVySXRlcmF0b3IpIHsKKyAgICAgICAgICAgIGJyZWFrIG91dGVyOworICAgICAgICB9Cisg
ICAgfQorICAgIGlmICghaW5uZXJJdGVyYXRvci5yZXR1cm5lZCkKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJiYWQgdmFsdWU6ICIgKyBpbm5lckl0ZXJhdG9yLnJldHVybmVkKTsKKyAgICBpZiAo
IW91dGVySXRlcmF0b3IucmV0dXJuZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHZh
bHVlOiAiICsgb3V0ZXJJdGVyYXRvci5yZXR1cm5lZCk7Cit9KCkpOworCisoZnVuY3Rpb24gdGVz
dCgpIHsKKyAgICB2YXIgb3V0ZXJJdGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgdmFy
IGlubmVySXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvcigpOworICAgIG91dGVyOiBmb3IgKHZhciBl
MSBvZiBvdXRlckl0ZXJhdG9yKSB7CisgICAgICAgIGlubmVyOiBmb3IgKHZhciBlMiBvZiBpbm5l
ckl0ZXJhdG9yKSB7CisgICAgICAgICAgICBicmVhayBpbm5lcjsKKyAgICAgICAgfQorICAgIH0K
KyAgICBpZiAoIWlubmVySXRlcmF0b3IucmV0dXJuZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJv
cigiYmFkIHZhbHVlOiAiICsgaW5uZXJJdGVyYXRvci5yZXR1cm5lZCk7CisgICAgaWYgKG91dGVy
SXRlcmF0b3IucmV0dXJuZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHZhbHVlOiAi
ICsgb3V0ZXJJdGVyYXRvci5yZXR1cm5lZCk7Cit9KCkpOworCisoZnVuY3Rpb24gdGVzdCgpIHsK
KyAgICB2YXIgb3V0ZXJJdGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgdmFyIGlubmVy
SXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvcigpOworICAgIG91dGVyOiBmb3IgKHZhciBlMSBvZiBv
dXRlckl0ZXJhdG9yKSB7CisgICAgICAgIGlubmVyOiBmb3IgKHZhciBlMiBvZiBpbm5lckl0ZXJh
dG9yKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWlu
bmVySXRlcmF0b3IucmV0dXJuZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHZhbHVl
OiAiICsgaW5uZXJJdGVyYXRvci5yZXR1cm5lZCk7CisgICAgaWYgKG91dGVySXRlcmF0b3IucmV0
dXJuZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHZhbHVlOiAiICsgb3V0ZXJJdGVy
YXRvci5yZXR1cm5lZCk7Cit9KCkpOworCisKKyhmdW5jdGlvbiB0ZXN0KCkgeworICAgIHZhciBv
dXRlckl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IoKTsKKyAgICB2YXIgaW5uZXJJdGVyYXRvciA9
IGNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgb3V0ZXI6IGZvciAodmFyIGUxIG9mIG91dGVySXRlcmF0
b3IpIHsKKyAgICAgICAgaW5uZXI6IGZvciAodmFyIGUyIG9mIGlubmVySXRlcmF0b3IpIHsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgfQorICAgIGlmIChpbm5lckl0ZXJh
dG9yLnJldHVybmVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2YWx1ZTogIiArIGlu
bmVySXRlcmF0b3IucmV0dXJuZWQpOworICAgIGlmIChvdXRlckl0ZXJhdG9yLnJldHVybmVkKQor
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2YWx1ZTogIiArIG91dGVySXRlcmF0b3IucmV0
dXJuZWQpOworfSgpKTsKKworKGZ1bmN0aW9uIHRlc3QoKSB7CisgICAgdmFyIG91dGVySXRlcmF0
b3IgPSBjcmVhdGVJdGVyYXRvcigpOworICAgIHZhciBpbm5lckl0ZXJhdG9yID0gY3JlYXRlSXRl
cmF0b3IoKTsKKyAgICBvdXRlcjogZm9yICh2YXIgZTEgb2Ygb3V0ZXJJdGVyYXRvcikgeworICAg
ICAgICBpbm5lcjogZm9yICh2YXIgZTIgb2YgaW5uZXJJdGVyYXRvcikgeworICAgICAgICAgICAg
Y29udGludWUgaW5uZXI7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGlubmVySXRlcmF0b3Iu
cmV0dXJuZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHZhbHVlOiAiICsgaW5uZXJJ
dGVyYXRvci5yZXR1cm5lZCk7CisgICAgaWYgKG91dGVySXRlcmF0b3IucmV0dXJuZWQpCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHZhbHVlOiAiICsgb3V0ZXJJdGVyYXRvci5yZXR1cm5l
ZCk7Cit9KCkpOworCisoZnVuY3Rpb24gdGVzdCgpIHsKKyAgICB2YXIgb3V0ZXJJdGVyYXRvciA9
IGNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgdmFyIGlubmVySXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRv
cigpOworICAgIG91dGVyOiBmb3IgKHZhciBlMSBvZiBvdXRlckl0ZXJhdG9yKSB7CisgICAgICAg
IGlubmVyOiBmb3IgKHZhciBlMiBvZiBpbm5lckl0ZXJhdG9yKSB7CisgICAgICAgICAgICBjb250
aW51ZSBvdXRlcjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWlubmVySXRlcmF0b3IucmV0
dXJuZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHZhbHVlOiAiICsgaW5uZXJJdGVy
YXRvci5yZXR1cm5lZCk7CisgICAgaWYgKG91dGVySXRlcmF0b3IucmV0dXJuZWQpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcigiYmFkIHZhbHVlOiAiICsgb3V0ZXJJdGVyYXRvci5yZXR1cm5lZCk7
Cit9KCkpOworCisoZnVuY3Rpb24gdGVzdCgpIHsKKyAgICB2YXIgb3V0ZXJJdGVyYXRvciA9IGNy
ZWF0ZUl0ZXJhdG9yKCk7CisgICAgdmFyIGlubmVySXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvcigp
OworICAgIChmdW5jdGlvbiAoKSB7CisgICAgICAgIG91dGVyOiBmb3IgKHZhciBlMSBvZiBvdXRl
ckl0ZXJhdG9yKSB7CisgICAgICAgICAgICBpbm5lcjogZm9yICh2YXIgZTIgb2YgaW5uZXJJdGVy
YXRvcikgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0oKSk7CisgICAgaWYgKCFpbm5lckl0ZXJhdG9yLnJldHVybmVkKQorICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoImJhZCB2YWx1ZTogIiArIGlubmVySXRlcmF0b3IucmV0dXJuZWQpOwor
ICAgIGlmICghb3V0ZXJJdGVyYXRvci5yZXR1cm5lZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJiYWQgdmFsdWU6ICIgKyBvdXRlckl0ZXJhdG9yLnJldHVybmVkKTsKK30oKSk7CisKKyhmdW5j
dGlvbiB0ZXN0KCkgeworICAgIHZhciBvdXRlckl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IoKTsK
KyAgICB2YXIgaW5uZXJJdGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgKGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgb3V0ZXI6IGZvciAodmFyIGUxIG9mIG91dGVySXRlcmF0b3IpIHsKKyAg
ICAgICAgICAgIGlubmVyOiBmb3IgKHZhciBlMiBvZiBpbm5lckl0ZXJhdG9yKSB7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9KCkpOworICAgIGlm
IChpbm5lckl0ZXJhdG9yLnJldHVybmVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2
YWx1ZTogIiArIGlubmVySXRlcmF0b3IucmV0dXJuZWQpOworICAgIGlmICghb3V0ZXJJdGVyYXRv
ci5yZXR1cm5lZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgdmFsdWU6ICIgKyBvdXRl
ckl0ZXJhdG9yLnJldHVybmVkKTsKK30oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL3JhaXNlLWVycm9yLWluLWl0ZXJhdG9yLWNsb3NlLmpzIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yYWlzZS1lcnJvci1pbi1pdGVyYXRvci1j
bG9zZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44OGY2ZTg2MDRlMWM1ODdiZjIwN2YyZjVlOGI1YTllMTEyZTEy
YTgxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9yYWlzZS1lcnJvci1pbi1pdGVyYXRvci1jbG9zZS5qcwpAQCAtMCwwICsxLDExOCBAQAorCitm
dW5jdGlvbiBjcmVhdGVJdGVyYXRvcihjYWxsYmFjaykgeworICAgIHZhciBhcnJheSA9IFswLDEs
MiwzLDQsNV07CisgICAgdmFyIGl0ZXJhdG9yID0gYXJyYXlbU3ltYm9sLml0ZXJhdG9yXSgpOwor
ICAgIGl0ZXJhdG9yLnJldHVybiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaXRlcmF0b3IucmV0
dXJuZWQgPSB0cnVlOworICAgICAgICBpZiAoY2FsbGJhY2spCisgICAgICAgICAgICByZXR1cm4g
Y2FsbGJhY2sodGhpcyk7CisgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRl
ZmluZWQgfTsKKyAgICB9OworICAgIGl0ZXJhdG9yLnJldHVybmVkID0gZmFsc2U7CisgICAgcmV0
dXJuIGl0ZXJhdG9yOworfQorCisoZnVuY3Rpb24gdGVzdCgpIHsKKyAgICB2YXIgb3V0ZXJJdGVy
YXRvciA9IGNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgdmFyIGlubmVySXRlcmF0b3IgPSBjcmVhdGVJ
dGVyYXRvcihmdW5jdGlvbiAoKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW5uZXIgcmV0
dXJuIGNhbGxlZC4iKTsKKyAgICB9KTsKKyAgICB2YXIgZXJyb3IgPSBudWxsOworICAgIHRyeSB7
CisgICAgICAgIG91dGVyOiBmb3IgKHZhciBlMSBvZiBvdXRlckl0ZXJhdG9yKSB7CisgICAgICAg
ICAgICBpbm5lcjogZm9yICh2YXIgZTIgb2YgaW5uZXJJdGVyYXRvcikgeworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBjYXRjaCAoZSkgewor
ICAgICAgICBlcnJvciA9IGU7CisgICAgfQorICAgIGlmICghZXJyb3IpCisgICAgICAgIHRocm93
IG5ldyBFcnJvcigibm8gZXJyb3IiKTsKKyAgICBpZiAoU3RyaW5nKGVycm9yKSAhPT0gIkVycm9y
OiBJbm5lciByZXR1cm4gY2FsbGVkLiIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIGVy
cm9yOiAiICsgU3RyaW5nKGVycm9yKSk7CisgICAgaWYgKCFpbm5lckl0ZXJhdG9yLnJldHVybmVk
KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2YWx1ZTogIiArIGlubmVySXRlcmF0b3Iu
cmV0dXJuZWQpOworICAgIGlmICghb3V0ZXJJdGVyYXRvci5yZXR1cm5lZCkKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJiYWQgdmFsdWU6ICIgKyBvdXRlckl0ZXJhdG9yLnJldHVybmVkKTsKK30o
KSk7CisKKyhmdW5jdGlvbiB0ZXN0KCkgeworICAgIHZhciBvdXRlckl0ZXJhdG9yID0gY3JlYXRl
SXRlcmF0b3IoZnVuY3Rpb24gKCkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk91dGVyIHJl
dHVybiBjYWxsZWQuIik7CisgICAgfSk7CisgICAgdmFyIGlubmVySXRlcmF0b3IgPSBjcmVhdGVJ
dGVyYXRvcihmdW5jdGlvbiAoKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW5uZXIgcmV0
dXJuIGNhbGxlZC4iKTsKKyAgICB9KTsKKyAgICB2YXIgZXJyb3IgPSBudWxsOworICAgIHRyeSB7
CisgICAgICAgIG91dGVyOiBmb3IgKHZhciBlMSBvZiBvdXRlckl0ZXJhdG9yKSB7CisgICAgICAg
ICAgICBpbm5lcjogZm9yICh2YXIgZTIgb2YgaW5uZXJJdGVyYXRvcikgeworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBjYXRjaCAoZSkgewor
ICAgICAgICBlcnJvciA9IGU7CisgICAgfQorICAgIGlmICghZXJyb3IpCisgICAgICAgIHRocm93
IG5ldyBFcnJvcigibm8gZXJyb3IiKTsKKyAgICBpZiAoU3RyaW5nKGVycm9yKSAhPT0gIkVycm9y
OiBJbm5lciByZXR1cm4gY2FsbGVkLiIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIGVy
cm9yOiAiICsgU3RyaW5nKGVycm9yKSk7CisgICAgaWYgKCFpbm5lckl0ZXJhdG9yLnJldHVybmVk
KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2YWx1ZTogIiArIGlubmVySXRlcmF0b3Iu
cmV0dXJuZWQpOworICAgIGlmICghb3V0ZXJJdGVyYXRvci5yZXR1cm5lZCkKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJiYWQgdmFsdWU6ICIgKyBvdXRlckl0ZXJhdG9yLnJldHVybmVkKTsKK30o
KSk7CisKKyhmdW5jdGlvbiB0ZXN0KCkgeworICAgIHZhciBvdXRlckl0ZXJhdG9yID0gY3JlYXRl
SXRlcmF0b3IoZnVuY3Rpb24gKCkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk91dGVyIHJl
dHVybiBjYWxsZWQuIik7CisgICAgfSk7CisgICAgdmFyIGlubmVySXRlcmF0b3IgPSBjcmVhdGVJ
dGVyYXRvcigpOworICAgIHZhciBlcnJvciA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgb3V0
ZXI6IGZvciAodmFyIGUxIG9mIG91dGVySXRlcmF0b3IpIHsKKyAgICAgICAgICAgIGlubmVyOiBm
b3IgKHZhciBlMiBvZiBpbm5lckl0ZXJhdG9yKSB7CisgICAgICAgICAgICAgICAgYnJlYWsgb3V0
ZXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
IGVycm9yID0gZTsKKyAgICB9CisgICAgaWYgKCFlcnJvcikKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJubyBlcnJvciIpOworICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSAiRXJyb3I6IE91dGVy
IHJldHVybiBjYWxsZWQuIikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgZXJyb3I6ICIg
KyBTdHJpbmcoZXJyb3IpKTsKKyAgICBpZiAoIWlubmVySXRlcmF0b3IucmV0dXJuZWQpCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHZhbHVlOiAiICsgaW5uZXJJdGVyYXRvci5yZXR1cm5l
ZCk7CisgICAgaWYgKCFvdXRlckl0ZXJhdG9yLnJldHVybmVkKQorICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoImJhZCB2YWx1ZTogIiArIG91dGVySXRlcmF0b3IucmV0dXJuZWQpOworfSgpKTsKKwor
KGZ1bmN0aW9uIHRlc3QoKSB7CisgICAgdmFyIG91dGVySXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRv
cihmdW5jdGlvbiAoKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiT3V0ZXIgcmV0dXJuIGNh
bGxlZC4iKTsKKyAgICB9KTsKKyAgICB2YXIgaW5uZXJJdGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9y
KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbm5lciByZXR1cm4gY2Fs
bGVkLiIpOworICAgIH0pOworICAgIHZhciBlcnJvciA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAg
ICAgb3V0ZXI6IGZvciAodmFyIGUxIG9mIG91dGVySXRlcmF0b3IpIHsKKyAgICAgICAgICAgIGlu
bmVyOiBmb3IgKHZhciBlMiBvZiBpbm5lckl0ZXJhdG9yKSB7CisgICAgICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJMb29wIHJhaXNlcyBlcnJvci4iKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3IgPSBlOworICAgIH0KKyAgICBp
ZiAoIWVycm9yKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm5vIGVycm9yIik7CisgICAgaWYg
KFN0cmluZyhlcnJvcikgIT09ICJFcnJvcjogTG9vcCByYWlzZXMgZXJyb3IuIikKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJiYWQgZXJyb3I6ICIgKyBTdHJpbmcoZXJyb3IpKTsKKyAgICBpZiAo
IWlubmVySXRlcmF0b3IucmV0dXJuZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHZh
bHVlOiAiICsgaW5uZXJJdGVyYXRvci5yZXR1cm5lZCk7CisgICAgaWYgKCFvdXRlckl0ZXJhdG9y
LnJldHVybmVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2YWx1ZTogIiArIG91dGVy
SXRlcmF0b3IucmV0dXJuZWQpOworfSgpKTsKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249743</attachid>
            <date>2015-03-30 10:39:51 -0700</date>
            <delta_ts>2015-03-31 16:55:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143140-20150331023908.patch</filename>
            <type>text/plain</type>
            <size>26866</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyMTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
MGM3MzYyNWE0MzgyMTE5M2VjMGJkODUxZGQzMTFiZjZkYzhmMThkLi5lMzJhMGI2NDViZWQzN2Q3
NjMxZTQ2NTM0ZWE1ZmNmMGYxZWIxMjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MyBAQAorMjAxNS0wMy0zMCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBJdGVyYXRvckNsb3NlIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBqdW1w
aW5nIG92ZXIgdGhlIHRhcmdldCBmb3Itb2YgbG9vcAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzMTQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBmaXhlcyBsYWJlbGVkIGJyZWFrL2Nv
bnRpbnVlIGJlaGF2aW9ycyB3aXRoIGZvci1vZiBhbmQgaXRlcmF0b3JzLgorCisgICAgICAgIDEu
IFN1cHBvcnQgSXRlcmF0b3JDbG9zZSBiZXlvbmQgbXVsdGlwbGUgbG9vcCBjb250ZXh0cworICAg
ICAgICBQcmV2aW91c2x5LCBJdGVyYXRvckNsb3NlIGlzIG9ubHkgZXhlY3V0ZWQgaW4gZm9yLW9m
J3MgYnJlYWtUYXJnZXQoKS4KKyAgICAgICAgSG93ZXZlciwgdGhpcyBtaXNzZXMgSXRlcmF0b3JD
bG9zZSBleGVjdXRpb24gd2hlbiBzdGF0ZW1lbnQgcm9sbC11cHMgbXVsdGlwbGUgY29udHJvbCBm
bG93IGNvbnRleHRzLgorICAgICAgICBGb3IgZXhhbXBsZSwKKyAgICAgICAgb3V0ZXI6IGZvciAo
dmFyIGUxIG9mIG91dGVyKSB7CisgICAgICAgICAgICBpbm5lcjogZm9yICh2YXIgZTIgb2YgaW5u
ZXIpIHsKKyAgICAgICAgICAgICAgICBicmVhayBvdXRlcjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBJbiB0aGlzIGNhc2UsIHJldHVybiBtZXRob2Qgb2YgaW5uZXIgc2hvdWxk
IGJlIGNhbGxlZC4KKyAgICAgICAgV2UgbGV2ZXJhZ2UgdGhlIGV4aXN0aW5nIHN5c3RlbSBmb3Ig
YGZpbmFsbHlgIHRvIGV4ZWN1dGUgaW5uZXIucmV0dXJuIG1ldGhvZCBjb3JyZWN0bHkuCisgICAg
ICAgIExldmVyYWdpbmcgYGZpbmFsbHlgIHN5c3RlbSBmaXhlcyBgYnJlYWtgLCBgY29udGludWVg
IGFuZCBgcmV0dXJuYCBjYXNlcy4KKyAgICAgICAgYHRocm93YCBjYXNlIGlzIGFscmVhZHkgc3Vw
cG9ydGVkIGJ5IGVtaXR0aW5nIHRyeS1jYXRjaCBoYW5kbGVycyBpbiBmb3Itb2YuCisKKyAgICAg
ICAgMi4gSW5jb3JyZWN0IExhYmVsU2NvcGUgY3JlYXRpb24gaXMgZG9uZSBpbiBGb3JPZk5vZGUK
KyAgICAgICAgRm9yT2ZOb2RlIGNyZWF0ZXMgZHVwbGljYXRlZCBMYWJlbFNjb3BlLgorICAgICAg
ICBJdCBjYXVzZXMgaW5maW5pdGUgbG9vcCB3aGVuIGV4ZWN1dGluZyB0aGUgZm9sbG93aW5nIHBy
b2dyYW0gdGhhdCBjb250YWlucworICAgICAgICBleHBsaWNpdGx5IGxhYmVsZWQgZm9yLW9mIGxv
b3AuCisgICAgICAgIEZvciBleGFtcGxlLAorICAgICAgICBpbm5lcjogZm9yICh2YXIgZWxtIG9m
IGFycmF5KSB7CisgICAgICAgICAgICBjb250aW51ZSBpbm5lcjsKKyAgICAgICAgfQorCisgICAg
ICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGaW5hbGx5Q29udGV4dCk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjpwdXNoSXRlcmF0b3JDbG9zZUNvbnRleHQpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wRmluYWxseUNvbnRleHQpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6cG9wSXRlcmF0b3JDbG9zZUNvbnRleHQpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTY29wZXMpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRJdGVyYXRvckNsb3NlKToKKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2Rl
Z2VuLmNwcDoKKyAgICAgICAgKEpTQzo6Rm9yT2ZOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAg
ICAqIHRlc3RzL3N0cmVzcy9pdGVyYXRvci1yZXR1cm4tYmV5b25kLW11bHRpcGxlLWl0ZXJhdGlv
bi1zY29wZXMuanM6IEFkZGVkLgorICAgICAgICAoY3JlYXRlSXRlcmF0b3IuaXRlcmF0b3IucmV0
dXJuKToKKyAgICAgICAgKGNyZWF0ZUl0ZXJhdG9yKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3Mv
cmFpc2UtZXJyb3ItaW4taXRlcmF0b3ItY2xvc2UuanM6IEFkZGVkLgorICAgICAgICAoY3JlYXRl
SXRlcmF0b3IuaXRlcmF0b3IucmV0dXJuKToKKyAgICAgICAgKGNyZWF0ZUl0ZXJhdG9yKToKKwog
MjAxNS0wMy0zMCAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgU3RhcnQgdGhlIGZlYXR1cmVzLmpzb24gZmlsZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXgg
OGY4ZDE2NTUxY2EyNWI1YzJhYTFmYzJiYzllMzQ4NDViYjUyMTU1NS4uZTQ0ODI3NWRhNzEwNzky
ODkxZmJjNzFjODE3OGI0OTZkYjA4MDU0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTIxMjIsNiAr
MjEyMiwzMyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRmluYWxseUNvbnRleHQoU3Rh
dGVtZW50Tm9kZSogZmluYWxseUJsb2NrKQogICAgIHNjb3BlLmlzRmluYWxseUJsb2NrID0gdHJ1
ZTsKICAgICBGaW5hbGx5Q29udGV4dCBjb250ZXh0ID0gewogICAgICAgICBmaW5hbGx5QmxvY2ss
CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIG51bGxwdHIsCisgICAgICAgIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihtX3Njb3BlQ29udGV4dFN0YWNrLnNpemUoKSksCisgICAgICAgIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihtX3N3aXRjaENvbnRleHRTdGFjay5zaXplKCkpLAorICAgICAgICBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obV9mb3JJbkNvbnRleHRTdGFjay5zaXplKCkpLAorICAgICAgICBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obV90cnlDb250ZXh0U3RhY2suc2l6ZSgpKSwKKyAgICAgICAg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbGFiZWxTY29wZXMuc2l6ZSgpKSwKKyAgICAgICAgbV9m
aW5hbGx5RGVwdGgsCisgICAgICAgIG1fbG9jYWxTY29wZURlcHRoCisgICAgfTsKKyAgICBzY29w
ZS5maW5hbGx5Q29udGV4dCA9IGNvbnRleHQ7CisgICAgbV9zY29wZUNvbnRleHRTdGFjay5hcHBl
bmQoc2NvcGUpOworICAgIG1fZmluYWxseURlcHRoKys7Cit9CisKK3ZvaWQgQnl0ZWNvZGVHZW5l
cmF0b3I6OnB1c2hJdGVyYXRvckNsb3NlQ29udGV4dChSZWdpc3RlcklEKiBpdGVyYXRvciwgVGhy
b3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUpCit7CisgICAgLy8gUmVjbGFpbSBmcmVlIGxhYmVs
IHNjb3Blcy4KKyAgICB3aGlsZSAobV9sYWJlbFNjb3Blcy5zaXplKCkgJiYgIW1fbGFiZWxTY29w
ZXMubGFzdCgpLnJlZkNvdW50KCkpCisgICAgICAgIG1fbGFiZWxTY29wZXMucmVtb3ZlTGFzdCgp
OworCisgICAgQ29udHJvbEZsb3dDb250ZXh0IHNjb3BlOworICAgIHNjb3BlLmlzRmluYWxseUJs
b2NrID0gdHJ1ZTsKKyAgICBGaW5hbGx5Q29udGV4dCBjb250ZXh0ID0geworICAgICAgICBudWxs
cHRyLAorICAgICAgICBpdGVyYXRvciwKKyAgICAgICAgbm9kZSwKICAgICAgICAgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG1fc2NvcGVDb250ZXh0U3RhY2suc2l6ZSgpKSwKICAgICAgICAgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG1fc3dpdGNoQ29udGV4dFN0YWNrLnNpemUoKSksCiAgICAgICAgIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihtX2ZvckluQ29udGV4dFN0YWNrLnNpemUoKSksCkBAIC0yMTM5
LDYgKzIxNjYsMjEgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wRmluYWxseUNvbnRleHQo
KQogewogICAgIEFTU0VSVChtX3Njb3BlQ29udGV4dFN0YWNrLnNpemUoKSk7CiAgICAgQVNTRVJU
KG1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpLmlzRmluYWxseUJsb2NrKTsKKyAgICBBU1NFUlQo
bV9zY29wZUNvbnRleHRTdGFjay5sYXN0KCkuZmluYWxseUNvbnRleHQuZmluYWxseUJsb2NrKTsK
KyAgICBBU1NFUlQoIW1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpLmZpbmFsbHlDb250ZXh0Lml0
ZXJhdG9yKTsKKyAgICBBU1NFUlQoIW1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpLmZpbmFsbHlD
b250ZXh0LmVudW1lcmF0aW9uTm9kZSk7CisgICAgQVNTRVJUKG1fZmluYWxseURlcHRoID4gMCk7
CisgICAgbV9zY29wZUNvbnRleHRTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgbV9maW5hbGx5RGVw
dGgtLTsKK30KKwordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wSXRlcmF0b3JDbG9zZUNvbnRl
eHQoKQoreworICAgIEFTU0VSVChtX3Njb3BlQ29udGV4dFN0YWNrLnNpemUoKSk7CisgICAgQVNT
RVJUKG1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpLmlzRmluYWxseUJsb2NrKTsKKyAgICBBU1NF
UlQoIW1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpLmZpbmFsbHlDb250ZXh0LmZpbmFsbHlCbG9j
ayk7CisgICAgQVNTRVJUKG1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpLmZpbmFsbHlDb250ZXh0
Lml0ZXJhdG9yKTsKKyAgICBBU1NFUlQobV9zY29wZUNvbnRleHRTdGFjay5sYXN0KCkuZmluYWxs
eUNvbnRleHQuZW51bWVyYXRpb25Ob2RlKTsKICAgICBBU1NFUlQobV9maW5hbGx5RGVwdGggPiAw
KTsKICAgICBtX3Njb3BlQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICBtX2ZpbmFsbHlE
ZXB0aC0tOwpAQCAtMjMxMCw5ICsyMzUyLDE0IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRDb21wbGV4UG9wU2NvcGVzKFJlZ2lzdGVySUQqIHNjb3BlLCBDb250cm9sRmxvd0NvbnRlCiAg
ICAgICAgICAgICBpbnQgc2F2ZWREeW5hbWljU2NvcGVEZXB0aCA9IG1fbG9jYWxTY29wZURlcHRo
OwogICAgICAgICAgICAgbV9sb2NhbFNjb3BlRGVwdGggPSBmaW5hbGx5Q29udGV4dC5keW5hbWlj
U2NvcGVEZXB0aDsKICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRW1pdCB0aGUgZmluYWxs
eSBibG9jay4KLSAgICAgICAgICAgIGVtaXROb2RlKGZpbmFsbHlDb250ZXh0LmZpbmFsbHlCbG9j
ayk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChmaW5hbGx5Q29udGV4dC5maW5hbGx5
QmxvY2spIHsKKyAgICAgICAgICAgICAgICAvLyBFbWl0IHRoZSBmaW5hbGx5IGJsb2NrLgorICAg
ICAgICAgICAgICAgIGVtaXROb2RlKGZpbmFsbHlDb250ZXh0LmZpbmFsbHlCbG9jayk7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKGZpbmFsbHlDb250ZXh0Lml0ZXJhdG9yKSB7CisgICAgICAgICAg
ICAgICAgLy8gRW1pdCB0aGUgSXRlcmF0b3JDbG9zZSBibG9jay4KKyAgICAgICAgICAgICAgICBl
bWl0SXRlcmF0b3JDbG9zZShmaW5hbGx5Q29udGV4dC5pdGVyYXRvciwgZmluYWxseUNvbnRleHQu
ZW51bWVyYXRpb25Ob2RlKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgUmVmUHRyPExh
YmVsPiBhZnRlckZpbmFsbHkgPSBlbWl0TGFiZWwobmV3TGFiZWwoKS5nZXQoKSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIHN0YXRlIG9mIHRoZSB3b3JsZC4KQEAg
LTI1ODUsNyArMjYzMiw2IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZWFkT25seUV4
Y2VwdGlvbklmTmVlZGVkKCkKICAgICAKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVt
ZXJhdGlvbihUaHJvd2FibGVFeHByZXNzaW9uRGF0YSogbm9kZSwgRXhwcmVzc2lvbk5vZGUqIHN1
YmplY3ROb2RlLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoQnl0ZWNvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKik+JiBjYWxsQmFjaykKIHsKLSAgICBMYWJlbFNjb3BlUHRyIHNjb3BlID0gbmV3
TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3Vi
amVjdCA9IG5ld1RlbXBvcmFyeSgpOwogICAgIGVtaXROb2RlKHN1YmplY3QuZ2V0KCksIHN1Ympl
Y3ROb2RlKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaXRlcmF0b3IgPSBlbWl0R2V0QnlJZChu
ZXdUZW1wb3JhcnkoKSwgc3ViamVjdC5nZXQoKSwgcHJvcGVydHlOYW1lcygpLml0ZXJhdG9yUHJp
dmF0ZU5hbWUpOwpAQCAtMjU5NCw3NyArMjY0MCw3OCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0RW51bWVyYXRpb24oVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUsIEV4cHJlc3Np
bwogICAgICAgICBlbWl0TW92ZShhcmdzLnRoaXNSZWdpc3RlcigpLCBzdWJqZWN0LmdldCgpKTsK
ICAgICAgICAgZW1pdENhbGwoaXRlcmF0b3IuZ2V0KCksIGl0ZXJhdG9yLmdldCgpLCBOb0V4cGVj
dGVkRnVuY3Rpb24sIGFyZ3MsIG5vZGUtPmRpdm90KCksIG5vZGUtPmRpdm90U3RhcnQoKSwgbm9k
ZS0+ZGl2b3RFbmQoKSk7CiAgICAgfQotICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IG5l
d1RlbXBvcmFyeSgpOwotICAgIGVtaXRMb2FkKHZhbHVlLmdldCgpLCBqc1VuZGVmaW5lZCgpKTsK
LSAgICAKLSAgICBlbWl0SnVtcChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgCi0gICAg
UmVmUHRyPExhYmVsPiBsb29wU3RhcnQgPSBuZXdMYWJlbCgpOwotICAgIFJlZlB0cjxMYWJlbD4g
aXRlcmF0b3JEb25lID0gbmV3TGFiZWwoKTsKLSAgICBlbWl0TGFiZWwobG9vcFN0YXJ0LmdldCgp
KTsKLSAgICBlbWl0TG9vcEhpbnQoKTsKLQotICAgIFJlZlB0cjxMYWJlbD4gdHJ5U3RhcnRMYWJl
bCA9IG5ld0xhYmVsKCk7Ci0gICAgZW1pdExhYmVsKHRyeVN0YXJ0TGFiZWwuZ2V0KCkpOwotICAg
IFRyeURhdGEqIHRyeURhdGEgPSBwdXNoVHJ5KHRyeVN0YXJ0TGFiZWwuZ2V0KCkpOwotICAgIGNh
bGxCYWNrKCp0aGlzLCB2YWx1ZS5nZXQoKSk7Ci0gICAgUmVmUHRyPExhYmVsPiBjYXRjaEhlcmUg
PSBlbWl0TGFiZWwobmV3TGFiZWwoKS5nZXQoKSk7Ci0KLSAgICBlbWl0TGFiZWwoc2NvcGUtPmNv
bnRpbnVlVGFyZ2V0KCkpOwotICAgIHsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG5leHQg
PSBlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgaXRlcmF0b3IuZ2V0KCksIHByb3BlcnR5TmFt
ZXMoKS5uZXh0KTsKLSAgICAgICAgQ2FsbEFyZ3VtZW50cyBuZXh0QXJndW1lbnRzKCp0aGlzLCBu
dWxscHRyKTsKLSAgICAgICAgZW1pdE1vdmUobmV4dEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwg
aXRlcmF0b3IuZ2V0KCkpOwotICAgICAgICBlbWl0Q2FsbCh2YWx1ZS5nZXQoKSwgbmV4dC5nZXQo
KSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBuZXh0QXJndW1lbnRzLCBub2RlLT5kaXZvdCgpLCBub2Rl
LT5kaXZvdFN0YXJ0KCksIG5vZGUtPmRpdm90RW5kKCkpOwotICAgIH0KLSAgICB7Ci0gICAgICAg
IFJlZlB0cjxMYWJlbD4gdHlwZUlzT2JqZWN0ID0gbmV3TGFiZWwoKTsKLSAgICAgICAgZW1pdEp1
bXBJZlRydWUoZW1pdElzT2JqZWN0KG5ld1RlbXBvcmFyeSgpLCB2YWx1ZS5nZXQoKSksIHR5cGVJ
c09iamVjdC5nZXQoKSk7Ci0gICAgICAgIGVtaXRUaHJvd1R5cGVFcnJvcihBU0NJSUxpdGVyYWwo
Ikl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9iamVjdC4iKSk7Ci0gICAgICAg
IGVtaXRMYWJlbCh0eXBlSXNPYmplY3QuZ2V0KCkpOwotICAgIH0KLSAgICBlbWl0SnVtcElmVHJ1
ZShlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgdmFsdWUuZ2V0KCksIHByb3BlcnR5TmFtZXMo
KS5kb25lKSwgaXRlcmF0b3JEb25lLmdldCgpKTsKLSAgICBlbWl0R2V0QnlJZCh2YWx1ZS5nZXQo
KSwgdmFsdWUuZ2V0KCksIHByb3BlcnR5TmFtZXMoKS52YWx1ZSk7Ci0gICAgZW1pdEp1bXAobG9v
cFN0YXJ0LmdldCgpKTsKIAotICAgIC8vIEl0ZXJhdG9yQ2xvc2Ugc2VxdWVuY2UgZm9yIHRocm93
LWVkIGNvbnRyb2wgZmxvdy4KKyAgICBSZWZQdHI8TGFiZWw+IGxvb3BEb25lID0gbmV3TGFiZWwo
KTsKKyAgICAvLyBSZWZQdHI8UmVnaXN0ZXI+IGl0ZXJhdG9yJ3MgbGlmZXRpbWUgbXVzdCBiZSBs
b25nZXIgdGhhbiBJdGVyYXRvckNsb3NlQ29udGV4dC4KKyAgICBwdXNoSXRlcmF0b3JDbG9zZUNv
bnRleHQoaXRlcmF0b3IuZ2V0KCksIG5vZGUpOwogICAgIHsKLSAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGV4Y2VwdGlvblJlZ2lzdGVyID0gcG9wVHJ5QW5kRW1pdENhdGNoKHRyeURhdGEsIG5l
d1RlbXBvcmFyeSgpLCBjYXRjaEhlcmUuZ2V0KCkpOwotICAgICAgICBSZWZQdHI8TGFiZWw+IHJl
dGhyb3cgPSBuZXdMYWJlbCgpOworICAgICAgICBMYWJlbFNjb3BlUHRyIHNjb3BlID0gbmV3TGFi
ZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZh
bHVlID0gbmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIGVtaXRMb2FkKHZhbHVlLmdldCgpLCBqc1Vu
ZGVmaW5lZCgpKTsKIAotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuTWV0aG9kID0g
ZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIGl0ZXJhdG9yLmdldCgpLCBwcm9wZXJ0eU5hbWVz
KCkucmV0dXJuS2V5d29yZCk7Ci0gICAgICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc1VuZGVmaW5l
ZChuZXdUZW1wb3JhcnkoKSwgcmV0dXJuTWV0aG9kLmdldCgpKSwgcmV0aHJvdy5nZXQoKSk7Cisg
ICAgICAgIGVtaXRKdW1wKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKIAotICAgICAgICBSZWZQ
dHI8TGFiZWw+IHJldHVybkNhbGxUcnlTdGFydCA9IG5ld0xhYmVsKCk7Ci0gICAgICAgIGVtaXRM
YWJlbChyZXR1cm5DYWxsVHJ5U3RhcnQuZ2V0KCkpOwotICAgICAgICBUcnlEYXRhKiByZXR1cm5D
YWxsVHJ5RGF0YSA9IHB1c2hUcnkocmV0dXJuQ2FsbFRyeVN0YXJ0LmdldCgpKTsKKyAgICAgICAg
UmVmUHRyPExhYmVsPiBsb29wU3RhcnQgPSBuZXdMYWJlbCgpOworICAgICAgICBlbWl0TGFiZWwo
bG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZW1pdExvb3BIaW50KCk7CiAKLSAgICAgICAgQ2Fs
bEFyZ3VtZW50cyByZXR1cm5Bcmd1bWVudHMoKnRoaXMsIG51bGxwdHIpOwotICAgICAgICBlbWl0
TW92ZShyZXR1cm5Bcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGl0ZXJhdG9yLmdldCgpKTsKLSAg
ICAgICAgZW1pdENhbGwodmFsdWUuZ2V0KCksIHJldHVybk1ldGhvZC5nZXQoKSwgTm9FeHBlY3Rl
ZEZ1bmN0aW9uLCByZXR1cm5Bcmd1bWVudHMsIG5vZGUtPmRpdm90KCksIG5vZGUtPmRpdm90U3Rh
cnQoKSwgbm9kZS0+ZGl2b3RFbmQoKSk7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gdHJ5U3RhcnRM
YWJlbCA9IG5ld0xhYmVsKCk7CisgICAgICAgIGVtaXRMYWJlbCh0cnlTdGFydExhYmVsLmdldCgp
KTsKKyAgICAgICAgVHJ5RGF0YSogdHJ5RGF0YSA9IHB1c2hUcnkodHJ5U3RhcnRMYWJlbC5nZXQo
KSk7CisgICAgICAgIGNhbGxCYWNrKCp0aGlzLCB2YWx1ZS5nZXQoKSk7CisgICAgICAgIGVtaXRK
dW1wKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKIAotICAgICAgICBSZWZQdHI8TGFiZWw+IHJl
dHVybkNhbGxDYXRjaEhlcmUgPSBlbWl0TGFiZWwobmV3TGFiZWwoKS5nZXQoKSk7Ci0gICAgICAg
IGVtaXRKdW1wKHJldGhyb3cuZ2V0KCkpOworICAgICAgICAvLyBJdGVyYXRvckNsb3NlIHNlcXVl
bmNlIGZvciB0aHJvdy1lZCBjb250cm9sIGZsb3cuCisgICAgICAgIHsKKyAgICAgICAgICAgIFJl
ZlB0cjxMYWJlbD4gY2F0Y2hIZXJlID0gZW1pdExhYmVsKG5ld0xhYmVsKCkuZ2V0KCkpOworICAg
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGV4Y2VwdGlvblJlZ2lzdGVyID0gcG9wVHJ5QW5k
RW1pdENhdGNoKHRyeURhdGEsIG5ld1RlbXBvcmFyeSgpLCBjYXRjaEhlcmUuZ2V0KCkpOworICAg
ICAgICAgICAgUmVmUHRyPExhYmVsPiBjYXRjaERvbmUgPSBuZXdMYWJlbCgpOwogCi0gICAgICAg
IHBvcFRyeUFuZEVtaXRDYXRjaChyZXR1cm5DYWxsVHJ5RGF0YSwgbmV3VGVtcG9yYXJ5KCksIHJl
dHVybkNhbGxDYXRjaEhlcmUuZ2V0KCkpOwotICAgICAgICBlbWl0TGFiZWwocmV0aHJvdy5nZXQo
KSk7Ci0gICAgICAgIGVtaXRUaHJvdyhleGNlcHRpb25SZWdpc3Rlci5nZXQoKSk7Ci0gICAgfQor
ICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVybk1ldGhvZCA9IGVtaXRHZXRCeUlk
KG5ld1RlbXBvcmFyeSgpLCBpdGVyYXRvci5nZXQoKSwgcHJvcGVydHlOYW1lcygpLnJldHVybktl
eXdvcmQpOworICAgICAgICAgICAgZW1pdEp1bXBJZlRydWUoZW1pdElzVW5kZWZpbmVkKG5ld1Rl
bXBvcmFyeSgpLCByZXR1cm5NZXRob2QuZ2V0KCkpLCBjYXRjaERvbmUuZ2V0KCkpOwogCi0gICAg
Ly8gSXRlcmF0b3JDbG9zZSBzZXF1ZW5jZSBmb3IgYnJlYWstZWQgY29udHJvbCBmbG93LgotICAg
IGVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7Ci0gICAgewotICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcmV0dXJuTWV0aG9kID0gZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIGl0
ZXJhdG9yLmdldCgpLCBwcm9wZXJ0eU5hbWVzKCkucmV0dXJuS2V5d29yZCk7Ci0gICAgICAgIGVt
aXRKdW1wSWZUcnVlKGVtaXRJc1VuZGVmaW5lZChuZXdUZW1wb3JhcnkoKSwgcmV0dXJuTWV0aG9k
LmdldCgpKSwgaXRlcmF0b3JEb25lLmdldCgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxMYWJlbD4g
cmV0dXJuQ2FsbFRyeVN0YXJ0ID0gbmV3TGFiZWwoKTsKKyAgICAgICAgICAgIGVtaXRMYWJlbChy
ZXR1cm5DYWxsVHJ5U3RhcnQuZ2V0KCkpOworICAgICAgICAgICAgVHJ5RGF0YSogcmV0dXJuQ2Fs
bFRyeURhdGEgPSBwdXNoVHJ5KHJldHVybkNhbGxUcnlTdGFydC5nZXQoKSk7CiAKLSAgICAgICAg
Q2FsbEFyZ3VtZW50cyByZXR1cm5Bcmd1bWVudHMoKnRoaXMsIG51bGxwdHIpOwotICAgICAgICBl
bWl0TW92ZShyZXR1cm5Bcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGl0ZXJhdG9yLmdldCgpKTsK
LSAgICAgICAgZW1pdENhbGwodmFsdWUuZ2V0KCksIHJldHVybk1ldGhvZC5nZXQoKSwgTm9FeHBl
Y3RlZEZ1bmN0aW9uLCByZXR1cm5Bcmd1bWVudHMsIG5vZGUtPmRpdm90KCksIG5vZGUtPmRpdm90
U3RhcnQoKSwgbm9kZS0+ZGl2b3RFbmQoKSk7Ci0gICAgICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJ
c09iamVjdChuZXdUZW1wb3JhcnkoKSwgdmFsdWUuZ2V0KCkpLCBpdGVyYXRvckRvbmUuZ2V0KCkp
OwotICAgICAgICBlbWl0VGhyb3dUeXBlRXJyb3IoQVNDSUlMaXRlcmFsKCJJdGVyYXRvciByZXN1
bHQgaW50ZXJmYWNlIGlzIG5vdCBhbiBvYmplY3QuIikpOworICAgICAgICAgICAgQ2FsbEFyZ3Vt
ZW50cyByZXR1cm5Bcmd1bWVudHMoKnRoaXMsIG51bGxwdHIpOworICAgICAgICAgICAgZW1pdE1v
dmUocmV0dXJuQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBpdGVyYXRvci5nZXQoKSk7CisgICAg
ICAgICAgICBlbWl0Q2FsbCh2YWx1ZS5nZXQoKSwgcmV0dXJuTWV0aG9kLmdldCgpLCBOb0V4cGVj
dGVkRnVuY3Rpb24sIHJldHVybkFyZ3VtZW50cywgbm9kZS0+ZGl2b3QoKSwgbm9kZS0+ZGl2b3RT
dGFydCgpLCBub2RlLT5kaXZvdEVuZCgpKTsKKworICAgICAgICAgICAgZW1pdExhYmVsKGNhdGNo
RG9uZS5nZXQoKSk7CisgICAgICAgICAgICBlbWl0VGhyb3coZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0
KCkpOworCisgICAgICAgICAgICAvLyBBYnNvcmIgZXhjZXB0aW9uLgorICAgICAgICAgICAgcG9w
VHJ5QW5kRW1pdENhdGNoKHJldHVybkNhbGxUcnlEYXRhLCBuZXdUZW1wb3JhcnkoKSwgY2F0Y2hE
b25lLmdldCgpKTsKKyAgICAgICAgICAgIGVtaXRUaHJvdyhleGNlcHRpb25SZWdpc3Rlci5nZXQo
KSk7CisgICAgICAgIH0KKworICAgICAgICBlbWl0TGFiZWwoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0
KCkpOworICAgICAgICB7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IG5leHQgPSBlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgaXRlcmF0b3IuZ2V0
KCksIHByb3BlcnR5TmFtZXMoKS5uZXh0KTsKKyAgICAgICAgICAgICAgICBDYWxsQXJndW1lbnRz
IG5leHRBcmd1bWVudHMoKnRoaXMsIG51bGxwdHIpOworICAgICAgICAgICAgICAgIGVtaXRNb3Zl
KG5leHRBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGl0ZXJhdG9yLmdldCgpKTsKKyAgICAgICAg
ICAgICAgICBlbWl0Q2FsbCh2YWx1ZS5nZXQoKSwgbmV4dC5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0
aW9uLCBuZXh0QXJndW1lbnRzLCBub2RlLT5kaXZvdCgpLCBub2RlLT5kaXZvdFN0YXJ0KCksIG5v
ZGUtPmRpdm90RW5kKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIFJlZlB0cjxMYWJlbD4gdHlwZUlzT2JqZWN0ID0gbmV3TGFiZWwoKTsKKyAgICAgICAg
ICAgICAgICBlbWl0SnVtcElmVHJ1ZShlbWl0SXNPYmplY3QobmV3VGVtcG9yYXJ5KCksIHZhbHVl
LmdldCgpKSwgdHlwZUlzT2JqZWN0LmdldCgpKTsKKyAgICAgICAgICAgICAgICBlbWl0VGhyb3dU
eXBlRXJyb3IoQVNDSUlMaXRlcmFsKCJJdGVyYXRvciByZXN1bHQgaW50ZXJmYWNlIGlzIG5vdCBh
biBvYmplY3QuIikpOworICAgICAgICAgICAgICAgIGVtaXRMYWJlbCh0eXBlSXNPYmplY3QuZ2V0
KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZW1pdEp1bXBJZlRydWUoZW1pdEdldEJ5
SWQobmV3VGVtcG9yYXJ5KCksIHZhbHVlLmdldCgpLCBwcm9wZXJ0eU5hbWVzKCkuZG9uZSksIGxv
b3BEb25lLmdldCgpKTsKKyAgICAgICAgICAgIGVtaXRHZXRCeUlkKHZhbHVlLmdldCgpLCB2YWx1
ZS5nZXQoKSwgcHJvcGVydHlOYW1lcygpLnZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRKdW1wKGxv
b3BTdGFydC5nZXQoKSk7CisgICAgICAgIH0KKworICAgICAgICBlbWl0TGFiZWwoc2NvcGUtPmJy
ZWFrVGFyZ2V0KCkpOwogICAgIH0KIAotICAgIGVtaXRMYWJlbChpdGVyYXRvckRvbmUuZ2V0KCkp
OworICAgIC8vIEl0ZXJhdG9yQ2xvc2Ugc2VxdWVuY2UgZm9yIGJyZWFrLWVkIGNvbnRyb2wgZmxv
dy4KKyAgICBwb3BJdGVyYXRvckNsb3NlQ29udGV4dCgpOworICAgIGVtaXRJdGVyYXRvckNsb3Nl
KGl0ZXJhdG9yLmdldCgpLCBub2RlKTsKKyAgICBlbWl0TGFiZWwobG9vcERvbmUuZ2V0KCkpOwog
fQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEVudW1lcmFibGVMZW5n
dGgoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlKQpAQCAtMjc1Niw2ICsyODAzLDIx
IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNVbmRlZmluZWQoUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpCiAgICAgcmV0dXJuIGRzdDsKIH0KIAordm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdEl0ZXJhdG9yQ2xvc2UoUmVnaXN0ZXJJRCogaXRlcmF0b3Is
IFRocm93YWJsZUV4cHJlc3Npb25EYXRhKiBub2RlKQoreworICAgIFJlZlB0cjxMYWJlbD4gZG9u
ZSA9IG5ld0xhYmVsKCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVybk1ldGhvZCA9IGVt
aXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBpdGVyYXRvciwgcHJvcGVydHlOYW1lcygpLnJldHVy
bktleXdvcmQpOworICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc1VuZGVmaW5lZChuZXdUZW1wb3Jh
cnkoKSwgcmV0dXJuTWV0aG9kLmdldCgpKSwgZG9uZS5nZXQoKSk7CisKKyAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gdmFsdWUgPSBuZXdUZW1wb3JhcnkoKTsKKyAgICBDYWxsQXJndW1lbnRzIHJldHVy
bkFyZ3VtZW50cygqdGhpcywgbnVsbHB0cik7CisgICAgZW1pdE1vdmUocmV0dXJuQXJndW1lbnRz
LnRoaXNSZWdpc3RlcigpLCBpdGVyYXRvcik7CisgICAgZW1pdENhbGwodmFsdWUuZ2V0KCksIHJl
dHVybk1ldGhvZC5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCByZXR1cm5Bcmd1bWVudHMsIG5v
ZGUtPmRpdm90KCksIG5vZGUtPmRpdm90U3RhcnQoKSwgbm9kZS0+ZGl2b3RFbmQoKSk7CisgICAg
ZW1pdEp1bXBJZlRydWUoZW1pdElzT2JqZWN0KG5ld1RlbXBvcmFyeSgpLCB2YWx1ZS5nZXQoKSks
IGRvbmUuZ2V0KCkpOworICAgIGVtaXRUaHJvd1R5cGVFcnJvcihBU0NJSUxpdGVyYWwoIkl0ZXJh
dG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9iamVjdC4iKSk7CisgICAgZW1pdExhYmVs
KGRvbmUuZ2V0KCkpOworfQorCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZv
ckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0ZXJJRCogaW5kZXhSZWdp
c3RlcikKIHsKICAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXggNGZmZWY2
YjQwOTdmMDI0NmRjMWJhZTg5ZWU4YWFiOGVjOTVjNjBmYS4uMmU1OTAzOWQzYTQ4NGEzNDcyODE0
NDBlZWY5YzFiODE5ZjcyNjVkYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtODIsNiArODIsOCBAQAogCiAg
ICAgc3RydWN0IEZpbmFsbHlDb250ZXh0IHsKICAgICAgICAgU3RhdGVtZW50Tm9kZSogZmluYWxs
eUJsb2NrOworICAgICAgICBSZWdpc3RlcklEKiBpdGVyYXRvcjsKKyAgICAgICAgVGhyb3dhYmxl
RXhwcmVzc2lvbkRhdGEqIGVudW1lcmF0aW9uTm9kZTsKICAgICAgICAgdW5zaWduZWQgc2NvcGVD
b250ZXh0U3RhY2tTaXplOwogICAgICAgICB1bnNpZ25lZCBzd2l0Y2hDb250ZXh0U3RhY2tTaXpl
OwogICAgICAgICB1bnNpZ25lZCBmb3JJbkNvbnRleHRTdGFja1NpemU7CkBAIC01MjYsNiArNTI4
LDggQEAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdElzT2JqZWN0KFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogc3JjKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdElzVW5kZWZpbmVkKFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKTsKIAorICAgICAgICB2b2lkIGVtaXRJdGVy
YXRvckNsb3NlKFJlZ2lzdGVySUQqIGl0ZXJhdG9yLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSog
bm9kZSk7CisKICAgICAgICAgdm9pZCBlbWl0UmVhZE9ubHlFeGNlcHRpb25JZk5lZWRlZCgpOwog
CiAgICAgICAgIC8vIFN0YXJ0IGEgdHJ5IGJsb2NrLiAnc3RhcnQnIG11c3QgaGF2ZSBiZWVuIGVt
aXR0ZWQuCkBAIC01NTYsNiArNTYwLDggQEAKIAogICAgICAgICB2b2lkIHB1c2hGaW5hbGx5Q29u
dGV4dChTdGF0ZW1lbnROb2RlKiBmaW5hbGx5QmxvY2spOwogICAgICAgICB2b2lkIHBvcEZpbmFs
bHlDb250ZXh0KCk7CisgICAgICAgIHZvaWQgcHVzaEl0ZXJhdG9yQ2xvc2VDb250ZXh0KFJlZ2lz
dGVySUQqIGl0ZXJhdG9yLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSogZW51bWVyYXRpb25Ob2Rl
KTsKKyAgICAgICAgdm9pZCBwb3BJdGVyYXRvckNsb3NlQ29udGV4dCgpOwogCiAgICAgICAgIHZv
aWQgcHVzaEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBp
bmRleCk7CiAgICAgICAgIHZvaWQgcG9wSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9j
YWwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rl
c0NvZGVnZW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0Nv
ZGVnZW4uY3BwCmluZGV4IDYxNTljNzljOTkzMWVjZDQ1ODVmMWE3ZGVmYjFhNzYxMTU3M2U4YTMu
LmRiNWNhZTg2N2MzNzdjM2EwMDhhZDA1NzhkZTc4NzNkMjE1ZjY4OTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKQEAgLTIy
ODcsOSArMjI4Nyw3IEBAIHZvaWQgRm9yT2ZOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogICAgICAgICBlbWl0VGhyb3dSZWZl
cmVuY2VFcnJvcihnZW5lcmF0b3IsIEFTQ0lJTGl0ZXJhbCgiTGVmdCBzaWRlIG9mIGZvci1vZiBz
dGF0ZW1lbnQgaXMgbm90IGEgcmVmZXJlbmNlLiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICAKLSAgICBMYWJlbFNjb3BlUHRyIHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUo
TGFiZWxTY29wZTo6TG9vcCk7Ci0gICAgCisKICAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhX
aWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFy
dE9mZnNldCgpKTsKICAgICBhdXRvIGV4dHJhY3RvciA9IFt0aGlzLCBkc3RdKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIHZhbHVlKQogICAgIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvaXRlcmF0b3ItcmV0dXJuLWJleW9u
ZC1tdWx0aXBsZS1pdGVyYXRpb24tc2NvcGVzLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9pdGVyYXRvci1yZXR1cm4tYmV5b25kLW11bHRpcGxlLWl0ZXJhdGlvbi1zY29w
ZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZGY0YTRmZThhYWRkNDViMThiY2M3ZTk2OTY4OTYwMDExMDcwZDYw
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
aXRlcmF0b3ItcmV0dXJuLWJleW9uZC1tdWx0aXBsZS1pdGVyYXRpb24tc2NvcGVzLmpzCkBAIC0w
LDAgKzEsMTcyIEBACisKK2Z1bmN0aW9uIGNyZWF0ZUl0ZXJhdG9yKGNhbGxiYWNrKSB7CisgICAg
dmFyIGFycmF5ID0gWzAsMSwyLDMsNCw1XTsKKyAgICB2YXIgaXRlcmF0b3IgPSBhcnJheVtTeW1i
b2wuaXRlcmF0b3JdKCk7CisgICAgaXRlcmF0b3IucmV0dXJuID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICArK2l0ZXJhdG9yLnJldHVybmVkOworICAgICAgICBpZiAoY2FsbGJhY2spCisgICAgICAg
ICAgICByZXR1cm4gY2FsbGJhY2sodGhpcyk7CisgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUs
IHZhbHVlOiB1bmRlZmluZWQgfTsKKyAgICB9OworICAgIGl0ZXJhdG9yLnJldHVybmVkID0gMDsK
KyAgICByZXR1cm4gaXRlcmF0b3I7Cit9CisKKyhmdW5jdGlvbiB0ZXN0KCkgeworICAgIHZhciBv
dXRlckl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IoKTsKKyAgICB2YXIgaW5uZXJJdGVyYXRvciA9
IGNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgb3V0ZXI6IGZvciAodmFyIGUxIG9mIG91dGVySXRlcmF0
b3IpIHsKKyAgICAgICAgaW5uZXI6IGZvciAodmFyIGUyIG9mIGlubmVySXRlcmF0b3IpIHsKKyAg
ICAgICAgICAgIGJyZWFrIG91dGVyOworICAgICAgICB9CisgICAgfQorICAgIGlmIChpbm5lckl0
ZXJhdG9yLnJldHVybmVkICE9PSAxKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2YWx1
ZTogIiArIGlubmVySXRlcmF0b3IucmV0dXJuZWQpOworICAgIGlmIChvdXRlckl0ZXJhdG9yLnJl
dHVybmVkICE9PSAxKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2YWx1ZTogIiArIG91
dGVySXRlcmF0b3IucmV0dXJuZWQpOworfSgpKTsKKworKGZ1bmN0aW9uIHRlc3QoKSB7CisgICAg
dmFyIG91dGVySXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvcigpOworICAgIHZhciBpbm5lckl0ZXJh
dG9yID0gY3JlYXRlSXRlcmF0b3IoKTsKKyAgICBvdXRlcjogZm9yICh2YXIgZTEgb2Ygb3V0ZXJJ
dGVyYXRvcikgeworICAgICAgICBpbm5lcjogZm9yICh2YXIgZTIgb2YgaW5uZXJJdGVyYXRvcikg
eworICAgICAgICAgICAgYnJlYWsgaW5uZXI7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGlu
bmVySXRlcmF0b3IucmV0dXJuZWQgIT09IDYpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFk
IHZhbHVlOiAiICsgaW5uZXJJdGVyYXRvci5yZXR1cm5lZCk7CisgICAgaWYgKG91dGVySXRlcmF0
b3IucmV0dXJuZWQgIT09IDApCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHZhbHVlOiAi
ICsgb3V0ZXJJdGVyYXRvci5yZXR1cm5lZCk7Cit9KCkpOworCisoZnVuY3Rpb24gdGVzdCgpIHsK
KyAgICB2YXIgb3V0ZXJJdGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgdmFyIGlubmVy
SXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvcigpOworICAgIG91dGVyOiBmb3IgKHZhciBlMSBvZiBv
dXRlckl0ZXJhdG9yKSB7CisgICAgICAgIGlubmVyOiBmb3IgKHZhciBlMiBvZiBpbm5lckl0ZXJh
dG9yKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoaW5u
ZXJJdGVyYXRvci5yZXR1cm5lZCAhPT0gNikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQg
dmFsdWU6ICIgKyBpbm5lckl0ZXJhdG9yLnJldHVybmVkKTsKKyAgICBpZiAob3V0ZXJJdGVyYXRv
ci5yZXR1cm5lZCAhPT0gMCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgdmFsdWU6ICIg
KyBvdXRlckl0ZXJhdG9yLnJldHVybmVkKTsKK30oKSk7CisKKyhmdW5jdGlvbiB0ZXN0KCkgewor
ICAgIHZhciBvdXRlckl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IoKTsKKyAgICB2YXIgaW5uZXJJ
dGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgb3V0ZXI6IGZvciAodmFyIGUxIG9mIG91
dGVySXRlcmF0b3IpIHsKKyAgICAgICAgaW5uZXI6IGZvciAodmFyIGUyIG9mIGlubmVySXRlcmF0
b3IpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGlmIChpbm5l
ckl0ZXJhdG9yLnJldHVybmVkICE9PSA2KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2
YWx1ZTogIiArIGlubmVySXRlcmF0b3IucmV0dXJuZWQpOworICAgIGlmIChvdXRlckl0ZXJhdG9y
LnJldHVybmVkICE9PSAwKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2YWx1ZTogIiAr
IG91dGVySXRlcmF0b3IucmV0dXJuZWQpOworfSgpKTsKKworKGZ1bmN0aW9uIHRlc3QoKSB7Cisg
ICAgdmFyIG91dGVySXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvcigpOworICAgIHZhciBpbm5lckl0
ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IoKTsKKyAgICBvdXRlcjogZm9yICh2YXIgZTEgb2Ygb3V0
ZXJJdGVyYXRvcikgeworICAgICAgICBpbm5lcjogZm9yICh2YXIgZTIgb2YgaW5uZXJJdGVyYXRv
cikgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGlu
bmVySXRlcmF0b3IucmV0dXJuZWQgIT09IDApCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFk
IHZhbHVlOiAiICsgaW5uZXJJdGVyYXRvci5yZXR1cm5lZCk7CisgICAgaWYgKG91dGVySXRlcmF0
b3IucmV0dXJuZWQgIT09IDApCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHZhbHVlOiAi
ICsgb3V0ZXJJdGVyYXRvci5yZXR1cm5lZCk7Cit9KCkpOworCisoZnVuY3Rpb24gdGVzdCgpIHsK
KyAgICB2YXIgb3V0ZXJJdGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgdmFyIGlubmVy
SXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvcigpOworICAgIG91dGVyOiBmb3IgKHZhciBlMSBvZiBv
dXRlckl0ZXJhdG9yKSB7CisgICAgICAgIGlubmVyOiBmb3IgKHZhciBlMiBvZiBpbm5lckl0ZXJh
dG9yKSB7CisgICAgICAgICAgICBjb250aW51ZSBpbm5lcjsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBpZiAoaW5uZXJJdGVyYXRvci5yZXR1cm5lZCAhPT0gMCkKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJiYWQgdmFsdWU6ICIgKyBpbm5lckl0ZXJhdG9yLnJldHVybmVkKTsKKyAgICBpZiAob3V0
ZXJJdGVyYXRvci5yZXR1cm5lZCAhPT0gMCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQg
dmFsdWU6ICIgKyBvdXRlckl0ZXJhdG9yLnJldHVybmVkKTsKK30oKSk7CisKKyhmdW5jdGlvbiB0
ZXN0KCkgeworICAgIHZhciBvdXRlckl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IoKTsKKyAgICB2
YXIgaW5uZXJJdGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgb3V0ZXI6IGZvciAodmFy
IGUxIG9mIG91dGVySXRlcmF0b3IpIHsKKyAgICAgICAgaW5uZXI6IGZvciAodmFyIGUyIG9mIGlu
bmVySXRlcmF0b3IpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyOworICAgICAgICB9Cisg
ICAgfQorICAgIGlmIChpbm5lckl0ZXJhdG9yLnJldHVybmVkICE9PSA2KQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoImJhZCB2YWx1ZTogIiArIGlubmVySXRlcmF0b3IucmV0dXJuZWQpOworICAg
IGlmIChvdXRlckl0ZXJhdG9yLnJldHVybmVkICE9PSAwKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoImJhZCB2YWx1ZTogIiArIG91dGVySXRlcmF0b3IucmV0dXJuZWQpOworfSgpKTsKKworKGZ1
bmN0aW9uIHRlc3QoKSB7CisgICAgdmFyIG91dGVySXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvcigp
OworICAgIHZhciBpbm5lckl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IoKTsKKyAgICAoZnVuY3Rp
b24gKCkgeworICAgICAgICBvdXRlcjogZm9yICh2YXIgZTEgb2Ygb3V0ZXJJdGVyYXRvcikgewor
ICAgICAgICAgICAgaW5uZXI6IGZvciAodmFyIGUyIG9mIGlubmVySXRlcmF0b3IpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KCkpOwor
ICAgIGlmIChpbm5lckl0ZXJhdG9yLnJldHVybmVkICE9PSAxKQorICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoImJhZCB2YWx1ZTogIiArIGlubmVySXRlcmF0b3IucmV0dXJuZWQpOworICAgIGlmIChv
dXRlckl0ZXJhdG9yLnJldHVybmVkICE9PSAxKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJh
ZCB2YWx1ZTogIiArIG91dGVySXRlcmF0b3IucmV0dXJuZWQpOworfSgpKTsKKworKGZ1bmN0aW9u
IHRlc3QoKSB7CisgICAgdmFyIG91dGVySXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvcigpOworICAg
IHZhciBpbm5lckl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IoKTsKKyAgICAoZnVuY3Rpb24gKCkg
eworICAgICAgICBvdXRlcjogZm9yICh2YXIgZTEgb2Ygb3V0ZXJJdGVyYXRvcikgeworICAgICAg
ICAgICAgaW5uZXI6IGZvciAodmFyIGUyIG9mIGlubmVySXRlcmF0b3IpIHsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0oKSk7CisgICAgaWYgKGlu
bmVySXRlcmF0b3IucmV0dXJuZWQgIT09IDApCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFk
IHZhbHVlOiAiICsgaW5uZXJJdGVyYXRvci5yZXR1cm5lZCk7CisgICAgaWYgKG91dGVySXRlcmF0
b3IucmV0dXJuZWQgIT09IDEpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHZhbHVlOiAi
ICsgb3V0ZXJJdGVyYXRvci5yZXR1cm5lZCk7Cit9KCkpOworCisKKyhmdW5jdGlvbiB0ZXN0KCkg
eworICAgIGZ1bmN0aW9uIHJhaXNlRXJyb3IoKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigi
Q29jb2EiKTsKKyAgICB9CisgICAgdmFyIG91dGVySXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvcigp
OworICAgIHZhciBpbm5lckl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IoKTsKKyAgICAoZnVuY3Rp
b24gKCkgeworICAgICAgICB2YXIgZXJyb3IgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAg
ICAgICAgb3V0ZXI6IGZvciAodmFyIGUxIG9mIG91dGVySXRlcmF0b3IpIHsKKyAgICAgICAgICAg
ICAgICBpbm5lcjogZm9yICh2YXIgZTIgb2YgaW5uZXJJdGVyYXRvcikgeworICAgICAgICAgICAg
ICAgICAgICByYWlzZUVycm9yKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBlcnJvciA9IGU7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGlubmVySXRlcmF0b3IucmV0dXJuZWQgIT09IDEpCisgICAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoImJhZCB2YWx1ZTogIiArIGlubmVySXRlcmF0b3IucmV0dXJuZWQpOwor
ICAgICAgICBpZiAob3V0ZXJJdGVyYXRvci5yZXR1cm5lZCAhPT0gMSkKKyAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiYmFkIHZhbHVlOiAiICsgb3V0ZXJJdGVyYXRvci5yZXR1cm5lZCk7Cisg
ICAgICAgIGlmICghZXJyb3IpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm5vdCB0aHJv
d24iKTsKKyAgICAgICAgaWYgKFN0cmluZyhlcnJvcikgIT09ICJFcnJvcjogQ29jb2EiKQorICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgZXJyb3I6ICIgKyBTdHJpbmcoZXJyb3IpKTsK
KyAgICB9KCkpOworfSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvcmFpc2UtZXJyb3ItaW4taXRlcmF0b3ItY2xvc2UuanMgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL3JhaXNlLWVycm9yLWluLWl0ZXJhdG9yLWNsb3NlLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjg4ZjZlODYwNGUxYzU4N2JmMjA3ZjJmNWU4YjVhOWUxMTJlMTJhODEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3JhaXNlLWVy
cm9yLWluLWl0ZXJhdG9yLWNsb3NlLmpzCkBAIC0wLDAgKzEsMTE4IEBACisKK2Z1bmN0aW9uIGNy
ZWF0ZUl0ZXJhdG9yKGNhbGxiYWNrKSB7CisgICAgdmFyIGFycmF5ID0gWzAsMSwyLDMsNCw1XTsK
KyAgICB2YXIgaXRlcmF0b3IgPSBhcnJheVtTeW1ib2wuaXRlcmF0b3JdKCk7CisgICAgaXRlcmF0
b3IucmV0dXJuID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpdGVyYXRvci5yZXR1cm5lZCA9IHRy
dWU7CisgICAgICAgIGlmIChjYWxsYmFjaykKKyAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayh0
aGlzKTsKKyAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9Owor
ICAgIH07CisgICAgaXRlcmF0b3IucmV0dXJuZWQgPSBmYWxzZTsKKyAgICByZXR1cm4gaXRlcmF0
b3I7Cit9CisKKyhmdW5jdGlvbiB0ZXN0KCkgeworICAgIHZhciBvdXRlckl0ZXJhdG9yID0gY3Jl
YXRlSXRlcmF0b3IoKTsKKyAgICB2YXIgaW5uZXJJdGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yKGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbm5lciByZXR1cm4gY2FsbGVk
LiIpOworICAgIH0pOworICAgIHZhciBlcnJvciA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAg
b3V0ZXI6IGZvciAodmFyIGUxIG9mIG91dGVySXRlcmF0b3IpIHsKKyAgICAgICAgICAgIGlubmVy
OiBmb3IgKHZhciBlMiBvZiBpbm5lckl0ZXJhdG9yKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGVy
cm9yID0gZTsKKyAgICB9CisgICAgaWYgKCFlcnJvcikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJubyBlcnJvciIpOworICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSAiRXJyb3I6IElubmVyIHJl
dHVybiBjYWxsZWQuIikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgZXJyb3I6ICIgKyBT
dHJpbmcoZXJyb3IpKTsKKyAgICBpZiAoIWlubmVySXRlcmF0b3IucmV0dXJuZWQpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcigiYmFkIHZhbHVlOiAiICsgaW5uZXJJdGVyYXRvci5yZXR1cm5lZCk7
CisgICAgaWYgKCFvdXRlckl0ZXJhdG9yLnJldHVybmVkKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoImJhZCB2YWx1ZTogIiArIG91dGVySXRlcmF0b3IucmV0dXJuZWQpOworfSgpKTsKKworKGZ1
bmN0aW9uIHRlc3QoKSB7CisgICAgdmFyIG91dGVySXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvcihm
dW5jdGlvbiAoKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiT3V0ZXIgcmV0dXJuIGNhbGxl
ZC4iKTsKKyAgICB9KTsKKyAgICB2YXIgaW5uZXJJdGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yKGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbm5lciByZXR1cm4gY2FsbGVk
LiIpOworICAgIH0pOworICAgIHZhciBlcnJvciA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAg
b3V0ZXI6IGZvciAodmFyIGUxIG9mIG91dGVySXRlcmF0b3IpIHsKKyAgICAgICAgICAgIGlubmVy
OiBmb3IgKHZhciBlMiBvZiBpbm5lckl0ZXJhdG9yKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGVy
cm9yID0gZTsKKyAgICB9CisgICAgaWYgKCFlcnJvcikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJubyBlcnJvciIpOworICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSAiRXJyb3I6IElubmVyIHJl
dHVybiBjYWxsZWQuIikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgZXJyb3I6ICIgKyBT
dHJpbmcoZXJyb3IpKTsKKyAgICBpZiAoIWlubmVySXRlcmF0b3IucmV0dXJuZWQpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcigiYmFkIHZhbHVlOiAiICsgaW5uZXJJdGVyYXRvci5yZXR1cm5lZCk7
CisgICAgaWYgKCFvdXRlckl0ZXJhdG9yLnJldHVybmVkKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoImJhZCB2YWx1ZTogIiArIG91dGVySXRlcmF0b3IucmV0dXJuZWQpOworfSgpKTsKKworKGZ1
bmN0aW9uIHRlc3QoKSB7CisgICAgdmFyIG91dGVySXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvcihm
dW5jdGlvbiAoKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiT3V0ZXIgcmV0dXJuIGNhbGxl
ZC4iKTsKKyAgICB9KTsKKyAgICB2YXIgaW5uZXJJdGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yKCk7
CisgICAgdmFyIGVycm9yID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBvdXRlcjogZm9yICh2
YXIgZTEgb2Ygb3V0ZXJJdGVyYXRvcikgeworICAgICAgICAgICAgaW5uZXI6IGZvciAodmFyIGUy
IG9mIGlubmVySXRlcmF0b3IpIHsKKyAgICAgICAgICAgICAgICBicmVhayBvdXRlcjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3IgPSBl
OworICAgIH0KKyAgICBpZiAoIWVycm9yKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm5vIGVy
cm9yIik7CisgICAgaWYgKFN0cmluZyhlcnJvcikgIT09ICJFcnJvcjogT3V0ZXIgcmV0dXJuIGNh
bGxlZC4iKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCBlcnJvcjogIiArIFN0cmluZyhl
cnJvcikpOworICAgIGlmICghaW5uZXJJdGVyYXRvci5yZXR1cm5lZCkKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJiYWQgdmFsdWU6ICIgKyBpbm5lckl0ZXJhdG9yLnJldHVybmVkKTsKKyAgICBp
ZiAoIW91dGVySXRlcmF0b3IucmV0dXJuZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFk
IHZhbHVlOiAiICsgb3V0ZXJJdGVyYXRvci5yZXR1cm5lZCk7Cit9KCkpOworCisoZnVuY3Rpb24g
dGVzdCgpIHsKKyAgICB2YXIgb3V0ZXJJdGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yKGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJPdXRlciByZXR1cm4gY2FsbGVkLiIpOwor
ICAgIH0pOworICAgIHZhciBpbm5lckl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IoZnVuY3Rpb24g
KCkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIklubmVyIHJldHVybiBjYWxsZWQuIik7Cisg
ICAgfSk7CisgICAgdmFyIGVycm9yID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBvdXRlcjog
Zm9yICh2YXIgZTEgb2Ygb3V0ZXJJdGVyYXRvcikgeworICAgICAgICAgICAgaW5uZXI6IGZvciAo
dmFyIGUyIG9mIGlubmVySXRlcmF0b3IpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoIkxvb3AgcmFpc2VzIGVycm9yLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fSBjYXRjaCAoZSkgeworICAgICAgICBlcnJvciA9IGU7CisgICAgfQorICAgIGlmICghZXJyb3Ip
CisgICAgICAgIHRocm93IG5ldyBFcnJvcigibm8gZXJyb3IiKTsKKyAgICBpZiAoU3RyaW5nKGVy
cm9yKSAhPT0gIkVycm9yOiBMb29wIHJhaXNlcyBlcnJvci4iKQorICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoImJhZCBlcnJvcjogIiArIFN0cmluZyhlcnJvcikpOworICAgIGlmICghaW5uZXJJdGVy
YXRvci5yZXR1cm5lZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgdmFsdWU6ICIgKyBp
bm5lckl0ZXJhdG9yLnJldHVybmVkKTsKKyAgICBpZiAoIW91dGVySXRlcmF0b3IucmV0dXJuZWQp
CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHZhbHVlOiAiICsgb3V0ZXJJdGVyYXRvci5y
ZXR1cm5lZCk7Cit9KCkpOworCg==
</data>
<flag name="review"
          id="274573"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>