<?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>137356</bug_id>
          
          <creation_ts>2014-10-02 13:36:50 -0700</creation_ts>
          <short_desc>Simplify StringTypeAdapter templates</short_desc>
          <delta_ts>2014-10-02 15:48:49 -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>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="Anders Carlsson">andersca</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1038957</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-10-02 13:36:50 -0700</bug_when>
    <thetext>Simplify StringTypeAdapter templates</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038959</commentid>
    <comment_count>1</comment_count>
      <attachid>239134</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-10-02 13:38:49 -0700</bug_when>
    <thetext>Created attachment 239134
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038966</commentid>
    <comment_count>2</comment_count>
      <attachid>239134</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-10-02 14:00:29 -0700</bug_when>
    <thetext>Comment on attachment 239134
Patch

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

&gt; Source/WTF/wtf/text/StringConcatenate.h:35
&gt; +#ifndef StringView_h

Wut.

&gt; Source/WTF/wtf/text/StringView.h:177
&gt; +#include &lt;wtf/text/WTFString.h&gt;

Why is this down here?

&gt; Source/WTF/wtf/text/StringView.h:179
&gt; +namespace WTF {

Why a second namespace WTF?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038972</commentid>
    <comment_count>3</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-10-02 14:08:14 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 239134 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=239134&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/text/StringConcatenate.h:35
&gt; &gt; +#ifndef StringView_h
&gt; 
&gt; Wut.

It&apos;s an external header guard.

&gt; 
&gt; &gt; Source/WTF/wtf/text/StringView.h:177
&gt; &gt; +#include &lt;wtf/text/WTFString.h&gt;
&gt; 
&gt; Why is this down here?

It&apos;s to avoid a cyclical include chain.

&gt; 
&gt; &gt; Source/WTF/wtf/text/StringView.h:179
&gt; &gt; +namespace WTF {
&gt; 
&gt; Why a second namespace WTF?

We don&apos;t want to #include when inside the namespace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038974</commentid>
    <comment_count>4</comment_count>
      <attachid>239136</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-10-02 14:08:45 -0700</bug_when>
    <thetext>Created attachment 239136
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038992</commentid>
    <comment_count>5</comment_count>
      <attachid>239143</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-10-02 14:54:26 -0700</bug_when>
    <thetext>Created attachment 239143
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039012</commentid>
    <comment_count>6</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-10-02 15:48:49 -0700</bug_when>
    <thetext>Committed r174234: &lt;http://trac.webkit.org/changeset/174234&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239134</attachid>
            <date>2014-10-02 13:38:49 -0700</date>
            <delta_ts>2014-10-02 14:08:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137356-20141002133850.patch</filename>
            <type>text/plain</type>
            <size>17569</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MjE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDllNjRmODkyNjcwNTM2M2Y2ZTZmMjBi
NDZkOThjNTI3NmY5Nzc4N2QuLjgzZTRkNjc5OTQzOWVhNTU0ZWEyOGNhNWQxNDlhMTFjOWJmMjg4
NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTQtMTAtMDIgIEFuZGVycyBDYXJsc3NvbiAgPGFu
ZGVyc2NhQGFwcGxlLmNvbT4KKworICAgICAgICBTaW1wbGlmeSBTdHJpbmdUeXBlQWRhcHRlciB0
ZW1wbGF0ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzNzM1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaDoKKyAgICAgICAgVXNlIFN0cmluZ1ZpZXcg
Zm9yIGNvcHlpbmcgY2hhcmFjdGVycy4gVXNlIGluaGVyaXRhbmNlIGZvciBjaGFyKiB2cyBjb25z
dCBjaGFyKiBldGMuIE1ha2UgYWxsIFN0cmluZ0FkYXB0ZXIgbWVtYmVyIGZ1bmN0aW9ucyBjb25z
dC4KKworICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaDoKKyAgICAgICAgTW92ZSBlbm91
Z2ggZnVuY3Rpb25zIG91dCBvZiBsaW5lIHNvIHdlIGNhbiBpbmNsdWRlIFdURlN0cmluZy5oIGFm
dGVyIHRoZSBTdHJpbmdWaWV3IGNsYXNzIGRlZmluaXRpb24uCisKIDIwMTQtMTAtMDEgIENocmlz
dG9waGUgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVp
bGQgZml4IGFmdGVyIHIxNzQxOTMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ0NvbmNhdGVuYXRlLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRl
LmgKaW5kZXggYzcwODE3OTRjMDFjMGQwNmRkZjhmYjhjNjUyMzAxYzVhNjc5MWE4OS4uMWZhMTFh
YjQwYjk3ZDE1ZjdhNmQ4YTIyNDgyZDAzNTgyNWFkZjE5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nQ29uY2F0ZW5hdGUuaApAQCAtMzIsNiArMzIsMTAgQEAKICNpbmNsdWRlIDx3dGYvdGV4
dC9BdG9taWNTdHJpbmcuaD4KICNlbmRpZgogCisjaWZuZGVmIFN0cmluZ1ZpZXdfaAorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KKyNlbmRpZgorCiAvLyBUaGlzIG1hY3JvIGlzIGhl
bHBmdWwgZm9yIHRlc3RpbmcgaG93IG1hbnkgaW50ZXJtZWRpYXRlIFN0cmluZ3MgYXJlIGNyZWF0
ZWQgd2hpbGUgZXZhbHVhdGluZyBhbgogLy8gZXhwcmVzc2lvbiBjb250YWluaW5nIG9wZXJhdG9y
Ky4KICNpZm5kZWYgV1RGX1NUUklOR1RZUEVBREFQVEVSX0NPUElFRF9XVEZfU1RSSU5HCkBAIC00
MSwzNzkgKzQ1LDE0NCBAQAogbmFtZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFN0
cmluZ1R5cGU+Ci1jbGFzcyBTdHJpbmdUeXBlQWRhcHRlciB7Ci19OworY2xhc3MgU3RyaW5nVHlw
ZUFkYXB0ZXI7CiAKIHRlbXBsYXRlPD4KIGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPGNoYXI+IHsK
IHB1YmxpYzoKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxjaGFyPihjaGFyIGJ1ZmZlcikKLSAgICAg
ICAgOiBtX2J1ZmZlcihidWZmZXIpCi0gICAgewotICAgIH0KLQotICAgIHVuc2lnbmVkIGxlbmd0
aCgpIHsgcmV0dXJuIDE7IH0KLQotICAgIGJvb2wgaXM4Qml0KCkgeyByZXR1cm4gdHJ1ZTsgfQot
Ci0gICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikKLSAgICB7Ci0gICAgICAgICpk
ZXN0aW5hdGlvbiA9IG1fYnVmZmVyOwotICAgIH0KLQotICAgIHZvaWQgd3JpdGVUbyhVQ2hhciog
ZGVzdGluYXRpb24pIHsgKmRlc3RpbmF0aW9uID0gbV9idWZmZXI7IH0KLQotcHJpdmF0ZToKLSAg
ICB1bnNpZ25lZCBjaGFyIG1fYnVmZmVyOwotfTsKLQotdGVtcGxhdGU8PgotY2xhc3MgU3RyaW5n
VHlwZUFkYXB0ZXI8TENoYXI+IHsKLXB1YmxpYzoKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxMQ2hh
cj4oTENoYXIgYnVmZmVyKQotICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKLSAgICB7Ci0gICAg
fQotCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gMTsgfQotCi0gICAgYm9vbCBpczhC
aXQoKSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2b2lkIHdyaXRlVG8oTENoYXIqIGRlc3RpbmF0
aW9uKQotICAgIHsKLSAgICAgICAgKmRlc3RpbmF0aW9uID0gbV9idWZmZXI7Ci0gICAgfQotCi0g
ICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikgeyAqZGVzdGluYXRpb24gPSBtX2J1
ZmZlcjsgfQotCi1wcml2YXRlOgotICAgIExDaGFyIG1fYnVmZmVyOwotfTsKLQotdGVtcGxhdGU8
PgotY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8VUNoYXI+IHsKLXB1YmxpYzoKLSAgICBTdHJpbmdU
eXBlQWRhcHRlcjxVQ2hhcj4oVUNoYXIgYnVmZmVyKQotICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZl
cikKKyAgICBTdHJpbmdUeXBlQWRhcHRlcjxjaGFyPihjaGFyIGNoYXJhY3RlcikKKyAgICAgICAg
OiBtX2NoYXJhY3RlcihjaGFyYWN0ZXIpCiAgICAgewogICAgIH0KIAogICAgIHVuc2lnbmVkIGxl
bmd0aCgpIHsgcmV0dXJuIDE7IH0KLQotICAgIGJvb2wgaXM4Qml0KCkgeyByZXR1cm4gbV9idWZm
ZXIgPD0gMHhmZjsgfQotCi0gICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChpczhCaXQoKSk7Ci0gICAgICAgICpkZXN0aW5hdGlvbiA9IHN0
YXRpY19jYXN0PExDaGFyPihtX2J1ZmZlcik7Ci0gICAgfQotCi0gICAgdm9pZCB3cml0ZVRvKFVD
aGFyKiBkZXN0aW5hdGlvbikgeyAqZGVzdGluYXRpb24gPSBtX2J1ZmZlcjsgfQotCi1wcml2YXRl
OgotICAgIFVDaGFyIG1fYnVmZmVyOwotfTsKLQotdGVtcGxhdGU8PgotY2xhc3MgU3RyaW5nVHlw
ZUFkYXB0ZXI8Y2hhcio+IHsKLXB1YmxpYzoKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxjaGFyKj4o
Y2hhciogYnVmZmVyKQotICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKLSAgICAgICAgLCBtX2xl
bmd0aChzdHJsZW4oYnVmZmVyKSkKLSAgICB7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbGVuZ3Ro
KCkgeyByZXR1cm4gbV9sZW5ndGg7IH0KLQotICAgIGJvb2wgaXM4Qml0KCkgeyByZXR1cm4gdHJ1
ZTsgfQotCi0gICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikKLSAgICB7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsgKytpKQotICAgICAgICAgICAg
ZGVzdGluYXRpb25baV0gPSBzdGF0aWNfY2FzdDxMQ2hhcj4obV9idWZmZXJbaV0pOwotICAgIH0K
LQotICAgIHZvaWQgd3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24pCi0gICAgewotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdW5z
aWduZWQgY2hhciBjID0gbV9idWZmZXJbaV07Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbltpXSA9
IGM7Ci0gICAgICAgIH0KLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgY29uc3QgY2hhciogbV9idWZm
ZXI7Ci0gICAgdW5zaWduZWQgbV9sZW5ndGg7Ci19OwotCi10ZW1wbGF0ZTw+Ci1jbGFzcyBTdHJp
bmdUeXBlQWRhcHRlcjxMQ2hhcio+IHsKLXB1YmxpYzoKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxM
Q2hhcio+KExDaGFyKiBidWZmZXIpCi0gICAgOiBtX2J1ZmZlcihidWZmZXIpCi0gICAgLCBtX2xl
bmd0aChzdHJsZW4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYnVmZmVyKSkpCi0gICAgewotICAg
IH0KLQotICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIG1fbGVuZ3RoOyB9Ci0KICAgICBi
b29sIGlzOEJpdCgpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZvaWQgd3JpdGVUbyhMQ2hhciog
ZGVzdGluYXRpb24pCisgICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QK
ICAgICB7Ci0gICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiwgbV9idWZmZXIsIG1fbGVuZ3RoICog
c2l6ZW9mKExDaGFyKSk7CisgICAgICAgICpkZXN0aW5hdGlvbiA9IG1fY2hhcmFjdGVyOwogICAg
IH0KIAotICAgIHZvaWQgd3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24pCisgICAgdm9pZCB3cml0
ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKICAgICB7Ci0gICAgICAgIFN0cmluZ0ltcGw6
OmNvcHlDaGFycyhkZXN0aW5hdGlvbiwgbV9idWZmZXIsIG1fbGVuZ3RoKTsKKyAgICAgICAgKmRl
c3RpbmF0aW9uID0gbV9jaGFyYWN0ZXI7CiAgICAgfQogCiBwcml2YXRlOgotICAgIGNvbnN0IExD
aGFyKiBtX2J1ZmZlcjsKLSAgICB1bnNpZ25lZCBtX2xlbmd0aDsKKyAgICBjaGFyIG1fY2hhcmFj
dGVyOwogfTsKIAogdGVtcGxhdGU8PgotY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8Y29uc3QgVUNo
YXIqPiB7CitjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxjb25zdCBMQ2hhcio+IHsKIHB1YmxpYzoK
LSAgICBTdHJpbmdUeXBlQWRhcHRlcjxjb25zdCBVQ2hhcio+KGNvbnN0IFVDaGFyKiBidWZmZXIp
Ci0gICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQorICAgIFN0cmluZ1R5cGVBZGFwdGVyKGNvbnN0
IExDaGFyKiBjaGFyYWN0ZXJzKQorICAgICAgICA6IG1fY2hhcmFjdGVycyhjaGFyYWN0ZXJzKQor
ICAgICAgICAsIG1fbGVuZ3RoKHN0cmxlbihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihj
aGFyYWN0ZXJzKSkpCiAgICAgewotICAgICAgICBzaXplX3QgbGVuID0gMDsKLSAgICAgICAgd2hp
bGUgKG1fYnVmZmVyW2xlbl0gIT0gVUNoYXIoMCkpCi0gICAgICAgICAgICArK2xlbjsKLQotICAg
ICAgICBpZiAobGVuID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQotICAg
ICAgICAgICAgQ1JBU0goKTsKLQotICAgICAgICBtX2xlbmd0aCA9IGxlbjsKICAgICB9CiAKLSAg
ICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2xlbmd0aDsgfQotCi0gICAgYm9vbCBpczhC
aXQoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGVuZ3RoOyB9CisgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CiAKLSAgICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgd3JpdGVUbyhMQ2hhciopCisgICAg
dm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKICAgICB7Ci0gICAgICAgIENS
QVNIKCk7CisgICAgICAgIFN0cmluZ1ZpZXcobV9jaGFyYWN0ZXJzLCBtX2xlbmd0aCkuZ2V0Q2hh
cmFjdGVyc1dpdGhVcGNvbnZlcnQoZGVzdGluYXRpb24pOwogICAgIH0KIAotICAgIHZvaWQgd3Jp
dGVUbyhVQ2hhciogZGVzdGluYXRpb24pCisgICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5h
dGlvbikgY29uc3QKICAgICB7Ci0gICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiwgbV9idWZmZXIs
IG1fbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIFN0cmluZ1ZpZXcobV9jaGFyYWN0
ZXJzLCBtX2xlbmd0aCkuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoZGVzdGluYXRpb24pOwog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBjb25zdCBVQ2hhciogbV9idWZmZXI7CisgICAgY29uc3Qg
TENoYXIqIG1fY2hhcmFjdGVyczsKICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKIH07CiAKIHRlbXBs
YXRlPD4KLWNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPGNvbnN0IGNoYXIqPiB7CitjbGFzcyBTdHJp
bmdUeXBlQWRhcHRlcjxjb25zdCBjaGFyKj4gOiBwdWJsaWMgU3RyaW5nVHlwZUFkYXB0ZXI8Y29u
c3QgTENoYXIqPiB7CiBwdWJsaWM6Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8Y29uc3QgY2hhcio+
KGNvbnN0IGNoYXIqIGJ1ZmZlcikKLSAgICAgICAgOiBtX2J1ZmZlcihidWZmZXIpCi0gICAgICAg
ICwgbV9sZW5ndGgoc3RybGVuKGJ1ZmZlcikpCisgICAgU3RyaW5nVHlwZUFkYXB0ZXIoY29uc3Qg
Y2hhciogY2hhcmFjdGVycykKKyAgICAgICAgOiBTdHJpbmdUeXBlQWRhcHRlcjxjb25zdCBMQ2hh
cio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihjaGFyYWN0ZXJzKSkKICAgICB7CiAg
ICAgfQotCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gbV9sZW5ndGg7IH0KLQotICAg
IGJvb2wgaXM4Qml0KCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdm9pZCB3cml0ZVRvKExDaGFy
KiBkZXN0aW5hdGlvbikKLSAgICB7Ci0gICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiwgbV9idWZm
ZXIsIHN0YXRpY19jYXN0PHNpemVfdD4obV9sZW5ndGgpICogc2l6ZW9mKExDaGFyKSk7Ci0gICAg
fQotCi0gICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikKLSAgICB7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBjaGFyIGMgPSBtX2J1ZmZlcltpXTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ld
ID0gYzsKLSAgICAgICAgfQotICAgIH0KLQotcHJpdmF0ZToKLSAgICBjb25zdCBjaGFyKiBtX2J1
ZmZlcjsKLSAgICB1bnNpZ25lZCBtX2xlbmd0aDsKIH07CiAKIHRlbXBsYXRlPD4KLWNsYXNzIFN0
cmluZ1R5cGVBZGFwdGVyPGNvbnN0IExDaGFyKj4geworY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8
Y2hhcio+IDogcHVibGljIFN0cmluZ1R5cGVBZGFwdGVyPGNvbnN0IGNoYXIqPiB7CiBwdWJsaWM6
Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8Y29uc3QgTENoYXIqPihjb25zdCBMQ2hhciogYnVmZmVy
KQotICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKLSAgICAgICAgLCBtX2xlbmd0aChzdHJsZW4o
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYnVmZmVyKSkpCisgICAgU3RyaW5nVHlwZUFk
YXB0ZXIoY29uc3QgY2hhciogY2hhcmFjdGVycykKKyAgICAgICAgOiBTdHJpbmdUeXBlQWRhcHRl
cjxjb25zdCBjaGFyKj4oY2hhcmFjdGVycykKICAgICB7CiAgICAgfQotCi0gICAgdW5zaWduZWQg
bGVuZ3RoKCkgeyByZXR1cm4gbV9sZW5ndGg7IH0KLQotICAgIGJvb2wgaXM4Qml0KCkgeyByZXR1
cm4gdHJ1ZTsgfQotCi0gICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikKLSAgICB7
Ci0gICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiwgbV9idWZmZXIsIHN0YXRpY19jYXN0PHNpemVf
dD4obV9sZW5ndGgpICogc2l6ZW9mKExDaGFyKSk7Ci0gICAgfQotCi0gICAgdm9pZCB3cml0ZVRv
KFVDaGFyKiBkZXN0aW5hdGlvbikKLSAgICB7Ci0gICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFy
cyhkZXN0aW5hdGlvbiwgbV9idWZmZXIsIG1fbGVuZ3RoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgY29uc3QgTENoYXIqIG1fYnVmZmVyOwotICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwogfTsKIAog
dGVtcGxhdGU8PgotY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8QVNDSUlMaXRlcmFsPiB7CitjbGFz
cyBTdHJpbmdUeXBlQWRhcHRlcjxBU0NJSUxpdGVyYWw+IDogcHVibGljIFN0cmluZ1R5cGVBZGFw
dGVyPGNvbnN0IGNoYXIqPiB7CiBwdWJsaWM6Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8QVNDSUlM
aXRlcmFsPihBU0NJSUxpdGVyYWwgYnVmZmVyKQotICAgICAgICA6IG1fYnVmZmVyKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYnVmZmVyKSkp
Ci0gICAgICAgICwgbV9sZW5ndGgoc3RybGVuKGJ1ZmZlcikpCi0gICAgewotICAgIH0KLQotICAg
IHNpemVfdCBsZW5ndGgoKSB7IHJldHVybiBtX2xlbmd0aDsgfQotCi0gICAgYm9vbCBpczhCaXQo
KSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2b2lkIHdyaXRlVG8oTENoYXIqIGRlc3RpbmF0aW9u
KQorICAgIFN0cmluZ1R5cGVBZGFwdGVyKEFTQ0lJTGl0ZXJhbCBjaGFyYWN0ZXJzKQorICAgICAg
ICA6IFN0cmluZ1R5cGVBZGFwdGVyPGNvbnN0IGNoYXIqPihjaGFyYWN0ZXJzKQogICAgIHsKLSAg
ICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBtX2J1ZmZlciwgc3RhdGljX2Nhc3Q8c2l6ZV90Piht
X2xlbmd0aCkpOwogICAgIH0KLQotICAgIHZvaWQgd3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24p
Ci0gICAgewotICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcnMoZGVzdGluYXRpb24sIG1fYnVm
ZmVyLCBtX2xlbmd0aCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGNvbnN0IExDaGFyKiBtX2J1
ZmZlcjsKLSAgICB1bnNpZ25lZCBtX2xlbmd0aDsKIH07CiAKIHRlbXBsYXRlPD4KIGNsYXNzIFN0
cmluZ1R5cGVBZGFwdGVyPFZlY3RvcjxjaGFyPj4gewogcHVibGljOgotICAgIFN0cmluZ1R5cGVB
ZGFwdGVyPFZlY3RvcjxjaGFyPj4oY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCi0gICAgICAg
IDogbV9idWZmZXIoYnVmZmVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBzaXplX3QgbGVuZ3RoKCkg
eyByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOyB9Ci0KLSAgICBib29sIGlzOEJpdCgpIHsgcmV0dXJu
IHRydWU7IH0KLQotICAgIHZvaWQgd3JpdGVUbyhMQ2hhciogZGVzdGluYXRpb24pCi0gICAgewot
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYnVmZmVyLnNpemUoKTsgKytpKQotICAg
ICAgICAgICAgZGVzdGluYXRpb25baV0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihtX2J1
ZmZlcltpXSk7Ci0gICAgfQotCi0gICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikK
LSAgICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9idWZmZXIuc2l6ZSgpOyAr
K2kpCi0gICAgICAgICAgICBkZXN0aW5hdGlvbltpXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KG1fYnVmZmVyW2ldKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgY29uc3QgVmVjdG9yPGNo
YXI+JiBtX2J1ZmZlcjsKLX07Ci0KLXRlbXBsYXRlPD4KLWNsYXNzIFN0cmluZ1R5cGVBZGFwdGVy
PFZlY3RvcjxMQ2hhcj4+IHsKLXB1YmxpYzoKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxWZWN0b3I8
TENoYXI+Pihjb25zdCBWZWN0b3I8TENoYXI+JiBidWZmZXIpCi0gICAgICAgIDogbV9idWZmZXIo
YnVmZmVyKQorICAgIFN0cmluZ1R5cGVBZGFwdGVyKGNvbnN0IFZlY3RvcjxjaGFyPiYgdmVjdG9y
KQorICAgICAgICA6IG1fdmVjdG9yKHZlY3RvcikKICAgICB7CiAgICAgfQogCi0gICAgc2l6ZV90
IGxlbmd0aCgpIHsgcmV0dXJuIG1fYnVmZmVyLnNpemUoKTsgfQorICAgIHNpemVfdCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5zaXplKCk7IH0KKyAgICBib29sIGlzOEJpdCgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIGJvb2wgaXM4Qml0KCkgeyByZXR1cm4gdHJ1ZTsg
fQotCi0gICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikKKyAgICB2b2lkIHdyaXRl
VG8oTENoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAogICAgIHsKLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2J1ZmZlci5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGRlc3RpbmF0aW9u
W2ldID0gbV9idWZmZXJbaV07CisgICAgICAgIFN0cmluZ1ZpZXcocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KG1fdmVjdG9yLmRhdGEoKSksIG1fdmVjdG9yLnNpemUoKSkuZ2V0Q2hhcmFj
dGVyc1dpdGhVcGNvbnZlcnQoZGVzdGluYXRpb24pOwogICAgIH0KIAotICAgIHZvaWQgd3JpdGVU
byhVQ2hhciogZGVzdGluYXRpb24pCisgICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlv
bikgY29uc3QKICAgICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9idWZmZXIu
c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBkZXN0aW5hdGlvbltpXSA9IG1fYnVmZmVyW2ldOwor
ICAgICAgICBTdHJpbmdWaWV3KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihtX3ZlY3Rv
ci5kYXRhKCkpLCBtX3ZlY3Rvci5zaXplKCkpLmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KGRl
c3RpbmF0aW9uKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgY29uc3QgVmVjdG9yPExDaGFyPiYg
bV9idWZmZXI7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+JiBtX3ZlY3RvcjsKIH07CiAKIHRlbXBs
YXRlPD4KIGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZz4gewogcHVibGljOgogICAgIFN0
cmluZ1R5cGVBZGFwdGVyPFN0cmluZz4oY29uc3QgU3RyaW5nJiBzdHJpbmcpCi0gICAgICAgIDog
bV9idWZmZXIoc3RyaW5nKQorICAgICAgICA6IG1fc3RyaW5nKHN0cmluZykKICAgICB7CiAgICAg
fQogCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gbV9idWZmZXIubGVuZ3RoKCk7IH0K
KyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5sZW5ndGgoKTsg
fQorICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNOdWxsKCkgfHwg
bV9zdHJpbmcuaXM4Qml0KCk7IH0KIAotICAgIGJvb2wgaXM4Qml0KCkgeyByZXR1cm4gbV9idWZm
ZXIuaXNOdWxsKCkgfHwgbV9idWZmZXIuaXM4Qml0KCk7IH0KLQotICAgIHZvaWQgd3JpdGVUbyhM
Q2hhciogZGVzdGluYXRpb24pCisgICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikg
Y29uc3QKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fYnVmZmVyLmxlbmd0aCgp
OwotCi0gICAgICAgIEFTU0VSVChpczhCaXQoKSk7Ci0gICAgICAgIGNvbnN0IExDaGFyKiBkYXRh
ID0gbV9idWZmZXIuY2hhcmFjdGVyczgoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgZGVzdGluYXRpb25baV0gPSBkYXRhW2ldOwot
ICAgICAgICAKLSAgICAgICAgV1RGX1NUUklOR1RZUEVBREFQVEVSX0NPUElFRF9XVEZfU1RSSU5H
KCk7CisgICAgICAgIFN0cmluZ1ZpZXcobV9zdHJpbmcpLmdldENoYXJhY3RlcnNXaXRoVXBjb252
ZXJ0KGRlc3RpbmF0aW9uKTsKICAgICB9CiAKLSAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3Rp
bmF0aW9uKQorICAgIHZvaWQgd3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24pIGNvbnN0CiAgICAg
ewotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2J1ZmZlci5sZW5ndGgoKTsKLQotICAgICAg
ICBpZiAoaXM4Qml0KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IExDaGFyKiBkYXRhID0gbV9idWZm
ZXIuY2hhcmFjdGVyczgoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkKLSAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbltpXSA9IGRhdGFbaV07Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb25zdCBVQ2hhciogZGF0YSA9IG1fYnVmZmVy
LmNoYXJhY3RlcnMxNigpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKQotICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ldID0gZGF0YVtpXTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgV1RGX1NUUklOR1RZUEVBREFQVEVSX0NPUElFRF9X
VEZfU1RSSU5HKCk7CisgICAgICAgIFN0cmluZ1ZpZXcobV9zdHJpbmcpLmdldENoYXJhY3RlcnNX
aXRoVXBjb252ZXJ0KGRlc3RpbmF0aW9uKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgY29uc3Qg
U3RyaW5nJiBtX2J1ZmZlcjsKKyAgICBjb25zdCBTdHJpbmcmIG1fc3RyaW5nOwogfTsKIAogdGVt
cGxhdGU8PgotY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8QXRvbWljU3RyaW5nPiB7CitjbGFzcyBT
dHJpbmdUeXBlQWRhcHRlcjxBdG9taWNTdHJpbmc+IDogcHVibGljIFN0cmluZ1R5cGVBZGFwdGVy
PFN0cmluZz4gewogcHVibGljOgotICAgIFN0cmluZ1R5cGVBZGFwdGVyPEF0b21pY1N0cmluZz4o
Y29uc3QgQXRvbWljU3RyaW5nJiBzdHJpbmcpCi0gICAgICAgIDogbV9hZGFwdGVyKHN0cmluZy5z
dHJpbmcoKSkKKyAgICBTdHJpbmdUeXBlQWRhcHRlcihjb25zdCBBdG9taWNTdHJpbmcmIHN0cmlu
ZykKKyAgICAgICAgOiBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmc+KHN0cmluZy5zdHJpbmcoKSkK
ICAgICB7CiAgICAgfQotCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gbV9hZGFwdGVy
Lmxlbmd0aCgpOyB9Ci0KLSAgICBib29sIGlzOEJpdCgpIHsgcmV0dXJuIG1fYWRhcHRlci5pczhC
aXQoKTsgfQotCi0gICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikgeyBtX2FkYXB0
ZXIud3JpdGVUbyhkZXN0aW5hdGlvbik7IH0KLSAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3Rp
bmF0aW9uKSB7IG1fYWRhcHRlci53cml0ZVRvKGRlc3RpbmF0aW9uKTsgfQotCi1wcml2YXRlOgot
ICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZz4gbV9hZGFwdGVyOwogfTsKIAogaW5saW5lIHZv
aWQgc3VtV2l0aE92ZXJmbG93KHVuc2lnbmVkJiB0b3RhbCwgdW5zaWduZWQgYWRkZW5kLCBib29s
JiBvdmVyZmxvdykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5o
IGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgKaW5kZXggOWM5OGQwODA3NGU0NzY3
MzFiMjRhY2Q4ZDY0YjM2NDM1MTQyYThkNi4uZGUzMjYyMTRhN2EzYThhMmQyMTA3OTFjOTExYTcx
YzRjN2EwOGYxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgK
KysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgKQEAgLTI2LDcgKzI2LDExIEBA
CiAjaWZuZGVmIFN0cmluZ1ZpZXdfaAogI2RlZmluZSBTdHJpbmdWaWV3X2gKIAotI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CisjaW5jbHVkZSA8dW5pY29kZS91dHlwZXMu
aD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvTENoYXIuaD4KIAog
bmFtZXNwYWNlIFdURiB7CiAKQEAgLTUzLDI3ICs1Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgaW5p
dGlhbGl6ZShjaGFyYWN0ZXJzLCBsZW5ndGgpOwogICAgIH0KIAotICAgIFN0cmluZ1ZpZXcoY29u
c3QgU3RyaW5nSW1wbCYgc3RyaW5nKQotICAgIHsKLSAgICAgICAgaWYgKHN0cmluZy5pczhCaXQo
KSkKLSAgICAgICAgICAgIGluaXRpYWxpemUoc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5s
ZW5ndGgoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGluaXRpYWxpemUoc3RyaW5nLmNo
YXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgIH0KLQotICAgIFN0cmluZ1ZpZXco
Y29uc3QgU3RyaW5nJiBzdHJpbmcpCi0gICAgewotICAgICAgICBpZiAoIXN0cmluZy5pbXBsKCkp
IHsKLSAgICAgICAgICAgIG1fY2hhcmFjdGVycyA9IG51bGxwdHI7Ci0gICAgICAgICAgICBtX2xl
bmd0aCA9IDA7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHN0
cmluZy5pczhCaXQoKSkgewotICAgICAgICAgICAgaW5pdGlhbGl6ZShzdHJpbmcuY2hhcmFjdGVy
czgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBpbml0aWFsaXplKHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgp
KTsKLSAgICB9CisgICAgU3RyaW5nVmlldyhjb25zdCBTdHJpbmdJbXBsJik7CisgICAgU3RyaW5n
Vmlldyhjb25zdCBTdHJpbmcmKTsKIAogICAgIHN0YXRpYyBTdHJpbmdWaWV3IGVtcHR5KCkKICAg
ICB7CkBAIC0xMzQsMzUgKzExOSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJpbmdW
aWV3KGNoYXJhY3RlcnMxNigpICsgc3RhcnQsIGxlbmd0aCk7CiAgICAgfQogCi0gICAgU3RyaW5n
IHRvU3RyaW5nKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChpczhCaXQoKSkKLSAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoY2hhcmFjdGVyczgoKSwgbGVuZ3RoKCkpOwotCi0gICAgICAgIHJl
dHVybiBTdHJpbmcoY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpKTsKLSAgICB9Ci0KLSAgICBmbG9h
dCB0b0Zsb2F0KGJvb2wmIGlzVmFsaWQpCi0gICAgewotICAgICAgICBpZiAoaXM4Qml0KCkpCi0g
ICAgICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1RvRmxvYXQoY2hhcmFjdGVyczgoKSwgbGVuZ3Ro
KCksICZpc1ZhbGlkKTsKLSAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0Zsb2F0KGNoYXJhY3Rl
cnMxNigpLCBsZW5ndGgoKSwgJmlzVmFsaWQpOwotICAgIH0KLQotICAgIGludCB0b0ludChib29s
JiBpc1ZhbGlkKQotICAgIHsKLSAgICAgICAgaWYgKGlzOEJpdCgpKQotICAgICAgICAgICAgcmV0
dXJuIGNoYXJhY3RlcnNUb0ludChjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSwgJmlzVmFsaWQpOwot
ICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50KGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSwg
JmlzVmFsaWQpOwotICAgIH0KKyAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKIAotICAgIFN0
cmluZyB0b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChp
czhCaXQoKSkKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29w
eWluZyhjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSk7CisgICAgZmxvYXQgdG9GbG9hdChib29sJiBp
c1ZhbGlkKSBjb25zdDsKKyAgICBpbnQgdG9JbnQoYm9vbCYgaXNWYWxpZCkgY29uc3Q7CiAKLSAg
ICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKGNoYXJhY3RlcnMx
NigpLCBsZW5ndGgoKSk7Ci0gICAgfQorICAgIFN0cmluZyB0b1N0cmluZ1dpdGhvdXRDb3B5aW5n
KCkgY29uc3Q7CiAKICAgICBVQ2hhciBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdAog
ICAgIHsKQEAgLTE3MiwxMiArMTM0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY2hhcmFj
dGVyczE2KClbaW5kZXhdOwogICAgIH0KIAotICAgIHNpemVfdCBmaW5kKFVDaGFyIGNoYXJhY3Rl
ciwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGlzOEJpdCgp
KQotICAgICAgICAgICAgcmV0dXJuIFdURjo6ZmluZChjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSwg
Y2hhcmFjdGVyLCBzdGFydCk7Ci0gICAgICAgIHJldHVybiBXVEY6OmZpbmQoY2hhcmFjdGVyczE2
KCksIGxlbmd0aCgpLCBjaGFyYWN0ZXIsIHN0YXJ0KTsKLSAgICB9CisgICAgc2l6ZV90IGZpbmQo
VUNoYXIgY2hhcmFjdGVyLCB1bnNpZ25lZCBzdGFydCA9IDApIGNvbnN0OwogCiAgICAgYm9vbCBj
b250YWlucyhVQ2hhciBjKSBjb25zdCB7IHJldHVybiBmaW5kKGMpICE9IG5vdEZvdW5kOyB9CiAK
QEAgLTIxNSw2ICsxNzIsMzQgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKIH07
CiAKK30KKworI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV1RG
IHsKKworaW5saW5lIFN0cmluZ1ZpZXc6OlN0cmluZ1ZpZXcoY29uc3QgU3RyaW5nSW1wbCYgc3Ry
aW5nKQoreworICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCisgICAgICAgIGluaXRpYWxpemUoc3Ry
aW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSk7CisgICAgZWxzZQorICAgICAgICBp
bml0aWFsaXplKHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpKTsKK30KKwor
aW5saW5lIFN0cmluZ1ZpZXc6OlN0cmluZ1ZpZXcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7Cisg
ICAgaWYgKCFzdHJpbmcuaW1wbCgpKSB7CisgICAgICAgIG1fY2hhcmFjdGVycyA9IG51bGxwdHI7
CisgICAgICAgIG1fbGVuZ3RoID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
c3RyaW5nLmlzOEJpdCgpKSB7CisgICAgICAgIGluaXRpYWxpemUoc3RyaW5nLmNoYXJhY3RlcnM4
KCksIHN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW5pdGlh
bGl6ZShzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgoKSk7Cit9CisKIGlubGlu
ZSB2b2lkIFN0cmluZ1ZpZXc6OmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KExDaGFyKiBkZXN0
aW5hdGlvbikgY29uc3QKIHsKICAgICBBU1NFUlQoaXM4Qml0KCkpOwpAQCAtMjQ3LDYgKzIzMiw0
NSBAQCBpbmxpbmUgU3RyaW5nVmlldzo6VXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOjpVcGNvbnZlcnRl
ZENoYXJhY3RlcnMoY29uc3QgU3RyaW5nVmlldwogICAgIG1fY2hhcmFjdGVycyA9IG1fdXBjb252
ZXJ0ZWRDaGFyYWN0ZXJzLmRhdGEoKTsKIH0KIAoraW5saW5lIFN0cmluZyBTdHJpbmdWaWV3Ojp0
b1N0cmluZygpIGNvbnN0Cit7CisgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKGNoYXJhY3RlcnM4KCksIGxlbmd0aCgpKTsKKworICAgIHJldHVybiBTdHJpbmcoY2hhcmFj
dGVyczE2KCksIGxlbmd0aCgpKTsKK30KKworaW5saW5lIGZsb2F0IFN0cmluZ1ZpZXc6OnRvRmxv
YXQoYm9vbCYgaXNWYWxpZCkgY29uc3QKK3sKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgIHJl
dHVybiBjaGFyYWN0ZXJzVG9GbG9hdChjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSwgJmlzVmFsaWQp
OworICAgIHJldHVybiBjaGFyYWN0ZXJzVG9GbG9hdChjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCks
ICZpc1ZhbGlkKTsKK30KKworaW5saW5lIGludCBTdHJpbmdWaWV3Ojp0b0ludChib29sJiBpc1Zh
bGlkKSBjb25zdAoreworICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGNoYXJhY3Rl
cnNUb0ludChjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSwgJmlzVmFsaWQpOworICAgIHJldHVybiBj
aGFyYWN0ZXJzVG9JbnQoY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpLCAmaXNWYWxpZCk7Cit9CisK
K2lubGluZSBTdHJpbmcgU3RyaW5nVmlldzo6dG9TdHJpbmdXaXRob3V0Q29weWluZygpIGNvbnN0
Cit7CisgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRl
V2l0aG91dENvcHlpbmcoY2hhcmFjdGVyczgoKSwgbGVuZ3RoKCkpOworCisgICAgcmV0dXJuIFN0
cmluZ0ltcGw6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSk7
Cit9CisKK2lubGluZSBzaXplX3QgU3RyaW5nVmlldzo6ZmluZChVQ2hhciBjaGFyYWN0ZXIsIHVu
c2lnbmVkIHN0YXJ0KSBjb25zdAoreworICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgcmV0dXJu
IFdURjo6ZmluZChjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSwgY2hhcmFjdGVyLCBzdGFydCk7Cisg
ICAgcmV0dXJuIFdURjo6ZmluZChjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCksIGNoYXJhY3Rlciwg
c3RhcnQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlPiBjbGFzcyBTdHJpbmdU
eXBlQWRhcHRlcjsKKwogdGVtcGxhdGU8PiBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdW
aWV3PiB7CiBwdWJsaWM6CiAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVmlldz4oU3RyaW5n
VmlldyBzdHJpbmcpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239136</attachid>
            <date>2014-10-02 14:08:45 -0700</date>
            <delta_ts>2014-10-02 14:54:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137356-20141002140847.patch</filename>
            <type>text/plain</type>
            <size>18126</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MjE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDllNjRmODkyNjcwNTM2M2Y2ZTZmMjBi
NDZkOThjNTI3NmY5Nzc4N2QuLjgzZTRkNjc5OTQzOWVhNTU0ZWEyOGNhNWQxNDlhMTFjOWJmMjg4
NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTQtMTAtMDIgIEFuZGVycyBDYXJsc3NvbiAgPGFu
ZGVyc2NhQGFwcGxlLmNvbT4KKworICAgICAgICBTaW1wbGlmeSBTdHJpbmdUeXBlQWRhcHRlciB0
ZW1wbGF0ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzNzM1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaDoKKyAgICAgICAgVXNlIFN0cmluZ1ZpZXcg
Zm9yIGNvcHlpbmcgY2hhcmFjdGVycy4gVXNlIGluaGVyaXRhbmNlIGZvciBjaGFyKiB2cyBjb25z
dCBjaGFyKiBldGMuIE1ha2UgYWxsIFN0cmluZ0FkYXB0ZXIgbWVtYmVyIGZ1bmN0aW9ucyBjb25z
dC4KKworICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaDoKKyAgICAgICAgTW92ZSBlbm91
Z2ggZnVuY3Rpb25zIG91dCBvZiBsaW5lIHNvIHdlIGNhbiBpbmNsdWRlIFdURlN0cmluZy5oIGFm
dGVyIHRoZSBTdHJpbmdWaWV3IGNsYXNzIGRlZmluaXRpb24uCisKIDIwMTQtMTAtMDEgIENocmlz
dG9waGUgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVp
bGQgZml4IGFmdGVyIHIxNzQxOTMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ0NvbmNhdGVuYXRlLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRl
LmgKaW5kZXggYzcwODE3OTRjMDFjMGQwNmRkZjhmYjhjNjUyMzAxYzVhNjc5MWE4OS4uZGZiOTIw
YTNjNzUwMTkyNjBjMDVlYjg4ZDY3YjA0ZWE5ZmEwOTU5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nQ29uY2F0ZW5hdGUuaApAQCAtMzIsNiArMzIsMTAgQEAKICNpbmNsdWRlIDx3dGYvdGV4
dC9BdG9taWNTdHJpbmcuaD4KICNlbmRpZgogCisjaWZuZGVmIFN0cmluZ1ZpZXdfaAorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KKyNlbmRpZgorCiAvLyBUaGlzIG1hY3JvIGlzIGhl
bHBmdWwgZm9yIHRlc3RpbmcgaG93IG1hbnkgaW50ZXJtZWRpYXRlIFN0cmluZ3MgYXJlIGNyZWF0
ZWQgd2hpbGUgZXZhbHVhdGluZyBhbgogLy8gZXhwcmVzc2lvbiBjb250YWluaW5nIG9wZXJhdG9y
Ky4KICNpZm5kZWYgV1RGX1NUUklOR1RZUEVBREFQVEVSX0NPUElFRF9XVEZfU1RSSU5HCkBAIC00
MSwzNzkgKzQ1LDE3OCBAQAogbmFtZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFN0
cmluZ1R5cGU+Ci1jbGFzcyBTdHJpbmdUeXBlQWRhcHRlciB7Ci19OworY2xhc3MgU3RyaW5nVHlw
ZUFkYXB0ZXI7CiAKIHRlbXBsYXRlPD4KIGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPGNoYXI+IHsK
IHB1YmxpYzoKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxjaGFyPihjaGFyIGJ1ZmZlcikKLSAgICAg
ICAgOiBtX2J1ZmZlcihidWZmZXIpCisgICAgU3RyaW5nVHlwZUFkYXB0ZXI8Y2hhcj4oY2hhciBj
aGFyYWN0ZXIpCisgICAgICAgIDogbV9jaGFyYWN0ZXIoY2hhcmFjdGVyKQogICAgIHsKICAgICB9
CiAKICAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiAxOyB9Ci0KICAgICBib29sIGlzOEJp
dCgpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZvaWQgd3JpdGVUbyhMQ2hhciogZGVzdGluYXRp
b24pCisgICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKICAgICB7Ci0g
ICAgICAgICpkZXN0aW5hdGlvbiA9IG1fYnVmZmVyOworICAgICAgICAqZGVzdGluYXRpb24gPSBt
X2NoYXJhY3RlcjsKICAgICB9CiAKLSAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9u
KSB7ICpkZXN0aW5hdGlvbiA9IG1fYnVmZmVyOyB9Ci0KLXByaXZhdGU6Ci0gICAgdW5zaWduZWQg
Y2hhciBtX2J1ZmZlcjsKLX07Ci0KLXRlbXBsYXRlPD4KLWNsYXNzIFN0cmluZ1R5cGVBZGFwdGVy
PExDaGFyPiB7Ci1wdWJsaWM6Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8TENoYXI+KExDaGFyIGJ1
ZmZlcikKLSAgICAgICAgOiBtX2J1ZmZlcihidWZmZXIpCi0gICAgewotICAgIH0KLQotICAgIHVu
c2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIDE7IH0KLQotICAgIGJvb2wgaXM4Qml0KCkgeyByZXR1
cm4gdHJ1ZTsgfQotCi0gICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikKKyAgICB2
b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAogICAgIHsKLSAgICAgICAgKmRl
c3RpbmF0aW9uID0gbV9idWZmZXI7CisgICAgICAgICpkZXN0aW5hdGlvbiA9IG1fY2hhcmFjdGVy
OwogICAgIH0KIAotICAgIHZvaWQgd3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24pIHsgKmRlc3Rp
bmF0aW9uID0gbV9idWZmZXI7IH0KLQogcHJpdmF0ZToKLSAgICBMQ2hhciBtX2J1ZmZlcjsKKyAg
ICBjaGFyIG1fY2hhcmFjdGVyOwogfTsKIAogdGVtcGxhdGU8PgotY2xhc3MgU3RyaW5nVHlwZUFk
YXB0ZXI8VUNoYXI+IHsKLXB1YmxpYzoKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxVQ2hhcj4oVUNo
YXIgYnVmZmVyKQotICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKLSAgICB7Ci0gICAgfQotCi0g
ICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gMTsgfQotCi0gICAgYm9vbCBpczhCaXQoKSB7
IHJldHVybiBtX2J1ZmZlciA8PSAweGZmOyB9Ci0KLSAgICB2b2lkIHdyaXRlVG8oTENoYXIqIGRl
c3RpbmF0aW9uKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzOEJpdCgpKTsKLSAgICAgICAgKmRl
c3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8TENoYXI+KG1fYnVmZmVyKTsKLSAgICB9Ci0KLSAgICB2
b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKSB7ICpkZXN0aW5hdGlvbiA9IG1fYnVmZmVy
OyB9Ci0KLXByaXZhdGU6Ci0gICAgVUNoYXIgbV9idWZmZXI7Ci19OwotCi10ZW1wbGF0ZTw+Ci1j
bGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxjaGFyKj4gewotcHVibGljOgotICAgIFN0cmluZ1R5cGVB
ZGFwdGVyPGNoYXIqPihjaGFyKiBidWZmZXIpCi0gICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQot
ICAgICAgICAsIG1fbGVuZ3RoKHN0cmxlbihidWZmZXIpKQotICAgIHsKLSAgICB9Ci0KLSAgICB1
bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2xlbmd0aDsgfQotCi0gICAgYm9vbCBpczhCaXQo
KSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2b2lkIHdyaXRlVG8oTENoYXIqIGRlc3RpbmF0aW9u
KQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kp
Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbltpXSA9IHN0YXRpY19jYXN0PExDaGFyPihtX2J1ZmZl
cltpXSk7Ci0gICAgfQotCi0gICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikKLSAg
ICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsgKytpKSB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBtX2J1ZmZlcltpXTsKLSAgICAgICAgICAgIGRl
c3RpbmF0aW9uW2ldID0gYzsKLSAgICAgICAgfQotICAgIH0KLQotcHJpdmF0ZToKLSAgICBjb25z
dCBjaGFyKiBtX2J1ZmZlcjsKLSAgICB1bnNpZ25lZCBtX2xlbmd0aDsKLX07Ci0KLXRlbXBsYXRl
PD4KLWNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPExDaGFyKj4geworY2xhc3MgU3RyaW5nVHlwZUFk
YXB0ZXI8Y29uc3QgTENoYXIqPiB7CiBwdWJsaWM6Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8TENo
YXIqPihMQ2hhciogYnVmZmVyKQotICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAgICwgbV9sZW5n
dGgoc3RybGVuKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlcikpKQorICAgIFN0cmluZ1R5
cGVBZGFwdGVyKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzKQorICAgICAgICA6IG1fY2hhcmFjdGVy
cyhjaGFyYWN0ZXJzKQorICAgICAgICAsIG1fbGVuZ3RoKHN0cmxlbihyZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqPihjaGFyYWN0ZXJzKSkpCiAgICAgewogICAgIH0KIAotICAgIHVuc2lnbmVk
IGxlbmd0aCgpIHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KIAotICAgIGJvb2wgaXM4Qml0KCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdm9p
ZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikKKyAgICB2b2lkIHdyaXRlVG8oTENoYXIqIGRl
c3RpbmF0aW9uKSBjb25zdAogICAgIHsKLSAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBtX2J1
ZmZlciwgbV9sZW5ndGggKiBzaXplb2YoTENoYXIpKTsKKyAgICAgICAgU3RyaW5nVmlldyhtX2No
YXJhY3RlcnMsIG1fbGVuZ3RoKS5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChkZXN0aW5hdGlv
bik7CiAgICAgfQogCi0gICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikKKyAgICB2
b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAogICAgIHsKLSAgICAgICAgU3Ry
aW5nSW1wbDo6Y29weUNoYXJzKGRlc3RpbmF0aW9uLCBtX2J1ZmZlciwgbV9sZW5ndGgpOworICAg
ICAgICBTdHJpbmdWaWV3KG1fY2hhcmFjdGVycywgbV9sZW5ndGgpLmdldENoYXJhY3RlcnNXaXRo
VXBjb252ZXJ0KGRlc3RpbmF0aW9uKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgY29uc3QgTENo
YXIqIG1fYnVmZmVyOworICAgIGNvbnN0IExDaGFyKiBtX2NoYXJhY3RlcnM7CiAgICAgdW5zaWdu
ZWQgbV9sZW5ndGg7CiB9OwogCiB0ZW1wbGF0ZTw+CiBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxj
b25zdCBVQ2hhcio+IHsKIHB1YmxpYzoKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxjb25zdCBVQ2hh
cio+KGNvbnN0IFVDaGFyKiBidWZmZXIpCi0gICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQorICAg
IFN0cmluZ1R5cGVBZGFwdGVyKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzKQorICAgICAgICA6IG1f
Y2hhcmFjdGVycyhjaGFyYWN0ZXJzKQogICAgIHsKLSAgICAgICAgc2l6ZV90IGxlbiA9IDA7Ci0g
ICAgICAgIHdoaWxlIChtX2J1ZmZlcltsZW5dICE9IFVDaGFyKDApKQotICAgICAgICAgICAgKyts
ZW47CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CisgICAgICAgIHdoaWxlIChtX2NoYXJh
Y3RlcnNbbGVuZ3RoXSkKKyAgICAgICAgICAgICsrbGVuZ3RoOwogCi0gICAgICAgIGlmIChsZW4g
PiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCisgICAgICAgIGlmIChsZW5n
dGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAgICAgICAgICAgICBD
UkFTSCgpOwogCi0gICAgICAgIG1fbGVuZ3RoID0gbGVuOworICAgICAgICBtX2xlbmd0aCA9IGxl
bmd0aDsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2xlbmd0aDsg
fQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAg
Ym9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgYm9vbCBpczhCaXQo
KSB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHdy
aXRlVG8oTENoYXIqKQorICAgIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCB3cml0ZVRvKExD
aGFyKikgY29uc3QKICAgICB7CiAgICAgICAgIENSQVNIKCk7CiAgICAgfQogCi0gICAgdm9pZCB3
cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikKKyAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3Rp
bmF0aW9uKSBjb25zdAogICAgIHsKLSAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBtX2J1ZmZl
ciwgbV9sZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9u
LCBtX2NoYXJhY3RlcnMsIG1fbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgfQogCiBwcml2
YXRlOgotICAgIGNvbnN0IFVDaGFyKiBtX2J1ZmZlcjsKKyAgICBjb25zdCBVQ2hhciogbV9jaGFy
YWN0ZXJzOwogICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwogfTsKIAogdGVtcGxhdGU8PgotY2xhc3Mg
U3RyaW5nVHlwZUFkYXB0ZXI8Y29uc3QgY2hhcio+IHsKK2NsYXNzIFN0cmluZ1R5cGVBZGFwdGVy
PGNvbnN0IGNoYXIqPiA6IHB1YmxpYyBTdHJpbmdUeXBlQWRhcHRlcjxjb25zdCBMQ2hhcio+IHsK
IHB1YmxpYzoKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxjb25zdCBjaGFyKj4oY29uc3QgY2hhciog
YnVmZmVyKQotICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKLSAgICAgICAgLCBtX2xlbmd0aChz
dHJsZW4oYnVmZmVyKSkKKyAgICBTdHJpbmdUeXBlQWRhcHRlcihjb25zdCBjaGFyKiBjaGFyYWN0
ZXJzKQorICAgICAgICA6IFN0cmluZ1R5cGVBZGFwdGVyPGNvbnN0IExDaGFyKj4ocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KGNoYXJhY3RlcnMpKQogICAgIHsKICAgICB9Ci0KLSAgICB1
bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2xlbmd0aDsgfQotCi0gICAgYm9vbCBpczhCaXQo
KSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2b2lkIHdyaXRlVG8oTENoYXIqIGRlc3RpbmF0aW9u
KQotICAgIHsKLSAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBtX2J1ZmZlciwgc3RhdGljX2Nh
c3Q8c2l6ZV90PihtX2xlbmd0aCkgKiBzaXplb2YoTENoYXIpKTsKLSAgICB9Ci0KLSAgICB2b2lk
IHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIg
YyA9IG1fYnVmZmVyW2ldOwotICAgICAgICAgICAgZGVzdGluYXRpb25baV0gPSBjOwotICAgICAg
ICB9Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGNvbnN0IGNoYXIqIG1fYnVmZmVyOwotICAgIHVu
c2lnbmVkIG1fbGVuZ3RoOwogfTsKIAogdGVtcGxhdGU8PgotY2xhc3MgU3RyaW5nVHlwZUFkYXB0
ZXI8Y29uc3QgTENoYXIqPiB7CitjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxjaGFyKj4gOiBwdWJs
aWMgU3RyaW5nVHlwZUFkYXB0ZXI8Y29uc3QgY2hhcio+IHsKIHB1YmxpYzoKLSAgICBTdHJpbmdU
eXBlQWRhcHRlcjxjb25zdCBMQ2hhcio+KGNvbnN0IExDaGFyKiBidWZmZXIpCi0gICAgICAgIDog
bV9idWZmZXIoYnVmZmVyKQotICAgICAgICAsIG1fbGVuZ3RoKHN0cmxlbihyZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihidWZmZXIpKSkKLSAgICB7Ci0gICAgfQotCi0gICAgdW5zaWduZWQg
bGVuZ3RoKCkgeyByZXR1cm4gbV9sZW5ndGg7IH0KLQotICAgIGJvb2wgaXM4Qml0KCkgeyByZXR1
cm4gdHJ1ZTsgfQotCi0gICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikKKyAgICBT
dHJpbmdUeXBlQWRhcHRlcihjb25zdCBjaGFyKiBjaGFyYWN0ZXJzKQorICAgICAgICA6IFN0cmlu
Z1R5cGVBZGFwdGVyPGNvbnN0IGNoYXIqPihjaGFyYWN0ZXJzKQogICAgIHsKLSAgICAgICAgbWVt
Y3B5KGRlc3RpbmF0aW9uLCBtX2J1ZmZlciwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2xlbmd0aCkg
KiBzaXplb2YoTENoYXIpKTsKICAgICB9Ci0KLSAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3Rp
bmF0aW9uKQotICAgIHsKLSAgICAgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJzKGRlc3RpbmF0aW9u
LCBtX2J1ZmZlciwgbV9sZW5ndGgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBjb25zdCBMQ2hh
ciogbV9idWZmZXI7Ci0gICAgdW5zaWduZWQgbV9sZW5ndGg7CiB9OwogCiB0ZW1wbGF0ZTw+Ci1j
bGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxBU0NJSUxpdGVyYWw+IHsKK2NsYXNzIFN0cmluZ1R5cGVB
ZGFwdGVyPEFTQ0lJTGl0ZXJhbD4gOiBwdWJsaWMgU3RyaW5nVHlwZUFkYXB0ZXI8Y29uc3QgY2hh
cio+IHsKIHB1YmxpYzoKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxBU0NJSUxpdGVyYWw+KEFTQ0lJ
TGl0ZXJhbCBidWZmZXIpCi0gICAgICAgIDogbV9idWZmZXIocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihidWZmZXIpKSkKLSAgICAgICAgLCBt
X2xlbmd0aChzdHJsZW4oYnVmZmVyKSkKLSAgICB7Ci0gICAgfQotCi0gICAgc2l6ZV90IGxlbmd0
aCgpIHsgcmV0dXJuIG1fbGVuZ3RoOyB9Ci0KLSAgICBib29sIGlzOEJpdCgpIHsgcmV0dXJuIHRy
dWU7IH0KLQotICAgIHZvaWQgd3JpdGVUbyhMQ2hhciogZGVzdGluYXRpb24pCi0gICAgewotICAg
ICAgICBtZW1jcHkoZGVzdGluYXRpb24sIG1fYnVmZmVyLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1f
bGVuZ3RoKSk7Ci0gICAgfQotCi0gICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikK
KyAgICBTdHJpbmdUeXBlQWRhcHRlcihBU0NJSUxpdGVyYWwgY2hhcmFjdGVycykKKyAgICAgICAg
OiBTdHJpbmdUeXBlQWRhcHRlcjxjb25zdCBjaGFyKj4oY2hhcmFjdGVycykKICAgICB7Ci0gICAg
ICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhkZXN0aW5hdGlvbiwgbV9idWZmZXIsIG1fbGVuZ3Ro
KTsKICAgICB9Ci0KLXByaXZhdGU6Ci0gICAgY29uc3QgTENoYXIqIG1fYnVmZmVyOwotICAgIHVu
c2lnbmVkIG1fbGVuZ3RoOwogfTsKIAogdGVtcGxhdGU8PgogY2xhc3MgU3RyaW5nVHlwZUFkYXB0
ZXI8VmVjdG9yPGNoYXI+PiB7CiBwdWJsaWM6Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8VmVjdG9y
PGNoYXI+Pihjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKLSAgICAgICAgOiBtX2J1ZmZlcihi
dWZmZXIpCisgICAgU3RyaW5nVHlwZUFkYXB0ZXIoY29uc3QgVmVjdG9yPGNoYXI+JiB2ZWN0b3Ip
CisgICAgICAgIDogbV92ZWN0b3IodmVjdG9yKQogICAgIHsKICAgICB9CiAKLSAgICBzaXplX3Qg
bGVuZ3RoKCkgeyByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOyB9CisgICAgc2l6ZV90IGxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLnNpemUoKTsgfQorICAgIGJvb2wgaXM4Qml0KCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgYm9vbCBpczhCaXQoKSB7IHJldHVybiB0cnVlOyB9
Ci0KLSAgICB2b2lkIHdyaXRlVG8oTENoYXIqIGRlc3RpbmF0aW9uKQorICAgIHZvaWQgd3JpdGVU
byhMQ2hhciogZGVzdGluYXRpb24pIGNvbnN0CiAgICAgewotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fYnVmZmVyLnNpemUoKTsgKytpKQotICAgICAgICAgICAgZGVzdGluYXRpb25b
aV0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihtX2J1ZmZlcltpXSk7CisgICAgICAgIFN0
cmluZ1ZpZXcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KG1fdmVjdG9yLmRhdGEoKSks
IG1fdmVjdG9yLnNpemUoKSkuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoZGVzdGluYXRpb24p
OwogICAgIH0KIAotICAgIHZvaWQgd3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24pCisgICAgdm9p
ZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKICAgICB7Ci0gICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9idWZmZXIuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBkZXN0
aW5hdGlvbltpXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KG1fYnVmZmVyW2ldKTsKKyAg
ICAgICAgU3RyaW5nVmlldyhyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4obV92ZWN0b3Iu
ZGF0YSgpKSwgbV92ZWN0b3Iuc2l6ZSgpKS5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChkZXN0
aW5hdGlvbik7CiAgICAgfQogCiBwcml2YXRlOgotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiYgbV9i
dWZmZXI7Ci19OwotCi10ZW1wbGF0ZTw+Ci1jbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxWZWN0b3I8
TENoYXI+PiB7Ci1wdWJsaWM6Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8VmVjdG9yPExDaGFyPj4o
Y29uc3QgVmVjdG9yPExDaGFyPiYgYnVmZmVyKQotICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikK
LSAgICB7Ci0gICAgfQotCi0gICAgc2l6ZV90IGxlbmd0aCgpIHsgcmV0dXJuIG1fYnVmZmVyLnNp
emUoKTsgfQotCi0gICAgYm9vbCBpczhCaXQoKSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2b2lk
IHdyaXRlVG8oTENoYXIqIGRlc3RpbmF0aW9uKQotICAgIHsKLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2J1ZmZlci5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGRlc3RpbmF0aW9u
W2ldID0gbV9idWZmZXJbaV07Ci0gICAgfQotCi0gICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0
aW5hdGlvbikKLSAgICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9idWZmZXIu
c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBkZXN0aW5hdGlvbltpXSA9IG1fYnVmZmVyW2ldOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBjb25zdCBWZWN0b3I8TENoYXI+JiBtX2J1ZmZlcjsKKyAg
ICBjb25zdCBWZWN0b3I8Y2hhcj4mIG1fdmVjdG9yOwogfTsKIAogdGVtcGxhdGU8PgogY2xhc3Mg
U3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nPiB7CiBwdWJsaWM6CiAgICAgU3RyaW5nVHlwZUFkYXB0
ZXI8U3RyaW5nPihjb25zdCBTdHJpbmcmIHN0cmluZykKLSAgICAgICAgOiBtX2J1ZmZlcihzdHJp
bmcpCisgICAgICAgIDogbV9zdHJpbmcoc3RyaW5nKQogICAgIHsKICAgICB9CiAKLSAgICB1bnNp
Z25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2J1ZmZlci5sZW5ndGgoKTsgfQotCi0gICAgYm9vbCBp
czhCaXQoKSB7IHJldHVybiBtX2J1ZmZlci5pc051bGwoKSB8fCBtX2J1ZmZlci5pczhCaXQoKTsg
fQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmxlbmd0aCgp
OyB9CisgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5pc051bGwoKSB8
fCBtX3N0cmluZy5pczhCaXQoKTsgfQogCi0gICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5h
dGlvbikKKyAgICB2b2lkIHdyaXRlVG8oTENoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAogICAgIHsK
LSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9idWZmZXIubGVuZ3RoKCk7Ci0KLSAgICAgICAg
QVNTRVJUKGlzOEJpdCgpKTsKLSAgICAgICAgY29uc3QgTENoYXIqIGRhdGEgPSBtX2J1ZmZlci5j
aGFyYWN0ZXJzOCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpCi0gICAgICAgICAgICBkZXN0aW5hdGlvbltpXSA9IGRhdGFbaV07Ci0gICAgICAgIAotICAg
ICAgICBXVEZfU1RSSU5HVFlQRUFEQVBURVJfQ09QSUVEX1dURl9TVFJJTkcoKTsKKyAgICAgICAg
U3RyaW5nVmlldyhtX3N0cmluZykuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoZGVzdGluYXRp
b24pOwogICAgIH0KIAotICAgIHZvaWQgd3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24pCisgICAg
dm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKICAgICB7Ci0gICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IG1fYnVmZmVyLmxlbmd0aCgpOwotCi0gICAgICAgIGlmIChpczhCaXQo
KSkgewotICAgICAgICAgICAgY29uc3QgTENoYXIqIGRhdGEgPSBtX2J1ZmZlci5jaGFyYWN0ZXJz
OCgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQot
ICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ldID0gZGF0YVtpXTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBkYXRhID0gbV9idWZmZXIuY2hhcmFjdGVyczE2
KCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0g
ICAgICAgICAgICAgICAgZGVzdGluYXRpb25baV0gPSBkYXRhW2ldOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBXVEZfU1RSSU5HVFlQRUFEQVBURVJfQ09QSUVEX1dURl9TVFJJTkcoKTsK
KyAgICAgICAgU3RyaW5nVmlldyhtX3N0cmluZykuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQo
ZGVzdGluYXRpb24pOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBjb25zdCBTdHJpbmcmIG1fYnVm
ZmVyOworICAgIGNvbnN0IFN0cmluZyYgbV9zdHJpbmc7CiB9OwogCiB0ZW1wbGF0ZTw+Ci1jbGFz
cyBTdHJpbmdUeXBlQWRhcHRlcjxBdG9taWNTdHJpbmc+IHsKK2NsYXNzIFN0cmluZ1R5cGVBZGFw
dGVyPEF0b21pY1N0cmluZz4gOiBwdWJsaWMgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nPiB7CiBw
dWJsaWM6Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8QXRvbWljU3RyaW5nPihjb25zdCBBdG9taWNT
dHJpbmcmIHN0cmluZykKLSAgICAgICAgOiBtX2FkYXB0ZXIoc3RyaW5nLnN0cmluZygpKQorICAg
IFN0cmluZ1R5cGVBZGFwdGVyKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nKQorICAgICAgICA6
IFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZz4oc3RyaW5nLnN0cmluZygpKQogICAgIHsKICAgICB9
Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2FkYXB0ZXIubGVuZ3RoKCk7IH0K
LQotICAgIGJvb2wgaXM4Qml0KCkgeyByZXR1cm4gbV9hZGFwdGVyLmlzOEJpdCgpOyB9Ci0KLSAg
ICB2b2lkIHdyaXRlVG8oTENoYXIqIGRlc3RpbmF0aW9uKSB7IG1fYWRhcHRlci53cml0ZVRvKGRl
c3RpbmF0aW9uKTsgfQotICAgIHZvaWQgd3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24pIHsgbV9h
ZGFwdGVyLndyaXRlVG8oZGVzdGluYXRpb24pOyB9Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nVHlw
ZUFkYXB0ZXI8U3RyaW5nPiBtX2FkYXB0ZXI7CiB9OwogCiBpbmxpbmUgdm9pZCBzdW1XaXRoT3Zl
cmZsb3codW5zaWduZWQmIHRvdGFsLCB1bnNpZ25lZCBhZGRlbmQsIGJvb2wmIG92ZXJmbG93KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmggYi9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAppbmRleCA5Yzk4ZDA4MDc0ZTQ3NjczMWIyNGFjZDhkNjRi
MzY0MzUxNDJhOGQ2Li5kZTMyNjIxNGE3YTNhOGEyZDIxMDc5MWM5MTFhNzFjNGM3YTA4ZjE3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaApAQCAtMjYsNyArMjYsMTEgQEAKICNpZm5kZWYgU3Ry
aW5nVmlld19oCiAjZGVmaW5lIFN0cmluZ1ZpZXdfaAogCi0jaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQ29uY2F0ZW5hdGUuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgorI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9MQ2hhci5oPgogCiBuYW1lc3BhY2UgV1RG
IHsKIApAQCAtNTMsMjcgKzU3LDggQEAgcHVibGljOgogICAgICAgICBpbml0aWFsaXplKGNoYXJh
Y3RlcnMsIGxlbmd0aCk7CiAgICAgfQogCi0gICAgU3RyaW5nVmlldyhjb25zdCBTdHJpbmdJbXBs
JiBzdHJpbmcpCi0gICAgewotICAgICAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQotICAgICAgICAg
ICAgaW5pdGlhbGl6ZShzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgaW5pdGlhbGl6ZShzdHJpbmcuY2hhcmFjdGVyczE2KCks
IHN0cmluZy5sZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgU3RyaW5nVmlldyhjb25zdCBTdHJpbmcm
IHN0cmluZykKLSAgICB7Ci0gICAgICAgIGlmICghc3RyaW5nLmltcGwoKSkgewotICAgICAgICAg
ICAgbV9jaGFyYWN0ZXJzID0gbnVsbHB0cjsKLSAgICAgICAgICAgIG1fbGVuZ3RoID0gMDsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAoc3RyaW5nLmlzOEJpdCgp
KSB7Ci0gICAgICAgICAgICBpbml0aWFsaXplKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcu
bGVuZ3RoKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGluaXRp
YWxpemUoc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgIH0KKyAg
ICBTdHJpbmdWaWV3KGNvbnN0IFN0cmluZ0ltcGwmKTsKKyAgICBTdHJpbmdWaWV3KGNvbnN0IFN0
cmluZyYpOwogCiAgICAgc3RhdGljIFN0cmluZ1ZpZXcgZW1wdHkoKQogICAgIHsKQEAgLTEzNCwz
NSArMTE5LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cmluZ1ZpZXcoY2hhcmFjdGVy
czE2KCkgKyBzdGFydCwgbGVuZ3RoKTsKICAgICB9CiAKLSAgICBTdHJpbmcgdG9TdHJpbmcoKSBj
b25zdAotICAgIHsKLSAgICAgICAgaWYgKGlzOEJpdCgpKQotICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSk7Ci0KLSAgICAgICAgcmV0dXJuIFN0cmluZyhj
aGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCkpOwotICAgIH0KLQotICAgIGZsb2F0IHRvRmxvYXQoYm9v
bCYgaXNWYWxpZCkKLSAgICB7Ci0gICAgICAgIGlmIChpczhCaXQoKSkKLSAgICAgICAgICAgIHJl
dHVybiBjaGFyYWN0ZXJzVG9GbG9hdChjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSwgJmlzVmFsaWQp
OwotICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1RvRmxvYXQoY2hhcmFjdGVyczE2KCksIGxlbmd0
aCgpLCAmaXNWYWxpZCk7Ci0gICAgfQotCi0gICAgaW50IHRvSW50KGJvb2wmIGlzVmFsaWQpCi0g
ICAgewotICAgICAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAgICAgICByZXR1cm4gY2hhcmFjdGVy
c1RvSW50KGNoYXJhY3RlcnM4KCksIGxlbmd0aCgpLCAmaXNWYWxpZCk7Ci0gICAgICAgIHJldHVy
biBjaGFyYWN0ZXJzVG9JbnQoY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpLCAmaXNWYWxpZCk7Ci0g
ICAgfQorICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0OwogCi0gICAgU3RyaW5nIHRvU3RyaW5n
V2l0aG91dENvcHlpbmcoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGlzOEJpdCgpKQotICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKGNoYXJhY3Rl
cnM4KCksIGxlbmd0aCgpKTsKKyAgICBmbG9hdCB0b0Zsb2F0KGJvb2wmIGlzVmFsaWQpIGNvbnN0
OworICAgIGludCB0b0ludChib29sJiBpc1ZhbGlkKSBjb25zdDsKIAotICAgICAgICByZXR1cm4g
U3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoY2hhcmFjdGVyczE2KCksIGxlbmd0aCgp
KTsKLSAgICB9CisgICAgU3RyaW5nIHRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSBjb25zdDsKIAog
ICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0CiAgICAgewpAQCAtMTcy
LDEyICsxMzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjaGFyYWN0ZXJzMTYoKVtpbmRl
eF07CiAgICAgfQogCi0gICAgc2l6ZV90IGZpbmQoVUNoYXIgY2hhcmFjdGVyLCB1bnNpZ25lZCBz
dGFydCA9IDApIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAgICAg
ICByZXR1cm4gV1RGOjpmaW5kKGNoYXJhY3RlcnM4KCksIGxlbmd0aCgpLCBjaGFyYWN0ZXIsIHN0
YXJ0KTsKLSAgICAgICAgcmV0dXJuIFdURjo6ZmluZChjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCks
IGNoYXJhY3Rlciwgc3RhcnQpOwotICAgIH0KKyAgICBzaXplX3QgZmluZChVQ2hhciBjaGFyYWN0
ZXIsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29uc3Q7CiAKICAgICBib29sIGNvbnRhaW5zKFVDaGFy
IGMpIGNvbnN0IHsgcmV0dXJuIGZpbmQoYykgIT0gbm90Rm91bmQ7IH0KIApAQCAtMjE1LDYgKzE3
MiwzNCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwogfTsKIAorfQorCisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitpbmxpbmUg
U3RyaW5nVmlldzo6U3RyaW5nVmlldyhjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmcpCit7CisgICAg
aWYgKHN0cmluZy5pczhCaXQoKSkKKyAgICAgICAgaW5pdGlhbGl6ZShzdHJpbmcuY2hhcmFjdGVy
czgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKKyAgICBlbHNlCisgICAgICAgIGluaXRpYWxpemUoc3Ry
aW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCkpOworfQorCitpbmxpbmUgU3RyaW5n
Vmlldzo6U3RyaW5nVmlldyhjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBpZiAoIXN0cmlu
Zy5pbXBsKCkpIHsKKyAgICAgICAgbV9jaGFyYWN0ZXJzID0gbnVsbHB0cjsKKyAgICAgICAgbV9s
ZW5ndGggPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChzdHJpbmcuaXM4Qml0
KCkpIHsKKyAgICAgICAgaW5pdGlhbGl6ZShzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxl
bmd0aCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbml0aWFsaXplKHN0cmluZy5j
aGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpKTsKK30KKwogaW5saW5lIHZvaWQgU3RyaW5n
Vmlldzo6Z2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoTENoYXIqIGRlc3RpbmF0aW9uKSBjb25z
dAogewogICAgIEFTU0VSVChpczhCaXQoKSk7CkBAIC0yNDcsNiArMjMyLDQ1IEBAIGlubGluZSBT
dHJpbmdWaWV3OjpVcGNvbnZlcnRlZENoYXJhY3RlcnM6OlVwY29udmVydGVkQ2hhcmFjdGVycyhj
b25zdCBTdHJpbmdWaWV3CiAgICAgbV9jaGFyYWN0ZXJzID0gbV91cGNvbnZlcnRlZENoYXJhY3Rl
cnMuZGF0YSgpOwogfQogCitpbmxpbmUgU3RyaW5nIFN0cmluZ1ZpZXc6OnRvU3RyaW5nKCkgY29u
c3QKK3sKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoY2hhcmFjdGVy
czgoKSwgbGVuZ3RoKCkpOworCisgICAgcmV0dXJuIFN0cmluZyhjaGFyYWN0ZXJzMTYoKSwgbGVu
Z3RoKCkpOworfQorCitpbmxpbmUgZmxvYXQgU3RyaW5nVmlldzo6dG9GbG9hdChib29sJiBpc1Zh
bGlkKSBjb25zdAoreworICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGNoYXJhY3Rl
cnNUb0Zsb2F0KGNoYXJhY3RlcnM4KCksIGxlbmd0aCgpLCAmaXNWYWxpZCk7CisgICAgcmV0dXJu
IGNoYXJhY3RlcnNUb0Zsb2F0KGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSwgJmlzVmFsaWQpOwor
fQorCitpbmxpbmUgaW50IFN0cmluZ1ZpZXc6OnRvSW50KGJvb2wmIGlzVmFsaWQpIGNvbnN0Cit7
CisgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50KGNoYXJh
Y3RlcnM4KCksIGxlbmd0aCgpLCAmaXNWYWxpZCk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0lu
dChjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCksICZpc1ZhbGlkKTsKK30KKworaW5saW5lIFN0cmlu
ZyBTdHJpbmdWaWV3Ojp0b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkgY29uc3QKK3sKKyAgICBpZiAo
aXM4Qml0KCkpCisgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWlu
ZyhjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSk7CisKKyAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y3Jl
YXRlV2l0aG91dENvcHlpbmcoY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpKTsKK30KKworaW5saW5l
IHNpemVfdCBTdHJpbmdWaWV3OjpmaW5kKFVDaGFyIGNoYXJhY3RlciwgdW5zaWduZWQgc3RhcnQp
IGNvbnN0Cit7CisgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICByZXR1cm4gV1RGOjpmaW5kKGNo
YXJhY3RlcnM4KCksIGxlbmd0aCgpLCBjaGFyYWN0ZXIsIHN0YXJ0KTsKKyAgICByZXR1cm4gV1RG
OjpmaW5kKGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSwgY2hhcmFjdGVyLCBzdGFydCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGU+IGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyOwor
CiB0ZW1wbGF0ZTw+IGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1ZpZXc+IHsKIHB1Ymxp
YzoKICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdWaWV3PihTdHJpbmdWaWV3IHN0cmluZykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239143</attachid>
            <date>2014-10-02 14:54:26 -0700</date>
            <delta_ts>2014-10-02 15:47:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137356-20141002145427.patch</filename>
            <type>text/plain</type>
            <size>18513</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MjE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDllNjRmODkyNjcwNTM2M2Y2ZTZmMjBi
NDZkOThjNTI3NmY5Nzc4N2QuLjgzZTRkNjc5OTQzOWVhNTU0ZWEyOGNhNWQxNDlhMTFjOWJmMjg4
NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTQtMTAtMDIgIEFuZGVycyBDYXJsc3NvbiAgPGFu
ZGVyc2NhQGFwcGxlLmNvbT4KKworICAgICAgICBTaW1wbGlmeSBTdHJpbmdUeXBlQWRhcHRlciB0
ZW1wbGF0ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzNzM1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaDoKKyAgICAgICAgVXNlIFN0cmluZ1ZpZXcg
Zm9yIGNvcHlpbmcgY2hhcmFjdGVycy4gVXNlIGluaGVyaXRhbmNlIGZvciBjaGFyKiB2cyBjb25z
dCBjaGFyKiBldGMuIE1ha2UgYWxsIFN0cmluZ0FkYXB0ZXIgbWVtYmVyIGZ1bmN0aW9ucyBjb25z
dC4KKworICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaDoKKyAgICAgICAgTW92ZSBlbm91
Z2ggZnVuY3Rpb25zIG91dCBvZiBsaW5lIHNvIHdlIGNhbiBpbmNsdWRlIFdURlN0cmluZy5oIGFm
dGVyIHRoZSBTdHJpbmdWaWV3IGNsYXNzIGRlZmluaXRpb24uCisKIDIwMTQtMTAtMDEgIENocmlz
dG9waGUgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVp
bGQgZml4IGFmdGVyIHIxNzQxOTMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ0NvbmNhdGVuYXRlLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRl
LmgKaW5kZXggYzcwODE3OTRjMDFjMGQwNmRkZjhmYjhjNjUyMzAxYzVhNjc5MWE4OS4uMzgxNjdm
NDgyNTg0ZjMzZTVlMmYxMjVkNmE2MzE5ZmI4ZGFkOWU3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nQ29uY2F0ZW5hdGUuaApAQCAtMzIsNiArMzIsMTAgQEAKICNpbmNsdWRlIDx3dGYvdGV4
dC9BdG9taWNTdHJpbmcuaD4KICNlbmRpZgogCisjaWZuZGVmIFN0cmluZ1ZpZXdfaAorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KKyNlbmRpZgorCiAvLyBUaGlzIG1hY3JvIGlzIGhl
bHBmdWwgZm9yIHRlc3RpbmcgaG93IG1hbnkgaW50ZXJtZWRpYXRlIFN0cmluZ3MgYXJlIGNyZWF0
ZWQgd2hpbGUgZXZhbHVhdGluZyBhbgogLy8gZXhwcmVzc2lvbiBjb250YWluaW5nIG9wZXJhdG9y
Ky4KICNpZm5kZWYgV1RGX1NUUklOR1RZUEVBREFQVEVSX0NPUElFRF9XVEZfU1RSSU5HCkBAIC00
MSwzNzkgKzQ1LDIwNCBAQAogbmFtZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFN0
cmluZ1R5cGU+Ci1jbGFzcyBTdHJpbmdUeXBlQWRhcHRlciB7Ci19OworY2xhc3MgU3RyaW5nVHlw
ZUFkYXB0ZXI7CiAKIHRlbXBsYXRlPD4KIGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPGNoYXI+IHsK
IHB1YmxpYzoKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxjaGFyPihjaGFyIGJ1ZmZlcikKLSAgICAg
ICAgOiBtX2J1ZmZlcihidWZmZXIpCisgICAgU3RyaW5nVHlwZUFkYXB0ZXI8Y2hhcj4oY2hhciBj
aGFyYWN0ZXIpCisgICAgICAgIDogbV9jaGFyYWN0ZXIoY2hhcmFjdGVyKQogICAgIHsKICAgICB9
CiAKICAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiAxOyB9Ci0KICAgICBib29sIGlzOEJp
dCgpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZvaWQgd3JpdGVUbyhMQ2hhciogZGVzdGluYXRp
b24pCi0gICAgewotICAgICAgICAqZGVzdGluYXRpb24gPSBtX2J1ZmZlcjsKLSAgICB9Ci0KLSAg
ICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKSB7ICpkZXN0aW5hdGlvbiA9IG1fYnVm
ZmVyOyB9Ci0KLXByaXZhdGU6Ci0gICAgdW5zaWduZWQgY2hhciBtX2J1ZmZlcjsKLX07Ci0KLXRl
bXBsYXRlPD4KLWNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPExDaGFyPiB7Ci1wdWJsaWM6Ci0gICAg
U3RyaW5nVHlwZUFkYXB0ZXI8TENoYXI+KExDaGFyIGJ1ZmZlcikKLSAgICAgICAgOiBtX2J1ZmZl
cihidWZmZXIpCisgICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKICAg
ICB7CisgICAgICAgICpkZXN0aW5hdGlvbiA9IG1fY2hhcmFjdGVyOwogICAgIH0KIAotICAgIHVu
c2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIDE7IH0KLQotICAgIGJvb2wgaXM4Qml0KCkgeyByZXR1
cm4gdHJ1ZTsgfQotCi0gICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikKKyAgICB2
b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAogICAgIHsKLSAgICAgICAgKmRl
c3RpbmF0aW9uID0gbV9idWZmZXI7CisgICAgICAgICpkZXN0aW5hdGlvbiA9IG1fY2hhcmFjdGVy
OwogICAgIH0KIAotICAgIHZvaWQgd3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24pIHsgKmRlc3Rp
bmF0aW9uID0gbV9idWZmZXI7IH0KLQogcHJpdmF0ZToKLSAgICBMQ2hhciBtX2J1ZmZlcjsKKyAg
ICBjaGFyIG1fY2hhcmFjdGVyOwogfTsKIAogdGVtcGxhdGU8PgogY2xhc3MgU3RyaW5nVHlwZUFk
YXB0ZXI8VUNoYXI+IHsKIHB1YmxpYzoKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxVQ2hhcj4oVUNo
YXIgYnVmZmVyKQotICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKKyAgICBTdHJpbmdUeXBlQWRh
cHRlcjxVQ2hhcj4oVUNoYXIgY2hhcmFjdGVyKQorICAgICAgICA6IG1fY2hhcmFjdGVyKGNoYXJh
Y3RlcikKICAgICB7CiAgICAgfQogCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gMTsg
fQotCi0gICAgYm9vbCBpczhCaXQoKSB7IHJldHVybiBtX2J1ZmZlciA8PSAweGZmOyB9CisgICAg
dW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gMTsgfQorICAgIGJvb2wgaXM4Qml0KCkg
Y29uc3QgeyByZXR1cm4gbV9jaGFyYWN0ZXIgPD0gMHhmZjsgfQogCi0gICAgdm9pZCB3cml0ZVRv
KExDaGFyKiBkZXN0aW5hdGlvbikKKyAgICB2b2lkIHdyaXRlVG8oTENoYXIqIGRlc3RpbmF0aW9u
KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzOEJpdCgpKTsKLSAgICAgICAgKmRlc3Rp
bmF0aW9uID0gc3RhdGljX2Nhc3Q8TENoYXI+KG1fYnVmZmVyKTsKLSAgICB9Ci0KLSAgICB2b2lk
IHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKSB7ICpkZXN0aW5hdGlvbiA9IG1fYnVmZmVyOyB9
Ci0KLXByaXZhdGU6Ci0gICAgVUNoYXIgbV9idWZmZXI7Ci19OwotCi10ZW1wbGF0ZTw+Ci1jbGFz
cyBTdHJpbmdUeXBlQWRhcHRlcjxjaGFyKj4gewotcHVibGljOgotICAgIFN0cmluZ1R5cGVBZGFw
dGVyPGNoYXIqPihjaGFyKiBidWZmZXIpCi0gICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAg
ICAgICAsIG1fbGVuZ3RoKHN0cmxlbihidWZmZXIpKQotICAgIHsKKyAgICAgICAgKmRlc3RpbmF0
aW9uID0gc3RhdGljX2Nhc3Q8TENoYXI+KG1fY2hhcmFjdGVyKTsKICAgICB9CiAKLSAgICB1bnNp
Z25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2xlbmd0aDsgfQotCi0gICAgYm9vbCBpczhCaXQoKSB7
IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2b2lkIHdyaXRlVG8oTENoYXIqIGRlc3RpbmF0aW9uKQor
ICAgIHZvaWQgd3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24pIGNvbnN0CiAgICAgewotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGRl
c3RpbmF0aW9uW2ldID0gc3RhdGljX2Nhc3Q8TENoYXI+KG1fYnVmZmVyW2ldKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKQotICAgIHsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGNoYXIgYyA9IG1fYnVmZmVyW2ldOwotICAgICAgICAgICAgZGVzdGluYXRpb25baV0gPSBj
OwotICAgICAgICB9CisgICAgICAgICpkZXN0aW5hdGlvbiA9IG1fY2hhcmFjdGVyOwogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBjb25zdCBjaGFyKiBtX2J1ZmZlcjsKLSAgICB1bnNpZ25lZCBtX2xl
bmd0aDsKKyAgICBVQ2hhciBtX2NoYXJhY3RlcjsKIH07CiAKIHRlbXBsYXRlPD4KLWNsYXNzIFN0
cmluZ1R5cGVBZGFwdGVyPExDaGFyKj4geworY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8Y29uc3Qg
TENoYXIqPiB7CiBwdWJsaWM6Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8TENoYXIqPihMQ2hhciog
YnVmZmVyKQotICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAgICwgbV9sZW5ndGgoc3RybGVuKHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlcikpKQorICAgIFN0cmluZ1R5cGVBZGFwdGVyKGNv
bnN0IExDaGFyKiBjaGFyYWN0ZXJzKQorICAgICAgICA6IG1fY2hhcmFjdGVycyhjaGFyYWN0ZXJz
KQorICAgICAgICAsIG1fbGVuZ3RoKHN0cmxlbihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIq
PihjaGFyYWN0ZXJzKSkpCiAgICAgewogICAgIH0KIAotICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsg
cmV0dXJuIG1fbGVuZ3RoOyB9Ci0KLSAgICBib29sIGlzOEJpdCgpIHsgcmV0dXJuIHRydWU7IH0K
KyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorICAgIGJv
b2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdm9pZCB3cml0ZVRvKExD
aGFyKiBkZXN0aW5hdGlvbikKKyAgICB2b2lkIHdyaXRlVG8oTENoYXIqIGRlc3RpbmF0aW9uKSBj
b25zdAogICAgIHsKLSAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBtX2J1ZmZlciwgbV9sZW5n
dGggKiBzaXplb2YoTENoYXIpKTsKKyAgICAgICAgU3RyaW5nVmlldyhtX2NoYXJhY3RlcnMsIG1f
bGVuZ3RoKS5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChkZXN0aW5hdGlvbik7CiAgICAgfQog
Ci0gICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikKKyAgICB2b2lkIHdyaXRlVG8o
VUNoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAogICAgIHsKLSAgICAgICAgU3RyaW5nSW1wbDo6Y29w
eUNoYXJzKGRlc3RpbmF0aW9uLCBtX2J1ZmZlciwgbV9sZW5ndGgpOworICAgICAgICBTdHJpbmdW
aWV3KG1fY2hhcmFjdGVycywgbV9sZW5ndGgpLmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KGRl
c3RpbmF0aW9uKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgY29uc3QgTENoYXIqIG1fYnVmZmVy
OworICAgIGNvbnN0IExDaGFyKiBtX2NoYXJhY3RlcnM7CiAgICAgdW5zaWduZWQgbV9sZW5ndGg7
CiB9OwogCiB0ZW1wbGF0ZTw+CiBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxjb25zdCBVQ2hhcio+
IHsKIHB1YmxpYzoKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxjb25zdCBVQ2hhcio+KGNvbnN0IFVD
aGFyKiBidWZmZXIpCi0gICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQorICAgIFN0cmluZ1R5cGVB
ZGFwdGVyKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzKQorICAgICAgICA6IG1fY2hhcmFjdGVycyhj
aGFyYWN0ZXJzKQogICAgIHsKLSAgICAgICAgc2l6ZV90IGxlbiA9IDA7Ci0gICAgICAgIHdoaWxl
IChtX2J1ZmZlcltsZW5dICE9IFVDaGFyKDApKQotICAgICAgICAgICAgKytsZW47CisgICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IDA7CisgICAgICAgIHdoaWxlIChtX2NoYXJhY3RlcnNbbGVuZ3Ro
XSkKKyAgICAgICAgICAgICsrbGVuZ3RoOwogCi0gICAgICAgIGlmIChsZW4gPiBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCisgICAgICAgIGlmIChsZW5ndGggPiBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAgICAgICAgICAgICBDUkFTSCgpOwogCi0g
ICAgICAgIG1fbGVuZ3RoID0gbGVuOworICAgICAgICBtX2xlbmd0aCA9IGxlbmd0aDsKICAgICB9
CiAKLSAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2xlbmd0aDsgfQorICAgIHVuc2ln
bmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgYm9vbCBpczhCaXQo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgYm9vbCBpczhCaXQoKSB7IHJldHVybiBm
YWxzZTsgfQotCi0gICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHdyaXRlVG8oTENoYXIq
KQorICAgIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCB3cml0ZVRvKExDaGFyKikgY29uc3QK
ICAgICB7CiAgICAgICAgIENSQVNIKCk7CiAgICAgfQogCi0gICAgdm9pZCB3cml0ZVRvKFVDaGFy
KiBkZXN0aW5hdGlvbikKKyAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKSBjb25z
dAogICAgIHsKLSAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBtX2J1ZmZlciwgbV9sZW5ndGgg
KiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBtX2NoYXJhY3Rl
cnMsIG1fbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIGNv
bnN0IFVDaGFyKiBtX2J1ZmZlcjsKKyAgICBjb25zdCBVQ2hhciogbV9jaGFyYWN0ZXJzOwogICAg
IHVuc2lnbmVkIG1fbGVuZ3RoOwogfTsKIAogdGVtcGxhdGU8PgotY2xhc3MgU3RyaW5nVHlwZUFk
YXB0ZXI8Y29uc3QgY2hhcio+IHsKK2NsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPGNvbnN0IGNoYXIq
PiA6IHB1YmxpYyBTdHJpbmdUeXBlQWRhcHRlcjxjb25zdCBMQ2hhcio+IHsKIHB1YmxpYzoKLSAg
ICBTdHJpbmdUeXBlQWRhcHRlcjxjb25zdCBjaGFyKj4oY29uc3QgY2hhciogYnVmZmVyKQotICAg
ICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKLSAgICAgICAgLCBtX2xlbmd0aChzdHJsZW4oYnVmZmVy
KSkKLSAgICB7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gbV9sZW5n
dGg7IH0KLQotICAgIGJvb2wgaXM4Qml0KCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdm9pZCB3
cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikKKyAgICBTdHJpbmdUeXBlQWRhcHRlcihjb25zdCBj
aGFyKiBjaGFyYWN0ZXJzKQorICAgICAgICA6IFN0cmluZ1R5cGVBZGFwdGVyPGNvbnN0IExDaGFy
Kj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGNoYXJhY3RlcnMpKQogICAgIHsKLSAg
ICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBtX2J1ZmZlciwgc3RhdGljX2Nhc3Q8c2l6ZV90Piht
X2xlbmd0aCkgKiBzaXplb2YoTENoYXIpKTsKICAgICB9Ci0KLSAgICB2b2lkIHdyaXRlVG8oVUNo
YXIqIGRlc3RpbmF0aW9uKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IG1fYnVmZmVy
W2ldOwotICAgICAgICAgICAgZGVzdGluYXRpb25baV0gPSBjOwotICAgICAgICB9Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIGNvbnN0IGNoYXIqIG1fYnVmZmVyOwotICAgIHVuc2lnbmVkIG1fbGVu
Z3RoOwogfTsKIAogdGVtcGxhdGU8PgotY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8Y29uc3QgTENo
YXIqPiB7CitjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxjaGFyKj4gOiBwdWJsaWMgU3RyaW5nVHlw
ZUFkYXB0ZXI8Y29uc3QgY2hhcio+IHsKIHB1YmxpYzoKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxj
b25zdCBMQ2hhcio+KGNvbnN0IExDaGFyKiBidWZmZXIpCi0gICAgICAgIDogbV9idWZmZXIoYnVm
ZmVyKQotICAgICAgICAsIG1fbGVuZ3RoKHN0cmxlbihyZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPihidWZmZXIpKSkKLSAgICB7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgeyBy
ZXR1cm4gbV9sZW5ndGg7IH0KLQotICAgIGJvb2wgaXM4Qml0KCkgeyByZXR1cm4gdHJ1ZTsgfQot
Ci0gICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikKKyAgICBTdHJpbmdUeXBlQWRh
cHRlcihjb25zdCBjaGFyKiBjaGFyYWN0ZXJzKQorICAgICAgICA6IFN0cmluZ1R5cGVBZGFwdGVy
PGNvbnN0IGNoYXIqPihjaGFyYWN0ZXJzKQogICAgIHsKLSAgICAgICAgbWVtY3B5KGRlc3RpbmF0
aW9uLCBtX2J1ZmZlciwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2xlbmd0aCkgKiBzaXplb2YoTENo
YXIpKTsKICAgICB9Ci0KLSAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKQotICAg
IHsKLSAgICAgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJzKGRlc3RpbmF0aW9uLCBtX2J1ZmZlciwg
bV9sZW5ndGgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBjb25zdCBMQ2hhciogbV9idWZmZXI7
Ci0gICAgdW5zaWduZWQgbV9sZW5ndGg7CiB9OwogCiB0ZW1wbGF0ZTw+Ci1jbGFzcyBTdHJpbmdU
eXBlQWRhcHRlcjxBU0NJSUxpdGVyYWw+IHsKK2NsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPEFTQ0lJ
TGl0ZXJhbD4gOiBwdWJsaWMgU3RyaW5nVHlwZUFkYXB0ZXI8Y29uc3QgY2hhcio+IHsKIHB1Ymxp
YzoKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxBU0NJSUxpdGVyYWw+KEFTQ0lJTGl0ZXJhbCBidWZm
ZXIpCi0gICAgICAgIDogbV9idWZmZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KHN0
YXRpY19jYXN0PGNvbnN0IGNoYXIqPihidWZmZXIpKSkKLSAgICAgICAgLCBtX2xlbmd0aChzdHJs
ZW4oYnVmZmVyKSkKKyAgICBTdHJpbmdUeXBlQWRhcHRlcihBU0NJSUxpdGVyYWwgY2hhcmFjdGVy
cykKKyAgICAgICAgOiBTdHJpbmdUeXBlQWRhcHRlcjxjb25zdCBjaGFyKj4oY2hhcmFjdGVycykK
ICAgICB7CiAgICAgfQotCi0gICAgc2l6ZV90IGxlbmd0aCgpIHsgcmV0dXJuIG1fbGVuZ3RoOyB9
Ci0KLSAgICBib29sIGlzOEJpdCgpIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZvaWQgd3JpdGVU
byhMQ2hhciogZGVzdGluYXRpb24pCi0gICAgewotICAgICAgICBtZW1jcHkoZGVzdGluYXRpb24s
IG1fYnVmZmVyLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fbGVuZ3RoKSk7Ci0gICAgfQotCi0gICAg
dm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikKLSAgICB7Ci0gICAgICAgIFN0cmluZ0lt
cGw6OmNvcHlDaGFycyhkZXN0aW5hdGlvbiwgbV9idWZmZXIsIG1fbGVuZ3RoKTsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgY29uc3QgTENoYXIqIG1fYnVmZmVyOwotICAgIHVuc2lnbmVkIG1fbGVu
Z3RoOwogfTsKIAogdGVtcGxhdGU8PgogY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8VmVjdG9yPGNo
YXI+PiB7CiBwdWJsaWM6Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8VmVjdG9yPGNoYXI+Pihjb25z
dCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKLSAgICAgICAgOiBtX2J1ZmZlcihidWZmZXIpCi0gICAg
ewotICAgIH0KLQotICAgIHNpemVfdCBsZW5ndGgoKSB7IHJldHVybiBtX2J1ZmZlci5zaXplKCk7
IH0KLQotICAgIGJvb2wgaXM4Qml0KCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdm9pZCB3cml0
ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikKLSAgICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9idWZmZXIuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBkZXN0aW5hdGlvbltpXSA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KG1fYnVmZmVyW2ldKTsKLSAgICB9Ci0KLSAgICB2
b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKQotICAgIHsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2J1ZmZlci5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGRlc3RpbmF0
aW9uW2ldID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4obV9idWZmZXJbaV0pOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4mIG1fYnVmZmVyOwotfTsKLQotdGVt
cGxhdGU8PgotY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8VmVjdG9yPExDaGFyPj4gewotcHVibGlj
OgotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFZlY3RvcjxMQ2hhcj4+KGNvbnN0IFZlY3RvcjxMQ2hh
cj4mIGJ1ZmZlcikKLSAgICAgICAgOiBtX2J1ZmZlcihidWZmZXIpCisgICAgU3RyaW5nVHlwZUFk
YXB0ZXIoY29uc3QgVmVjdG9yPGNoYXI+JiB2ZWN0b3IpCisgICAgICAgIDogbV92ZWN0b3IodmVj
dG9yKQogICAgIHsKICAgICB9CiAKLSAgICBzaXplX3QgbGVuZ3RoKCkgeyByZXR1cm4gbV9idWZm
ZXIuc2l6ZSgpOyB9CisgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9y
LnNpemUoKTsgfQorICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0g
ICAgYm9vbCBpczhCaXQoKSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2b2lkIHdyaXRlVG8oTENo
YXIqIGRlc3RpbmF0aW9uKQorICAgIHZvaWQgd3JpdGVUbyhMQ2hhciogZGVzdGluYXRpb24pIGNv
bnN0CiAgICAgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYnVmZmVyLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgZGVzdGluYXRpb25baV0gPSBtX2J1ZmZlcltpXTsKKyAgICAg
ICAgU3RyaW5nVmlldyhyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4obV92ZWN0b3IuZGF0
YSgpKSwgbV92ZWN0b3Iuc2l6ZSgpKS5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChkZXN0aW5h
dGlvbik7CiAgICAgfQogCi0gICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikKKyAg
ICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAogICAgIHsKLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2J1ZmZlci5zaXplKCk7ICsraSkKLSAgICAgICAgICAg
IGRlc3RpbmF0aW9uW2ldID0gbV9idWZmZXJbaV07CisgICAgICAgIFN0cmluZ1ZpZXcocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KG1fdmVjdG9yLmRhdGEoKSksIG1fdmVjdG9yLnNpemUo
KSkuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoZGVzdGluYXRpb24pOwogICAgIH0KIAogcHJp
dmF0ZToKLSAgICBjb25zdCBWZWN0b3I8TENoYXI+JiBtX2J1ZmZlcjsKKyAgICBjb25zdCBWZWN0
b3I8Y2hhcj4mIG1fdmVjdG9yOwogfTsKIAogdGVtcGxhdGU8PgogY2xhc3MgU3RyaW5nVHlwZUFk
YXB0ZXI8U3RyaW5nPiB7CiBwdWJsaWM6CiAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nPihj
b25zdCBTdHJpbmcmIHN0cmluZykKLSAgICAgICAgOiBtX2J1ZmZlcihzdHJpbmcpCisgICAgICAg
IDogbV9zdHJpbmcoc3RyaW5nKQogICAgIHsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBsZW5ndGgo
KSB7IHJldHVybiBtX2J1ZmZlci5sZW5ndGgoKTsgfQotCi0gICAgYm9vbCBpczhCaXQoKSB7IHJl
dHVybiBtX2J1ZmZlci5pc051bGwoKSB8fCBtX2J1ZmZlci5pczhCaXQoKTsgfQorICAgIHVuc2ln
bmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmxlbmd0aCgpOyB9CisgICAgYm9v
bCBpczhCaXQoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5pc051bGwoKSB8fCBtX3N0cmluZy5p
czhCaXQoKTsgfQogCi0gICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikKKyAgICB2
b2lkIHdyaXRlVG8oTENoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAogICAgIHsKLSAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gbV9idWZmZXIubGVuZ3RoKCk7Ci0KLSAgICAgICAgQVNTRVJUKGlzOEJp
dCgpKTsKLSAgICAgICAgY29uc3QgTENoYXIqIGRhdGEgPSBtX2J1ZmZlci5jaGFyYWN0ZXJzOCgp
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICBkZXN0aW5hdGlvbltpXSA9IGRhdGFbaV07Ci0gICAgICAgIAotICAgICAgICBXVEZfU1RS
SU5HVFlQRUFEQVBURVJfQ09QSUVEX1dURl9TVFJJTkcoKTsKKyAgICAgICAgU3RyaW5nVmlldyht
X3N0cmluZykuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoZGVzdGluYXRpb24pOwogICAgIH0K
IAotICAgIHZvaWQgd3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24pCisgICAgdm9pZCB3cml0ZVRv
KFVDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0
aCA9IG1fYnVmZmVyLmxlbmd0aCgpOwotCi0gICAgICAgIGlmIChpczhCaXQoKSkgewotICAgICAg
ICAgICAgY29uc3QgTENoYXIqIGRhdGEgPSBtX2J1ZmZlci5jaGFyYWN0ZXJzOCgpOwotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAg
ICAgIGRlc3RpbmF0aW9uW2ldID0gZGF0YVtpXTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGNvbnN0IFVDaGFyKiBkYXRhID0gbV9idWZmZXIuY2hhcmFjdGVyczE2KCk7Ci0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAg
ICAgZGVzdGluYXRpb25baV0gPSBkYXRhW2ldOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBXVEZfU1RSSU5HVFlQRUFEQVBURVJfQ09QSUVEX1dURl9TVFJJTkcoKTsKKyAgICAgICAgU3Ry
aW5nVmlldyhtX3N0cmluZykuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoZGVzdGluYXRpb24p
OwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBjb25zdCBTdHJpbmcmIG1fYnVmZmVyOworICAgIGNv
bnN0IFN0cmluZyYgbV9zdHJpbmc7CiB9OwogCiB0ZW1wbGF0ZTw+Ci1jbGFzcyBTdHJpbmdUeXBl
QWRhcHRlcjxBdG9taWNTdHJpbmc+IHsKK2NsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPEF0b21pY1N0
cmluZz4gOiBwdWJsaWMgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nPiB7CiBwdWJsaWM6Ci0gICAg
U3RyaW5nVHlwZUFkYXB0ZXI8QXRvbWljU3RyaW5nPihjb25zdCBBdG9taWNTdHJpbmcmIHN0cmlu
ZykKLSAgICAgICAgOiBtX2FkYXB0ZXIoc3RyaW5nLnN0cmluZygpKQorICAgIFN0cmluZ1R5cGVB
ZGFwdGVyKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nKQorICAgICAgICA6IFN0cmluZ1R5cGVB
ZGFwdGVyPFN0cmluZz4oc3RyaW5nLnN0cmluZygpKQogICAgIHsKICAgICB9Ci0KLSAgICB1bnNp
Z25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2FkYXB0ZXIubGVuZ3RoKCk7IH0KLQotICAgIGJvb2wg
aXM4Qml0KCkgeyByZXR1cm4gbV9hZGFwdGVyLmlzOEJpdCgpOyB9Ci0KLSAgICB2b2lkIHdyaXRl
VG8oTENoYXIqIGRlc3RpbmF0aW9uKSB7IG1fYWRhcHRlci53cml0ZVRvKGRlc3RpbmF0aW9uKTsg
fQotICAgIHZvaWQgd3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24pIHsgbV9hZGFwdGVyLndyaXRl
VG8oZGVzdGluYXRpb24pOyB9Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3Ry
aW5nPiBtX2FkYXB0ZXI7CiB9OwogCiBpbmxpbmUgdm9pZCBzdW1XaXRoT3ZlcmZsb3codW5zaWdu
ZWQmIHRvdGFsLCB1bnNpZ25lZCBhZGRlbmQsIGJvb2wmIG92ZXJmbG93KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ1ZpZXcuaAppbmRleCA5Yzk4ZDA4MDc0ZTQ3NjczMWIyNGFjZDhkNjRiMzY0MzUxNDJhOGQ2
Li5kZTMyNjIxNGE3YTNhOGEyZDIxMDc5MWM5MTFhNzFjNGM3YTA4ZjE3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L1N0cmluZ1ZpZXcuaApAQCAtMjYsNyArMjYsMTEgQEAKICNpZm5kZWYgU3RyaW5nVmlld19oCiAj
ZGVmaW5lIFN0cmluZ1ZpZXdfaAogCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5h
dGUuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9MQ2hhci5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtNTMs
MjcgKzU3LDggQEAgcHVibGljOgogICAgICAgICBpbml0aWFsaXplKGNoYXJhY3RlcnMsIGxlbmd0
aCk7CiAgICAgfQogCi0gICAgU3RyaW5nVmlldyhjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmcpCi0g
ICAgewotICAgICAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQotICAgICAgICAgICAgaW5pdGlhbGl6
ZShzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgaW5pdGlhbGl6ZShzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5n
dGgoKSk7Ci0gICAgfQotCi0gICAgU3RyaW5nVmlldyhjb25zdCBTdHJpbmcmIHN0cmluZykKLSAg
ICB7Ci0gICAgICAgIGlmICghc3RyaW5nLmltcGwoKSkgewotICAgICAgICAgICAgbV9jaGFyYWN0
ZXJzID0gbnVsbHB0cjsKLSAgICAgICAgICAgIG1fbGVuZ3RoID0gMDsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKSB7Ci0gICAgICAg
ICAgICBpbml0aWFsaXplKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGluaXRpYWxpemUoc3RyaW5n
LmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgIH0KKyAgICBTdHJpbmdWaWV3
KGNvbnN0IFN0cmluZ0ltcGwmKTsKKyAgICBTdHJpbmdWaWV3KGNvbnN0IFN0cmluZyYpOwogCiAg
ICAgc3RhdGljIFN0cmluZ1ZpZXcgZW1wdHkoKQogICAgIHsKQEAgLTEzNCwzNSArMTE5LDEyIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cmluZ1ZpZXcoY2hhcmFjdGVyczE2KCkgKyBzdGFy
dCwgbGVuZ3RoKTsKICAgICB9CiAKLSAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdAotICAgIHsK
LSAgICAgICAgaWYgKGlzOEJpdCgpKQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhjaGFyYWN0
ZXJzOCgpLCBsZW5ndGgoKSk7Ci0KLSAgICAgICAgcmV0dXJuIFN0cmluZyhjaGFyYWN0ZXJzMTYo
KSwgbGVuZ3RoKCkpOwotICAgIH0KLQotICAgIGZsb2F0IHRvRmxvYXQoYm9vbCYgaXNWYWxpZCkK
LSAgICB7Ci0gICAgICAgIGlmIChpczhCaXQoKSkKLSAgICAgICAgICAgIHJldHVybiBjaGFyYWN0
ZXJzVG9GbG9hdChjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSwgJmlzVmFsaWQpOwotICAgICAgICBy
ZXR1cm4gY2hhcmFjdGVyc1RvRmxvYXQoY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpLCAmaXNWYWxp
ZCk7Ci0gICAgfQotCi0gICAgaW50IHRvSW50KGJvb2wmIGlzVmFsaWQpCi0gICAgewotICAgICAg
ICBpZiAoaXM4Qml0KCkpCi0gICAgICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50KGNoYXJh
Y3RlcnM4KCksIGxlbmd0aCgpLCAmaXNWYWxpZCk7Ci0gICAgICAgIHJldHVybiBjaGFyYWN0ZXJz
VG9JbnQoY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpLCAmaXNWYWxpZCk7Ci0gICAgfQorICAgIFN0
cmluZyB0b1N0cmluZygpIGNvbnN0OwogCi0gICAgU3RyaW5nIHRvU3RyaW5nV2l0aG91dENvcHlp
bmcoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGlzOEJpdCgpKQotICAgICAgICAgICAgcmV0
dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKGNoYXJhY3RlcnM4KCksIGxlbmd0
aCgpKTsKKyAgICBmbG9hdCB0b0Zsb2F0KGJvb2wmIGlzVmFsaWQpIGNvbnN0OworICAgIGludCB0
b0ludChib29sJiBpc1ZhbGlkKSBjb25zdDsKIAotICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6
Y3JlYXRlV2l0aG91dENvcHlpbmcoY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpKTsKLSAgICB9Cisg
ICAgU3RyaW5nIHRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSBjb25zdDsKIAogICAgIFVDaGFyIG9w
ZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0CiAgICAgewpAQCAtMTcyLDEyICsxMzQsNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjaGFyYWN0ZXJzMTYoKVtpbmRleF07CiAgICAgfQog
Ci0gICAgc2l6ZV90IGZpbmQoVUNoYXIgY2hhcmFjdGVyLCB1bnNpZ25lZCBzdGFydCA9IDApIGNv
bnN0Ci0gICAgewotICAgICAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAgICAgICByZXR1cm4gV1RG
OjpmaW5kKGNoYXJhY3RlcnM4KCksIGxlbmd0aCgpLCBjaGFyYWN0ZXIsIHN0YXJ0KTsKLSAgICAg
ICAgcmV0dXJuIFdURjo6ZmluZChjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCksIGNoYXJhY3Rlciwg
c3RhcnQpOwotICAgIH0KKyAgICBzaXplX3QgZmluZChVQ2hhciBjaGFyYWN0ZXIsIHVuc2lnbmVk
IHN0YXJ0ID0gMCkgY29uc3Q7CiAKICAgICBib29sIGNvbnRhaW5zKFVDaGFyIGMpIGNvbnN0IHsg
cmV0dXJuIGZpbmQoYykgIT0gbm90Rm91bmQ7IH0KIApAQCAtMjE1LDYgKzE3MiwzNCBAQCBwcml2
YXRlOgogICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwogfTsKIAorfQorCisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitpbmxpbmUgU3RyaW5nVmlldzo6
U3RyaW5nVmlldyhjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmcpCit7CisgICAgaWYgKHN0cmluZy5p
czhCaXQoKSkKKyAgICAgICAgaW5pdGlhbGl6ZShzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5n
Lmxlbmd0aCgpKTsKKyAgICBlbHNlCisgICAgICAgIGluaXRpYWxpemUoc3RyaW5nLmNoYXJhY3Rl
cnMxNigpLCBzdHJpbmcubGVuZ3RoKCkpOworfQorCitpbmxpbmUgU3RyaW5nVmlldzo6U3RyaW5n
Vmlldyhjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBpZiAoIXN0cmluZy5pbXBsKCkpIHsK
KyAgICAgICAgbV9jaGFyYWN0ZXJzID0gbnVsbHB0cjsKKyAgICAgICAgbV9sZW5ndGggPSAwOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpIHsKKyAgICAg
ICAgaW5pdGlhbGl6ZShzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbml0aWFsaXplKHN0cmluZy5jaGFyYWN0ZXJzMTYo
KSwgc3RyaW5nLmxlbmd0aCgpKTsKK30KKwogaW5saW5lIHZvaWQgU3RyaW5nVmlldzo6Z2V0Q2hh
cmFjdGVyc1dpdGhVcGNvbnZlcnQoTENoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAogewogICAgIEFT
U0VSVChpczhCaXQoKSk7CkBAIC0yNDcsNiArMjMyLDQ1IEBAIGlubGluZSBTdHJpbmdWaWV3OjpV
cGNvbnZlcnRlZENoYXJhY3RlcnM6OlVwY29udmVydGVkQ2hhcmFjdGVycyhjb25zdCBTdHJpbmdW
aWV3CiAgICAgbV9jaGFyYWN0ZXJzID0gbV91cGNvbnZlcnRlZENoYXJhY3RlcnMuZGF0YSgpOwog
fQogCitpbmxpbmUgU3RyaW5nIFN0cmluZ1ZpZXc6OnRvU3RyaW5nKCkgY29uc3QKK3sKKyAgICBp
ZiAoaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoY2hhcmFjdGVyczgoKSwgbGVuZ3Ro
KCkpOworCisgICAgcmV0dXJuIFN0cmluZyhjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCkpOworfQor
CitpbmxpbmUgZmxvYXQgU3RyaW5nVmlldzo6dG9GbG9hdChib29sJiBpc1ZhbGlkKSBjb25zdAor
eworICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0Zsb2F0KGNo
YXJhY3RlcnM4KCksIGxlbmd0aCgpLCAmaXNWYWxpZCk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNU
b0Zsb2F0KGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSwgJmlzVmFsaWQpOworfQorCitpbmxpbmUg
aW50IFN0cmluZ1ZpZXc6OnRvSW50KGJvb2wmIGlzVmFsaWQpIGNvbnN0Cit7CisgICAgaWYgKGlz
OEJpdCgpKQorICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50KGNoYXJhY3RlcnM4KCksIGxl
bmd0aCgpLCAmaXNWYWxpZCk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludChjaGFyYWN0ZXJz
MTYoKSwgbGVuZ3RoKCksICZpc1ZhbGlkKTsKK30KKworaW5saW5lIFN0cmluZyBTdHJpbmdWaWV3
Ojp0b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkgY29uc3QKK3sKKyAgICBpZiAoaXM4Qml0KCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWluZyhjaGFyYWN0ZXJz
OCgpLCBsZW5ndGgoKSk7CisKKyAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENv
cHlpbmcoY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpKTsKK30KKworaW5saW5lIHNpemVfdCBTdHJp
bmdWaWV3OjpmaW5kKFVDaGFyIGNoYXJhY3RlciwgdW5zaWduZWQgc3RhcnQpIGNvbnN0Cit7Cisg
ICAgaWYgKGlzOEJpdCgpKQorICAgICAgICByZXR1cm4gV1RGOjpmaW5kKGNoYXJhY3RlcnM4KCks
IGxlbmd0aCgpLCBjaGFyYWN0ZXIsIHN0YXJ0KTsKKyAgICByZXR1cm4gV1RGOjpmaW5kKGNoYXJh
Y3RlcnMxNigpLCBsZW5ndGgoKSwgY2hhcmFjdGVyLCBzdGFydCk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFN0cmluZ1R5cGU+IGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyOworCiB0ZW1wbGF0ZTw+
IGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1ZpZXc+IHsKIHB1YmxpYzoKICAgICBTdHJp
bmdUeXBlQWRhcHRlcjxTdHJpbmdWaWV3PihTdHJpbmdWaWV3IHN0cmluZykK
</data>
<flag name="review"
          id="263854"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>