<?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>124124</bug_id>
          
          <creation_ts>2013-11-10 09:57:57 -0800</creation_ts>
          <short_desc>Reduce the size of RenderBlockFlow by making its rare data inherit from RenderBlockRareData</short_desc>
          <delta_ts>2013-11-11 08:56:46 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>hyatt</cc>
    
    <cc>kondapallykalyan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>949150</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-11-10 09:57:57 -0800</bug_when>
    <thetext>Reduce the size of RenderBlockFlow by making its rare data inherit from RenderBlockRareData</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949151</commentid>
    <comment_count>1</comment_count>
      <attachid>216527</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-11-10 09:59:04 -0800</bug_when>
    <thetext>Created attachment 216527
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949157</commentid>
    <comment_count>2</comment_count>
      <attachid>216527</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-11-10 11:27:20 -0800</bug_when>
    <thetext>Comment on attachment 216527
Patch

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

&gt; Source/WebCore/rendering/RenderBlockFlow.h:96
&gt; -    struct RenderBlockFlowRareData {
&gt; +    struct RenderBlockFlowRareData : public RenderBlockRareData {

I think most RenderBlocks are RenderBlockFlows. Just smashing these together might be ok too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949160</commentid>
    <comment_count>3</comment_count>
      <attachid>216530</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-11-10 11:32:51 -0800</bug_when>
    <thetext>Created attachment 216530
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949161</commentid>
    <comment_count>4</comment_count>
      <attachid>216530</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-11-10 11:33:20 -0800</bug_when>
    <thetext>Comment on attachment 216530
another

Uh wrong bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949188</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-11-10 16:20:31 -0800</bug_when>
    <thetext>Committed r159034: &lt;http://trac.webkit.org/changeset/159034&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949214</commentid>
    <comment_count>6</comment_count>
      <attachid>216527</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-11-10 22:12:48 -0800</bug_when>
    <thetext>Comment on attachment 216527
Patch

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

&gt;&gt; Source/WebCore/rendering/RenderBlockFlow.h:96
&gt;&gt; +    struct RenderBlockFlowRareData : public RenderBlockRareData {
&gt; 
&gt; I think most RenderBlocks are RenderBlockFlows. Just smashing these together might be ok too.

Yeh. Then we also don&apos;t need to have a vtable for RenderBlockRareData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949310</commentid>
    <comment_count>7</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-11-11 08:56:46 -0800</bug_when>
    <thetext>I think there was a better way to do this, since you&apos;re paying 4 bytes in RenderBlock when RenderBlock&apos;s rare data will almost never be allocated. Could have just made a hash for RenderBlock&apos;s rare data. I did this without realizing this patch had landed and now have a bunch of conflicts. :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216527</attachid>
            <date>2013-11-10 09:59:04 -0800</date>
            <delta_ts>2013-11-10 22:12:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-124124-20131110095901.patch</filename>
            <type>text/plain</type>
            <size>18337</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1OTAyNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEzLTExLTEwICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVkdWNlIHRoZSBzaXplIG9mIFJlbmRl
ckJsb2NrRmxvdyBieSBtYWtpbmcgaXRzIHJhcmUgZGF0YSBpbmhlcml0IGZyb20gUmVuZGVyQmxv
Y2tSYXJlRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTI0MTI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVkdWNlIFJlbmRlckJsb2NrRmxvdyBieSBvbmUgd29yZC4KKworICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHA6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oOgorCiAyMDEzLTExLTEwICBHeXV5b3VuZyBLaW0gIDxn
eXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0FYXSBDbGVhbiB1cCBzdGF0aWNf
Y2FzdDw+IHRvIGNhc3QgZnJvbSBBY2Nlc3NpYmlsaXR5T2JqZWN0IApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxNTkwMjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiT3ZlcmZsb3dFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKKyNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIK
ICNpbmNsdWRlICJSZW5kZXJCb3hSZWdpb25JbmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVyQ29tYmlu
ZVRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guaCIKQEAgLTQ5
MTksMjIgKzQ5MjAsMjQgQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlRmlyc3RMZXR0ZXIoKQog
CiB2b2lkIFJlbmRlckJsb2NrOjpzZXRQYWdpbmF0aW9uU3RydXQoTGF5b3V0VW5pdCBzdHJ1dCkK
IHsKLSAgICBpZiAoIW1fcmFyZURhdGEpIHsKKyAgICBpZiAoIWhhc1JhcmVEYXRhKCkpIHsKICAg
ICAgICAgaWYgKCFzdHJ1dCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9yYXJlRGF0
YSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJCbG9ja1JhcmVEYXRhKCkpOworICAgICAgICBtYXRlcmlh
bGl6ZVJhcmVEYXRhKCk7CiAgICAgfQotICAgIG1fcmFyZURhdGEtPm1fcGFnaW5hdGlvblN0cnV0
ID0gc3RydXQ7CisKKyAgICByYXJlRGF0YSgpLT5tX3BhZ2luYXRpb25TdHJ1dCA9IHN0cnV0Owog
fQogCiB2b2lkIFJlbmRlckJsb2NrOjpzZXRQYWdlTG9naWNhbE9mZnNldChMYXlvdXRVbml0IGxv
Z2ljYWxPZmZzZXQpCiB7Ci0gICAgaWYgKCFtX3JhcmVEYXRhKSB7CisgICAgaWYgKCFoYXNSYXJl
RGF0YSgpKSB7CiAgICAgICAgIGlmICghbG9naWNhbE9mZnNldCkKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgbV9yYXJlRGF0YSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJCbG9ja1JhcmVEYXRh
KCkpOworICAgICAgICBtYXRlcmlhbGl6ZVJhcmVEYXRhKCk7CiAgICAgfQotICAgIG1fcmFyZURh
dGEtPm1fcGFnZUxvZ2ljYWxPZmZzZXQgPSBsb2dpY2FsT2Zmc2V0OworCisgICAgcmFyZURhdGEo
KS0+bV9wYWdlTG9naWNhbE9mZnNldCA9IGxvZ2ljYWxPZmZzZXQ7CiB9CiAKIHZvaWQgUmVuZGVy
QmxvY2s6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdApAQCAtNTU0MSw0ICs1NTQ0LDIzIEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmFkanVzdENvbXB1dGVkRm9udFNpemUKIH0KICNlbmRpZiAvLyBFTkFC
TEUoSU9TX1RFWFRfQVVUT1NJWklORykKIAorUmVuZGVyQmxvY2s6OlJlbmRlckJsb2NrUmFyZURh
dGEmIFJlbmRlckJsb2NrOjplbnN1cmVSYXJlRGF0YSgpCit7CisgICAgaWYgKGhhc1JhcmVEYXRh
KCkpCisgICAgICAgIHJldHVybiAqbV9yYXJlRGF0YTsKKworICAgIG1hdGVyaWFsaXplUmFyZURh
dGEoKTsKKyAgICByZXR1cm4gKm1fcmFyZURhdGE7Cit9CisKK3ZvaWQgUmVuZGVyQmxvY2s6Om1h
dGVyaWFsaXplUmFyZURhdGEoKQoreworICAgIEFTU0VSVCghaGFzUmFyZURhdGEoKSk7CisKKyAg
ICBpZiAoaXNSZW5kZXJCbG9ja0Zsb3coKSkKKyAgICAgICAgbV9yYXJlRGF0YSA9IHN0ZDo6bWFr
ZV91bmlxdWU8UmVuZGVyQmxvY2tGbG93OjpSZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YT4odG9SZW5k
ZXJCbG9ja0Zsb3coKnRoaXMpKTsKKyAgICBlbHNlCisgICAgICAgIG1fcmFyZURhdGEgPSBzdGQ6
Om1ha2VfdW5pcXVlPFJlbmRlckJsb2NrOjpSZW5kZXJCbG9ja1JhcmVEYXRhPigpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suaAkocmV2aXNpb24gMTU5MDI2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5OSwxMiArMjk5LDEyIEBAIHB1YmxpYzoK
ICAgICB1bnNpZ25lZCBjb2x1bW5Db3VudChDb2x1bW5JbmZvKikgY29uc3Q7CiAgICAgTGF5b3V0
UmVjdCBjb2x1bW5SZWN0QXQoQ29sdW1uSW5mbyosIHVuc2lnbmVkKSBjb25zdDsKIAotICAgIExh
eW91dFVuaXQgcGFnaW5hdGlvblN0cnV0KCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1f
cmFyZURhdGEtPm1fcGFnaW5hdGlvblN0cnV0IDogTGF5b3V0VW5pdCgpOyB9CisgICAgTGF5b3V0
VW5pdCBwYWdpbmF0aW9uU3RydXQoKSBjb25zdCB7IHJldHVybiBoYXNSYXJlRGF0YSgpID8gcmFy
ZURhdGEoKS0+bV9wYWdpbmF0aW9uU3RydXQgOiBMYXlvdXRVbml0KCk7IH0KICAgICB2b2lkIHNl
dFBhZ2luYXRpb25TdHJ1dChMYXlvdXRVbml0KTsKIAogICAgIC8vIFRoZSBwYWdlIGxvZ2ljYWwg
b2Zmc2V0IGlzIHRoZSBvYmplY3QncyBvZmZzZXQgZnJvbSB0aGUgdG9wIG9mIHRoZSBwYWdlIGlu
IHRoZSBwYWdlIHByb2dyZXNzaW9uCiAgICAgLy8gZGlyZWN0aW9uIChzbyBhbiB4LW9mZnNldCBp
biB2ZXJ0aWNhbCB0ZXh0IGFuZCBhIHktb2Zmc2V0IGZvciBob3Jpem9udGFsIHRleHQpLgotICAg
IExheW91dFVuaXQgcGFnZUxvZ2ljYWxPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRh
ID8gbV9yYXJlRGF0YS0+bV9wYWdlTG9naWNhbE9mZnNldCA6IExheW91dFVuaXQoKTsgfQorICAg
IExheW91dFVuaXQgcGFnZUxvZ2ljYWxPZmZzZXQoKSBjb25zdCB7IHJldHVybiBoYXNSYXJlRGF0
YSgpID8gcmFyZURhdGEoKS0+bV9wYWdlTG9naWNhbE9mZnNldCA6IExheW91dFVuaXQoKTsgfQog
ICAgIHZvaWQgc2V0UGFnZUxvZ2ljYWxPZmZzZXQoTGF5b3V0VW5pdCk7CiAKICAgICAvLyBBY2Nl
c3NvcnMgZm9yIGxvZ2ljYWwgd2lkdGgvaGVpZ2h0IGFuZCBtYXJnaW5zIGluIHRoZSBjb250YWlu
aW5nIGJsb2NrJ3MgYmxvY2stZmxvdyBkaXJlY3Rpb24uCkBAIC0zOTMsMjIgKzM5MywyMCBAQCBw
dWJsaWM6CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCiAgICAgU2hhcGVJbnNpZGVJbmZvKiBlbnN1
cmVTaGFwZUluc2lkZUluZm8oKQogICAgIHsKLSAgICAgICAgaWYgKCFtX3JhcmVEYXRhIHx8ICFt
X3JhcmVEYXRhLT5tX3NoYXBlSW5zaWRlSW5mbykKKyAgICAgICAgaWYgKCFoYXNSYXJlRGF0YSgp
IHx8ICFyYXJlRGF0YSgpLT5tX3NoYXBlSW5zaWRlSW5mbykKICAgICAgICAgICAgIHNldFNoYXBl
SW5zaWRlSW5mbyhTaGFwZUluc2lkZUluZm86OmNyZWF0ZUluZm8odGhpcykpOwotICAgICAgICBy
ZXR1cm4gbV9yYXJlRGF0YS0+bV9zaGFwZUluc2lkZUluZm8uZ2V0KCk7CisgICAgICAgIHJldHVy
biByYXJlRGF0YSgpLT5tX3NoYXBlSW5zaWRlSW5mby5nZXQoKTsKICAgICB9CiAKICAgICBTaGFw
ZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbygpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAo
IW1fcmFyZURhdGEgfHwgIW1fcmFyZURhdGEtPm1fc2hhcGVJbnNpZGVJbmZvKQotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBTaGFwZUluc2lkZUluZm86OmlzRW5hYmxlZEZv
cih0aGlzKSA/IG1fcmFyZURhdGEtPm1fc2hhcGVJbnNpZGVJbmZvLmdldCgpIDogMDsKKyAgICAg
ICAgaWYgKCFoYXNSYXJlRGF0YSgpIHx8ICFyYXJlRGF0YSgpLT5tX3NoYXBlSW5zaWRlSW5mbykK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gU2hhcGVJbnNpZGVJ
bmZvOjppc0VuYWJsZWRGb3IodGhpcykgPyByYXJlRGF0YSgpLT5tX3NoYXBlSW5zaWRlSW5mby5n
ZXQoKSA6IG51bGxwdHI7CiAgICAgfQogICAgIHZvaWQgc2V0U2hhcGVJbnNpZGVJbmZvKFBhc3NP
d25QdHI8U2hhcGVJbnNpZGVJbmZvPiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghbV9yYXJl
RGF0YSkKLSAgICAgICAgICAgIG1fcmFyZURhdGEgPSBhZG9wdFB0cihuZXcgUmVuZGVyQmxvY2tS
YXJlRGF0YSgpKTsKLSAgICAgICAgbV9yYXJlRGF0YS0+bV9zaGFwZUluc2lkZUluZm8gPSB2YWx1
ZTsKKyAgICAgICAgZW5zdXJlUmFyZURhdGEoKS5tX3NoYXBlSW5zaWRlSW5mbyA9IHZhbHVlOwog
ICAgIH0KICAgICB2b2lkIG1hcmtTaGFwZUluc2lkZURlc2NlbmRhbnRzRm9yTGF5b3V0KCk7CiAg
ICAgU2hhcGVJbnNpZGVJbmZvKiBsYXlvdXRTaGFwZUluc2lkZUluZm8oKSBjb25zdDsKQEAgLTY4
MCwxMCArNjc4LDE1IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAgICAgICAg
T3duUHRyPFNoYXBlSW5zaWRlSW5mbz4gbV9zaGFwZUluc2lkZUluZm87CiAjZW5kaWYKLSAgICAg
fTsKKyAgICB9OworCisgICAgYm9vbCBoYXNSYXJlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFy
ZURhdGEuZ2V0KCk7IH0KKyAgICBSZW5kZXJCbG9ja1JhcmVEYXRhKiByYXJlRGF0YSgpIGNvbnN0
IHsgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaGFzUmFyZURhdGEoKSk7IHJldHVy
biBtX3JhcmVEYXRhLmdldCgpOyB9CisgICAgUmVuZGVyQmxvY2tSYXJlRGF0YSYgZW5zdXJlUmFy
ZURhdGEoKTsKKyAgICB2b2lkIG1hdGVyaWFsaXplUmFyZURhdGEoKTsKIAogcHJvdGVjdGVkOgot
ICAgIE93blB0cjxSZW5kZXJCbG9ja1JhcmVEYXRhPiBtX3JhcmVEYXRhOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJCbG9ja1JhcmVEYXRhPiBtX3JhcmVEYXRhOwogCiAgICAgbXV0YWJsZSBz
aWduZWQgbV9saW5lSGVpZ2h0IDogMjU7CiAgICAgdW5zaWduZWQgbV9oYXNNYXJnaW5CZWZvcmVR
dWlyayA6IDE7IC8vIE5vdGUgdGhlc2UgcXVpcmsgdmFsdWVzIGNhbid0IGJlIHB1dCBpbiBSZW5k
ZXJCbG9ja1JhcmVEYXRhIHNpbmNlIHRoZXkgYXJlIHNldCB0b28gZnJlcXVlbnRseS4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCShyZXZpc2lv
biAxNTkwMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE3NCwyNCArMTE3NCwyNiBAQCB2b2lkIFJlbmRlckJsb2Nr
Rmxvdzo6aGFuZGxlQWZ0ZXJTaWRlT2ZCCiAKIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpzZXRNYXhN
YXJnaW5CZWZvcmVWYWx1ZXMoTGF5b3V0VW5pdCBwb3MsIExheW91dFVuaXQgbmVnKQogewotICAg
IGlmICghbV9yYXJlRGF0YSkgeworICAgIGlmICghaGFzUmFyZURhdGEoKSkgewogICAgICAgICBp
ZiAocG9zID09IFJlbmRlckJsb2NrRmxvd1JhcmVEYXRhOjpwb3NpdGl2ZU1hcmdpbkJlZm9yZURl
ZmF1bHQoKnRoaXMpICYmIG5lZyA9PSBSZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YTo6bmVnYXRpdmVN
YXJnaW5CZWZvcmVEZWZhdWx0KCp0aGlzKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
bV9yYXJlRGF0YSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YSgqdGhpcykp
OworICAgICAgICBtYXRlcmlhbGl6ZVJhcmVEYXRhKCk7CiAgICAgfQotICAgIG1fcmFyZURhdGEt
Pm1fbWFyZ2lucy5zZXRQb3NpdGl2ZU1hcmdpbkJlZm9yZShwb3MpOwotICAgIG1fcmFyZURhdGEt
Pm1fbWFyZ2lucy5zZXROZWdhdGl2ZU1hcmdpbkJlZm9yZShuZWcpOworCisgICAgcmFyZURhdGEo
KS0+bV9tYXJnaW5zLnNldFBvc2l0aXZlTWFyZ2luQmVmb3JlKHBvcyk7CisgICAgcmFyZURhdGEo
KS0+bV9tYXJnaW5zLnNldE5lZ2F0aXZlTWFyZ2luQmVmb3JlKG5lZyk7CiB9CiAKIHZvaWQgUmVu
ZGVyQmxvY2tGbG93OjpzZXRNYXhNYXJnaW5BZnRlclZhbHVlcyhMYXlvdXRVbml0IHBvcywgTGF5
b3V0VW5pdCBuZWcpCiB7Ci0gICAgaWYgKCFtX3JhcmVEYXRhKSB7CisgICAgaWYgKCFoYXNSYXJl
RGF0YSgpKSB7CiAgICAgICAgIGlmIChwb3MgPT0gUmVuZGVyQmxvY2tGbG93UmFyZURhdGE6OnBv
c2l0aXZlTWFyZ2luQWZ0ZXJEZWZhdWx0KCp0aGlzKSAmJiBuZWcgPT0gUmVuZGVyQmxvY2tGbG93
UmFyZURhdGE6Om5lZ2F0aXZlTWFyZ2luQWZ0ZXJEZWZhdWx0KCp0aGlzKSkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgbV9yYXJlRGF0YSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJCbG9ja0Zs
b3dSYXJlRGF0YSgqdGhpcykpOworICAgICAgICBtYXRlcmlhbGl6ZVJhcmVEYXRhKCk7CiAgICAg
fQotICAgIG1fcmFyZURhdGEtPm1fbWFyZ2lucy5zZXRQb3NpdGl2ZU1hcmdpbkFmdGVyKHBvcyk7
Ci0gICAgbV9yYXJlRGF0YS0+bV9tYXJnaW5zLnNldE5lZ2F0aXZlTWFyZ2luQWZ0ZXIobmVnKTsK
KworICAgIHJhcmVEYXRhKCktPm1fbWFyZ2lucy5zZXRQb3NpdGl2ZU1hcmdpbkFmdGVyKHBvcyk7
CisgICAgcmFyZURhdGEoKS0+bV9tYXJnaW5zLnNldE5lZ2F0aXZlTWFyZ2luQWZ0ZXIobmVnKTsK
IH0KIAogdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnNldE11c3REaXNjYXJkTWFyZ2luQmVmb3JlKGJv
b2wgdmFsdWUpCkBAIC0xMjAwLDE0ICsxMjAyLDE0IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpz
ZXRNdXN0RGlzY2FyZE1hcmcKICAgICAgICAgQVNTRVJUKHZhbHVlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICAKLSAgICBpZiAoIW1fcmFyZURhdGEgJiYgIXZhbHVlKQotICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoIW1fcmFyZURhdGEpCi0gICAgICAgIG1fcmFyZURhdGEgPSBhZG9w
dFB0cihuZXcgUmVuZGVyQmxvY2tGbG93UmFyZURhdGEoKnRoaXMpKTsKKyAgICBpZiAoIWhhc1Jh
cmVEYXRhKCkpIHsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgbWF0ZXJpYWxpemVSYXJlRGF0YSgpOworICAgIH0KIAotICAgIG1fcmFyZURhdGEtPm1f
ZGlzY2FyZE1hcmdpbkJlZm9yZSA9IHZhbHVlOworICAgIHJhcmVEYXRhKCktPm1fZGlzY2FyZE1h
cmdpbkJlZm9yZSA9IHZhbHVlOwogfQogCiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6c2V0TXVzdERp
c2NhcmRNYXJnaW5BZnRlcihib29sIHZhbHVlKQpAQCAtMTIxNywyMyArMTIxOSwyMyBAQCB2b2lk
IFJlbmRlckJsb2NrRmxvdzo6c2V0TXVzdERpc2NhcmRNYXJnCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoIW1fcmFyZURhdGEgJiYgIXZhbHVlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIW1fcmFyZURhdGEpCi0gICAgICAgIG1fcmFyZURhdGEgPSBhZG9wdFB0cihuZXcg
UmVuZGVyQmxvY2tGbG93UmFyZURhdGEoKnRoaXMpKTsKKyAgICBpZiAoIWhhc1JhcmVEYXRhKCkp
IHsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbWF0
ZXJpYWxpemVSYXJlRGF0YSgpOworICAgIH0KIAotICAgIG1fcmFyZURhdGEtPm1fZGlzY2FyZE1h
cmdpbkFmdGVyID0gdmFsdWU7CisgICAgcmFyZURhdGEoKS0+bV9kaXNjYXJkTWFyZ2luQWZ0ZXIg
PSB2YWx1ZTsKIH0KIAogYm9vbCBSZW5kZXJCbG9ja0Zsb3c6Om11c3REaXNjYXJkTWFyZ2luQmVm
b3JlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc3R5bGUoKS5tYXJnaW5CZWZvcmVDb2xsYXBzZSgp
ID09IE1ESVNDQVJEIHx8IChtX3JhcmVEYXRhICYmIG1fcmFyZURhdGEtPm1fZGlzY2FyZE1hcmdp
bkJlZm9yZSk7CisgICAgcmV0dXJuIHN0eWxlKCkubWFyZ2luQmVmb3JlQ29sbGFwc2UoKSA9PSBN
RElTQ0FSRCB8fCAoaGFzUmFyZURhdGEoKSAmJiByYXJlRGF0YSgpLT5tX2Rpc2NhcmRNYXJnaW5C
ZWZvcmUpOwogfQogCiBib29sIFJlbmRlckJsb2NrRmxvdzo6bXVzdERpc2NhcmRNYXJnaW5BZnRl
cigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0eWxlKCkubWFyZ2luQWZ0ZXJDb2xsYXBzZSgpID09
IE1ESVNDQVJEIHx8IChtX3JhcmVEYXRhICYmIG1fcmFyZURhdGEtPm1fZGlzY2FyZE1hcmdpbkFm
dGVyKTsKKyAgICByZXR1cm4gc3R5bGUoKS5tYXJnaW5BZnRlckNvbGxhcHNlKCkgPT0gTURJU0NB
UkQgfHwgKGhhc1JhcmVEYXRhKCkgJiYgcmFyZURhdGEoKS0+bV9kaXNjYXJkTWFyZ2luQWZ0ZXIp
OwogfQogCiBib29sIFJlbmRlckJsb2NrRmxvdzo6bXVzdERpc2NhcmRNYXJnaW5CZWZvcmVGb3JD
aGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb25zdApAQCAtMTUxOSwzNyArMTUyMSwzNCBA
QCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6YWRqdXN0TGluZVBvc2l0aW9uCiB2b2lkIFJlbmRlckJs
b2NrRmxvdzo6c2V0QnJlYWtBdExpbmVUb0F2b2lkV2lkb3coaW50IGxpbmVUb0JyZWFrKQogewog
ICAgIEFTU0VSVChsaW5lVG9CcmVhayA+PSAwKTsKLSAgICBpZiAoIW1fcmFyZURhdGEpCi0gICAg
ICAgIG1fcmFyZURhdGEgPSBhZG9wdFB0cihuZXcgUmVuZGVyQmxvY2tGbG93UmFyZURhdGEoKnRo
aXMpKTsKLQotICAgIEFTU0VSVCghbV9yYXJlRGF0YS0+bV9kaWRCcmVha0F0TGluZVRvQXZvaWRX
aWRvdyk7Ci0gICAgbV9yYXJlRGF0YS0+bV9saW5lQnJlYWtUb0F2b2lkV2lkb3cgPSBsaW5lVG9C
cmVhazsKKyAgICBBU1NFUlQoIWVuc3VyZVJhcmVEYXRhKCkubV9kaWRCcmVha0F0TGluZVRvQXZv
aWRXaWRvdyk7CisgICAgZW5zdXJlUmFyZURhdGEoKS5tX2xpbmVCcmVha1RvQXZvaWRXaWRvdyA9
IGxpbmVUb0JyZWFrOwogfQogCiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6c2V0RGlkQnJlYWtBdExp
bmVUb0F2b2lkV2lkb3coKQogewogICAgIEFTU0VSVCghc2hvdWxkQnJlYWtBdExpbmVUb0F2b2lk
V2lkb3coKSk7Ci0gICAgaWYgKCFtX3JhcmVEYXRhKQorICAgIGlmICghaGFzUmFyZURhdGEoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9yYXJlRGF0YS0+bV9kaWRCcmVha0F0TGluZVRvQXZv
aWRXaWRvdyA9IHRydWU7CisgICAgcmFyZURhdGEoKS0+bV9kaWRCcmVha0F0TGluZVRvQXZvaWRX
aWRvdyA9IHRydWU7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpjbGVhckRpZEJyZWFrQXRM
aW5lVG9Bdm9pZFdpZG93KCkKIHsKLSAgICBpZiAoIW1fcmFyZURhdGEpCisgICAgaWYgKCFoYXNS
YXJlRGF0YSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3JhcmVEYXRhLT5tX2RpZEJyZWFr
QXRMaW5lVG9Bdm9pZFdpZG93ID0gZmFsc2U7CisgICAgcmFyZURhdGEoKS0+bV9kaWRCcmVha0F0
TGluZVRvQXZvaWRXaWRvdyA9IGZhbHNlOwogfQogCiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y2xl
YXJTaG91bGRCcmVha0F0TGluZVRvQXZvaWRXaWRvdygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHNo
b3VsZEJyZWFrQXRMaW5lVG9Bdm9pZFdpZG93KCkpOwotICAgIGlmICghbV9yYXJlRGF0YSkKKyAg
ICBpZiAoIWhhc1JhcmVEYXRhKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcmFyZURhdGEt
Pm1fbGluZUJyZWFrVG9Bdm9pZFdpZG93ID0gLTE7CisgICAgcmFyZURhdGEoKS0+bV9saW5lQnJl
YWtUb0F2b2lkV2lkb3cgPSAtMTsKIH0KIAogYm9vbCBSZW5kZXJCbG9ja0Zsb3c6OnJlbGF5b3V0
VG9Bdm9pZFdpZG93cyhMYXlvdXRTdGF0ZU1haW50YWluZXImIHN0YXRlUHVzaGVyKQpAQCAtMjgy
NSwxNiArMjgyNCw2IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpzZXRSZW5kZXJOYW1lZEZsb3cK
ICAgICByYXJlRGF0YS5tX3JlbmRlck5hbWVkRmxvd0ZyYWdtZW50ID0gZmxvd0ZyYWdtZW50Owog
fQogCi0vLyBGSVhNRTogVXNlIHRoaXMgZnVuY3Rpb24gaW4gbW9yZSBwbGFjZXMuCi1SZW5kZXJC
bG9ja0Zsb3c6OlJlbmRlckJsb2NrRmxvd1JhcmVEYXRhJiBSZW5kZXJCbG9ja0Zsb3c6OmVuc3Vy
ZVJhcmVEYXRhKCkKLXsKLSAgICBpZiAobV9yYXJlRGF0YSkKLSAgICAgICAgcmV0dXJuICptX3Jh
cmVEYXRhOwotCi0gICAgbV9yYXJlRGF0YSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJCbG9ja0Zsb3dS
YXJlRGF0YSgqdGhpcykpOwotICAgIHJldHVybiAqbV9yYXJlRGF0YTsKLX0KLQogc3RhdGljIGJv
b2wgc2hvdWxkQ2hlY2tMaW5lcyhSZW5kZXJPYmplY3QmIG9iaikKIHsKICAgICByZXR1cm4gIW9i
ai5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgIW9iai5pc1J1bkluKCkgJiYg
b2JqLmlzUmVuZGVyQmxvY2tGbG93KCkgJiYgb2JqLnN0eWxlKCkuaGVpZ2h0KCkuaXNBdXRvKCkg
JiYgKCFvYmouaXNEZXByZWNhdGVkRmxleGlibGVCb3goKSB8fCBvYmouc3R5bGUoKS5ib3hPcmll
bnQoKSA9PSBWRVJUSUNBTCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tGbG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrRmxvdy5oCShyZXZpc2lvbiAxNTkwMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2tGbG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDggQEAgcHVi
bGljOgogICAgICAgICAgICAgLCBtX25lZ2F0aXZlTWFyZ2luQmVmb3JlKGJlZm9yZU5lZykKICAg
ICAgICAgICAgICwgbV9wb3NpdGl2ZU1hcmdpbkFmdGVyKGFmdGVyUG9zKQogICAgICAgICAgICAg
LCBtX25lZ2F0aXZlTWFyZ2luQWZ0ZXIoYWZ0ZXJOZWcpCi0gICAgICAgIHsgfQorICAgICAgICB7
CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIExheW91dFVuaXQgcG9zaXRpdmVNYXJnaW5C
ZWZvcmUoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aXZlTWFyZ2luQmVmb3JlOyB9CiAgICAgICAg
IExheW91dFVuaXQgbmVnYXRpdmVNYXJnaW5CZWZvcmUoKSBjb25zdCB7IHJldHVybiBtX25lZ2F0
aXZlTWFyZ2luQmVmb3JlOyB9CkBAIC05Miw3ICs5Myw3IEBAIHB1YmxpYzoKICAgICBNYXJnaW5W
YWx1ZXMgbWFyZ2luVmFsdWVzRm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCkgY29uc3Q7CiAKICAg
ICAvLyBBbGxvY2F0ZWQgb25seSB3aGVuIHNvbWUgb2YgdGhlc2UgZmllbGRzIGhhdmUgbm9uLWRl
ZmF1bHQgdmFsdWVzCi0gICAgc3RydWN0IFJlbmRlckJsb2NrRmxvd1JhcmVEYXRhIHsKKyAgICBz
dHJ1Y3QgUmVuZGVyQmxvY2tGbG93UmFyZURhdGEgOiBwdWJsaWMgUmVuZGVyQmxvY2tSYXJlRGF0
YSB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlbmRlckJsb2NrRmxvd1JhcmVEYXRh
KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgogICAgICAgICBSZW5kZXJC
bG9ja0Zsb3dSYXJlRGF0YShjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrKQpAQCAtMTMyLDYg
KzEzMyw5IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBtX2RpZEJyZWFrQXRMaW5lVG9Bdm9pZFdp
ZG93IDogMTsKICAgICB9OwogCisgICAgUmVuZGVyQmxvY2tGbG93UmFyZURhdGEqIHJhcmVEYXRh
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2tGbG93UmFyZURhdGEqPihS
ZW5kZXJCbG9jazo6cmFyZURhdGEoKSk7IH0KKyAgICBSZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YSYg
ZW5zdXJlUmFyZURhdGEoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJCbG9ja0Zsb3dSYXJl
RGF0YSY+KFJlbmRlckJsb2NrOjplbnN1cmVSYXJlRGF0YSgpKTsgfQorCiAgICAgY2xhc3MgTWFy
Z2luSW5mbyB7CiAgICAgICAgIC8vIENvbGxhcHNpbmcgZmxhZ3MgZm9yIHdoZXRoZXIgd2UgY2Fu
IGNvbGxhcHNlIG91ciBtYXJnaW5zIHdpdGggb3VyIGNoaWxkcmVuJ3MgbWFyZ2lucy4KICAgICAg
ICAgYm9vbCBtX2NhbkNvbGxhcHNlV2l0aENoaWxkcmVuIDogMTsKQEAgLTIyNSwyNyArMjI5LDI1
IEBAIHB1YmxpYzoKICAgICB2b2lkIGhhbmRsZUFmdGVyU2lkZU9mQmxvY2soTGF5b3V0VW5pdCB0
b3AsIExheW91dFVuaXQgYm90dG9tLCBNYXJnaW5JbmZvJik7CiAgICAgdm9pZCBzZXRDb2xsYXBz
ZWRCb3R0b21NYXJnaW4oY29uc3QgTWFyZ2luSW5mbyYpOwogCi0gICAgYm9vbCBzaG91bGRCcmVh
a0F0TGluZVRvQXZvaWRXaWRvdygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgJiYgbV9yYXJl
RGF0YS0+bV9saW5lQnJlYWtUb0F2b2lkV2lkb3cgPj0gMDsgfQorICAgIGJvb2wgc2hvdWxkQnJl
YWtBdExpbmVUb0F2b2lkV2lkb3coKSBjb25zdCB7IHJldHVybiBoYXNSYXJlRGF0YSgpICYmIHJh
cmVEYXRhKCktPm1fbGluZUJyZWFrVG9Bdm9pZFdpZG93ID49IDA7IH0KICAgICB2b2lkIGNsZWFy
U2hvdWxkQnJlYWtBdExpbmVUb0F2b2lkV2lkb3coKSBjb25zdDsKLSAgICBpbnQgbGluZUJyZWFr
VG9Bdm9pZFdpZG93KCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1f
bGluZUJyZWFrVG9Bdm9pZFdpZG93IDogLTE7IH0KKyAgICBpbnQgbGluZUJyZWFrVG9Bdm9pZFdp
ZG93KCkgY29uc3QgeyByZXR1cm4gaGFzUmFyZURhdGEoKSA/IHJhcmVEYXRhKCktPm1fbGluZUJy
ZWFrVG9Bdm9pZFdpZG93IDogLTE7IH0KICAgICB2b2lkIHNldEJyZWFrQXRMaW5lVG9Bdm9pZFdp
ZG93KGludCk7CiAgICAgdm9pZCBjbGVhckRpZEJyZWFrQXRMaW5lVG9Bdm9pZFdpZG93KCk7CiAg
ICAgdm9pZCBzZXREaWRCcmVha0F0TGluZVRvQXZvaWRXaWRvdygpOwotICAgIGJvb2wgZGlkQnJl
YWtBdExpbmVUb0F2b2lkV2lkb3coKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhICYmIG1fcmFy
ZURhdGEtPm1fZGlkQnJlYWtBdExpbmVUb0F2b2lkV2lkb3c7IH0KKyAgICBib29sIGRpZEJyZWFr
QXRMaW5lVG9Bdm9pZFdpZG93KCkgY29uc3QgeyByZXR1cm4gaGFzUmFyZURhdGEoKSAmJiByYXJl
RGF0YSgpLT5tX2RpZEJyZWFrQXRMaW5lVG9Bdm9pZFdpZG93OyB9CiAgICAgYm9vbCByZWxheW91
dFRvQXZvaWRXaWRvd3MoTGF5b3V0U3RhdGVNYWludGFpbmVyJik7CiAKICAgICB2aXJ0dWFsIGJv
b2wgY2FuSGF2ZUdlbmVyYXRlZENoaWxkcmVuKCkgY29uc3QgT1ZFUlJJREU7CiAKLSAgICBSb290
SW5saW5lQm94KiBsaW5lR3JpZEJveCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3Jh
cmVEYXRhLT5tX2xpbmVHcmlkQm94LmdldCgpIDogbnVsbHB0cjsgfQorICAgIFJvb3RJbmxpbmVC
b3gqIGxpbmVHcmlkQm94KCkgY29uc3QgeyByZXR1cm4gaGFzUmFyZURhdGEoKSA/IHJhcmVEYXRh
KCktPm1fbGluZUdyaWRCb3guZ2V0KCkgOiBudWxscHRyOyB9CiAgICAgdm9pZCBzZXRMaW5lR3Jp
ZEJveChzdGQ6OnVuaXF1ZV9wdHI8Um9vdElubGluZUJveD4gYm94KQogICAgIHsKLSAgICAgICAg
aWYgKCFtX3JhcmVEYXRhKQotICAgICAgICAgICAgbV9yYXJlRGF0YSA9IGFkb3B0UHRyKG5ldyBS
ZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YSgqdGhpcykpOwotICAgICAgICBtX3JhcmVEYXRhLT5tX2xp
bmVHcmlkQm94ID0gc3RkOjptb3ZlKGJveCk7CisgICAgICAgIGVuc3VyZVJhcmVEYXRhKCkubV9s
aW5lR3JpZEJveCA9IHN0ZDo6bW92ZShib3gpOwogICAgIH0KICAgICB2b2lkIGxheW91dExpbmVH
cmlkQm94KCk7CiAKLSAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9yZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCA6IDA7IH0KKyAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCog
cmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSBjb25zdCB7IHJldHVybiBoYXNSYXJlRGF0YSgpID8g
cmFyZURhdGEoKS0+bV9yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCA6IG51bGxwdHI7IH0KICAgICB2
b2lkIHNldFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Kik7
CiAKICAgICBib29sIGNvbnRhaW5zRmxvYXRzKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9m
bG9hdGluZ09iamVjdHMgJiYgIW1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5pc0VtcHR5KCk7IH0K
QEAgLTM2MCwxOSArMzYyLDIwIEBAIHByb3RlY3RlZDoKICAgICBMYXlvdXRVbml0IGFwcGx5QmVm
b3JlQnJlYWsoUmVuZGVyQm94JiBjaGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsT2Zmc2V0KTsgLy8g
SWYgdGhlIGNoaWxkIGhhcyBhIGJlZm9yZSBicmVhaywgdGhlbiByZXR1cm4gYSBuZXcgeVBvcyB0
aGF0IHNoaWZ0cyB0byB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UvY29sdW1uLgogICAgIExheW91
dFVuaXQgYXBwbHlBZnRlckJyZWFrKFJlbmRlckJveCYgY2hpbGQsIExheW91dFVuaXQgbG9naWNh
bE9mZnNldCwgTWFyZ2luSW5mbyYpOyAvLyBJZiB0aGUgY2hpbGQgaGFzIGFuIGFmdGVyIGJyZWFr
LCB0aGVuIHJldHVybiBhIG5ldyBvZmZzZXQgdGhhdCBzaGlmdHMgdG8gdGhlIHRvcCBvZiB0aGUg
bmV4dCBwYWdlL2NvbHVtbi4KIAotICAgIExheW91dFVuaXQgbWF4UG9zaXRpdmVNYXJnaW5CZWZv
cmUoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9tYXJnaW5zLnBv
c2l0aXZlTWFyZ2luQmVmb3JlKCkgOiBSZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YTo6cG9zaXRpdmVN
YXJnaW5CZWZvcmVEZWZhdWx0KCp0aGlzKTsgfQotICAgIExheW91dFVuaXQgbWF4TmVnYXRpdmVN
YXJnaW5CZWZvcmUoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9t
YXJnaW5zLm5lZ2F0aXZlTWFyZ2luQmVmb3JlKCkgOiBSZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YTo6
bmVnYXRpdmVNYXJnaW5CZWZvcmVEZWZhdWx0KCp0aGlzKTsgfQotICAgIExheW91dFVuaXQgbWF4
UG9zaXRpdmVNYXJnaW5BZnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVE
YXRhLT5tX21hcmdpbnMucG9zaXRpdmVNYXJnaW5BZnRlcigpIDogUmVuZGVyQmxvY2tGbG93UmFy
ZURhdGE6OnBvc2l0aXZlTWFyZ2luQWZ0ZXJEZWZhdWx0KCp0aGlzKTsgfQotICAgIExheW91dFVu
aXQgbWF4TmVnYXRpdmVNYXJnaW5BZnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBt
X3JhcmVEYXRhLT5tX21hcmdpbnMubmVnYXRpdmVNYXJnaW5BZnRlcigpIDogUmVuZGVyQmxvY2tG
bG93UmFyZURhdGE6Om5lZ2F0aXZlTWFyZ2luQWZ0ZXJEZWZhdWx0KCp0aGlzKTsgfQorICAgIExh
eW91dFVuaXQgbWF4UG9zaXRpdmVNYXJnaW5CZWZvcmUoKSBjb25zdCB7IHJldHVybiBoYXNSYXJl
RGF0YSgpID8gcmFyZURhdGEoKS0+bV9tYXJnaW5zLnBvc2l0aXZlTWFyZ2luQmVmb3JlKCkgOiBS
ZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YTo6cG9zaXRpdmVNYXJnaW5CZWZvcmVEZWZhdWx0KCp0aGlz
KTsgfQorICAgIExheW91dFVuaXQgbWF4TmVnYXRpdmVNYXJnaW5CZWZvcmUoKSBjb25zdCB7IHJl
dHVybiBoYXNSYXJlRGF0YSgpID8gcmFyZURhdGEoKS0+bV9tYXJnaW5zLm5lZ2F0aXZlTWFyZ2lu
QmVmb3JlKCkgOiBSZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YTo6bmVnYXRpdmVNYXJnaW5CZWZvcmVE
ZWZhdWx0KCp0aGlzKTsgfQorICAgIExheW91dFVuaXQgbWF4UG9zaXRpdmVNYXJnaW5BZnRlcigp
IGNvbnN0IHsgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyByYXJlRGF0YSgpLT5tX21hcmdpbnMucG9z
aXRpdmVNYXJnaW5BZnRlcigpIDogUmVuZGVyQmxvY2tGbG93UmFyZURhdGE6OnBvc2l0aXZlTWFy
Z2luQWZ0ZXJEZWZhdWx0KCp0aGlzKTsgfQorICAgIExheW91dFVuaXQgbWF4TmVnYXRpdmVNYXJn
aW5BZnRlcigpIGNvbnN0IHsgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyByYXJlRGF0YSgpLT5tX21h
cmdpbnMubmVnYXRpdmVNYXJnaW5BZnRlcigpIDogUmVuZGVyQmxvY2tGbG93UmFyZURhdGE6Om5l
Z2F0aXZlTWFyZ2luQWZ0ZXJEZWZhdWx0KCp0aGlzKTsgfQogCiAgICAgdm9pZCBpbml0TWF4TWFy
Z2luVmFsdWVzKCkKICAgICB7Ci0gICAgICAgIGlmICghbV9yYXJlRGF0YSkKKyAgICAgICAgaWYg
KCFoYXNSYXJlRGF0YSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3JhcmVEYXRh
LT5tX21hcmdpbnMgPSBNYXJnaW5WYWx1ZXMoUmVuZGVyQmxvY2tGbG93UmFyZURhdGE6OnBvc2l0
aXZlTWFyZ2luQmVmb3JlRGVmYXVsdCgqdGhpcykgLCBSZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YTo6
bmVnYXRpdmVNYXJnaW5CZWZvcmVEZWZhdWx0KCp0aGlzKSwKKworICAgICAgICByYXJlRGF0YSgp
LT5tX21hcmdpbnMgPSBNYXJnaW5WYWx1ZXMoUmVuZGVyQmxvY2tGbG93UmFyZURhdGE6OnBvc2l0
aXZlTWFyZ2luQmVmb3JlRGVmYXVsdCgqdGhpcykgLCBSZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YTo6
bmVnYXRpdmVNYXJnaW5CZWZvcmVEZWZhdWx0KCp0aGlzKSwKICAgICAgICAgICAgIFJlbmRlckJs
b2NrRmxvd1JhcmVEYXRhOjpwb3NpdGl2ZU1hcmdpbkFmdGVyRGVmYXVsdCgqdGhpcyksIFJlbmRl
ckJsb2NrRmxvd1JhcmVEYXRhOjpuZWdhdGl2ZU1hcmdpbkFmdGVyRGVmYXVsdCgqdGhpcykpOwot
ICAgICAgICBtX3JhcmVEYXRhLT5tX2Rpc2NhcmRNYXJnaW5CZWZvcmUgPSBmYWxzZTsKLSAgICAg
ICAgbV9yYXJlRGF0YS0+bV9kaXNjYXJkTWFyZ2luQWZ0ZXIgPSBmYWxzZTsKKyAgICAgICAgcmFy
ZURhdGEoKS0+bV9kaXNjYXJkTWFyZ2luQmVmb3JlID0gZmFsc2U7CisgICAgICAgIHJhcmVEYXRh
KCktPm1fZGlzY2FyZE1hcmdpbkFmdGVyID0gZmFsc2U7CiAgICAgfQogCiAgICAgdm9pZCBzZXRN
YXhNYXJnaW5CZWZvcmVWYWx1ZXMoTGF5b3V0VW5pdCBwb3MsIExheW91dFVuaXQgbmVnKTsKQEAg
LTQ0OCw3ICs0NTEsNiBAQCBwcml2YXRlOgogICAgIAogICAgIFBvc2l0aW9uIHBvc2l0aW9uRm9y
Qm94KElubGluZUJveCosIGJvb2wgc3RhcnQgPSB0cnVlKSBjb25zdDsKICAgICB2aXJ0dWFsIFZp
c2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50V2l0aElubGluZUNoaWxkcmVuKGNvbnN0IExh
eW91dFBvaW50JiBwb2ludEluTG9naWNhbENvbnRlbnRzKSBPVkVSUklERTsKLSAgICBSZW5kZXJC
bG9ja0Zsb3dSYXJlRGF0YSYgZW5zdXJlUmFyZURhdGEoKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRk
Rm9jdXNSaW5nUmVjdHNGb3JJbmxpbmVDaGlsZHJlbihWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBj
b25zdCBMYXlvdXRQb2ludCYgYWRkaXRpb25hbE9mZnNldCwgY29uc3QgUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdCopIE9WRVJSSURFOwogCiAvLyBGSVhNRS1CTE9DS0ZMT1c6IFRoZXNlIG1ldGhvZHMg
aGF2ZSBpbXBsZW1lbnRhdGlvbnMgaW4KQEAgLTUxNiw3ICs1MTgsNiBAQCBwdWJsaWM6CiAKIHBy
b3RlY3RlZDoKICAgICBPd25QdHI8RmxvYXRpbmdPYmplY3RzPiBtX2Zsb2F0aW5nT2JqZWN0czsK
LSAgICBPd25QdHI8UmVuZGVyQmxvY2tGbG93UmFyZURhdGE+IG1fcmFyZURhdGE7CiAgICAgUmVu
ZGVyTGluZUJveExpc3QgbV9saW5lQm94ZXM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNpbXBsZUxp
bmVMYXlvdXQ6OkxheW91dD4gbV9zaW1wbGVMaW5lTGF5b3V0OwogCg==
</data>
<flag name="review"
          id="239510"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216530</attachid>
            <date>2013-11-10 11:32:51 -0800</date>
            <delta_ts>2013-11-10 11:33:20 -0800</delta_ts>
            <desc>another</desc>
            <filename>simple-line-pre-6.patch</filename>
            <type>text/plain</type>
            <size>33403</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1OTAyMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDEzLTExLTEwICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgd2hpdGUtc3Bh
Y2UgcHJvcGVydHkgb24gc2ltcGxlIGxpbmUgbGF5b3V0IHBhdGgKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDEyMgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgU3VwcG9ydCBhbGwgdmFsdWVz
IG9mIHRoZSB3aGl0ZS1zcGFjZSBwcm9wZXJ0eSBhbmQgdGhlIHRhYi1zaXplIHByb3BlcnR5Lgor
CisgICAgICAgIFRlc3RzOiBmYXN0L3RleHQvZW1iZWQtYXQtZW5kLW9mLXByZS13cmFwLWxpbmUt
c2ltcGxlLWxpbmVzLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvdGV4dC93aGl0ZXNwYWNlL3By
ZS13cmFwLWxpbmUtdGVzdC1zaW1wbGUtbGluZXMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC90
ZXh0L3doaXRlc3BhY2UvcHJlLXdyYXAtbG9uZy13b3JkLXNpbXBsZS1saW5lcy5odG1sCisgICAg
ICAgICAgICAgICBmYXN0L3RleHQvd2hpdGVzcGFjZS9wcmUtd3JhcC1zcGFjZXMtYWZ0ZXItbmV3
bGluZS1zaW1wbGUtbGluZXMuaHRtbAorCisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVM
YXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y2FuVXNlRm9y
KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmlzV2hpdGVzcGFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0Ojpza2lwV2hpdGVzcGFjZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6dGV4dFdpZHRoKToKKyAgICAgICAgKFdl
YkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6Om1lYXN1cmVXb3JkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNpbXBsZUxpbmVMYXlvdXQ6OmNyZWF0ZVRleHRSdW5zKToKKyAgICAgICAgKiByZW5kZXJpbmcv
U2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVM
aW5lTGF5b3V0OjpwYWludERlYnVnQm9yZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVM
aW5lTGF5b3V0OjpwYWludEZsb3cpOgorCiAyMDEzLTExLTEwICBBbmRyZWFzIEtsaW5nICA8YWts
aW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgUmVuZGVyVGhlbWU6OnNob3VsZE9wZW5Q
aWNrZXJXaXRoRjRLZXkoKS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dC5jcHAJKHJldmlzaW9uIDE1ODkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDkgKzEz
MCw2IEBAIGJvb2wgY2FuVXNlRm9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmwKICAgICAvLyBO
b24tdmlzaWJsZSBvdmVyZmxvdyBzaG91bGQgYmUgcHJldHR5IGVhc3kgdG8gc3VwcG9ydC4KICAg
ICBpZiAoc3R5bGUub3ZlcmZsb3dYKCkgIT0gT1ZJU0lCTEUgfHwgc3R5bGUub3ZlcmZsb3dZKCkg
IT0gT1ZJU0lCTEUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBQcmUvbm8td3JhcCB3
b3VsZCBiZSB2ZXJ5IGhlbHBmdWwgdG8gc3VwcG9ydC4KLSAgICBpZiAoc3R5bGUud2hpdGVTcGFj
ZSgpICE9IE5PUk1BTCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghc3R5bGUudGV4
dEluZGVudCgpLmlzWmVybygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKHN0eWxl
LndvcmRTcGFjaW5nKCkgfHwgc3R5bGUubGV0dGVyU3BhY2luZygpKQpAQCAtMTk3LDMzICsxOTQs
NDkgQEAgYm9vbCBjYW5Vc2VGb3IoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbAogICAgIHJldHVy
biB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNXaGl0ZXNwYWNlKFVDaGFyIGNoYXJh
Y3RlcikKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1doaXRlc3BhY2UoVUNoYXIgY2hhcmFjdGVyLCBi
b29sIHByZXNlcnZlTmV3bGluZSkKIHsKLSAgICByZXR1cm4gY2hhcmFjdGVyID09ICcgJyB8fCBj
aGFyYWN0ZXIgPT0gJ1x0JyB8fCBjaGFyYWN0ZXIgPT0gJ1xuJzsKKyAgICByZXR1cm4gY2hhcmFj
dGVyID09ICcgJyB8fCBjaGFyYWN0ZXIgPT0gJ1x0JyB8fCAoIXByZXNlcnZlTmV3bGluZSAmJiBj
aGFyYWN0ZXIgPT0gJ1xuJyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
Pgotc3RhdGljIGlubGluZSB1bnNpZ25lZCBza2lwV2hpdGVzcGFjZXMoY29uc3QgQ2hhcmFjdGVy
VHlwZSogdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCitzdGF0aWMgaW5s
aW5lIHVuc2lnbmVkIHNraXBXaGl0ZXNwYWNlcyhjb25zdCBDaGFyYWN0ZXJUeXBlKiB0ZXh0LCB1
bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBwcmVzZXJ2ZU5ld2xpbmUpCiB7
CiAgICAgZm9yICg7IG9mZnNldCA8IGxlbmd0aDsgKytvZmZzZXQpIHsKLSAgICAgICAgaWYgKCFp
c1doaXRlc3BhY2UodGV4dFtvZmZzZXRdKSkKKyAgICAgICAgaWYgKCFpc1doaXRlc3BhY2UodGV4
dFtvZmZzZXRdLCBwcmVzZXJ2ZU5ld2xpbmUpKQogICAgICAgICAgICAgcmV0dXJuIG9mZnNldDsK
ICAgICB9CiAgICAgcmV0dXJuIGxlbmd0aDsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+Ci1zdGF0aWMgZmxvYXQgdGV4dFdpZHRoKGNvbnN0IFJlbmRlclRleHQmIHJlbmRl
clRleHQsIGNvbnN0IENoYXJhY3RlclR5cGUqIHRleHQsIHVuc2lnbmVkIHRleHRMZW5ndGgsIHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBmbG9hdCB4UG9zaXRpb24sIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSkKK3N0YXRpYyBmbG9hdCB0ZXh0V2lkdGgoY29uc3QgUmVuZGVyVGV4dCYgcmVu
ZGVyVGV4dCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogdGV4dCwgdW5zaWduZWQgdGV4dExlbmd0aCwg
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIGZsb2F0IHhQb3NpdGlvbiwgY29uc3QgRm9udCYg
Zm9udCwgZmxvYXQgdGFiV2lkdGgpCiB7Ci0gICAgaWYgKHN0eWxlLmZvbnQoKS5pc0ZpeGVkUGl0
Y2goKSB8fCAoIWZyb20gJiYgdG8gPT0gdGV4dExlbmd0aCkpCi0gICAgICAgIHJldHVybiByZW5k
ZXJUZXh0LndpZHRoKGZyb20sIHRvIC0gZnJvbSwgc3R5bGUuZm9udCgpLCB4UG9zaXRpb24sIG51
bGxwdHIsIG51bGxwdHIpOwotICAgIC8vIEZJWE1FOiBBZGQgdGVtcGxhdGVkIFVDaGFyL0xDaGFy
IHBhdGhzLgorICAgIGlmIChmb250LmlzRml4ZWRQaXRjaCgpIHx8ICghZnJvbSAmJiB0byA9PSB0
ZXh0TGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIHJlbmRlclRleHQud2lkdGgoZnJvbSwgdG8gLSBm
cm9tLCBmb250LCB4UG9zaXRpb24sIG51bGxwdHIsIG51bGxwdHIpOworCiAgICAgVGV4dFJ1biBy
dW4odGV4dCArIGZyb20sIHRvIC0gZnJvbSk7CiAgICAgcnVuLnNldFhQb3MoeFBvc2l0aW9uKTsK
ICAgICBydW4uc2V0Q2hhcmFjdGVyc0xlbmd0aCh0ZXh0TGVuZ3RoIC0gZnJvbSk7CisgICAgcnVu
LnNldFRhYlNpemUoISF0YWJXaWR0aCwgdGFiV2lkdGgpOworCiAgICAgQVNTRVJUKHJ1bi5jaGFy
YWN0ZXJzTGVuZ3RoKCkgPj0gcnVuLmxlbmd0aCgpKTsKIAotICAgIHJldHVybiBzdHlsZS5mb250
KCkud2lkdGgocnVuKTsKKyAgICByZXR1cm4gZm9udC53aWR0aChydW4pOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBmbG9hdCBtZWFzdXJlV29yZChjb25z
dCBSZW5kZXJUZXh0JiB0ZXh0UmVuZGVyZXIsIGNvbnN0IENoYXJhY3RlclR5cGUqIHRleHQsIHVu
c2lnbmVkIHRleHRMZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGZsb2F0IGxp
bmVXaWR0aCwgYm9vbCBjb2xsYXBzZVdoaXRlc3BhY2UsIGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0
IHRhYldpZHRoLCBmbG9hdCBzcGFjZVdpZHRoKQoreworICAgIGlmICh0ZXh0W3N0YXJ0XSA9PSAn
ICcgJiYgZW5kID09IHN0YXJ0ICsgMSkKKyAgICAgICAgcmV0dXJuIHNwYWNlV2lkdGg7CisKKyAg
ICBib29sIG1lYXN1cmVXaXRoRW5kU3BhY2UgPSBjb2xsYXBzZVdoaXRlc3BhY2UgJiYgZW5kIDwg
dGV4dExlbmd0aCAmJiB0ZXh0W2VuZF0gPT0gJyAnOworICAgIGlmIChtZWFzdXJlV2l0aEVuZFNw
YWNlKQorICAgICAgICArK2VuZDsKKyAgICBmbG9hdCB3aWR0aCA9IHRleHRXaWR0aCh0ZXh0UmVu
ZGVyZXIsIHRleHQsIHRleHRMZW5ndGgsIHN0YXJ0LCBlbmQsIGxpbmVXaWR0aCwgZm9udCwgY29s
bGFwc2VXaGl0ZXNwYWNlID8gMCA6IHRhYldpZHRoKTsKKworICAgIHJldHVybiBtZWFzdXJlV2l0
aEVuZFNwYWNlID8gd2lkdGggLSBzcGFjZVdpZHRoIDogd2lkdGg7CiB9CiAKIHN0YXRpYyBmbG9h
dCBjb21wdXRlTGluZUxlZnQoRVRleHRBbGlnbiB0ZXh0QWxpZ24sIGZsb2F0IHJlbWFpbmluZ1dp
ZHRoKQpAQCAtMjYxLDE3ICsyNzQsMjQgQEAgdm9pZCBjcmVhdGVUZXh0UnVucyhMYXlvdXQ6OlJ1
blZlY3RvciYgcgogewogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IGZsb3cuc3R5bGUo
KTsKIAotICAgIEVUZXh0QWxpZ24gdGV4dEFsaWduID0gc3R5bGUudGV4dEFsaWduKCk7Ci0gICAg
ZmxvYXQgd29yZFRyYWlsaW5nU3BhY2VXaWR0aCA9IHN0eWxlLmZvbnQoKS53aWR0aChUZXh0UnVu
KCZzcGFjZSwgMSkpOworICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgYXJlIHN1cHBvcnRlZC4KKyAg
ICBjb25zdCBGb250JiBmb250ID0gc3R5bGUuZm9udCgpOworICAgIHVuc2lnbmVkIHRhYldpZHRo
ID0gc3R5bGUudGFiU2l6ZSgpOworICAgIEVUZXh0QWxpZ24gdGV4dEFsaWduID0gc3R5bGUudGV4
dEFsaWduKCk7IC8vIE5vdCAnanVzdGlmeScuCisgICAgYm9vbCBjb2xsYXBzZVdoaXRlc3BhY2Ug
PSBzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKTsKKyAgICBib29sIHByZXNlcnZlTmV3bGluZSA9
IHN0eWxlLnByZXNlcnZlTmV3bGluZSgpOworICAgIGJvb2wgd3JhcExpbmVzID0gc3R5bGUuYXV0
b1dyYXAoKTsKIAogICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHRleHQgPSB0ZXh0UmVuZGVyZXIu
dGV4dCgpLT5nZXRDaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCk7CiAgICAgY29uc3QgdW5zaWdu
ZWQgdGV4dExlbmd0aCA9IHRleHRSZW5kZXJlci50ZXh0TGVuZ3RoKCk7CiAKKyAgICBmbG9hdCBz
cGFjZVdpZHRoID0gZm9udC53aWR0aChUZXh0UnVuKCZzcGFjZSwgMSkpOwogICAgIExhenlMaW5l
QnJlYWtJdGVyYXRvciBsaW5lQnJlYWtJdGVyYXRvcih0ZXh0UmVuZGVyZXIudGV4dCgpLCBzdHls
ZS5sb2NhbGUoKSk7CiAKICAgICB1bnNpZ25lZCBsaW5lRW5kID0gMDsKICAgICB3aGlsZSAobGlu
ZUVuZCA8IHRleHRMZW5ndGgpIHsKLSAgICAgICAgbGluZUVuZCA9IHNraXBXaGl0ZXNwYWNlcyh0
ZXh0LCBsaW5lRW5kLCB0ZXh0TGVuZ3RoKTsKKyAgICAgICAgaWYgKGNvbGxhcHNlV2hpdGVzcGFj
ZSkKKyAgICAgICAgICAgIGxpbmVFbmQgPSBza2lwV2hpdGVzcGFjZXModGV4dCwgbGluZUVuZCwg
dGV4dExlbmd0aCwgcHJlc2VydmVOZXdsaW5lKTsKICAgICAgICAgdW5zaWduZWQgbGluZVN0YXJ0
ID0gbGluZUVuZDsKICAgICAgICAgdW5zaWduZWQgd29yZEVuZCA9IGxpbmVFbmQ7CiAgICAgICAg
IExpbmVXaWR0aCBsaW5lV2lkdGgoZmxvdywgZmFsc2UsIERvTm90SW5kZW50VGV4dCk7CkBAIC0y
ODAsMzMgKzMwMCw2MyBAQCB2b2lkIGNyZWF0ZVRleHRSdW5zKExheW91dDo6UnVuVmVjdG9yJiBy
CiAgICAgICAgIGxpbmVSdW5zLnVuY2hlY2tlZEFwcGVuZChSdW4obGluZVN0YXJ0LCAwKSk7CiAK
ICAgICAgICAgd2hpbGUgKHdvcmRFbmQgPCB0ZXh0TGVuZ3RoKSB7Ci0gICAgICAgICAgICBBU1NF
UlQoIWlzV2hpdGVzcGFjZSh0ZXh0W3dvcmRFbmRdKSk7Ci0KLSAgICAgICAgICAgIGJvb2wgd29y
ZElzUHJlY2VkZWRCeVdoaXRlc3BhY2UgPSB3b3JkRW5kID4gbGluZVN0YXJ0ICYmIGlzV2hpdGVz
cGFjZSh0ZXh0W3dvcmRFbmQgLSAxXSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCB3b3JkU3RhcnQg
PSB3b3JkSXNQcmVjZWRlZEJ5V2hpdGVzcGFjZSA/IHdvcmRFbmQgLSAxIDogd29yZEVuZDsKKyAg
ICAgICAgICAgIEFTU0VSVCghY29sbGFwc2VXaGl0ZXNwYWNlIHx8ICFpc1doaXRlc3BhY2UodGV4
dFt3b3JkRW5kXSwgcHJlc2VydmVOZXdsaW5lKSk7CiAKLSAgICAgICAgICAgIHdvcmRFbmQgPSBu
ZXh0QnJlYWthYmxlUG9zaXRpb248Q2hhcmFjdGVyVHlwZSwgZmFsc2U+KGxpbmVCcmVha0l0ZXJh
dG9yLCB0ZXh0LCB0ZXh0TGVuZ3RoLCB3b3JkRW5kICsgMSk7CisgICAgICAgICAgICB1bnNpZ25l
ZCB3b3JkU3RhcnQgPSB3b3JkRW5kOwogCi0gICAgICAgICAgICBib29sIG1lYXN1cmVXaXRoRW5k
U3BhY2UgPSB3b3JkRW5kIDwgdGV4dExlbmd0aCAmJiB0ZXh0W3dvcmRFbmRdID09ICcgJzsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHdvcmRNZWFzdXJlRW5kID0gbWVhc3VyZVdpdGhFbmRTcGFjZSA/
IHdvcmRFbmQgKyAxIDogd29yZEVuZDsKKyAgICAgICAgICAgIGlmIChwcmVzZXJ2ZU5ld2xpbmUg
JiYgdGV4dFt3b3JkU3RhcnRdID09ICdcbicpIHsKKyAgICAgICAgICAgICAgICArK3dvcmRFbmQ7
CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgY3JlYXRlcyBhIGRlZGljYXRlZCBydW4g
Zm9yIG5ld2xpbmUuIFRoaXMgaXMgd2FzdGVmdWwgYW5kIHVubmVjZXNzYXJ5IGJ1dCBpdCBrZWVw
cyB0ZXN0IHJlc3VsdHMgdW5jaGFuZ2VkLgorICAgICAgICAgICAgICAgIGlmICh3b3JkU3RhcnQg
PiBsaW5lU3RhcnQpCisgICAgICAgICAgICAgICAgICAgIGxpbmVSdW5zLmFwcGVuZChSdW4obGlu
ZUVuZCwgbGluZVJ1bnMubGFzdCgpLnJpZ2h0KSk7CisgICAgICAgICAgICAgICAgbGluZVJ1bnMu
bGFzdCgpLnJpZ2h0ID0gbGluZVJ1bnMubGFzdCgpLmxlZnQ7CisgICAgICAgICAgICAgICAgbGlu
ZVJ1bnMubGFzdCgpLnRleHRMZW5ndGggPSAxOworICAgICAgICAgICAgICAgIGxpbmVFbmQgPSB3
b3JkRW5kOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBmbG9hdCB3b3JkV2lkdGggPSB0ZXh0V2lkdGgodGV4dFJlbmRlcmVyLCB0ZXh0LCB0ZXh0
TGVuZ3RoLCB3b3JkU3RhcnQsIHdvcmRNZWFzdXJlRW5kLCBsaW5lV2lkdGguY29tbWl0dGVkV2lk
dGgoKSwgc3R5bGUpOworICAgICAgICAgICAgaWYgKCFjb2xsYXBzZVdoaXRlc3BhY2UgJiYgaXNX
aGl0ZXNwYWNlKHRleHRbd29yZFN0YXJ0XSwgcHJlc2VydmVOZXdsaW5lKSkKKyAgICAgICAgICAg
ICAgICB3b3JkRW5kID0gd29yZFN0YXJ0ICsgMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICB3b3JkRW5kID0gbmV4dEJyZWFrYWJsZVBvc2l0aW9uPENoYXJhY3RlclR5cGUsIGZh
bHNlPihsaW5lQnJlYWtJdGVyYXRvciwgdGV4dCwgdGV4dExlbmd0aCwgd29yZFN0YXJ0ICsgMSk7
CisKKyAgICAgICAgICAgIGJvb2wgd29yZElzUHJlY2VkZWRCeVdoaXRlc3BhY2UgPSBjb2xsYXBz
ZVdoaXRlc3BhY2UgJiYgd29yZFN0YXJ0ID4gbGluZVN0YXJ0ICYmIGlzV2hpdGVzcGFjZSh0ZXh0
W3dvcmRTdGFydCAtIDFdLCBwcmVzZXJ2ZU5ld2xpbmUpOworICAgICAgICAgICAgaWYgKHdvcmRJ
c1ByZWNlZGVkQnlXaGl0ZXNwYWNlKQorICAgICAgICAgICAgICAgIC0td29yZFN0YXJ0OwogCi0g
ICAgICAgICAgICBpZiAobWVhc3VyZVdpdGhFbmRTcGFjZSkKLSAgICAgICAgICAgICAgICB3b3Jk
V2lkdGggLT0gd29yZFRyYWlsaW5nU3BhY2VXaWR0aDsKKyAgICAgICAgICAgIGZsb2F0IHdvcmRX
aWR0aCA9IG1lYXN1cmVXb3JkKHRleHRSZW5kZXJlciwgdGV4dCwgdGV4dExlbmd0aCwgd29yZFN0
YXJ0LCB3b3JkRW5kLCBsaW5lV2lkdGguY29tbWl0dGVkV2lkdGgoKSwgY29sbGFwc2VXaGl0ZXNw
YWNlLCBmb250LCB0YWJXaWR0aCwgc3BhY2VXaWR0aCk7CiAKICAgICAgICAgICAgIGxpbmVXaWR0
aC5hZGRVbmNvbW1pdHRlZFdpZHRoKHdvcmRXaWR0aCk7CiAKLSAgICAgICAgICAgIC8vIE1vdmUg
dG8gdGhlIG5leHQgbGluZSBpZiB0aGUgY3VycmVudCBvbmUgaXMgZnVsbCBhbmQgd2UgaGF2ZSBz
b21ldGhpbmcgb24gaXQuCi0gICAgICAgICAgICBpZiAoIWxpbmVXaWR0aC5maXRzT25MaW5lKCkg
JiYgbGluZVdpZHRoLmNvbW1pdHRlZFdpZHRoKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBpZiAod3JhcExpbmVzKSB7CisgICAgICAgICAgICAgICAgLy8gTW92ZSB0byB0
aGUgbmV4dCBsaW5lIGlmIHRoZSBjdXJyZW50IG9uZSBpcyBmdWxsIGFuZCB3ZSBoYXZlIHNvbWV0
aGluZyBvbiBpdC4KKyAgICAgICAgICAgICAgICBpZiAoIWxpbmVXaWR0aC5maXRzT25MaW5lKCkg
JiYgbGluZVdpZHRoLmNvbW1pdHRlZFdpZHRoKCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBmb3Igd2hpdGUtc3BhY2U6IHByZS13cmFw
IHdoaWNoIHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGVuZCBsaW5lIHdoaXRlc3BhY2Uu
CisgICAgICAgICAgICAgICAgaWYgKCFjb2xsYXBzZVdoaXRlc3BhY2UgJiYgbGluZVdpZHRoLmZp
dHNPbkxpbmUoKSAmJiB3b3JkRW5kIDwgdGV4dExlbmd0aCAmJiBpc1doaXRlc3BhY2UodGV4dFt3
b3JkRW5kXSwgcHJlc2VydmVOZXdsaW5lKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBMb29r
IGFoZWFkIHRvIHNlZSBpZiB0aGUgbmV4dCB3aGl0ZXNwYWNlIHdvdWxkIGZpdC4KKyAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgd2hpdGVzcGFjZVdpZHRoID0gdGV4dFdpZHRoKHRleHRSZW5kZXJl
ciwgdGV4dCwgdGV4dExlbmd0aCwgd29yZEVuZCwgd29yZEVuZCArIDEsIGxpbmVXaWR0aC5jb21t
aXR0ZWRXaWR0aCgpLCBmb250LCB0YWJXaWR0aCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
bGluZVdpZHRoLmZpdHNPbkxpbmVJbmNsdWRpbmdFeHRyYVdpZHRoKHdoaXRlc3BhY2VXaWR0aCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5vdCBlYXQgYXdheSB0aGUgcmVzdCBv
ZiB0aGUgd2hpdGVzcGFjZSBvbiB0aGUgbGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIHdoaXRlc3BhY2VFbmQgPSBza2lwV2hpdGVzcGFjZXModGV4dCwgd29yZEVuZCwgdGV4
dExlbmd0aCwgcHJlc2VydmVOZXdsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElu
Y2x1ZGUgbmV3bGluZSB0byB0aGlzIHJ1biB0b28uCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAod2hpdGVzcGFjZUVuZCA8IHRleHRMZW5ndGggJiYgdGV4dFt3aGl0ZXNwYWNlRW5kXSA9PSAn
XG4nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrd2hpdGVzcGFjZUVuZDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmVSdW5zLmxhc3QoKS50ZXh0TGVuZ3RoID0gd2hpdGVzcGFj
ZUVuZCAtIGxpbmVSdW5zLmxhc3QoKS50ZXh0T2Zmc2V0OworICAgICAgICAgICAgICAgICAgICAg
ICAgbGluZVJ1bnMubGFzdCgpLnJpZ2h0ID0gbGluZVdpZHRoLmF2YWlsYWJsZVdpZHRoKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsaW5lRW5kID0gd2hpdGVzcGFjZUVuZDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAod29yZFN0YXJ0ID4gbGlu
ZUVuZCkgewogICAgICAgICAgICAgICAgIC8vIFRoZXJlIHdlcmUgbW9yZSB0aGFuIG9uZSBjb25z
ZWN1dGl2ZSB3aGl0ZXNwYWNlLgogICAgICAgICAgICAgICAgIEFTU0VSVCh3b3JkSXNQcmVjZWRl
ZEJ5V2hpdGVzcGFjZSk7CiAgICAgICAgICAgICAgICAgLy8gSW5jbHVkZSBzcGFjZSB0byB0aGUg
ZW5kIG9mIHRoZSBwcmV2aW91cyBydW4uCiAgICAgICAgICAgICAgICAgbGluZVJ1bnMubGFzdCgp
LnRleHRMZW5ndGgrKzsKLSAgICAgICAgICAgICAgICBsaW5lUnVucy5sYXN0KCkucmlnaHQgKz0g
d29yZFRyYWlsaW5nU3BhY2VXaWR0aDsKKyAgICAgICAgICAgICAgICBsaW5lUnVucy5sYXN0KCku
cmlnaHQgKz0gc3BhY2VXaWR0aDsKICAgICAgICAgICAgICAgICAvLyBTdGFydCBhIG5ldyBydW4g
b24gdGhlIHNhbWUgbGluZS4KICAgICAgICAgICAgICAgICBsaW5lUnVucy5hcHBlbmQoUnVuKHdv
cmRTdGFydCArIDEsIGxpbmVSdW5zLmxhc3QoKS5yaWdodCkpOwogICAgICAgICAgICAgfQpAQCAt
MzE3LDkgKzM2NywxMCBAQCB2b2lkIGNyZWF0ZVRleHRSdW5zKExheW91dDo6UnVuVmVjdG9yJiBy
CiAgICAgICAgICAgICBsaW5lUnVucy5sYXN0KCkudGV4dExlbmd0aCA9IHdvcmRFbmQgLSBsaW5l
UnVucy5sYXN0KCkudGV4dE9mZnNldDsKIAogICAgICAgICAgICAgbGluZUVuZCA9IHdvcmRFbmQ7
Ci0gICAgICAgICAgICB3b3JkRW5kID0gc2tpcFdoaXRlc3BhY2VzKHRleHQsIHdvcmRFbmQsIHRl
eHRMZW5ndGgpOworICAgICAgICAgICAgaWYgKGNvbGxhcHNlV2hpdGVzcGFjZSkKKyAgICAgICAg
ICAgICAgICB3b3JkRW5kID0gc2tpcFdoaXRlc3BhY2VzKHRleHQsIHdvcmRFbmQsIHRleHRMZW5n
dGgsIHByZXNlcnZlTmV3bGluZSk7CiAKLSAgICAgICAgICAgIGlmICghbGluZVdpZHRoLmZpdHNP
bkxpbmUoKSkgeworICAgICAgICAgICAgaWYgKHdyYXBMaW5lcyAmJiAhbGluZVdpZHRoLmZpdHNP
bkxpbmUoKSkgewogICAgICAgICAgICAgICAgIC8vIFRoZSBmaXJzdCBydW4gb24gdGhlIGxpbmUg
b3ZlcmZsb3dzLgogICAgICAgICAgICAgICAgIEFTU0VSVChsaW5lUnVucy5zaXplKCkgPT0gMSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zMjgsMTIgKzM3OSwxMyBAQCB2b2lkIGNyZWF0
ZVRleHRSdW5zKExheW91dDo6UnVuVmVjdG9yJiByCiAgICAgICAgIGlmIChsaW5lU3RhcnQgPT0g
bGluZUVuZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCisgICAgICAgIGxpbmVSdW5zLmxhc3Qo
KS5pc0VuZE9mTGluZSA9IHRydWU7CisKICAgICAgICAgYWRqdXN0UnVuT2Zmc2V0cyhsaW5lUnVu
cywgdGV4dEFsaWduLCBsaW5lV2lkdGguY29tbWl0dGVkV2lkdGgoKSwgbGluZVdpZHRoLmF2YWls
YWJsZVdpZHRoKCkpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaW5lUnVu
cy5zaXplKCk7ICsraSkKICAgICAgICAgICAgIHJ1bnMuYXBwZW5kKGxpbmVSdW5zW2ldKTsKIAot
ICAgICAgICBydW5zLmxhc3QoKS5pc0VuZE9mTGluZSA9IHRydWU7CiAgICAgICAgICsrbGluZUNv
dW50OwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDE1ODg4OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTAsNiArNTAsOCBAQCBuYW1lc3BhY2UgU2ltcGxlTGluZUxheW91dCB7
CiAKIHN0YXRpYyB2b2lkIHBhaW50RGVidWdCb3JkZXJzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgTGF5b3V0UmVjdCYgYm9yZGVyUmVjdCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50
T2Zmc2V0KQogeworICAgIGlmIChib3JkZXJSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OwogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKICAg
ICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKENvbG9yKDAsIDI1NSwgMCksIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOwogICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCwgQ29s
b3JTcGFjZURldmljZVJHQik7CkBAIC04MCw3ICs4Miw5IEBAIHZvaWQgcGFpbnRGbG93KGNvbnN0
IFJlbmRlckJsb2NrRmxvdyYgZmwKICAgICBhdXRvIHJlc29sdmVyID0gcnVuUmVzb2x2ZXIoZmxv
dywgbGF5b3V0KTsKICAgICBmb3IgKGF1dG8gaXQgPSByZXNvbHZlci5iZWdpbigpLCBlbmQgPSBy
ZXNvbHZlci5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGF1dG8gcnVuID0gKml0
OwotICAgICAgICBjb250ZXh0LmRyYXdUZXh0KGZvbnQsIFRleHRSdW4ocnVuLnRleHQoKSksIHJ1
bi5iYXNlbGluZSgpICsgcGFpbnRPZmZzZXQpOworICAgICAgICBUZXh0UnVuIHRleHRSdW4ocnVu
LnRleHQoKSk7CisgICAgICAgIHRleHRSdW4uc2V0VGFiU2l6ZSghc3R5bGUuY29sbGFwc2VXaGl0
ZVNwYWNlKCksIHN0eWxlLnRhYlNpemUoKSk7CisgICAgICAgIGNvbnRleHQuZHJhd1RleHQoZm9u
dCwgdGV4dFJ1biwgcnVuLmJhc2VsaW5lKCkgKyBwYWludE9mZnNldCk7CiAgICAgICAgIGlmIChk
ZWJ1Z0JvcmRlcnNFbmFibGVkKQogICAgICAgICAgICAgcGFpbnREZWJ1Z0JvcmRlcnMoY29udGV4
dCwgcnVuLnJlY3QoKSwgcGFpbnRPZmZzZXQpOwogICAgIH0KSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1
OTAyNykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDMxIEBACisyMDEzLTExLTEwICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKwor
ICAgICAgICBJbXBsZW1lbnQgd2hpdGUtc3BhY2UgcHJvcGVydHkgb24gc2ltcGxlIGxpbmUgbGF5
b3V0IHBhdGgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyNDEyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAK
KyAgICAgICAgVGhlIHNpbXBsZSBsaW5lIGxheW91dCBwcm9kdWNlcyBzbGlnaHRseSBkaWZmZXJl
bnQgcnVucyBpbiBzb21lIHByZS13cmFwIGNhc2VzIGNvbXBhcmVkCisgICAgICAgIHRvIHRoZSBs
aW5lIGJveCBwYXRoICh3aXRoIGxlc3MgdW5uZWNlc3NhcnkgYm94ZXMpLiBUbyBrZWVwIHRoZSB0
ZXN0IGNvdmVyYWdlIHRoaXMgcGF0Y2ggZm9yY2VzIHRoZQorICAgICAgICBleGlzdGluZyByZW5k
ZXIgdHJlZSBkdW1wIGJhc2VkIHRlc3RzIHRvIHVzZSBsaW5lIGJveGVzLiBJdCBhbHNvIGFkZHMg
bmV3IHJlZiB0ZXN0cyBmb3IKKyAgICAgICAgdGhlIHNhbWUgY2FzZXMgd2hlcmUgdGhlIHRlc3Qg
dXNlcyB0aGUgc2ltcGxlIGxpbmUgcGF0aCBhbmQgdGhlIHJlZiBpcyBmb3JjZWQgb24gdGhlIGxp
bmUgYm94IHBhdGguCisgICAgICAgIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBwYXRocyBwcm9kdWNl
IHBpeGVsLWlkZW50aWNhbCByZXN1bHRzLgorCisgICAgICAgICogZmFzdC9mb3Jtcy9iYXNpYy10
ZXh0YXJlYXMtc2ltcGxlLWxpbmVzLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvZm9ybXMvYmFzaWMtdGV4dGFyZWFzLXNpbXBsZS1saW5lcy5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2Zvcm1zL2Jhc2ljLXRleHRhcmVhcy5odG1sOgorICAgICAgICAqIGZhc3QvdGV4
dC9lbWJlZC1hdC1lbmQtb2YtcHJlLXdyYXAtbGluZS1zaW1wbGUtbGluZXMtZXhwZWN0ZWQuaHRt
bDogQWRkZWQuCisgICAgICAgICogZmFzdC90ZXh0L2VtYmVkLWF0LWVuZC1vZi1wcmUtd3JhcC1s
aW5lLXNpbXBsZS1saW5lcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3RleHQvZW1iZWQt
YXQtZW5kLW9mLXByZS13cmFwLWxpbmUuaHRtbDoKKyAgICAgICAgKiBmYXN0L3RleHQvd2hpdGVz
cGFjZS9wcmUtd3JhcC1saW5lLXRlc3Qtc2ltcGxlLWxpbmVzLWV4cGVjdGVkLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvdGV4dC93aGl0ZXNwYWNlL3ByZS13cmFwLWxpbmUtdGVzdC1zaW1w
bGUtbGluZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC90ZXh0L3doaXRlc3BhY2UvcHJl
LXdyYXAtbGluZS10ZXN0Lmh0bWw6CisgICAgICAgICogZmFzdC90ZXh0L3doaXRlc3BhY2UvcHJl
LXdyYXAtbG9uZy13b3JkLXNpbXBsZS1saW5lcy1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L3RleHQvd2hpdGVzcGFjZS9wcmUtd3JhcC1sb25nLXdvcmQtc2ltcGxlLWxpbmVz
Lmh0bWw6IEFkZGVkLiBOZXcgc2ltcGxlIHRlc3QgZm9yIG92ZXJmbG93aW5nIGxpbmVzIHdoaWNo
IHdhcyBvbmx5IGNvdmVyZWQgYnkgdGhlIHZlcnkgbGFyZ2UgYmFzaWMtdGV4dGFyZWFzLmh0bWwu
CisgICAgICAgICogZmFzdC90ZXh0L3doaXRlc3BhY2UvcHJlLXdyYXAtc3BhY2VzLWFmdGVyLW5l
d2xpbmUtc2ltcGxlLWxpbmVzLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
dGV4dC93aGl0ZXNwYWNlL3ByZS13cmFwLXNwYWNlcy1hZnRlci1uZXdsaW5lLXNpbXBsZS1saW5l
cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3RleHQvd2hpdGVzcGFjZS9wcmUtd3JhcC1z
cGFjZXMtYWZ0ZXItbmV3bGluZS5odG1sOgorCiAyMDEzLTExLTEwICBBbmRyZWFzIEtsaW5nICA8
YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBPcHRpbWl6ZSBiYXNlbGluZXM6IHN2Zy8qCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Jhc2ljLXRleHRhcmVhcy1zaW1wbGUtbGluZXMt
ZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Jhc2lj
LXRleHRhcmVhcy1zaW1wbGUtbGluZXMtZXhwZWN0ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvZm9ybXMvYmFzaWMtdGV4dGFyZWFzLXNpbXBsZS1saW5lcy1leHBlY3Rl
ZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA0IEBACis8aHRtbD4KKzxib2R5Pgor
PHNjcmlwdD4KKy8vIEZvcmNlIGxpbmUgYm94IHBhdGguCitpZiAod2luZG93LmludGVybmFscykK
KyAgICBpbnRlcm5hbHMuc2V0dGluZ3Muc2V0U2ltcGxlTGluZUxheW91dEVuYWJsZWQoZmFsc2Up
OwordmFyIGRvY1RvQXBwZW5kVG87CitmdW5jdGlvbiBhZGRUZXh0YXJlYShwcm9wZXJ0aWVzLCBv
cHRfaW5uZXJIVE1MKSB7CisgICAgdmFyIHRpdGxlID0gZG9jVG9BcHBlbmRUby5jcmVhdGVUZXh0
Tm9kZSgpOworICAgIHRpdGxlLm5vZGVWYWx1ZSA9ICcnOworICAgIHZhciB3cmFwcGVyID0gZG9j
VG9BcHBlbmRUby5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICB3cmFwcGVyLnN0eWxlLmNzc1Rl
eHQgPSAnZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyOjFweCBzb2xpZCBibHVlO2ZvbnQtc2l6
ZToxMnB4Oyc7CisgICAgdmFyIHRleHRhcmVhID0gZG9jVG9BcHBlbmRUby5jcmVhdGVFbGVtZW50
KCd0ZXh0YXJlYScpOworICAgIGZvciAocHJvcGVydHkgaW4gcHJvcGVydGllcykgeworICAgICAg
ICB2YXIgdmFsdWUgPSBwcm9wZXJ0aWVzW3Byb3BlcnR5XTsKKyAgICAgICAgdGl0bGUubm9kZVZh
bHVlICs9IHByb3BlcnR5ICsgJzogIicgKyB2YWx1ZSArICciLCAnOworICAgICAgICBpZiAocHJv
cGVydHkgPT0gJ3dyYXAnKQorICAgICAgICAgICAgdGV4dGFyZWEuc2V0QXR0cmlidXRlKHByb3Bl
cnR5LCB2YWx1ZSk7CisgICAgICAgIGVsc2UgaWYgKHByb3BlcnR5ID09ICdzdHlsZScpCisgICAg
ICAgICAgICB0ZXh0YXJlYS5zdHlsZS5jc3NUZXh0ID0gdmFsdWU7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHRleHRhcmVhW3Byb3BlcnR5XSA9IHZhbHVlOworICAgIH0KKyAgICB0ZXh0YXJl
YS5pbm5lckhUTUwgPSBvcHRfaW5uZXJIVE1MIHx8CisgICAgICAgICJMb3JlbSBpcHN1bSAgZG9s
b3IgQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogYWJjZGVmZ2hpamtsbW5vcHFyc3R1diI7CisK
KyAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKKyAgICBzcGFu
LnN0eWxlLmNzc1RleHQgPSAnZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6ODBweDsnOworICAg
IHNwYW4uYXBwZW5kQ2hpbGQodGl0bGUpOworICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoc3Bhbik7
CisgICAgd3JhcHBlci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsK
KyAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHRleHRhcmVhKQorICAgIGRvY1RvQXBwZW5kVG8uYm9k
eS5hcHBlbmRDaGlsZCh3cmFwcGVyKTsKK30KKworZnVuY3Rpb24gYWRkQWxsVGV4dGFyZWFzKGlm
cmFtZSwgY29tcGF0TW9kZSkgeworICAgIGlmcmFtZS5zdHlsZS5jc3NUZXh0ID0gJ3dpZHRoOjEw
MCU7Ym9yZGVyOjA7JworICAgIGRvY1RvQXBwZW5kVG8gPSBpZnJhbWUuY29udGVudFdpbmRvdy5k
b2N1bWVudDsKKworICAgIGRvY1RvQXBwZW5kVG8uYm9keS5zdHlsZS5jc3NUZXh0ID0gJ21hcmdp
bjowJzsKKworICAgIGlmIChkb2NUb0FwcGVuZFRvLmNvbXBhdE1vZGUgIT0gY29tcGF0TW9kZSkK
KyAgICAgICAgdGVzdEZhaWxlZCgnVGhpcyBkb2N1bWVudCBzaG91bGQgYmUgaW4gJyArIGNvbXBh
dE1vZGUgKyAnIG1vZGUuJyk7CisKKyAgICB2YXIgY29tcGF0TW9kZVRpdGxlID0gZG9jVG9BcHBl
bmRUby5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICBjb21wYXRNb2RlVGl0bGUuaW5uZXJIVE1M
ID0gJ0NvbXBhdE1vZGU6ICcgKyBkb2NUb0FwcGVuZFRvLmNvbXBhdE1vZGU7CisgICAgY29tcGF0
TW9kZVRpdGxlLnN0eWxlLmNzc1RleHQgPSAnbWFyZ2luOjVweCAwO2ZvbnQtd2VpZ2h0OmJvbGQ7
JzsKKyAgICBkb2NUb0FwcGVuZFRvLmJvZHkuYXBwZW5kQ2hpbGQoY29tcGF0TW9kZVRpdGxlKTsK
KworICAgIGFkZFRleHRhcmVhKHt9LCAnTG9yZW0gaXBzdW0gZG9sb3InKTsKKyAgICBhZGRUZXh0
YXJlYSh7ZGlzYWJsZWQ6ICd0cnVlJ30pOworICAgIGFkZFRleHRhcmVhKHtzdHlsZTogJ3BhZGRp
bmc6MTBweCd9KTsKKyAgICBhZGRUZXh0YXJlYSh7c3R5bGU6ICdwYWRkaW5nOjBweCd9KTsKKyAg
ICBhZGRUZXh0YXJlYSh7c3R5bGU6ICdtYXJnaW46MTBweCd9KTsKKyAgICBhZGRUZXh0YXJlYSh7
c3R5bGU6ICdtYXJnaW46MHB4J30pOworICAgIGFkZFRleHRhcmVhKHtzdHlsZTogJ3dpZHRoOjYw
cHgnfSk7CisgICAgYWRkVGV4dGFyZWEoe3N0eWxlOiAnd2lkdGg6NjBweDsgcGFkZGluZzoyMHB4
J30pOworICAgIGFkZFRleHRhcmVhKHtzdHlsZTogJ3dpZHRoOjYwcHg7IHBhZGRpbmc6MCd9KTsK
KyAgICBhZGRUZXh0YXJlYSh7c3R5bGU6ICdoZWlnaHQ6NjBweCd9KTsKKyAgICBhZGRUZXh0YXJl
YSh7c3R5bGU6ICd3aWR0aDo2MHB4OyBoZWlnaHQ6NjBweCd9KTsKKyAgICBhZGRUZXh0YXJlYSh7
c3R5bGU6ICdvdmVyZmxvdzpoaWRkZW4nfSk7CisgICAgYWRkVGV4dGFyZWEoe3N0eWxlOiAnb3Zl
cmZsb3c6c2Nyb2xsJ30pOworICAgIGFkZFRleHRhcmVhKHtzdHlsZTogJ292ZXJmbG93OmhpZGRl
bjsgd2lkdGg6NjBweDsgaGVpZ2h0OjYwcHgnfSk7CisgICAgYWRkVGV4dGFyZWEoe3N0eWxlOiAn
b3ZlcmZsb3c6c2Nyb2xsOyB3aWR0aDo2MHB4OyBoZWlnaHQ6NjBweCd9KTsKKyAgICBhZGRUZXh0
YXJlYSh7Y29sczogNSwgc3R5bGU6ICd3aWR0aDo2MHB4OyBoZWlnaHQ6NjBweCd9KTsKKyAgICBh
ZGRUZXh0YXJlYSh7cm93czogNCwgc3R5bGU6ICd3aWR0aDo2MHB4OyBoZWlnaHQ6NjBweCd9KTsK
KyAgICBhZGRUZXh0YXJlYSh7Y29sczogNSwgcm93czogNCwgc3R5bGU6ICd3aWR0aDo2MHB4OyBo
ZWlnaHQ6NjBweCd9KTsKKyAgICBhZGRUZXh0YXJlYSh7Y29sczogM30pOworICAgIGFkZFRleHRh
cmVhKHtyb3dzOiAzfSk7CisgICAgYWRkVGV4dGFyZWEoe2NvbHM6IDd9KTsKKyAgICBhZGRUZXh0
YXJlYSh7cm93czogN30pOworICAgIGFkZFRleHRhcmVhKHtjb2xzOiA1LCByb3dzOiA0fSk7Cisg
ICAgYWRkVGV4dGFyZWEoe3dyYXA6ICdvZmYnfSk7CisgICAgYWRkVGV4dGFyZWEoe3dyYXA6ICdo
YXJkJ30pOworICAgIGFkZFRleHRhcmVhKHt3cmFwOiAnc29mdCd9KTsKKyAgICBhZGRUZXh0YXJl
YSh7c3R5bGU6ICd3aGl0ZS1zcGFjZTpub3JtYWwnfSk7CisgICAgYWRkVGV4dGFyZWEoe3N0eWxl
OiAnd2hpdGUtc3BhY2U6cHJlJ30pOworICAgIGFkZFRleHRhcmVhKHtzdHlsZTogJ3doaXRlLXNw
YWNlOnByZXdyYXAnfSk7CisgICAgYWRkVGV4dGFyZWEoe3N0eWxlOiAnd2hpdGUtc3BhY2U6bm93
cmFwJ30pOworICAgIGFkZFRleHRhcmVhKHtzdHlsZTogJ3doaXRlLXNwYWNlOnByZS1saW5lJ30p
OworICAgIGFkZFRleHRhcmVhKHtzdHlsZTogJ3dvcmQtd3JhcDpub3JtYWwnfSk7CisgICAgYWRk
VGV4dGFyZWEoe3dyYXA6ICdvZmYnLCBzdHlsZTogJ3doaXRlLXNwYWNlOnByZS13cmFwJ30pOwor
CisgICAgaWZyYW1lLnN0eWxlLmhlaWdodCA9IGRvY1RvQXBwZW5kVG8uYm9keS5vZmZzZXRIZWln
aHQgKyA1ICsgJ3B4JzsKK30KKworZG9jdW1lbnQuYm9keS5zdHlsZS5tYXJnaW4gPSAwOworCit2
YXIgc3RhbmRhcmRzSWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7Cisv
LyBSZWZlcmVuY2UgYSBwYWdlIHdpdGggYSBkb2N0eXBlIHNvIGl0J3Mgc3RhbmRhcmRzIG1vZGUu
CitzdGFuZGFyZHNJZnJhbWUuc3JjID0gJ3Jlc291cmNlcy9iYXNpYy10ZXh0YXJlYXMtc3RhbmRh
cmRzLmh0bWwnOworc3RhbmRhcmRzSWZyYW1lLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHsKKyAgICBh
ZGRBbGxUZXh0YXJlYXMoZS50YXJnZXQsICdDU1MxQ29tcGF0Jyk7Cit9Citkb2N1bWVudC5ib2R5
LmFwcGVuZENoaWxkKHN0YW5kYXJkc0lmcmFtZSk7CisKK3ZhciBxdWlya3NJZnJhbWUgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKK3F1aXJrc0lmcmFtZS5vbmxvYWQgPSBmdW5j
dGlvbihlKSB7CisgICAgYWRkQWxsVGV4dGFyZWFzKGUudGFyZ2V0LCAnQmFja0NvbXBhdCcpOwor
fQorZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChxdWlya3NJZnJhbWUpOworPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Jhc2ljLXRleHRh
cmVhcy1zaW1wbGUtbGluZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zv
cm1zL2Jhc2ljLXRleHRhcmVhcy1zaW1wbGUtbGluZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvZm9ybXMvYmFzaWMtdGV4dGFyZWFzLXNpbXBsZS1saW5lcy5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBACis8aHRtbD4KKzxib2R5PgorPHNjcmlwdD4K
K3ZhciBkb2NUb0FwcGVuZFRvOworZnVuY3Rpb24gYWRkVGV4dGFyZWEocHJvcGVydGllcywgb3B0
X2lubmVySFRNTCkgeworICAgIHZhciB0aXRsZSA9IGRvY1RvQXBwZW5kVG8uY3JlYXRlVGV4dE5v
ZGUoKTsKKyAgICB0aXRsZS5ub2RlVmFsdWUgPSAnJzsKKyAgICB2YXIgd3JhcHBlciA9IGRvY1Rv
QXBwZW5kVG8uY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgd3JhcHBlci5zdHlsZS5jc3NUZXh0
ID0gJ2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlcjoxcHggc29saWQgYmx1ZTtmb250LXNpemU6
MTJweDsnOworICAgIHZhciB0ZXh0YXJlYSA9IGRvY1RvQXBwZW5kVG8uY3JlYXRlRWxlbWVudCgn
dGV4dGFyZWEnKTsKKyAgICBmb3IgKHByb3BlcnR5IGluIHByb3BlcnRpZXMpIHsKKyAgICAgICAg
dmFyIHZhbHVlID0gcHJvcGVydGllc1twcm9wZXJ0eV07CisgICAgICAgIHRpdGxlLm5vZGVWYWx1
ZSArPSBwcm9wZXJ0eSArICc6ICInICsgdmFsdWUgKyAnIiwgJzsKKyAgICAgICAgaWYgKHByb3Bl
cnR5ID09ICd3cmFwJykKKyAgICAgICAgICAgIHRleHRhcmVhLnNldEF0dHJpYnV0ZShwcm9wZXJ0
eSwgdmFsdWUpOworICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eSA9PSAnc3R5bGUnKQorICAgICAg
ICAgICAgdGV4dGFyZWEuc3R5bGUuY3NzVGV4dCA9IHZhbHVlOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB0ZXh0YXJlYVtwcm9wZXJ0eV0gPSB2YWx1ZTsKKyAgICB9CisgICAgdGV4dGFyZWEu
aW5uZXJIVE1MID0gb3B0X2lubmVySFRNTCB8fAorICAgICAgICAiTG9yZW0gaXBzdW0gIGRvbG9y
IEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIGFiY2RlZmdoaWprbG1ub3BxcnN0dXYiOworCisg
ICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CisgICAgc3Bhbi5z
dHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjgwcHg7JzsKKyAgICBz
cGFuLmFwcGVuZENoaWxkKHRpdGxlKTsKKyAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHNwYW4pOwor
ICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7Cisg
ICAgd3JhcHBlci5hcHBlbmRDaGlsZCh0ZXh0YXJlYSkKKyAgICBkb2NUb0FwcGVuZFRvLmJvZHku
YXBwZW5kQ2hpbGQod3JhcHBlcik7Cit9CisKK2Z1bmN0aW9uIGFkZEFsbFRleHRhcmVhcyhpZnJh
bWUsIGNvbXBhdE1vZGUpIHsKKyAgICBpZnJhbWUuc3R5bGUuY3NzVGV4dCA9ICd3aWR0aDoxMDAl
O2JvcmRlcjowOycKKyAgICBkb2NUb0FwcGVuZFRvID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9j
dW1lbnQ7CisKKyAgICBkb2NUb0FwcGVuZFRvLmJvZHkuc3R5bGUuY3NzVGV4dCA9ICdtYXJnaW46
MCc7CisKKyAgICBpZiAoZG9jVG9BcHBlbmRUby5jb21wYXRNb2RlICE9IGNvbXBhdE1vZGUpCisg
ICAgICAgIHRlc3RGYWlsZWQoJ1RoaXMgZG9jdW1lbnQgc2hvdWxkIGJlIGluICcgKyBjb21wYXRN
b2RlICsgJyBtb2RlLicpOworCisgICAgdmFyIGNvbXBhdE1vZGVUaXRsZSA9IGRvY1RvQXBwZW5k
VG8uY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgY29tcGF0TW9kZVRpdGxlLmlubmVySFRNTCA9
ICdDb21wYXRNb2RlOiAnICsgZG9jVG9BcHBlbmRUby5jb21wYXRNb2RlOworICAgIGNvbXBhdE1v
ZGVUaXRsZS5zdHlsZS5jc3NUZXh0ID0gJ21hcmdpbjo1cHggMDtmb250LXdlaWdodDpib2xkOyc7
CisgICAgZG9jVG9BcHBlbmRUby5ib2R5LmFwcGVuZENoaWxkKGNvbXBhdE1vZGVUaXRsZSk7CisK
KyAgICBhZGRUZXh0YXJlYSh7fSwgJ0xvcmVtIGlwc3VtIGRvbG9yJyk7CisgICAgYWRkVGV4dGFy
ZWEoe2Rpc2FibGVkOiAndHJ1ZSd9KTsKKyAgICBhZGRUZXh0YXJlYSh7c3R5bGU6ICdwYWRkaW5n
OjEwcHgnfSk7CisgICAgYWRkVGV4dGFyZWEoe3N0eWxlOiAncGFkZGluZzowcHgnfSk7CisgICAg
YWRkVGV4dGFyZWEoe3N0eWxlOiAnbWFyZ2luOjEwcHgnfSk7CisgICAgYWRkVGV4dGFyZWEoe3N0
eWxlOiAnbWFyZ2luOjBweCd9KTsKKyAgICBhZGRUZXh0YXJlYSh7c3R5bGU6ICd3aWR0aDo2MHB4
J30pOworICAgIGFkZFRleHRhcmVhKHtzdHlsZTogJ3dpZHRoOjYwcHg7IHBhZGRpbmc6MjBweCd9
KTsKKyAgICBhZGRUZXh0YXJlYSh7c3R5bGU6ICd3aWR0aDo2MHB4OyBwYWRkaW5nOjAnfSk7Cisg
ICAgYWRkVGV4dGFyZWEoe3N0eWxlOiAnaGVpZ2h0OjYwcHgnfSk7CisgICAgYWRkVGV4dGFyZWEo
e3N0eWxlOiAnd2lkdGg6NjBweDsgaGVpZ2h0OjYwcHgnfSk7CisgICAgYWRkVGV4dGFyZWEoe3N0
eWxlOiAnb3ZlcmZsb3c6aGlkZGVuJ30pOworICAgIGFkZFRleHRhcmVhKHtzdHlsZTogJ292ZXJm
bG93OnNjcm9sbCd9KTsKKyAgICBhZGRUZXh0YXJlYSh7c3R5bGU6ICdvdmVyZmxvdzpoaWRkZW47
IHdpZHRoOjYwcHg7IGhlaWdodDo2MHB4J30pOworICAgIGFkZFRleHRhcmVhKHtzdHlsZTogJ292
ZXJmbG93OnNjcm9sbDsgd2lkdGg6NjBweDsgaGVpZ2h0OjYwcHgnfSk7CisgICAgYWRkVGV4dGFy
ZWEoe2NvbHM6IDUsIHN0eWxlOiAnd2lkdGg6NjBweDsgaGVpZ2h0OjYwcHgnfSk7CisgICAgYWRk
VGV4dGFyZWEoe3Jvd3M6IDQsIHN0eWxlOiAnd2lkdGg6NjBweDsgaGVpZ2h0OjYwcHgnfSk7Cisg
ICAgYWRkVGV4dGFyZWEoe2NvbHM6IDUsIHJvd3M6IDQsIHN0eWxlOiAnd2lkdGg6NjBweDsgaGVp
Z2h0OjYwcHgnfSk7CisgICAgYWRkVGV4dGFyZWEoe2NvbHM6IDN9KTsKKyAgICBhZGRUZXh0YXJl
YSh7cm93czogM30pOworICAgIGFkZFRleHRhcmVhKHtjb2xzOiA3fSk7CisgICAgYWRkVGV4dGFy
ZWEoe3Jvd3M6IDd9KTsKKyAgICBhZGRUZXh0YXJlYSh7Y29sczogNSwgcm93czogNH0pOworICAg
IGFkZFRleHRhcmVhKHt3cmFwOiAnb2ZmJ30pOworICAgIGFkZFRleHRhcmVhKHt3cmFwOiAnaGFy
ZCd9KTsKKyAgICBhZGRUZXh0YXJlYSh7d3JhcDogJ3NvZnQnfSk7CisgICAgYWRkVGV4dGFyZWEo
e3N0eWxlOiAnd2hpdGUtc3BhY2U6bm9ybWFsJ30pOworICAgIGFkZFRleHRhcmVhKHtzdHlsZTog
J3doaXRlLXNwYWNlOnByZSd9KTsKKyAgICBhZGRUZXh0YXJlYSh7c3R5bGU6ICd3aGl0ZS1zcGFj
ZTpwcmV3cmFwJ30pOworICAgIGFkZFRleHRhcmVhKHtzdHlsZTogJ3doaXRlLXNwYWNlOm5vd3Jh
cCd9KTsKKyAgICBhZGRUZXh0YXJlYSh7c3R5bGU6ICd3aGl0ZS1zcGFjZTpwcmUtbGluZSd9KTsK
KyAgICBhZGRUZXh0YXJlYSh7c3R5bGU6ICd3b3JkLXdyYXA6bm9ybWFsJ30pOworICAgIGFkZFRl
eHRhcmVhKHt3cmFwOiAnb2ZmJywgc3R5bGU6ICd3aGl0ZS1zcGFjZTpwcmUtd3JhcCd9KTsKKwor
ICAgIGlmcmFtZS5zdHlsZS5oZWlnaHQgPSBkb2NUb0FwcGVuZFRvLmJvZHkub2Zmc2V0SGVpZ2h0
ICsgNSArICdweCc7Cit9CisKK2RvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luID0gMDsKKwordmFy
IHN0YW5kYXJkc0lmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOworLy8g
UmVmZXJlbmNlIGEgcGFnZSB3aXRoIGEgZG9jdHlwZSBzbyBpdCdzIHN0YW5kYXJkcyBtb2RlLgor
c3RhbmRhcmRzSWZyYW1lLnNyYyA9ICdyZXNvdXJjZXMvYmFzaWMtdGV4dGFyZWFzLXN0YW5kYXJk
cy5odG1sJzsKK3N0YW5kYXJkc0lmcmFtZS5vbmxvYWQgPSBmdW5jdGlvbihlKSB7CisgICAgYWRk
QWxsVGV4dGFyZWFzKGUudGFyZ2V0LCAnQ1NTMUNvbXBhdCcpOworfQorZG9jdW1lbnQuYm9keS5h
cHBlbmRDaGlsZChzdGFuZGFyZHNJZnJhbWUpOworCit2YXIgcXVpcmtzSWZyYW1lID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CitxdWlya3NJZnJhbWUub25sb2FkID0gZnVuY3Rp
b24oZSkgeworICAgIGFkZEFsbFRleHRhcmVhcyhlLnRhcmdldCwgJ0JhY2tDb21wYXQnKTsKK30K
K2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocXVpcmtzSWZyYW1lKTsKKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9iYXNpYy10ZXh0YXJl
YXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Jhc2ljLXRleHRh
cmVhcy5odG1sCShyZXZpc2lvbiAxNTg4ODgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Jh
c2ljLXRleHRhcmVhcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsOSBAQAogPGh0bWw+
CiA8Ym9keT4KIDxzY3JpcHQ+CisvLyBGb3JjZSBsaW5lIGJveCBwYXRoLgoraWYgKHdpbmRvdy5p
bnRlcm5hbHMpCisgICAgaW50ZXJuYWxzLnNldHRpbmdzLnNldFNpbXBsZUxpbmVMYXlvdXRFbmFi
bGVkKGZhbHNlKTsKIHZhciBkb2NUb0FwcGVuZFRvOwogZnVuY3Rpb24gYWRkVGV4dGFyZWEocHJv
cGVydGllcywgb3B0X2lubmVySFRNTCkgewogICAgIHZhciB0aXRsZSA9IGRvY1RvQXBwZW5kVG8u
Y3JlYXRlVGV4dE5vZGUoKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvdGV4dC9lbWJlZC1hdC1l
bmQtb2YtcHJlLXdyYXAtbGluZS1zaW1wbGUtbGluZXMtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3RleHQvZW1iZWQtYXQtZW5kLW9mLXByZS13cmFwLWxpbmUt
c2ltcGxlLWxpbmVzLWV4cGVjdGVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L3RleHQvZW1iZWQtYXQtZW5kLW9mLXByZS13cmFwLWxpbmUtc2ltcGxlLWxpbmVzLWV4cGVj
dGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNSBAQAorPHNjcmlwdD4KKy8vIEZv
cmNlIGxpbmUgYm94IHBhdGguCitpZiAod2luZG93LmludGVybmFscykKKyAgICBpbnRlcm5hbHMu
c2V0dGluZ3Muc2V0U2ltcGxlTGluZUxheW91dEVuYWJsZWQoZmFsc2UpOworPC9zY3JpcHQ+Cis8
c3R5bGU+CisgICAgZGl2IHsgd2hpdGUtc3BhY2U6IHByZS13cmFwOyBib3JkZXI6IDFweCBzb2xp
ZDsgcGFkZGluZzogNHB4OyB3aWR0aDogNzBweDsgbWFyZ2luOiA4cHggMDsgfQorPC9zdHlsZT4K
KzxwPgorICAgIFRoZSBmb2xsb3dpbmcgYm94ZXMgc2hvdWxkIGJlIGlkZW50aWNhbC4KKzwvcD4K
KzxkaXY+TG9yZW0uLi4uLi4uIDxzcGFuIHN0eWxlPSJkaXJlY3Rpb246IHJ0bDsgdW5pY29kZS1i
aWRpOiBiaWRpLW92ZXJyaWRlOyI+bXVzcGk8L3NwYW4+Cis8L2Rpdj4KKzxkaXY+TG9yZW0uLi4u
Li4uIGlwc3VtCis8L2Rpdj4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvdGV4dC9lbWJlZC1hdC1l
bmQtb2YtcHJlLXdyYXAtbGluZS1zaW1wbGUtbGluZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L3RleHQvZW1iZWQtYXQtZW5kLW9mLXByZS13cmFwLWxpbmUtc2ltcGxlLWxp
bmVzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3RleHQvZW1iZWQtYXQt
ZW5kLW9mLXByZS13cmFwLWxpbmUtc2ltcGxlLWxpbmVzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMCBAQAorPHN0eWxlPgorICAgIGRpdiB7IHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsg
Ym9yZGVyOiAxcHggc29saWQ7IHBhZGRpbmc6IDRweDsgd2lkdGg6IDcwcHg7IG1hcmdpbjogOHB4
IDA7IH0KKzwvc3R5bGU+Cis8cD4KKyAgICBUaGUgZm9sbG93aW5nIGJveGVzIHNob3VsZCBiZSBp
ZGVudGljYWwuCis8L3A+Cis8ZGl2PkxvcmVtLi4uLi4uLiA8c3BhbiBzdHlsZT0iZGlyZWN0aW9u
OiBydGw7IHVuaWNvZGUtYmlkaTogYmlkaS1vdmVycmlkZTsiPm11c3BpPC9zcGFuPgorPC9kaXY+
Cis8ZGl2PkxvcmVtLi4uLi4uLiBpcHN1bQorPC9kaXY+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L3RleHQvZW1iZWQtYXQtZW5kLW9mLXByZS13cmFwLWxpbmUuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L3RleHQvZW1iZWQtYXQtZW5kLW9mLXByZS13cmFwLWxpbmUuaHRtbAko
cmV2aXNpb24gMTU4ODg4KQorKysgTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2VtYmVkLWF0LWVuZC1v
Zi1wcmUtd3JhcC1saW5lLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4IEBACis8c2Ny
aXB0PgorLy8gRm9yY2UgbGluZSBib3ggcGF0aC4KK2lmICh3aW5kb3cuaW50ZXJuYWxzKQorICAg
IGludGVybmFscy5zZXR0aW5ncy5zZXRTaW1wbGVMaW5lTGF5b3V0RW5hYmxlZChmYWxzZSk7Cis8
L3NjcmlwdD4KIDxzdHlsZT4KICAgICBkaXYgeyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IGJvcmRl
cjogMXB4IHNvbGlkOyBwYWRkaW5nOiA0cHg7IHdpZHRoOiA3MHB4OyBtYXJnaW46IDhweCAwOyB9
CiA8L3N0eWxlPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC90ZXh0L3doaXRlc3BhY2UvcHJlLXdy
YXAtbGluZS10ZXN0LXNpbXBsZS1saW5lcy1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvdGV4dC93aGl0ZXNwYWNlL3ByZS13cmFwLWxpbmUtdGVzdC1zaW1wbGUt
bGluZXMtZXhwZWN0ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvdGV4
dC93aGl0ZXNwYWNlL3ByZS13cmFwLWxpbmUtdGVzdC1zaW1wbGUtbGluZXMtZXhwZWN0ZWQuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKzxzY3JpcHQ+CisvLyBGb3JjZSBsaW5l
IGJveCBwYXRoLgoraWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAgaW50ZXJuYWxzLnNldHRpbmdz
LnNldFNpbXBsZUxpbmVMYXlvdXRFbmFibGVkKGZhbHNlKTsKKzwvc2NyaXB0PgorPHRhYmxlPjx0
cj48dGQ+PGRpdiBzdHlsZT0id2hpdGUtc3BhY2U6cHJlLXdyYXAiPlRocmVlIGNoZWVycyAgICBm
b3IgT2xkVmV0IGFuZCB0aGUgbGV0dGVyIGhlIHdyb3RlIHRvIFNlbmF0b3IgRG9kZCAoc2VlIGFi
b3ZlIENvbW1lbnQpLiAgV2UgYWxsIG5lZWQgdG8gYmUgcHJvYWN0aXZlIGFuZCBjb250YWN0IG91
ciBzZW5hdG9ycyBhbmQgcmVwcmVzZW50YXRpdmVzIHRvIGxldCB0aGVtIGtub3cgb3VyIHN0cm9u
ZyBmZWVsaW5ncyBvbiB0aGlzIHN1YmplY3QuICBJIHdvdWxkIGxvc2Ugd2hhdCBsaXR0bGUgZmFp
dGggSSBoYXZlIGxlZnQgaW4gb3VyIGdvdmVybm1lbnQgaWYgdGhleSBlbmdpbmVlcmVkIGEgdGF4
IHBheWVyIGJhaWxvdXQuIApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC90ZXh0L3doaXRlc3BhY2Uv
cHJlLXdyYXAtbGluZS10ZXN0LXNpbXBsZS1saW5lcy5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvdGV4dC93aGl0ZXNwYWNlL3ByZS13cmFwLWxpbmUtdGVzdC1zaW1wbGUtbGlu
ZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvdGV4dC93aGl0ZXNwYWNl
L3ByZS13cmFwLWxpbmUtdGVzdC1zaW1wbGUtbGluZXMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDIgQEAKKwkJCQkJCQkJCQorPHRhYmxlPjx0cj48dGQ+PGRpdiBzdHlsZT0id2hpdGUt
c3BhY2U6cHJlLXdyYXAiPlRocmVlIGNoZWVycyAgICBmb3IgT2xkVmV0IGFuZCB0aGUgbGV0dGVy
IGhlIHdyb3RlIHRvIFNlbmF0b3IgRG9kZCAoc2VlIGFib3ZlIENvbW1lbnQpLiAgV2UgYWxsIG5l
ZWQgdG8gYmUgcHJvYWN0aXZlIGFuZCBjb250YWN0IG91ciBzZW5hdG9ycyBhbmQgcmVwcmVzZW50
YXRpdmVzIHRvIGxldCB0aGVtIGtub3cgb3VyIHN0cm9uZyBmZWVsaW5ncyBvbiB0aGlzIHN1Ympl
Y3QuICBJIHdvdWxkIGxvc2Ugd2hhdCBsaXR0bGUgZmFpdGggSSBoYXZlIGxlZnQgaW4gb3VyIGdv
dmVybm1lbnQgaWYgdGhleSBlbmdpbmVlcmVkIGEgdGF4IHBheWVyIGJhaWxvdXQuIApJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC90ZXh0L3doaXRlc3BhY2UvcHJlLXdyYXAtbGluZS10ZXN0Lmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC90ZXh0L3doaXRlc3BhY2UvcHJlLXdyYXAt
bGluZS10ZXN0Lmh0bWwJKHJldmlzaW9uIDE1ODg4OCkKKysrIExheW91dFRlc3RzL2Zhc3QvdGV4
dC93aGl0ZXNwYWNlL3ByZS13cmFwLWxpbmUtdGVzdC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDIgKzEsNiBAQAotCQkJCQkJCQkJCis8c2NyaXB0PgorLy8gRm9yY2UgbGluZSBib3ggcGF0aC4K
K2lmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgIGludGVybmFscy5zZXR0aW5ncy5zZXRTaW1wbGVM
aW5lTGF5b3V0RW5hYmxlZChmYWxzZSk7Cis8L3NjcmlwdD4KIDx0YWJsZT48dHI+PHRkPjxkaXYg
c3R5bGU9IndoaXRlLXNwYWNlOnByZS13cmFwIj5UaHJlZSBjaGVlcnMgICAgZm9yIE9sZFZldCBh
bmQgdGhlIGxldHRlciBoZSB3cm90ZSB0byBTZW5hdG9yIERvZGQgKHNlZSBhYm92ZSBDb21tZW50
KS4gIFdlIGFsbCBuZWVkIHRvIGJlIHByb2FjdGl2ZSBhbmQgY29udGFjdCBvdXIgc2VuYXRvcnMg
YW5kIHJlcHJlc2VudGF0aXZlcyB0byBsZXQgdGhlbSBrbm93IG91ciBzdHJvbmcgZmVlbGluZ3Mg
b24gdGhpcyBzdWJqZWN0LiAgSSB3b3VsZCBsb3NlIHdoYXQgbGl0dGxlIGZhaXRoIEkgaGF2ZSBs
ZWZ0IGluIG91ciBnb3Zlcm5tZW50IGlmIHRoZXkgZW5naW5lZXJlZCBhIHRheCBwYXllciBiYWls
b3V0LiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvdGV4dC93aGl0ZXNwYWNlL3ByZS13cmFwLWxv
bmctd29yZC1zaW1wbGUtbGluZXMtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L3RleHQvd2hpdGVzcGFjZS9wcmUtd3JhcC1sb25nLXdvcmQtc2ltcGxlLWxpbmVz
LWV4cGVjdGVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3RleHQvd2hp
dGVzcGFjZS9wcmUtd3JhcC1sb25nLXdvcmQtc2ltcGxlLWxpbmVzLWV4cGVjdGVkLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBACis8c2NyaXB0PgorLy8gRm9yY2UgbGluZSBib3gg
cGF0aC4KK2lmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgIGludGVybmFscy5zZXR0aW5ncy5zZXRT
aW1wbGVMaW5lTGF5b3V0RW5hYmxlZChmYWxzZSk7Cis8L3NjcmlwdD4KKzxkaXYgc3R5bGU9InBv
c2l0aW9uOnJlbGF0aXZlOyB3aGl0ZS1zcGFjZTpwcmUtd3JhcDsgd2lkdGg6MTgwcHg7IGJvcmRl
cjoxcHggc29saWQgYmx1ZSI+CisgICAgTG9yZW0gaXBzdW0gIGRvbG9yIEFCQ0RFRkdISUpLTE1O
T1BRUlNUVVZXWFlaIGFiY2RlZmdoaWprbG1ub3BxcnN0dXYKKzwvZGl2PgpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC90ZXh0L3doaXRlc3BhY2UvcHJlLXdyYXAtbG9uZy13b3JkLXNpbXBsZS1saW5l
cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvdGV4dC93aGl0ZXNwYWNlL3By
ZS13cmFwLWxvbmctd29yZC1zaW1wbGUtbGluZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvdGV4dC93aGl0ZXNwYWNlL3ByZS13cmFwLWxvbmctd29yZC1zaW1wbGUtbGlu
ZXMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMgQEAKKzxkaXYgc3R5bGU9InBvc2l0
aW9uOnJlbGF0aXZlOyB3aGl0ZS1zcGFjZTpwcmUtd3JhcDsgd2lkdGg6MTgwcHg7IGJvcmRlcjox
cHggc29saWQgYmx1ZSI+CisgICAgTG9yZW0gaXBzdW0gIGRvbG9yIEFCQ0RFRkdISUpLTE1OT1BR
UlNUVVZXWFlaIGFiY2RlZmdoaWprbG1ub3BxcnN0dXYKKzwvZGl2PgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC90ZXh0L3doaXRlc3BhY2UvcHJlLXdyYXAtc3BhY2VzLWFmdGVyLW5ld2xpbmUtc2lt
cGxlLWxpbmVzLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC90
ZXh0L3doaXRlc3BhY2UvcHJlLXdyYXAtc3BhY2VzLWFmdGVyLW5ld2xpbmUtc2ltcGxlLWxpbmVz
LWV4cGVjdGVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3RleHQvd2hp
dGVzcGFjZS9wcmUtd3JhcC1zcGFjZXMtYWZ0ZXItbmV3bGluZS1zaW1wbGUtbGluZXMtZXhwZWN0
ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0IEBACis8c2NyaXB0PgorLy8gRm9y
Y2UgbGluZSBib3ggcGF0aC4KK2lmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgIGludGVybmFscy5z
ZXR0aW5ncy5zZXRTaW1wbGVMaW5lTGF5b3V0RW5hYmxlZChmYWxzZSk7Cis8L3NjcmlwdD4KKzxz
dHlsZT4KKyAgICBwcmUgeyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IGJhY2tncm91bmQ6IHNpbHZl
cjsgd2lkdGg6IDdleDsgfQorPC9zdHlsZT4KKzxwPgorICAgIFRlc3QgZm9yCisgICAgPGk+PGEg
aHJlZj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyMTYiPmh0dHA6
Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIxNjwvYT4KKyAgICB3
aGl0ZS1zcGFjZTogcHJlLXdyYXAgY29sbGFwc2VzIGxlYWRpbmcgd2hpdGVzcGFjZSBmb2xsb3dp
bmcgYSBuZXdsaW5lPC9pPi4KKzwvcD4KKzxocj4KKzxwPkhlcmUgPGNvZGU+YmFyPC9jb2RlPiBz
aG91bGQgYmUgcmlnaHQgdW5kZXIgPGNvZGU+Zm9vPC9jb2RlPjo8L3A+Cis8cHJlPmZvbyAgICAg
IGJhcjwvcHJlPgorPHA+SGVyZSA8Y29kZT5iYXI8L2NvZGU+IHNob3VsZCBiZSBvbiB0aGUgcmln
aHQgaGFuZCBzaWRlIG9mIHRoZSBzZWNvbmQgbGluZTo8L3A+Cis8cHJlPmZvbzxicj4gICBiYXI8
L3ByZT4KKzxwcmU+Zm9vICAgIDxicj4gICBiYXI8L3ByZT4KKzxwcmU+Zm9vCisgICBiYXI8L3By
ZT4KKzxwcmU+Zm9vIAorICAgYmFyPC9wcmU+Cis8cHJlPmZvbyAgCisgICBiYXI8L3ByZT4KKzxw
cmU+Zm9vICAgCisgICBiYXI8L3ByZT4KKzxwcmU+Zm9vICAgIAorICAgYmFyPC9wcmU+Cis8cD5I
ZXJlIDxjb2RlPmJhcjwvY29kZT4gc2hvdWxkIGJlIG9uIHRoZSByaWdodCBoYW5kIHNpZGUgb2Yg
dGhlIHRoaXJkIGxpbmU6PC9wPgorPHByZT5mb288YnI+CisgICBiYXI8L3ByZT4KKzxwcmU+Zm9v
IGJhegorICAgYmFyPC9wcmU+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3RleHQvd2hpdGVzcGFj
ZS9wcmUtd3JhcC1zcGFjZXMtYWZ0ZXItbmV3bGluZS1zaW1wbGUtbGluZXMuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3RleHQvd2hpdGVzcGFjZS9wcmUtd3JhcC1zcGFjZXMt
YWZ0ZXItbmV3bGluZS1zaW1wbGUtbGluZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3QvdGV4dC93aGl0ZXNwYWNlL3ByZS13cmFwLXNwYWNlcy1hZnRlci1uZXdsaW5lLXNp
bXBsZS1saW5lcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjkgQEAKKzxzdHlsZT4K
KyAgICBwcmUgeyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IGJhY2tncm91bmQ6IHNpbHZlcjsgd2lk
dGg6IDdleDsgfQorPC9zdHlsZT4KKzxwPgorICAgIFRlc3QgZm9yCisgICAgPGk+PGEgaHJlZj0i
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyMTYiPmh0dHA6Ly9idWd6
aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIxNjwvYT4KKyAgICB3aGl0ZS1z
cGFjZTogcHJlLXdyYXAgY29sbGFwc2VzIGxlYWRpbmcgd2hpdGVzcGFjZSBmb2xsb3dpbmcgYSBu
ZXdsaW5lPC9pPi4KKzwvcD4KKzxocj4KKzxwPkhlcmUgPGNvZGU+YmFyPC9jb2RlPiBzaG91bGQg
YmUgcmlnaHQgdW5kZXIgPGNvZGU+Zm9vPC9jb2RlPjo8L3A+Cis8cHJlPmZvbyAgICAgIGJhcjwv
cHJlPgorPHA+SGVyZSA8Y29kZT5iYXI8L2NvZGU+IHNob3VsZCBiZSBvbiB0aGUgcmlnaHQgaGFu
ZCBzaWRlIG9mIHRoZSBzZWNvbmQgbGluZTo8L3A+Cis8cHJlPmZvbzxicj4gICBiYXI8L3ByZT4K
KzxwcmU+Zm9vICAgIDxicj4gICBiYXI8L3ByZT4KKzxwcmU+Zm9vCisgICBiYXI8L3ByZT4KKzxw
cmU+Zm9vIAorICAgYmFyPC9wcmU+Cis8cHJlPmZvbyAgCisgICBiYXI8L3ByZT4KKzxwcmU+Zm9v
ICAgCisgICBiYXI8L3ByZT4KKzxwcmU+Zm9vICAgIAorICAgYmFyPC9wcmU+Cis8cD5IZXJlIDxj
b2RlPmJhcjwvY29kZT4gc2hvdWxkIGJlIG9uIHRoZSByaWdodCBoYW5kIHNpZGUgb2YgdGhlIHRo
aXJkIGxpbmU6PC9wPgorPHByZT5mb288YnI+CisgICBiYXI8L3ByZT4KKzxwcmU+Zm9vIGJhegor
ICAgYmFyPC9wcmU+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3RleHQvd2hpdGVzcGFjZS9wcmUt
d3JhcC1zcGFjZXMtYWZ0ZXItbmV3bGluZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvdGV4dC93aGl0ZXNwYWNlL3ByZS13cmFwLXNwYWNlcy1hZnRlci1uZXdsaW5lLmh0bWwJ
KHJldmlzaW9uIDE1ODg4OCkKKysrIExheW91dFRlc3RzL2Zhc3QvdGV4dC93aGl0ZXNwYWNlL3By
ZS13cmFwLXNwYWNlcy1hZnRlci1uZXdsaW5lLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSw4IEBACis8c2NyaXB0PgorLy8gRm9yY2UgbGluZSBib3ggcGF0aC4KK2lmICh3aW5kb3cuaW50
ZXJuYWxzKQorICAgIGludGVybmFscy5zZXR0aW5ncy5zZXRTaW1wbGVMaW5lTGF5b3V0RW5hYmxl
ZChmYWxzZSk7Cis8L3NjcmlwdD4KIDxzdHlsZT4KICAgICBwcmUgeyB3aGl0ZS1zcGFjZTogcHJl
LXdyYXA7IGJhY2tncm91bmQ6IHNpbHZlcjsgd2lkdGg6IDdleDsgfQogPC9zdHlsZT4KSW5kZXg6
IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9jb21wb3NpdGluZy9yZXBhaW50L2ludmFsaWRhdGlv
bnMtb24tY29tcG9zaXRlZC1sYXllcnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9jb21wb3NpdGluZy9yZXBhaW50L2ludmFsaWRhdGlvbnMtb24t
Y29tcG9zaXRlZC1sYXllcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNTg4ODgpCisrKyBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvY29tcG9zaXRpbmcvcmVwYWludC9pbnZhbGlkYXRpb25zLW9u
LWNvbXBvc2l0ZWQtbGF5ZXJzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDYgQEAKIChyZXBhaW50IHJlY3RzCiAgIChyZWN0IDggMTMgNzg0IDE1KQorICAocmVjdCA4IDEz
IDc4NCAxNSkKICAgKHJlY3QgOCA0MTMgNzg0IDI4KQogICAocmVjdCAwIDQyMSA4MDAgMjgpCiAp
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>