<?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>29909</bug_id>
          
          <creation_ts>2009-09-29 18:35:25 -0700</creation_ts>
          <short_desc>[V8] Chromium&apos;s implementation of ScriptString is awful for XHR&apos;s responseText</short_desc>
          <delta_ts>2009-10-19 22:01:52 -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>All</rep_platform>
          <op_sys>All</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="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>iposva</cc>
    
    <cc>jens</cc>
    
    <cc>levin</cc>
    
    <cc>mbelshe</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>151138</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2009-09-29 18:35:25 -0700</bug_when>
    <thetext>ScriptString is implemented in bindings/v8 as a thin wrapper around WebCore::String.  This means every append operation calls into String::append() which allocates a new buffer large enough for the entire string and copies the data in.  For XMLHttpRequest&apos;s responseText object, this means every time new data is received from the network a new WebCore::String is allocated and populate with the text received thus far.

This results in memcpy()ing the same data around a lot and making a lot of allocations and deallocations, but it interacts particularly badly with V8 if the readystatechange to 3 handler happens to grab a reference to the responseText object because when this happens V8 grabs a reference to the WebCore::String backing responseText.  Some sites check the responseText.length parameter on readyState 3 which means they will create a handle from V8 on every intermediate WebCore string resulting in quadratic memory use (mitigated by a very small constant factor, but quadratic nonetheless).   For example, if a 1MB XHR is received in 32 chunks of size 32K there are a sequence of WebCore::String&apos;s created of sizes:

32k
64k
98k
128k
160k
...
992k
1024k

and a readystatechange event fired at each.  If the script grabs a handle at each readystatechange handler, up to around half a gig could be kept live until V8 GC&apos;s the handles holding the WebCore::String objects alive.  This is suboptimal, especially as I suspect it is rare that a script would want to look at the actual contents of responseText before the download completes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151149</commentid>
    <comment_count>1</comment_count>
      <attachid>40340</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2009-09-29 18:58:34 -0700</bug_when>
    <thetext>Created attachment 40340
One possible ScriptString implementation for v8

This patch is a possible replacement for ScriptString.  It handles appends by keeping a list of WebCore::String objects and only flattens to a contiguous buffer when the character data is requested.  This impl requires a custom V8ExternalStringResource implementation so that the .length property of the string can be queried without forcing the entire buffer to be flat.

An alternative would be to copy the string straight into V8 as it arrives and let it handle the cheap concatenation since it already has code to do this.  This would require copying the string back out into WebCore on demand as well as a change in the V8 interface to allow appending to a V8-controlled string.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151311</commentid>
    <comment_count>2</comment_count>
      <attachid>40340</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-09-30 11:47:21 -0700</bug_when>
    <thetext>Comment on attachment 40340
One possible ScriptString implementation for v8

&gt; Index: WebCore/bindings/v8/ScriptString.h
...
&gt; +// This class is not thread-safe.  To access the data from multiple threads
&gt; +// the caller must serialize into a String object and explicitly copy() the
&gt; +// data.
&gt;  class ScriptString {
&gt;  public:
&gt; +    ScriptString() : m_impl(new ScriptStringImpl) {}

it seems like it would be nice if ScriptString&apos;s default constructor did no
allocations.  that&apos;s how String works, and it seems nice for cases where you
have a temporary ScriptString on the stack or a ScriptString as a member var.


&gt; Index: WebCore/bindings/v8/ScriptStringImpl.h
...
&gt; + * Copyright (C) 2008, 2009 Google Inc. All rights reserved.

2008?


&gt; +class ScriptStringImpl : public RefCounted&lt;ScriptStringImpl&gt; {
...
&gt; +private:
&gt; +  // Forces all appended strings into a flat buffer (stored as m_buffer).
&gt; +  void UpdateBuffer() const;

nit: indent by 4 spaces


&gt; +  mutable Vector&lt;String&gt; m_appended_strings;

nit: m_appendedStrings per webkit style


&gt; Index: WebCore/bindings/v8/ScriptStringImpl.cpp
...
&gt; + * Copyright (C) 2008, 2009 Google Inc. All rights reserved.

2008?


&gt; +#ifndef ScriptString_h
&gt; +#define ScriptString_h
&gt; +
&gt; +#include &quot;PlatformString.h&quot;
&gt; +#include &quot;ScriptStringImpl.h&quot;
&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +// This implementation is based on StringBuilder.h with some caching added.
&gt; +
&gt; +ScriptStringImpl::ScriptStringImpl()
&gt; +    : m_length(0)
&gt; +    , m_isNull(false) {
&gt; +}
&gt; +ScriptStringImpl::ScriptStringImpl(const String&amp; s)
&gt; +    : m_buffer(s)
&gt; +    , m_length(s.length())
&gt; +    , m_isNull(s.isNull()) {
&gt; +}

nit: webkit style is to put the opening &quot;{&quot; on a new line


&gt; +const UChar* ScriptStringImpl::data() const {
&gt; +  UpdateBuffer();

nit: indent by 4 spaces


&gt; +  if (!m_buffer.characters()) {
&gt; +    // oh snap!
&gt; +    return NULL;
&gt; +  }
&gt; +  return m_buffer.characters();

nit: the above null check and explicit null returns seems unnecessary.

maybe the data method should just be implemented inline as a call to toString().characters().


&gt; +// This function should never change any observable state, hence the const-ness.
&gt; +void ScriptStringImpl::UpdateBuffer() const {
&gt; +    int count = m_appended_strings.size();
&gt; +
&gt; +    // No append() calls have been made since either construction or the last UpdateBuffer() call, so
&gt; +    // m_buffer is already up to date.
&gt; +    if (count == 0) {
&gt; +      return;

nit: indent by 4 spaces
nit: do not use {}&apos;s when the enclosed statement is one line


&gt; Index: WebCore/bindings/v8/V8Binding.cpp

&gt; +        // TODO(jamesr): get this accounting right

nit: use FIXME instead of TODO(jamesr) per webkit style


&gt; +        // TODO(jamesr): get this accounting right

ditto


&gt; +    //String webcoreString() { return String(m_scriptString); }

delete this commented out code?  it is good practice to avoid leaving
commented out code around unless it has a FIXME comment explaining
what needs to be done before it can be uncommented.


&gt; Index: WebCore/bindings/v8/V8Binding.h

&gt; +    // Convert a ScriptString to a V8 string.
&gt; +    inline v8::Handle&lt;v8::String&gt; v8ScriptString(const ScriptString&amp; string)
&gt; +    {
&gt; +      return v8ExternalScriptString(string);
&gt; +    }

nit: 4 space indent


&gt; +    inline v8::Handle&lt;v8::Value&gt; v8StringOrNull(const ScriptString&amp; str) {
&gt; +       return str.isNull() ? v8::Handle&lt;v8::Value&gt;(v8::Null()) : v8::Handle&lt;v8::Value&gt;(v8ScriptString(str));
&gt; +    }

nit: fix indentation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151329</commentid>
    <comment_count>3</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-09-30 12:55:33 -0700</bug_when>
    <thetext>Consider running &quot;check-webkit-style&quot; on your change as I think it will catch several issues that Darin pointed out (and perhaps one or two more).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152527</commentid>
    <comment_count>4</comment_count>
      <attachid>40673</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2009-10-05 17:43:55 -0700</bug_when>
    <thetext>Created attachment 40673
Fixes style issues and makes the default c&apos;tor for ScriptString do no allocations

Sorry about all the style issues, I will try to remember check-webkit-style in the future.  This patch passes check-webkit-style and makes the default c&apos;tor for ScriptString perform no allocations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152538</commentid>
    <comment_count>5</comment_count>
      <attachid>40676</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2009-10-05 18:48:35 -0700</bug_when>
    <thetext>Created attachment 40676
Fixes some bugs

I found a few bugs in the implementation through unit testing, this addresses them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152551</commentid>
    <comment_count>6</comment_count>
      <attachid>40676</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-05 20:43:42 -0700</bug_when>
    <thetext>Comment on attachment 40676
Fixes some bugs

I think you&apos;re re-inventing SegmentedString.  Have you investigated whether that&apos;s sufficient for your needs?

Also, we need a ChangeLog entry.  You can create one with ./WebKitTools/Scripts/prepare-ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153221</commentid>
    <comment_count>7</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2009-10-07 17:10:32 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 40676 [details])
&gt; I think you&apos;re re-inventing SegmentedString.  Have you investigated whether
&gt; that&apos;s sufficient for your needs?

SegmentedString does not seem to support tracking the isNull attribute or caching the flattened buffer (multiple calls to toString() always build into a new buffer).  

StringBuilder is also close to my needs, I will try implementing ScriptStringImpl on top of that.  It will require some changes to the StringBuilder API (exposing length and isNull).

&gt; 
&gt; Also, we need a ChangeLog entry.  You can create one with
&gt; ./WebKitTools/Scripts/prepare-ChangeLog

Whoops, my bad.  Will correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153231</commentid>
    <comment_count>8</comment_count>
      <attachid>40834</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2009-10-07 17:51:44 -0700</bug_when>
    <thetext>Created attachment 40834
Uses StringBuilder internally, adds ChangeLog entry

This uses platform/text/StringBuilder to handle appends, which requires expanding the StringBuilder interface a little bit.  Using SegmentedString would also require some modifications (to handle isNull) and StringBuilder looked a lot simpler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153237</commentid>
    <comment_count>9</comment_count>
      <attachid>40834</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-07 18:59:18 -0700</bug_when>
    <thetext>Comment on attachment 40834
Uses StringBuilder internally, adds ChangeLog entry

This looks great.  Two minor syntactic issues:

1) There are a handful of style problems:

+}
+ScriptStringImpl::ScriptStringImpl(const String&amp; s)

Missing a space between these two linds.

+      return v8ExternalScriptString(string);

Need four space indent here.  (I think there was another indent problem too.)

2) ScriptStringImpl has nothing to do with v8 and should be in platform/text somewhere.  Maybe it should be called CachingStringBuilder ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154676</commentid>
    <comment_count>10</comment_count>
      <attachid>41195</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2009-10-14 17:04:44 -0700</bug_when>
    <thetext>Created attachment 41195
Implementation using v8::String::Concat() for operator+=

This is a different approach that uses a new V8 interface to build up the string.  It&apos;s significantly better than the the &apos;pure&apos; C++ approach since V8 is smart enough to not flatten the string until it is truly necessary.  On a test page that downloads a 10MB data file via XHR and queries the responseText.length attribute on every readystatechange event, Chromium with this patch uses on the order of 10x less peak memory and builds up the responseText on the order of 20x times faster.  This is an extreme case but I think it&apos;s always a real improvement.

Since this patch depends on a V8 interface (v8::String::Concat) that has not yet migrated in Chromium&apos;s DEPS file, it will break the Chromium build if checked in right now so I&apos;ve marked this patch cq-.  I would still appreciate feedback while waiting for the V8 DEPS roll and will update the patch once it is safe to land.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154677</commentid>
    <comment_count>11</comment_count>
      <attachid>41195</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-14 17:33:36 -0700</bug_when>
    <thetext>Comment on attachment 41195
Implementation using v8::String::Concat() for operator+=

That looks great!  One nit: please use OwnHandle to avoid manually allocating and deallocating the handle.

http://trac.webkit.org/browser/trunk/WebCore/bindings/v8/OwnHandle.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154679</commentid>
    <comment_count>12</comment_count>
      <attachid>41196</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2009-10-14 18:26:49 -0700</bug_when>
    <thetext>Created attachment 41196
Uses OwnHandle&lt;v8::String&gt; instead of a v8::Persistent&lt;v8::String&gt; for management

I&apos;m going to double-check with V8 experts about the persistent handle use, but this version passes tests and loads up gmail so I believe it&apos;s correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154680</commentid>
    <comment_count>13</comment_count>
      <attachid>41196</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-14 18:31:41 -0700</bug_when>
    <thetext>Comment on attachment 41196
Uses OwnHandle&lt;v8::String&gt; instead of a v8::Persistent&lt;v8::String&gt; for management

ftw</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156057</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-19 21:31:56 -0700</bug_when>
    <thetext>Jame, this is set to commit-queue-.  Let us know when you&apos;d like it landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156063</commentid>
    <comment_count>15</comment_count>
      <attachid>41196</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2009-10-19 21:43:34 -0700</bug_when>
    <thetext>Comment on attachment 41196
Uses OwnHandle&lt;v8::String&gt; instead of a v8::Persistent&lt;v8::String&gt; for management

Thanks for the ping.  The V8 change is in and I ran this through Chromium&apos;s layout trybots, so this should be good to land now!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156067</commentid>
    <comment_count>16</comment_count>
      <attachid>41196</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-19 22:01:46 -0700</bug_when>
    <thetext>Comment on attachment 41196
Uses OwnHandle&lt;v8::String&gt; instead of a v8::Persistent&lt;v8::String&gt; for management

Clearing flags on attachment: 41196

Committed r49840: &lt;http://trac.webkit.org/changeset/49840&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156068</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-19 22:01:52 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40340</attachid>
            <date>2009-09-29 18:58:34 -0700</date>
            <delta_ts>2009-10-05 17:43:55 -0700</delta_ts>
            <desc>One possible ScriptString implementation for v8</desc>
            <filename>script_string_impl.diff</filename>
            <type>text/plain</type>
            <size>14455</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3RyaW5nLmgNCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0cmluZy5oCShyZXZpc2lvbiA0ODc5NikNCisr
KyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0cmluZy5oCSh3b3JraW5nIGNvcHkpDQpAQCAt
MzIsMzQgKzMyLDQ4IEBADQogI2RlZmluZSBTY3JpcHRTdHJpbmdfaAogCiAjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRTdHJpbmdJbXBsLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorLy8gVGhpcyBjbGFzcyBpcyBub3QgdGhyZWFkLXNhZmUuICBUbyBhY2Nl
c3MgdGhlIGRhdGEgZnJvbSBtdWx0aXBsZSB0aHJlYWRzCisvLyB0aGUgY2FsbGVyIG11c3Qgc2Vy
aWFsaXplIGludG8gYSBTdHJpbmcgb2JqZWN0IGFuZCBleHBsaWNpdGx5IGNvcHkoKSB0aGUKKy8v
IGRhdGEuCiBjbGFzcyBTY3JpcHRTdHJpbmcgewogcHVibGljOgotICAgIFNjcmlwdFN0cmluZygp
IHt9Ci0gICAgU2NyaXB0U3RyaW5nKGNvbnN0IFN0cmluZyYgcykgOiBtX3N0cihzKSB7fQotICAg
IFNjcmlwdFN0cmluZyhjb25zdCBjaGFyKiBzKSA6IG1fc3RyKHMpIHt9CisgICAgU2NyaXB0U3Ry
aW5nKCkgOiBtX2ltcGwobmV3IFNjcmlwdFN0cmluZ0ltcGwpIHt9CisgICAgU2NyaXB0U3RyaW5n
KGNvbnN0IFN0cmluZyYgcykgOiBtX2ltcGwobmV3IFNjcmlwdFN0cmluZ0ltcGwocykpIHt9Cisg
ICAgU2NyaXB0U3RyaW5nKGNvbnN0IGNoYXIqIHMpIDogbV9pbXBsKG5ldyBTY3JpcHRTdHJpbmdJ
bXBsKHMpKSB7fQogCi0gICAgb3BlcmF0b3IgU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdHI7
IH0KKyAgICBvcGVyYXRvciBTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX2ltcGwtPnRvU3RyaW5n
KCk7IH0KIAotICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9zdHIuaXNOdWxsKCk7
IH0KLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyLmxlbmd0aCgpOyB9Cisg
ICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGwtPmlzTnVsbCgpOyB9CisgICAg
c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2ltcGwtPmxlbmd0aCgpOyB9CiAKKyAgICBj
b25zdCBVQ2hhciogZGF0YSgpIGNvbnN0IHsKKyAgICAgIHJldHVybiBtX2ltcGwtPmRhdGEoKTsK
KyAgICB9CisKICAgICBTY3JpcHRTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBjaGFyKiBzKQogICAg
IHsKLSAgICAgICAgbV9zdHIgPSBzOworICAgICAgICBtX2ltcGwgPSBuZXcgU2NyaXB0U3RyaW5n
SW1wbChzKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAorICAgIFNjcmlwdFN0cmlu
ZyYgb3BlcmF0b3I9KGNvbnN0IFN0cmluZyYgcykKKyAgICB7CisgICAgICAgIG1faW1wbCA9IG5l
dyBTY3JpcHRTdHJpbmdJbXBsKHMpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCiAg
ICAgU2NyaXB0U3RyaW5nJiBvcGVyYXRvcis9KGNvbnN0IFN0cmluZyYgcykKICAgICB7Ci0gICAg
ICAgIG1fc3RyICs9IHM7CisgICAgICAgIG1faW1wbC0+YXBwZW5kKHMpOwogICAgICAgICByZXR1
cm4gKnRoaXM7CiAgICAgfQogCiBwcml2YXRlOgotICAgIFN0cmluZyBtX3N0cjsKKyAgICBSZWZQ
dHI8U2NyaXB0U3RyaW5nSW1wbD4gbV9pbXBsOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTdHJpbmdJbXBsLmgNCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NCi0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0cmluZ0ltcGwuaAkocmV2aXNpb24g
MCkNCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0cmluZ0ltcGwuaAkocmV2aXNpb24g
MCkNCkBAIC0wLDAgKzEsNzQgQEANCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2NyaXB0U3RyaW5nSW1wbF9oCisj
ZGVmaW5lIFNjcmlwdFN0cmluZ0ltcGxfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JpcHRTdHJpbmdJbXBsIDogcHVibGlj
IFJlZkNvdW50ZWQ8U2NyaXB0U3RyaW5nSW1wbD4geworcHVibGljOgorICAgIFNjcmlwdFN0cmlu
Z0ltcGwoKTsKKyAgICBTY3JpcHRTdHJpbmdJbXBsKGNvbnN0IFN0cmluZyYgcyk7CisgICAgU2Ny
aXB0U3RyaW5nSW1wbChjb25zdCBjaGFyKiBzKTsKKworICAgIFN0cmluZyB0b1N0cmluZygpIGNv
bnN0OworCisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX2lzTnVsbDsgfQorICAg
IHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorCisgICAgY29uc3Qg
VUNoYXIqIGRhdGEoKSBjb25zdDsKKworICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgcyk7
CisKK3ByaXZhdGU6CisgIC8vIEZvcmNlcyBhbGwgYXBwZW5kZWQgc3RyaW5ncyBpbnRvIGEgZmxh
dCBidWZmZXIgKHN0b3JlZCBhcyBtX2J1ZmZlcikuCisgIHZvaWQgVXBkYXRlQnVmZmVyKCkgY29u
c3Q7CisKKyAgLy8gQSBjYWxsIHRvIGFwcGVuZCgpIGFkZHMgdGhlIFN0cmluZyB0byB0aGUgbV9h
cHBlbmRlZF9zdHJpbmdzIHZlY3Rvci4gIFdoZW4gYSBjb21wbGV0ZWx5IGZsYXQgYnVmZmVyCisg
IC8vIHdpdGggdGhlIGVudGlyZSBjb250ZW50cyBpcyByZXF1aXJlZCAoYSBjYWxsIHRvIGVpdGhl
ciBkYXRhKCkgb3IgdG9TdHJpbmcoKSksIHRoZSBjb250ZW50cyBvZgorICAvLyBtX2FwcGVuZGVk
X3N0cmluZ3MgYXJlIGNvcGllZCBpbnRvIGEgbmV3IGJ1ZmZlciB0aGF0IGlzIHN0b3JlZCBpbiBt
X2J1ZmZlciBhbmQgdGhlbiBtX2FwcGVuZGVkX3N0cmluZ3MKKyAgLy8gaXMgY2xlYXJlZC4gIFRo
YXQgd2F5IG11bHRpcGxlIGNhbGxzIHRvIG1fYnVmZmVyIGFyZSAnZnJlZScuCisgIC8vIEJvdGgg
b2YgdGhlc2UgZmllbGRzIGFyZSBtdXRhYmxlIHNpbmNlIHRoZXkgYXJlIHVzZWQgdG8gaW1wbGVt
ZW50IHRoZSBkYXRhKCkgaW50ZXJmYWNlIHdoaWNoIGRvZXMgbm90CisgIC8vIGxvZ2ljYWxseSBt
dXRhdGUgdGhlIHN0YXRlIG9mIHRoaXMgb2JqZWN0LgorICBtdXRhYmxlIFN0cmluZyBtX2J1ZmZl
cjsKKyAgbXV0YWJsZSBWZWN0b3I8U3RyaW5nPiBtX2FwcGVuZGVkX3N0cmluZ3M7CisKKyAgc2l6
ZV90IG1fbGVuZ3RoOworICAvLyBXZSBrZWVwIHRyYWNrIG9mIGlzTnVsbCB0byBkaWZmZXJlbnRp
YXRlIGJldHdlZW4gYXBwZW5kaW5nIGEgbnVsbCBzdHJpbmcgYW5kIGFuIGVtcHR5IG9uZS4KKyAg
Ym9vbCBtX2lzTnVsbDsKKworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gU2NyaXB0U3RyaW5nSW1wbF9oCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0
cmluZ0ltcGwuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRT
dHJpbmdJbXBsLmNwcAkocmV2aXNpb24gMCkNCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dFN0cmluZ0ltcGwuY3BwCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCArMSwxMTYgQEANCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgU2NyaXB0U3RyaW5nX2gKKyNkZWZpbmUgU2NyaXB0U3RyaW5nX2gKKworI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0U3RyaW5nSW1wbC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKy8vIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gU3Ry
aW5nQnVpbGRlci5oIHdpdGggc29tZSBjYWNoaW5nIGFkZGVkLgorCitTY3JpcHRTdHJpbmdJbXBs
OjpTY3JpcHRTdHJpbmdJbXBsKCkKKyAgICA6IG1fbGVuZ3RoKDApCisgICAgLCBtX2lzTnVsbChm
YWxzZSkgeworfQorU2NyaXB0U3RyaW5nSW1wbDo6U2NyaXB0U3RyaW5nSW1wbChjb25zdCBTdHJp
bmcmIHMpCisgICAgOiBtX2J1ZmZlcihzKQorICAgICwgbV9sZW5ndGgocy5sZW5ndGgoKSkKKyAg
ICAsIG1faXNOdWxsKHMuaXNOdWxsKCkpIHsKK30KKworU2NyaXB0U3RyaW5nSW1wbDo6U2NyaXB0
U3RyaW5nSW1wbChjb25zdCBjaGFyKiBzKQorICAgIDogbV9idWZmZXIocykKKyAgICAsIG1fbGVu
Z3RoKG1fYnVmZmVyLmxlbmd0aCgpKQorICAgICwgbV9pc051bGwobV9idWZmZXIuaXNOdWxsKCkp
IHsKK30KKwordm9pZCBTY3JpcHRTdHJpbmdJbXBsOjphcHBlbmQoY29uc3QgU3RyaW5nJiBzKSB7
CisgICAgaWYgKCFzLmlzTnVsbCgpKSB7CisgICAgICAgIG1faXNOdWxsID0gZmFsc2U7CisgICAg
ICAgIGlmICghcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fbGVuZ3RoICs9IHMubGVuZ3Ro
KCk7CisgICAgICAgICAgICBtX2FwcGVuZGVkX3N0cmluZ3MuYXBwZW5kKHMpOworICAgICAgICB9
CisgICAgfQorfQorCitjb25zdCBVQ2hhciogU2NyaXB0U3RyaW5nSW1wbDo6ZGF0YSgpIGNvbnN0
IHsKKyAgVXBkYXRlQnVmZmVyKCk7CisgIGlmICghbV9idWZmZXIuY2hhcmFjdGVycygpKSB7Cisg
ICAgLy8gb2ggc25hcCEKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorICByZXR1cm4gbV9idWZmZXIu
Y2hhcmFjdGVycygpOworfQorCisvLyBFdmVyeSBjYWxsIHRvIHRvU3RyaW5nKCkgbXVzdCByZXR1
cm4gYSBmbGF0IGJ1ZmZlciB3aXRoIHRoZSBlbnRpcmUgc3RyaW5nIGNvbnRlbnRzIHNvIGZhci4g
IEhvd2V2ZXIsCisvLyBpZiBtdWx0aXBsZSBjYWxscyB0byB0b1N0cmluZygpIGFyZSBtYWRlIHdp
dGhvdXQgaW50ZXJsZWF2aW5nIGFwcGVuZCgpIGNhbGxzLCB3ZSBjYW4gcmV0dXJuIHRoZSBzYW1l
CisvLyBidWZmZXIuCitTdHJpbmcgU2NyaXB0U3RyaW5nSW1wbDo6dG9TdHJpbmcoKSBjb25zdCB7
CisgICAgVXBkYXRlQnVmZmVyKCk7CisgICAgcmV0dXJuIG1fYnVmZmVyOworfQorCisvLyBUaGlz
IGZ1bmN0aW9uIHNob3VsZCBuZXZlciBjaGFuZ2UgYW55IG9ic2VydmFibGUgc3RhdGUsIGhlbmNl
IHRoZSBjb25zdC1uZXNzLgordm9pZCBTY3JpcHRTdHJpbmdJbXBsOjpVcGRhdGVCdWZmZXIoKSBj
b25zdCB7CisgICAgaW50IGNvdW50ID0gbV9hcHBlbmRlZF9zdHJpbmdzLnNpemUoKTsKKworICAg
IC8vIE5vIGFwcGVuZCgpIGNhbGxzIGhhdmUgYmVlbiBtYWRlIHNpbmNlIGVpdGhlciBjb25zdHJ1
Y3Rpb24gb3IgdGhlIGxhc3QgVXBkYXRlQnVmZmVyKCkgY2FsbCwgc28KKyAgICAvLyBtX2J1ZmZl
ciBpcyBhbHJlYWR5IHVwIHRvIGRhdGUuCisgICAgaWYgKGNvdW50ID09IDApIHsKKyAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBVQ2hhciogYnVmZmVyOworICAgIFN0cmluZyBuZXdCdWZmZXIg
PSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGJ1ZmZlcik7CisKKyAgICBV
Q2hhciogcCA9IGJ1ZmZlcjsKKyAgICBtZW1jcHkocCwgbV9idWZmZXIuY2hhcmFjdGVycygpLCBt
X2J1ZmZlci5sZW5ndGgoKSAqIHNpemVvZigqbV9idWZmZXIuY2hhcmFjdGVycygpKSk7CisgICAg
cCArPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBuZXh0ID0gbV9hcHBlbmRlZF9zdHJpbmdzW2ld
OworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBuZXh0Lmxlbmd0aCgpOyAKKyAgICAgICAgbWVt
Y3B5KHAsIG5leHQuY2hhcmFjdGVycygpLCBsZW5ndGggKiBzaXplb2YoKm5leHQuY2hhcmFjdGVy
cygpKSk7CisgICAgICAgIHAgKz0gbGVuZ3RoOworICAgIH0KKworICAgIEFTU0VSVChwID09IG1f
bGVuZ3RoICsgYnVmZmVyKTsKKworICAgIG1fYXBwZW5kZWRfc3RyaW5ncy5jbGVhcigpOworCisg
ICAgbV9idWZmZXIgPSBuZXdCdWZmZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFNjcmlwdFN0cmluZ19oCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Qmlu
ZGluZy5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5j
cHAJKHJldmlzaW9uIDQ4Nzk2KQ0KKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNw
cAkod29ya2luZyBjb3B5KQ0KQEAgLTE2OSw2ICsxNjksNTkgQEANCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAorCisvLyBXZWJDb3JlU2NyaXB0U3RyaW5nUmVzb3VyY2UgaXMgYSBoZWxwZXIgY2xh
c3MgZm9yIHY4RXh0ZXJuYWxTY3JpcHRTdHJpbmcgZm9yIHdoZW4KKy8vIHRoZSBiYWNraW5nIG9i
amVjdCBpcyBhIFdlYkNvcmU6OlNjcmlwdFN0cmluZy4KK2NsYXNzIFdlYkNvcmVTY3JpcHRTdHJp
bmdSZXNvdXJjZSA6IHB1YmxpYyB2ODo6U3RyaW5nOjpFeHRlcm5hbFN0cmluZ1Jlc291cmNlIHsK
K3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJDb3JlU2NyaXB0U3RyaW5nUmVzb3VyY2UoY29uc3Qg
U2NyaXB0U3RyaW5nJiBzdHJpbmcpCisgICAgICAgIDogbV9zY3JpcHRTdHJpbmcoc3RyaW5nKSwK
KyAgICAgICAgICBtX2xlbmd0aChzdHJpbmcuc2l6ZSgpKQorICAgIHsKKyNpZm5kZWYgTkRFQlVH
CisgICAgICAgIG1fdGhyZWFkSWQgPSBXVEY6OmN1cnJlbnRUaHJlYWQoKTsKKyNlbmRpZgorICAg
ICAgICBBU1NFUlQoIXN0cmluZy5pc051bGwoKSk7CisgICAgICAgIEFTU0VSVChtX2xlbmd0aCA+
IDApOworICAgICAgICBBU1NFUlQoc3RyaW5nLmRhdGEoKSk7CisgICAgICAgIC8vIFRPRE8oamFt
ZXNyKTogZ2V0IHRoaXMgYWNjb3VudGluZyByaWdodAorICAgICAgICAvL3Y4OjpWODo6QWRqdXN0
QW1vdW50T2ZFeHRlcm5hbEFsbG9jYXRlZE1lbW9yeSgyICogc3RyaW5nLmxlbmd0aCgpKTsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIH5XZWJDb3JlU2NyaXB0U3RyaW5nUmVzb3VyY2UoKQorICAgIHsK
KyNpZm5kZWYgTkRFQlVHCisgICAgICAgIEFTU0VSVChtX3RocmVhZElkID09IFdURjo6Y3VycmVu
dFRocmVhZCgpKTsKKyNlbmRpZgorICAgICAgICAvLyBUT0RPKGphbWVzcik6IGdldCB0aGlzIGFj
Y291bnRpbmcgcmlnaHQKKyAgICAgICAgLy9pbnQgcmVkdWNlZEV4dGVybmFsTWVtb3J5ID0gLTIg
KiBtX3BsYWluU3RyaW5nLmxlbmd0aCgpOworICAgICAgICAvL2lmIChtX3BsYWluU3RyaW5nLmlt
cGwoKSAhPSBtX2F0b21pY1N0cmluZy5pbXBsKCkgJiYgIW1fYXRvbWljU3RyaW5nLmlzTnVsbCgp
KQorICAgICAgICAvLyAgICByZWR1Y2VkRXh0ZXJuYWxNZW1vcnkgKj0gMjsKKyAgICAgICAgLy92
ODo6Vjg6OkFkanVzdEFtb3VudE9mRXh0ZXJuYWxBbGxvY2F0ZWRNZW1vcnkocmVkdWNlZEV4dGVy
bmFsTWVtb3J5KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGNvbnN0IHVpbnQxNl90KiBkYXRhKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQx
Nl90Kj4obV9zY3JpcHRTdHJpbmcuZGF0YSgpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHNpemVf
dCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorCisgICAgLy9TdHJpbmcgd2Vi
Y29yZVN0cmluZygpIHsgcmV0dXJuIFN0cmluZyhtX3NjcmlwdFN0cmluZyk7IH0KKworcHJpdmF0
ZToKKyAgICAvLyBBIHNoYWxsb3cgY29weSBvZiB0aGUgc3RyaW5nLiBLZWVwcyB0aGUgc3RyaW5n
IGJ1ZmZlciBhbGl2ZSB1bnRpbCB0aGUgVjggZW5naW5lIGdhcmJhZ2UgY29sbGVjdHMgaXQuCisg
ICAgU2NyaXB0U3RyaW5nIG1fc2NyaXB0U3RyaW5nOworICAgIC8vIFRoZSBTY3JpcHRTdHJpbmcg
YmFja2luZyB0aGUgYnVmZmVyIG1pZ2h0IGJlIGFwcGVuZGVkIHRvLCBzbyB3ZSBrZWVwIGFuIGV4
cGxpY2l0IGxlbmd0aCBmb3IgdGhpcyBoYW5kbGUuCisgICAgc2l6ZV90IG1fbGVuZ3RoOworCisK
KyNpZm5kZWYgTkRFQlVHCisgICAgV1RGOjpUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSWQ7Cisj
ZW5kaWYKK307CisKKwogU3RyaW5nIHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8
djg6OlN0cmluZz4gdjhTdHJpbmcpCiB7CiAgICAgcmV0dXJuIHY4U3RyaW5nVG9XZWJDb3JlU3Ry
aW5nPFN0cmluZz4odjhTdHJpbmcsIEV4dGVybmFsaXplKTsKQEAgLTIzMyw2ICsyODYsMTYgQEAN
CiAgICAgcmV0dXJuIG5ld1N0cmluZzsKIH0KIAorc3RhdGljIHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBtYWtlRXh0ZXJuYWxTY3JpcHRTdHJpbmcoY29uc3QgU2NyaXB0U3RyaW5nIHN0cmluZykKK3sK
KyAgICBXZWJDb3JlU2NyaXB0U3RyaW5nUmVzb3VyY2UqIHNjcmlwdFN0cmluZ1Jlc291cmNlID0g
bmV3IFdlYkNvcmVTY3JpcHRTdHJpbmdSZXNvdXJjZShzdHJpbmcpOworICAgIHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuZXdTY3JpcHRTdHJpbmcgPSB2ODo6U3RyaW5nOjpOZXdFeHRlcm5hbChzY3Jp
cHRTdHJpbmdSZXNvdXJjZSk7CisgICAgaWYgKG5ld1NjcmlwdFN0cmluZy5Jc0VtcHR5KCkpCisg
ICAgICAgIGRlbGV0ZSBzY3JpcHRTdHJpbmdSZXNvdXJjZTsKKworICAgIHJldHVybiBuZXdTY3Jp
cHRTdHJpbmc7Cit9CisKIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmdJbXBsKiwgdjg6OlN0cmluZyo+
IFN0cmluZ0NhY2hlOwogCiBzdGF0aWMgU3RyaW5nQ2FjaGUmIGdldFN0cmluZ0NhY2hlKCkKQEAg
LTI4MSw0ICszNDQsMTIgQEANCiAgICAgcmV0dXJuIG5ld1N0cmluZzsKIH0KIAordjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IHY4RXh0ZXJuYWxTY3JpcHRTdHJpbmcoY29uc3QgU2NyaXB0U3RyaW5nJiBz
dHJpbmcpCit7CisgICAgaWYgKCFzdHJpbmcuc2l6ZSgpKQorICAgICAgICByZXR1cm4gdjg6OlN0
cmluZzo6RW1wdHkoKTsKKworICAgIHJldHVybiBtYWtlRXh0ZXJuYWxTY3JpcHRTdHJpbmcoc3Ry
aW5nKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9WOEJpbmRpbmcuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhC
aW5kaW5nLmgJKHJldmlzaW9uIDQ4Nzk2KQ0KKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5k
aW5nLmgJKHdvcmtpbmcgY29weSkNCkBAIC0zNCw2ICszNCw3IEBADQogI2luY2x1ZGUgIkF0b21p
Y1N0cmluZy5oIgogI2luY2x1ZGUgIk1hdGhFeHRyYXMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgogCiAjaW5jbHVkZSA8djguaD4KIApA
QCAtNzcsNiArNzgsMTkgQEANCiAgICAgICAgIHJldHVybiB2OEV4dGVybmFsU3RyaW5nKHN0cmlu
Zyk7CiAgICAgfQogCisgICAgLy8gSnVzdCBsaWtlIHY4RXh0ZXJuYWxTdHJpbmcgZXhjZXB0IHRo
YXQgdGhlIGJhY2tpbmcgYnVmZmVyIGlzIGEKKyAgICAvLyBTY3JpcHRTdHJpbmcgYW5kIG5vdCBh
IG5vcm1hbCBTdHJpbmcuICBUaGUgc2FtZSBiYWNraW5nIGJ1ZmZlciBjYW4KKyAgICAvLyBiZSBy
ZS11c2VkIGZvciBtdWx0aXBsZSBoYW5kbGVzIHRvIHRoZSBzYW1lIFNjcmlwdFN0cmluZyBzbyBh
IGJpdCBvZgorICAgIC8vIHNwZWNpYWwgaGFuZGxpbmcgaXMgcmVxdWlyZWQuCisgICAgdjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IHY4RXh0ZXJuYWxTY3JpcHRTdHJpbmcoY29uc3QgU2NyaXB0U3RyaW5n
Jik7CisKKyAgICAvLyBDb252ZXJ0IGEgU2NyaXB0U3RyaW5nIHRvIGEgVjggc3RyaW5nLgorICAg
IGlubGluZSB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4U2NyaXB0U3RyaW5nKGNvbnN0IFNjcmlw
dFN0cmluZyYgc3RyaW5nKQorICAgIHsKKyAgICAgIHJldHVybiB2OEV4dGVybmFsU2NyaXB0U3Ry
aW5nKHN0cmluZyk7CisgICAgfQorCisKICAgICAvLyBFbmFibGVzIGNhY2hpbmcgdjggd3JhcHBl
cnMgY3JlYXRlZCBmb3IgV2ViQ29yZTo6U3RyaW5nSW1wbC4gIEN1cnJlbnRseSB0aGlzIGNhY2hl
IHJlcXVpcmVzCiAgICAgLy8gYWxsIHRoZSBjYWxscyAoYm90aCB0byBjb252ZXJ0IFdlYkNvcmU6
OlN0cmluZyB0byB2ODo6U3RyaW5nIGFuZCB0byBHQyB0aGUgaGFuZGxlKQogICAgIC8vIHRvIGJl
IHBlcmZvcm1lZCBvbiB0aGUgbWFpbiB0aHJlYWQuCkBAIC0xODMsNiArMTk3LDEwIEBADQogICAg
ICAgICByZXR1cm4gc3RyLmlzTnVsbCgpID8gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KHY4OjpOdWxs
KCkpIDogdjg6OkhhbmRsZTx2ODo6VmFsdWU+KHY4U3RyaW5nKHN0cikpOwogICAgIH0KIAorICAg
IGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhTdHJpbmdPck51bGwoY29uc3QgU2NyaXB0
U3RyaW5nJiBzdHIpIHsKKyAgICAgICByZXR1cm4gc3RyLmlzTnVsbCgpID8gdjg6OkhhbmRsZTx2
ODo6VmFsdWU+KHY4OjpOdWxsKCkpIDogdjg6OkhhbmRsZTx2ODo6VmFsdWU+KHY4U2NyaXB0U3Ry
aW5nKHN0cikpOworICAgIH0KKwogICAgIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhT
dHJpbmdPclVuZGVmaW5lZChjb25zdCBTdHJpbmcmIHN0cikKICAgICB7CiAgICAgICAgIHJldHVy
biBzdHIuaXNOdWxsKCkgPyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjg6OlVuZGVmaW5lZCgpKSA6
IHY4OjpIYW5kbGU8djg6OlZhbHVlPih2OFN0cmluZyhzdHIpKTsKSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS5neXBpDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9u
IDQ4Nzk2KQ0KKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpDQpAQCAtNzU2
LDYgKzc1Niw4IEBADQogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmgnLAog
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmNwcCcsCiAgICAgICAgICAgICAn
YmluZGluZ3MvdjgvU2NyaXB0U3RyaW5nLmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Nj
cmlwdFN0cmluZ0ltcGwuaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvU2NyaXB0U3RyaW5n
SW1wbC5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuaCcsCiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvU3RhdGljRE9NRGF0YVN0b3JlLmNwcCcsCg==
</data>
<flag name="review"
          id="21600"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40673</attachid>
            <date>2009-10-05 17:43:55 -0700</date>
            <delta_ts>2009-10-05 18:48:35 -0700</delta_ts>
            <desc>Fixes style issues and makes the default c&apos;tor for ScriptString do no allocations</desc>
            <filename>script_string_impl.diff</filename>
            <type>text/plain</type>
            <size>14275</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">SW5kZXg6IGJpbmRpbmdzL3Y4L1NjcmlwdFN0cmluZy5oDQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gYmluZGlu
Z3MvdjgvU2NyaXB0U3RyaW5nLmgJKHJldmlzaW9uIDQ5MDk3KQ0KKysrIGJpbmRpbmdzL3Y4L1Nj
cmlwdFN0cmluZy5oCSh3b3JraW5nIGNvcHkpDQpAQCAtMzIsMzQgKzMyLDQ5IEBADQogI2RlZmlu
ZSBTY3JpcHRTdHJpbmdfaAogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRl
ICJTY3JpcHRTdHJpbmdJbXBsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gVGhpcyBj
bGFzcyBpcyBub3QgdGhyZWFkLXNhZmUuICBUbyBhY2Nlc3MgdGhlIGRhdGEgZnJvbSBtdWx0aXBs
ZSB0aHJlYWRzCisvLyB0aGUgY2FsbGVyIG11c3Qgc2VyaWFsaXplIGludG8gYSBTdHJpbmcgb2Jq
ZWN0IGFuZCBleHBsaWNpdGx5IGNvcHkoKSB0aGUKKy8vIGRhdGEuCiBjbGFzcyBTY3JpcHRTdHJp
bmcgewogcHVibGljOgotICAgIFNjcmlwdFN0cmluZygpIHt9Ci0gICAgU2NyaXB0U3RyaW5nKGNv
bnN0IFN0cmluZyYgcykgOiBtX3N0cihzKSB7fQotICAgIFNjcmlwdFN0cmluZyhjb25zdCBjaGFy
KiBzKSA6IG1fc3RyKHMpIHt9CisgICAgU2NyaXB0U3RyaW5nKCkgOiBtX2ltcGwoMCkge30KKyAg
ICBTY3JpcHRTdHJpbmcoY29uc3QgU3RyaW5nJiBzKSA6IG1faW1wbChuZXcgU2NyaXB0U3RyaW5n
SW1wbChzKSkge30KKyAgICBTY3JpcHRTdHJpbmcoY29uc3QgY2hhciogcykgOiBtX2ltcGwobmV3
IFNjcmlwdFN0cmluZ0ltcGwocykpIHt9CiAKLSAgICBvcGVyYXRvciBTdHJpbmcoKSBjb25zdCB7
IHJldHVybiBtX3N0cjsgfQorICAgIG9wZXJhdG9yIFN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1f
aW1wbC0+dG9TdHJpbmcoKTsgfQogCi0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBt
X3N0ci5pc051bGwoKTsgfQotICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdHIu
bGVuZ3RoKCk7IH0KKyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbCAmJiBt
X2ltcGwtPmlzTnVsbCgpOyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2lt
cGwtPmxlbmd0aCgpOyB9CiAKKyAgICBjb25zdCBVQ2hhciogZGF0YSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9pbXBsLT5kYXRhKCk7CisgICAgfQorCiAgICAgU2NyaXB0U3RyaW5n
JiBvcGVyYXRvcj0oY29uc3QgY2hhciogcykKICAgICB7Ci0gICAgICAgIG1fc3RyID0gczsKKyAg
ICAgICAgbV9pbXBsID0gbmV3IFNjcmlwdFN0cmluZ0ltcGwocyk7CiAgICAgICAgIHJldHVybiAq
dGhpczsKICAgICB9CiAKKyAgICBTY3JpcHRTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBTdHJpbmcm
IHMpCisgICAgeworICAgICAgICBtX2ltcGwgPSBuZXcgU2NyaXB0U3RyaW5nSW1wbChzKTsKKyAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKwogICAgIFNjcmlwdFN0cmluZyYgb3BlcmF0b3Ir
PShjb25zdCBTdHJpbmcmIHMpCiAgICAgewotICAgICAgICBtX3N0ciArPSBzOworICAgICAgICBt
X2ltcGwtPmFwcGVuZChzKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAogcHJpdmF0
ZToKLSAgICBTdHJpbmcgbV9zdHI7CisgICAgUmVmUHRyPFNjcmlwdFN0cmluZ0ltcGw+IG1faW1w
bDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IGJpbmRpbmdzL3Y4L1Njcmlw
dFN0cmluZ0ltcGwuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGJpbmRpbmdzL3Y4L1NjcmlwdFN0cmluZ0lt
cGwuaAkocmV2aXNpb24gMCkNCisrKyBiaW5kaW5ncy92OC9TY3JpcHRTdHJpbmdJbXBsLmgJKHJl
dmlzaW9uIDApDQpAQCAtMCwwICsxLDczIEBADQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcmlwdFN0cmluZ0lt
cGxfaAorI2RlZmluZSBTY3JpcHRTdHJpbmdJbXBsX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2NyaXB0U3RyaW5nSW1wbCA6
IHB1YmxpYyBSZWZDb3VudGVkPFNjcmlwdFN0cmluZ0ltcGw+IHsKK3B1YmxpYzoKKyAgICBTY3Jp
cHRTdHJpbmdJbXBsKCk7CisgICAgU2NyaXB0U3RyaW5nSW1wbChjb25zdCBTdHJpbmcmIHMpOwor
ICAgIFNjcmlwdFN0cmluZ0ltcGwoY29uc3QgY2hhciogcyk7CisKKyAgICBTdHJpbmcgdG9TdHJp
bmcoKSBjb25zdDsKKworICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9pc051bGw7
IH0KKyAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKworICAg
IGNvbnN0IFVDaGFyKiBkYXRhKCkgY29uc3Q7CisKKyAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJp
bmcmIHMpOworCitwcml2YXRlOgorICAgIC8vIEZvcmNlcyBhbGwgYXBwZW5kZWQgc3RyaW5ncyBp
bnRvIGEgZmxhdCBidWZmZXIgKHN0b3JlZCBhcyBtX2J1ZmZlcikuCisgICAgdm9pZCBVcGRhdGVC
dWZmZXIoKSBjb25zdDsKKworICAgIC8vIEEgY2FsbCB0byBhcHBlbmQoKSBhZGRzIHRoZSBTdHJp
bmcgdG8gdGhlIG1fYXBwZW5kZWRfc3RyaW5ncyB2ZWN0b3IuICBXaGVuIGEgY29tcGxldGVseSBm
bGF0IGJ1ZmZlcgorICAgIC8vIHdpdGggdGhlIGVudGlyZSBjb250ZW50cyBpcyByZXF1aXJlZCAo
YSBjYWxsIHRvIGVpdGhlciBkYXRhKCkgb3IgdG9TdHJpbmcoKSksIHRoZSBjb250ZW50cyBvZgor
ICAgIC8vIG1fYXBwZW5kZWRfc3RyaW5ncyBhcmUgY29waWVkIGludG8gYSBuZXcgYnVmZmVyIHRo
YXQgaXMgc3RvcmVkIGluIG1fYnVmZmVyIGFuZCB0aGVuIG1fYXBwZW5kZWRfc3RyaW5ncworICAg
IC8vIGlzIGNsZWFyZWQuICBUaGF0IHdheSBtdWx0aXBsZSBjYWxscyB0byBtX2J1ZmZlciBhcmUg
J2ZyZWUnLgorICAgIC8vIEJvdGggb2YgdGhlc2UgZmllbGRzIGFyZSBtdXRhYmxlIHNpbmNlIHRo
ZXkgYXJlIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBkYXRhKCkgaW50ZXJmYWNlIHdoaWNoIGRvZXMg
bm90CisgICAgLy8gbG9naWNhbGx5IG11dGF0ZSB0aGUgc3RhdGUgb2YgdGhpcyBvYmplY3QuCisg
ICAgbXV0YWJsZSBTdHJpbmcgbV9idWZmZXI7CisgICAgbXV0YWJsZSBWZWN0b3I8U3RyaW5nPiBt
X2FwcGVuZGVkU3RyaW5nczsKKworICAgIHNpemVfdCBtX2xlbmd0aDsKKyAgICAvLyBXZSBrZWVw
IHRyYWNrIG9mIGlzTnVsbCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gYXBwZW5kaW5nIGEgbnVs
bCBzdHJpbmcgYW5kIGFuIGVtcHR5IG9uZS4KKyAgICBib29sIG1faXNOdWxsOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2NyaXB0U3RyaW5nSW1wbF9oCkluZGV4
OiBiaW5kaW5ncy92OC9TY3JpcHRTdHJpbmdJbXBsLmNwcA0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGJpbmRp
bmdzL3Y4L1NjcmlwdFN0cmluZ0ltcGwuY3BwCShyZXZpc2lvbiAwKQ0KKysrIGJpbmRpbmdzL3Y4
L1NjcmlwdFN0cmluZ0ltcGwuY3BwCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCArMSwxMjAgQEANCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgU2NyaXB0U3RyaW5nX2gKKyNkZWZpbmUgU2NyaXB0U3RyaW5nX2gKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcmlwdFN0cmluZ0ltcGwuaCIKKworI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBpbXBsZW1l
bnRhdGlvbiBpcyBiYXNlZCBvbiBTdHJpbmdCdWlsZGVyLmggd2l0aCBzb21lIGNhY2hpbmcgYWRk
ZWQuCisKK1NjcmlwdFN0cmluZ0ltcGw6OlNjcmlwdFN0cmluZ0ltcGwoKQorICAgIDogbV9sZW5n
dGgoMCkKKyAgICAsIG1faXNOdWxsKGZhbHNlKQoreworfQorU2NyaXB0U3RyaW5nSW1wbDo6U2Ny
aXB0U3RyaW5nSW1wbChjb25zdCBTdHJpbmcmIHMpCisgICAgOiBtX2J1ZmZlcihzKQorICAgICwg
bV9sZW5ndGgocy5sZW5ndGgoKSkKKyAgICAsIG1faXNOdWxsKHMuaXNOdWxsKCkpCit7Cit9CisK
K1NjcmlwdFN0cmluZ0ltcGw6OlNjcmlwdFN0cmluZ0ltcGwoY29uc3QgY2hhciogcykKKyAgICA6
IG1fYnVmZmVyKHMpCisgICAgLCBtX2xlbmd0aChtX2J1ZmZlci5sZW5ndGgoKSkKKyAgICAsIG1f
aXNOdWxsKG1fYnVmZmVyLmlzTnVsbCgpKQoreworfQorCit2b2lkIFNjcmlwdFN0cmluZ0ltcGw6
OmFwcGVuZChjb25zdCBTdHJpbmcmIHMpCit7CisgICAgaWYgKCFzLmlzTnVsbCgpKSB7CisgICAg
ICAgIG1faXNOdWxsID0gZmFsc2U7CisgICAgICAgIGlmICghcy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIG1fbGVuZ3RoICs9IHMubGVuZ3RoKCk7CisgICAgICAgICAgICBtX2FwcGVuZGVkU3Ry
aW5ncy5hcHBlbmQocyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2NvbnN0IFVDaGFyKiBTY3Jp
cHRTdHJpbmdJbXBsOjpkYXRhKCkgY29uc3QKK3sKKyAgICBVcGRhdGVCdWZmZXIoKTsKKyAgICBy
ZXR1cm4gbV9idWZmZXIuY2hhcmFjdGVycygpOworfQorCisvLyBFdmVyeSBjYWxsIHRvIHRvU3Ry
aW5nKCkgbXVzdCByZXR1cm4gYSBmbGF0IGJ1ZmZlciB3aXRoIHRoZSBlbnRpcmUgc3RyaW5nIGNv
bnRlbnRzIHNvIGZhci4gIEhvd2V2ZXIsCisvLyBpZiBtdWx0aXBsZSBjYWxscyB0byB0b1N0cmlu
ZygpIGFyZSBtYWRlIHdpdGhvdXQgaW50ZXJsZWF2aW5nIGFwcGVuZCgpIGNhbGxzLCB3ZSBjYW4g
cmV0dXJuIHRoZSBzYW1lCisvLyBidWZmZXIuCitTdHJpbmcgU2NyaXB0U3RyaW5nSW1wbDo6dG9T
dHJpbmcoKSBjb25zdAoreworICAgIFVwZGF0ZUJ1ZmZlcigpOworICAgIHJldHVybiBtX2J1ZmZl
cjsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQgbmV2ZXIgY2hhbmdlIGFueSBvYnNlcnZh
YmxlIHN0YXRlLCBoZW5jZSB0aGUgY29uc3QtbmVzcy4KK3ZvaWQgU2NyaXB0U3RyaW5nSW1wbDo6
VXBkYXRlQnVmZmVyKCkgY29uc3QKK3sKKyAgICBpbnQgY291bnQgPSBtX2FwcGVuZGVkU3RyaW5n
cy5zaXplKCk7CisKKyAgICAvLyBObyBhcHBlbmQoKSBjYWxscyBoYXZlIGJlZW4gbWFkZSBzaW5j
ZSBlaXRoZXIgY29uc3RydWN0aW9uIG9yIHRoZSBsYXN0IFVwZGF0ZUJ1ZmZlcigpIGNhbGwsIHNv
CisgICAgLy8gbV9idWZmZXIgaXMgYWxyZWFkeSB1cCB0byBkYXRlLgorICAgIGlmICghY291bnQp
CisgICAgICByZXR1cm47CisKKyAgICBVQ2hhciogYnVmZmVyOworICAgIFN0cmluZyBuZXdCdWZm
ZXIgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGJ1ZmZlcik7CisKKyAg
ICBVQ2hhciogcCA9IGJ1ZmZlcjsKKyAgICBtZW1jcHkocCwgbV9idWZmZXIuY2hhcmFjdGVycygp
LCBtX2J1ZmZlci5sZW5ndGgoKSAqIHNpemVvZigqbV9idWZmZXIuY2hhcmFjdGVycygpKSk7Cisg
ICAgcCArPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBuZXh0ID0gbV9hcHBlbmRlZFN0cmluZ3Nb
aV07CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5leHQubGVuZ3RoKCk7IAorICAgICAgICBt
ZW1jcHkocCwgbmV4dC5jaGFyYWN0ZXJzKCksIGxlbmd0aCAqIHNpemVvZigqbmV4dC5jaGFyYWN0
ZXJzKCkpKTsKKyAgICAgICAgcCArPSBsZW5ndGg7CisgICAgfQorCisgICAgQVNTRVJUKHAgPT0g
bV9sZW5ndGggKyBidWZmZXIpOworCisgICAgbV9hcHBlbmRlZFN0cmluZ3MuY2xlYXIoKTsKKwor
ICAgIG1fYnVmZmVyID0gbmV3QnVmZmVyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBTY3JpcHRTdHJpbmdfaApJbmRleDogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNw
cA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIGJpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAJKHJldmlzaW9uIDQ5
MDk3KQ0KKysrIGJpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkNCkBAIC0x
NjksNiArMTY5LDU5IEBADQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKworLy8gV2ViQ29yZVNj
cmlwdFN0cmluZ1Jlc291cmNlIGlzIGEgaGVscGVyIGNsYXNzIGZvciB2OEV4dGVybmFsU2NyaXB0
U3RyaW5nIGZvciB3aGVuCisvLyB0aGUgYmFja2luZyBvYmplY3QgaXMgYSBXZWJDb3JlOjpTY3Jp
cHRTdHJpbmcuCitjbGFzcyBXZWJDb3JlU2NyaXB0U3RyaW5nUmVzb3VyY2UgOiBwdWJsaWMgdjg6
OlN0cmluZzo6RXh0ZXJuYWxTdHJpbmdSZXNvdXJjZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
V2ViQ29yZVNjcmlwdFN0cmluZ1Jlc291cmNlKGNvbnN0IFNjcmlwdFN0cmluZyYgc3RyaW5nKQor
ICAgICAgICA6IG1fc2NyaXB0U3RyaW5nKHN0cmluZyksCisgICAgICAgICAgbV9sZW5ndGgoc3Ry
aW5nLnNpemUoKSkKKyAgICB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBtX3RocmVhZElkID0g
V1RGOjpjdXJyZW50VGhyZWFkKCk7CisjZW5kaWYKKyAgICAgICAgQVNTRVJUKCFzdHJpbmcuaXNO
dWxsKCkpOworICAgICAgICBBU1NFUlQobV9sZW5ndGggPiAwKTsKKyAgICAgICAgQVNTRVJUKHN0
cmluZy5kYXRhKCkpOworICAgICAgICAvLyBUT0RPKGphbWVzcik6IGdldCB0aGlzIGFjY291bnRp
bmcgcmlnaHQKKyAgICAgICAgLy92ODo6Vjg6OkFkanVzdEFtb3VudE9mRXh0ZXJuYWxBbGxvY2F0
ZWRNZW1vcnkoMiAqIHN0cmluZy5sZW5ndGgoKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+V2Vi
Q29yZVNjcmlwdFN0cmluZ1Jlc291cmNlKCkKKyAgICB7CisjaWZuZGVmIE5ERUJVRworICAgICAg
ICBBU1NFUlQobV90aHJlYWRJZCA9PSBXVEY6OmN1cnJlbnRUaHJlYWQoKSk7CisjZW5kaWYKKyAg
ICAgICAgLy8gVE9ETyhqYW1lc3IpOiBnZXQgdGhpcyBhY2NvdW50aW5nIHJpZ2h0CisgICAgICAg
IC8vaW50IHJlZHVjZWRFeHRlcm5hbE1lbW9yeSA9IC0yICogbV9wbGFpblN0cmluZy5sZW5ndGgo
KTsKKyAgICAgICAgLy9pZiAobV9wbGFpblN0cmluZy5pbXBsKCkgIT0gbV9hdG9taWNTdHJpbmcu
aW1wbCgpICYmICFtX2F0b21pY1N0cmluZy5pc051bGwoKSkKKyAgICAgICAgLy8gICAgcmVkdWNl
ZEV4dGVybmFsTWVtb3J5ICo9IDI7CisgICAgICAgIC8vdjg6OlY4OjpBZGp1c3RBbW91bnRPZkV4
dGVybmFsQWxsb2NhdGVkTWVtb3J5KHJlZHVjZWRFeHRlcm5hbE1lbW9yeSk7CisgICAgfQorCisg
ICAgdmlydHVhbCBjb25zdCB1aW50MTZfdCogZGF0YSgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KG1fc2NyaXB0U3RyaW5nLmRh
dGEoKSk7CisgICAgfQorCisgICAgdmlydHVhbCBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9sZW5ndGg7IH0KKworICAgIC8vU3RyaW5nIHdlYmNvcmVTdHJpbmcoKSB7IHJldHVybiBT
dHJpbmcobV9zY3JpcHRTdHJpbmcpOyB9CisKK3ByaXZhdGU6CisgICAgLy8gQSBzaGFsbG93IGNv
cHkgb2YgdGhlIHN0cmluZy4gS2VlcHMgdGhlIHN0cmluZyBidWZmZXIgYWxpdmUgdW50aWwgdGhl
IFY4IGVuZ2luZSBnYXJiYWdlIGNvbGxlY3RzIGl0LgorICAgIFNjcmlwdFN0cmluZyBtX3Njcmlw
dFN0cmluZzsKKyAgICAvLyBUaGUgU2NyaXB0U3RyaW5nIGJhY2tpbmcgdGhlIGJ1ZmZlciBtaWdo
dCBiZSBhcHBlbmRlZCB0bywgc28gd2Uga2VlcCBhbiBleHBsaWNpdCBsZW5ndGggZm9yIHRoaXMg
aGFuZGxlLgorICAgIHNpemVfdCBtX2xlbmd0aDsKKworCisjaWZuZGVmIE5ERUJVRworICAgIFdU
Rjo6VGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElkOworI2VuZGlmCit9OworCisKIFN0cmluZyB2
OFN0cmluZ1RvV2ViQ29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4U3RyaW5nKQog
ewogICAgIHJldHVybiB2OFN0cmluZ1RvV2ViQ29yZVN0cmluZzxTdHJpbmc+KHY4U3RyaW5nLCBF
eHRlcm5hbGl6ZSk7CkBAIC0yMzMsNiArMjg2LDE2IEBADQogICAgIHJldHVybiBuZXdTdHJpbmc7
CiB9CiAKK3N0YXRpYyB2ODo6TG9jYWw8djg6OlN0cmluZz4gbWFrZUV4dGVybmFsU2NyaXB0U3Ry
aW5nKGNvbnN0IFNjcmlwdFN0cmluZyBzdHJpbmcpCit7CisgICAgV2ViQ29yZVNjcmlwdFN0cmlu
Z1Jlc291cmNlKiBzY3JpcHRTdHJpbmdSZXNvdXJjZSA9IG5ldyBXZWJDb3JlU2NyaXB0U3RyaW5n
UmVzb3VyY2Uoc3RyaW5nKTsKKyAgICB2ODo6TG9jYWw8djg6OlN0cmluZz4gbmV3U2NyaXB0U3Ry
aW5nID0gdjg6OlN0cmluZzo6TmV3RXh0ZXJuYWwoc2NyaXB0U3RyaW5nUmVzb3VyY2UpOworICAg
IGlmIChuZXdTY3JpcHRTdHJpbmcuSXNFbXB0eSgpKQorICAgICAgICBkZWxldGUgc2NyaXB0U3Ry
aW5nUmVzb3VyY2U7CisKKyAgICByZXR1cm4gbmV3U2NyaXB0U3RyaW5nOworfQorCiB0eXBlZGVm
IEhhc2hNYXA8U3RyaW5nSW1wbCosIHY4OjpTdHJpbmcqPiBTdHJpbmdDYWNoZTsKIAogc3RhdGlj
IFN0cmluZ0NhY2hlJiBnZXRTdHJpbmdDYWNoZSgpCkBAIC0yODEsNCArMzQ0LDEyIEBADQogICAg
IHJldHVybiBuZXdTdHJpbmc7CiB9CiAKK3Y4OjpMb2NhbDx2ODo6U3RyaW5nPiB2OEV4dGVybmFs
U2NyaXB0U3RyaW5nKGNvbnN0IFNjcmlwdFN0cmluZyYgc3RyaW5nKQoreworICAgIGlmICghc3Ry
aW5nLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIHY4OjpTdHJpbmc6OkVtcHR5KCk7CisKKyAgICBy
ZXR1cm4gbWFrZUV4dGVybmFsU2NyaXB0U3RyaW5nKHN0cmluZyk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IGJpbmRpbmdzL3Y4L1Y4QmluZGluZy5oDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgJKHJldmlzaW9uIDQ5MDk3KQ0KKysrIGJpbmRpbmdz
L3Y4L1Y4QmluZGluZy5oCSh3b3JraW5nIGNvcHkpDQpAQCAtMzQsNiArMzQsNyBAQA0KICNpbmNs
dWRlICJBdG9taWNTdHJpbmcuaCIKICNpbmNsdWRlICJNYXRoRXh0cmFzLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRTdHJpbmcuaCIKIAogI2luY2x1ZGUg
PHY4Lmg+CiAKQEAgLTc3LDYgKzc4LDE5IEBADQogICAgICAgICByZXR1cm4gdjhFeHRlcm5hbFN0
cmluZyhzdHJpbmcpOwogICAgIH0KIAorICAgIC8vIEp1c3QgbGlrZSB2OEV4dGVybmFsU3RyaW5n
IGV4Y2VwdCB0aGF0IHRoZSBiYWNraW5nIGJ1ZmZlciBpcyBhCisgICAgLy8gU2NyaXB0U3RyaW5n
IGFuZCBub3QgYSBub3JtYWwgU3RyaW5nLiAgVGhlIHNhbWUgYmFja2luZyBidWZmZXIgY2FuCisg
ICAgLy8gYmUgcmUtdXNlZCBmb3IgbXVsdGlwbGUgaGFuZGxlcyB0byB0aGUgc2FtZSBTY3JpcHRT
dHJpbmcgc28gYSBiaXQgb2YKKyAgICAvLyBzcGVjaWFsIGhhbmRsaW5nIGlzIHJlcXVpcmVkLgor
ICAgIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiB2OEV4dGVybmFsU2NyaXB0U3RyaW5nKGNvbnN0IFNj
cmlwdFN0cmluZyYpOworCisgICAgLy8gQ29udmVydCBhIFNjcmlwdFN0cmluZyB0byBhIFY4IHN0
cmluZy4KKyAgICBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OFNjcmlwdFN0cmluZyhj
b25zdCBTY3JpcHRTdHJpbmcmIHN0cmluZykKKyAgICB7CisgICAgICByZXR1cm4gdjhFeHRlcm5h
bFNjcmlwdFN0cmluZyhzdHJpbmcpOworICAgIH0KKworCiAgICAgLy8gRW5hYmxlcyBjYWNoaW5n
IHY4IHdyYXBwZXJzIGNyZWF0ZWQgZm9yIFdlYkNvcmU6OlN0cmluZ0ltcGwuICBDdXJyZW50bHkg
dGhpcyBjYWNoZSByZXF1aXJlcwogICAgIC8vIGFsbCB0aGUgY2FsbHMgKGJvdGggdG8gY29udmVy
dCBXZWJDb3JlOjpTdHJpbmcgdG8gdjg6OlN0cmluZyBhbmQgdG8gR0MgdGhlIGhhbmRsZSkKICAg
ICAvLyB0byBiZSBwZXJmb3JtZWQgb24gdGhlIG1haW4gdGhyZWFkLgpAQCAtMTgzLDYgKzE5Nywx
MSBAQA0KICAgICAgICAgcmV0dXJuIHN0ci5pc051bGwoKSA/IHY4OjpIYW5kbGU8djg6OlZhbHVl
Pih2ODo6TnVsbCgpKSA6IHY4OjpIYW5kbGU8djg6OlZhbHVlPih2OFN0cmluZyhzdHIpKTsKICAg
ICB9CiAKKyAgICBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4U3RyaW5nT3JOdWxsKGNv
bnN0IFNjcmlwdFN0cmluZyYgc3RyKQorICAgIHsKKyAgICAgICByZXR1cm4gc3RyLmlzTnVsbCgp
ID8gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KHY4OjpOdWxsKCkpIDogdjg6OkhhbmRsZTx2ODo6VmFs
dWU+KHY4U2NyaXB0U3RyaW5nKHN0cikpOworICAgIH0KKwogICAgIGlubGluZSB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdjhTdHJpbmdPclVuZGVmaW5lZChjb25zdCBTdHJpbmcmIHN0cikKICAgICB7
CiAgICAgICAgIHJldHVybiBzdHIuaXNOdWxsKCkgPyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjg6
OlVuZGVmaW5lZCgpKSA6IHY4OjpIYW5kbGU8djg6OlZhbHVlPih2OFN0cmluZyhzdHIpKTsKSW5k
ZXg6IFdlYkNvcmUuZ3lwaQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUuZ3lwaQkocmV2aXNpb24g
NDkwOTcpDQorKysgV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpDQpAQCAtNzY0LDYgKzc2NCw4
IEBADQogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmgnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvU2NyaXB0U3RyaW5nLmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NjcmlwdFN0cmlu
Z0ltcGwuaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvU2NyaXB0U3RyaW5nSW1wbC5jcHAn
LAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmNwcCcsCiAgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mvdjgv
U3RhdGljRE9NRGF0YVN0b3JlLmNwcCcsCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40676</attachid>
            <date>2009-10-05 18:48:35 -0700</date>
            <delta_ts>2009-10-07 17:51:44 -0700</delta_ts>
            <desc>Fixes some bugs</desc>
            <filename>script_string_impl.diff</filename>
            <type>text/plain</type>
            <size>14309</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">SW5kZXg6IGJpbmRpbmdzL3Y4L1NjcmlwdFN0cmluZy5oDQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gYmluZGlu
Z3MvdjgvU2NyaXB0U3RyaW5nLmgJKHJldmlzaW9uIDQ5MDk3KQ0KKysrIGJpbmRpbmdzL3Y4L1Nj
cmlwdFN0cmluZy5oCSh3b3JraW5nIGNvcHkpDQpAQCAtMzIsMzQgKzMyLDUyIEBADQogI2RlZmlu
ZSBTY3JpcHRTdHJpbmdfaAogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRl
ICJTY3JpcHRTdHJpbmdJbXBsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gVGhpcyBj
bGFzcyBpcyBub3QgdGhyZWFkLXNhZmUuICBUbyBhY2Nlc3MgdGhlIGRhdGEgZnJvbSBtdWx0aXBs
ZSB0aHJlYWRzCisvLyB0aGUgY2FsbGVyIG11c3Qgc2VyaWFsaXplIGludG8gYSBTdHJpbmcgb2Jq
ZWN0IGFuZCBleHBsaWNpdGx5IGNvcHkoKSB0aGUKKy8vIGRhdGEuCiBjbGFzcyBTY3JpcHRTdHJp
bmcgewogcHVibGljOgotICAgIFNjcmlwdFN0cmluZygpIHt9Ci0gICAgU2NyaXB0U3RyaW5nKGNv
bnN0IFN0cmluZyYgcykgOiBtX3N0cihzKSB7fQotICAgIFNjcmlwdFN0cmluZyhjb25zdCBjaGFy
KiBzKSA6IG1fc3RyKHMpIHt9CisgICAgU2NyaXB0U3RyaW5nKCkgOiBtX2ltcGwoMCkge30KKyAg
ICBTY3JpcHRTdHJpbmcoY29uc3QgU3RyaW5nJiBzKSA6IG1faW1wbChuZXcgU2NyaXB0U3RyaW5n
SW1wbChzKSkge30KKyAgICBTY3JpcHRTdHJpbmcoY29uc3QgY2hhciogcykgOiBtX2ltcGwobmV3
IFNjcmlwdFN0cmluZ0ltcGwocykpIHt9CiAKLSAgICBvcGVyYXRvciBTdHJpbmcoKSBjb25zdCB7
IHJldHVybiBtX3N0cjsgfQorICAgIG9wZXJhdG9yIFN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1f
aW1wbC0+dG9TdHJpbmcoKTsgfQogCi0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBt
X3N0ci5pc051bGwoKTsgfQotICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdHIu
bGVuZ3RoKCk7IH0KKyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFtX2ltcGwuZ2V0
KCkgfHwgbV9pbXBsLT5pc051bGwoKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9pbXBsLT5sZW5ndGgoKTsgfQogCisgICAgY29uc3QgVUNoYXIqIGRhdGEoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW1wbC0+ZGF0YSgpOworICAgIH0KKwogICAgIFNjcmlw
dFN0cmluZyYgb3BlcmF0b3I9KGNvbnN0IGNoYXIqIHMpCiAgICAgewotICAgICAgICBtX3N0ciA9
IHM7CisgICAgICAgIG1faW1wbCA9IG5ldyBTY3JpcHRTdHJpbmdJbXBsKHMpOwogICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAgICAgfQogCisgICAgU2NyaXB0U3RyaW5nJiBvcGVyYXRvcj0oY29uc3Qg
U3RyaW5nJiBzKQorICAgIHsKKyAgICAgICAgbV9pbXBsID0gbmV3IFNjcmlwdFN0cmluZ0ltcGwo
cyk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKICAgICBTY3JpcHRTdHJpbmcmIG9w
ZXJhdG9yKz0oY29uc3QgU3RyaW5nJiBzKQogICAgIHsKLSAgICAgICAgbV9zdHIgKz0gczsKKyAg
ICAgICAgaWYgKG1faW1wbC5nZXQoKSkKKyAgICAgICAgICAgIG1faW1wbC0+YXBwZW5kKHMpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2ltcGwgPSBuZXcgU2NyaXB0U3RyaW5nSW1wbChz
KTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBTdHJpbmcg
bV9zdHI7CisgICAgUmVmUHRyPFNjcmlwdFN0cmluZ0ltcGw+IG1faW1wbDsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IGJpbmRpbmdzL3Y4L1NjcmlwdFN0cmluZ0ltcGwuaA0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KLS0tIGJpbmRpbmdzL3Y4L1NjcmlwdFN0cmluZ0ltcGwuaAkocmV2aXNpb24g
MCkNCisrKyBiaW5kaW5ncy92OC9TY3JpcHRTdHJpbmdJbXBsLmgJKHJldmlzaW9uIDApDQpAQCAt
MCwwICsxLDczIEBADQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcmlwdFN0cmluZ0ltcGxfaAorI2RlZmluZSBT
Y3JpcHRTdHJpbmdJbXBsX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2NyaXB0U3RyaW5nSW1wbCA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFNjcmlwdFN0cmluZ0ltcGw+IHsKK3B1YmxpYzoKKyAgICBTY3JpcHRTdHJpbmdJbXBsKCk7
CisgICAgU2NyaXB0U3RyaW5nSW1wbChjb25zdCBTdHJpbmcmIHMpOworICAgIFNjcmlwdFN0cmlu
Z0ltcGwoY29uc3QgY2hhciogcyk7CisKKyAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKKwor
ICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9pc051bGw7IH0KKyAgICBzaXplX3Qg
bGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKworICAgIGNvbnN0IFVDaGFyKiBk
YXRhKCkgY29uc3Q7CisKKyAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIHMpOworCitwcml2
YXRlOgorICAgIC8vIEZvcmNlcyBhbGwgYXBwZW5kZWQgc3RyaW5ncyBpbnRvIGEgZmxhdCBidWZm
ZXIgKHN0b3JlZCBhcyBtX2J1ZmZlcikuCisgICAgdm9pZCBVcGRhdGVCdWZmZXIoKSBjb25zdDsK
KworICAgIC8vIEEgY2FsbCB0byBhcHBlbmQoKSBhZGRzIHRoZSBTdHJpbmcgdG8gdGhlIG1fYXBw
ZW5kZWRfc3RyaW5ncyB2ZWN0b3IuICBXaGVuIGEgY29tcGxldGVseSBmbGF0IGJ1ZmZlcgorICAg
IC8vIHdpdGggdGhlIGVudGlyZSBjb250ZW50cyBpcyByZXF1aXJlZCAoYSBjYWxsIHRvIGVpdGhl
ciBkYXRhKCkgb3IgdG9TdHJpbmcoKSksIHRoZSBjb250ZW50cyBvZgorICAgIC8vIG1fYXBwZW5k
ZWRfc3RyaW5ncyBhcmUgY29waWVkIGludG8gYSBuZXcgYnVmZmVyIHRoYXQgaXMgc3RvcmVkIGlu
IG1fYnVmZmVyIGFuZCB0aGVuIG1fYXBwZW5kZWRfc3RyaW5ncworICAgIC8vIGlzIGNsZWFyZWQu
ICBUaGF0IHdheSBtdWx0aXBsZSBjYWxscyB0byBtX2J1ZmZlciBhcmUgJ2ZyZWUnLgorICAgIC8v
IEJvdGggb2YgdGhlc2UgZmllbGRzIGFyZSBtdXRhYmxlIHNpbmNlIHRoZXkgYXJlIHVzZWQgdG8g
aW1wbGVtZW50IHRoZSBkYXRhKCkgaW50ZXJmYWNlIHdoaWNoIGRvZXMgbm90CisgICAgLy8gbG9n
aWNhbGx5IG11dGF0ZSB0aGUgc3RhdGUgb2YgdGhpcyBvYmplY3QuCisgICAgbXV0YWJsZSBTdHJp
bmcgbV9idWZmZXI7CisgICAgbXV0YWJsZSBWZWN0b3I8U3RyaW5nPiBtX2FwcGVuZGVkU3RyaW5n
czsKKworICAgIHNpemVfdCBtX2xlbmd0aDsKKyAgICAvLyBXZSBrZWVwIHRyYWNrIG9mIGlzTnVs
bCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gYXBwZW5kaW5nIGEgbnVsbCBzdHJpbmcgYW5kIGFu
IGVtcHR5IG9uZS4KKyAgICBib29sIG1faXNOdWxsOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gU2NyaXB0U3RyaW5nSW1wbF9oCkluZGV4OiBiaW5kaW5ncy92OC9T
Y3JpcHRTdHJpbmdJbXBsLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGJpbmRpbmdzL3Y4L1NjcmlwdFN0
cmluZ0ltcGwuY3BwCShyZXZpc2lvbiAwKQ0KKysrIGJpbmRpbmdzL3Y4L1NjcmlwdFN0cmluZ0lt
cGwuY3BwCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCArMSwxMjAgQEANCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2NyaXB0U3Ry
aW5nX2gKKyNkZWZpbmUgU2NyaXB0U3RyaW5nX2gKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlNjcmlwdFN0cmluZ0ltcGwuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNl
ZCBvbiBTdHJpbmdCdWlsZGVyLmggd2l0aCBzb21lIGNhY2hpbmcgYWRkZWQuCisKK1NjcmlwdFN0
cmluZ0ltcGw6OlNjcmlwdFN0cmluZ0ltcGwoKQorICAgIDogbV9sZW5ndGgoMCkKKyAgICAsIG1f
aXNOdWxsKGZhbHNlKQoreworfQorU2NyaXB0U3RyaW5nSW1wbDo6U2NyaXB0U3RyaW5nSW1wbChj
b25zdCBTdHJpbmcmIHMpCisgICAgOiBtX2J1ZmZlcihzKQorICAgICwgbV9sZW5ndGgocy5sZW5n
dGgoKSkKKyAgICAsIG1faXNOdWxsKHMuaXNOdWxsKCkpCit7Cit9CisKK1NjcmlwdFN0cmluZ0lt
cGw6OlNjcmlwdFN0cmluZ0ltcGwoY29uc3QgY2hhciogcykKKyAgICA6IG1fYnVmZmVyKHMpCisg
ICAgLCBtX2xlbmd0aChtX2J1ZmZlci5sZW5ndGgoKSkKKyAgICAsIG1faXNOdWxsKG1fYnVmZmVy
LmlzTnVsbCgpKQoreworfQorCit2b2lkIFNjcmlwdFN0cmluZ0ltcGw6OmFwcGVuZChjb25zdCBT
dHJpbmcmIHMpCit7CisgICAgaWYgKCFzLmlzTnVsbCgpKSB7CisgICAgICAgIG1faXNOdWxsID0g
ZmFsc2U7CisgICAgICAgIGlmICghcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fbGVuZ3Ro
ICs9IHMubGVuZ3RoKCk7CisgICAgICAgICAgICBtX2FwcGVuZGVkU3RyaW5ncy5hcHBlbmQocyk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK2NvbnN0IFVDaGFyKiBTY3JpcHRTdHJpbmdJbXBsOjpk
YXRhKCkgY29uc3QKK3sKKyAgICBVcGRhdGVCdWZmZXIoKTsKKyAgICByZXR1cm4gbV9idWZmZXIu
Y2hhcmFjdGVycygpOworfQorCisvLyBFdmVyeSBjYWxsIHRvIHRvU3RyaW5nKCkgbXVzdCByZXR1
cm4gYSBmbGF0IGJ1ZmZlciB3aXRoIHRoZSBlbnRpcmUgc3RyaW5nIGNvbnRlbnRzIHNvIGZhci4g
IEhvd2V2ZXIsCisvLyBpZiBtdWx0aXBsZSBjYWxscyB0byB0b1N0cmluZygpIGFyZSBtYWRlIHdp
dGhvdXQgaW50ZXJsZWF2aW5nIGFwcGVuZCgpIGNhbGxzLCB3ZSBjYW4gcmV0dXJuIHRoZSBzYW1l
CisvLyBidWZmZXIuCitTdHJpbmcgU2NyaXB0U3RyaW5nSW1wbDo6dG9TdHJpbmcoKSBjb25zdAor
eworICAgIFVwZGF0ZUJ1ZmZlcigpOworICAgIHJldHVybiBtX2J1ZmZlcjsKK30KKworLy8gVGhp
cyBmdW5jdGlvbiBzaG91bGQgbmV2ZXIgY2hhbmdlIGFueSBvYnNlcnZhYmxlIHN0YXRlLCBoZW5j
ZSB0aGUgY29uc3QtbmVzcy4KK3ZvaWQgU2NyaXB0U3RyaW5nSW1wbDo6VXBkYXRlQnVmZmVyKCkg
Y29uc3QKK3sKKyAgICBpbnQgY291bnQgPSBtX2FwcGVuZGVkU3RyaW5ncy5zaXplKCk7CisKKyAg
ICAvLyBObyBhcHBlbmQoKSBjYWxscyBoYXZlIGJlZW4gbWFkZSBzaW5jZSBlaXRoZXIgY29uc3Ry
dWN0aW9uIG9yIHRoZSBsYXN0IFVwZGF0ZUJ1ZmZlcigpIGNhbGwsIHNvCisgICAgLy8gbV9idWZm
ZXIgaXMgYWxyZWFkeSB1cCB0byBkYXRlLgorICAgIGlmICghY291bnQpCisgICAgICByZXR1cm47
CisKKyAgICBVQ2hhciogYnVmZmVyOworICAgIFN0cmluZyBuZXdCdWZmZXIgPSBTdHJpbmc6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGJ1ZmZlcik7CisKKyAgICBVQ2hhciogcCA9IGJ1
ZmZlcjsKKyAgICBtZW1jcHkocCwgbV9idWZmZXIuY2hhcmFjdGVycygpLCBtX2J1ZmZlci5sZW5n
dGgoKSAqIHNpemVvZigqbV9idWZmZXIuY2hhcmFjdGVycygpKSk7CisgICAgcCArPSBtX2J1ZmZl
ci5sZW5ndGgoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAg
ICAgY29uc3QgU3RyaW5nJiBuZXh0ID0gbV9hcHBlbmRlZFN0cmluZ3NbaV07CisgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IG5leHQubGVuZ3RoKCk7IAorICAgICAgICBtZW1jcHkocCwgbmV4dC5j
aGFyYWN0ZXJzKCksIGxlbmd0aCAqIHNpemVvZigqbmV4dC5jaGFyYWN0ZXJzKCkpKTsKKyAgICAg
ICAgcCArPSBsZW5ndGg7CisgICAgfQorCisgICAgQVNTRVJUKHAgPT0gbV9sZW5ndGggKyBidWZm
ZXIpOworCisgICAgbV9hcHBlbmRlZFN0cmluZ3MuY2xlYXIoKTsKKworICAgIG1fYnVmZmVyID0g
bmV3QnVmZmVyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTY3Jp
cHRTdHJpbmdfaApJbmRleDogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcA0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
LS0tIGJpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAJKHJldmlzaW9uIDQ5MDk3KQ0KKysrIGJpbmRp
bmdzL3Y4L1Y4QmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkNCkBAIC0xNjksNiArMTY5LDU3IEBA
DQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKworLy8gV2ViQ29yZVNjcmlwdFN0cmluZ1Jlc291
cmNlIGlzIGEgaGVscGVyIGNsYXNzIGZvciB2OEV4dGVybmFsU2NyaXB0U3RyaW5nIGZvciB3aGVu
CisvLyB0aGUgYmFja2luZyBvYmplY3QgaXMgYSBXZWJDb3JlOjpTY3JpcHRTdHJpbmcuCitjbGFz
cyBXZWJDb3JlU2NyaXB0U3RyaW5nUmVzb3VyY2UgOiBwdWJsaWMgdjg6OlN0cmluZzo6RXh0ZXJu
YWxTdHJpbmdSZXNvdXJjZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgV2ViQ29yZVNjcmlwdFN0
cmluZ1Jlc291cmNlKGNvbnN0IFNjcmlwdFN0cmluZyYgc3RyaW5nKQorICAgICAgICA6IG1fc2Ny
aXB0U3RyaW5nKHN0cmluZyksCisgICAgICAgICAgbV9sZW5ndGgoc3RyaW5nLnNpemUoKSkKKyAg
ICB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBtX3RocmVhZElkID0gV1RGOjpjdXJyZW50VGhy
ZWFkKCk7CisjZW5kaWYKKyAgICAgICAgQVNTRVJUKCFzdHJpbmcuaXNOdWxsKCkpOworICAgICAg
ICBBU1NFUlQobV9sZW5ndGggPiAwKTsKKyAgICAgICAgQVNTRVJUKHN0cmluZy5kYXRhKCkpOwor
ICAgICAgICAvLyBGSVhNRShqYW1lc3IpOiBnZXQgdGhpcyBhY2NvdW50aW5nIHJpZ2h0CisgICAg
ICAgIC8vdjg6OlY4OjpBZGp1c3RBbW91bnRPZkV4dGVybmFsQWxsb2NhdGVkTWVtb3J5KDIgKiBz
dHJpbmcubGVuZ3RoKCkpOworICAgIH0KKworICAgIHZpcnR1YWwgfldlYkNvcmVTY3JpcHRTdHJp
bmdSZXNvdXJjZSgpCisgICAgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgQVNTRVJUKG1fdGhy
ZWFkSWQgPT0gV1RGOjpjdXJyZW50VGhyZWFkKCkpOworI2VuZGlmCisgICAgICAgIC8vIEZJWE1F
KGphbWVzcik6IGdldCB0aGlzIGFjY291bnRpbmcgcmlnaHQKKyAgICAgICAgLy9pbnQgcmVkdWNl
ZEV4dGVybmFsTWVtb3J5ID0gLTIgKiBtX3BsYWluU3RyaW5nLmxlbmd0aCgpOworICAgICAgICAv
L2lmIChtX3BsYWluU3RyaW5nLmltcGwoKSAhPSBtX2F0b21pY1N0cmluZy5pbXBsKCkgJiYgIW1f
YXRvbWljU3RyaW5nLmlzTnVsbCgpKQorICAgICAgICAvLyAgICByZWR1Y2VkRXh0ZXJuYWxNZW1v
cnkgKj0gMjsKKyAgICAgICAgLy92ODo6Vjg6OkFkanVzdEFtb3VudE9mRXh0ZXJuYWxBbGxvY2F0
ZWRNZW1vcnkocmVkdWNlZEV4dGVybmFsTWVtb3J5KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGNv
bnN0IHVpbnQxNl90KiBkYXRhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4obV9zY3JpcHRTdHJpbmcuZGF0YSgpKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsg
fQorCitwcml2YXRlOgorICAgIC8vIEEgc2hhbGxvdyBjb3B5IG9mIHRoZSBzdHJpbmcuIEtlZXBz
IHRoZSBzdHJpbmcgYnVmZmVyIGFsaXZlIHVudGlsIHRoZSBWOCBlbmdpbmUgZ2FyYmFnZSBjb2xs
ZWN0cyBpdC4KKyAgICBTY3JpcHRTdHJpbmcgbV9zY3JpcHRTdHJpbmc7CisgICAgLy8gVGhlIFNj
cmlwdFN0cmluZyBiYWNraW5nIHRoZSBidWZmZXIgbWlnaHQgYmUgYXBwZW5kZWQgdG8sIHNvIHdl
IGtlZXAgYW4gZXhwbGljaXQgbGVuZ3RoIGZvciB0aGlzIGhhbmRsZS4KKyAgICBzaXplX3QgbV9s
ZW5ndGg7CisKKworI2lmbmRlZiBOREVCVUcKKyAgICBXVEY6OlRocmVhZElkZW50aWZpZXIgbV90
aHJlYWRJZDsKKyNlbmRpZgorfTsKKworCiBTdHJpbmcgdjhTdHJpbmdUb1dlYkNvcmVTdHJpbmco
djg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OFN0cmluZykKIHsKICAgICByZXR1cm4gdjhTdHJpbmdU
b1dlYkNvcmVTdHJpbmc8U3RyaW5nPih2OFN0cmluZywgRXh0ZXJuYWxpemUpOwpAQCAtMjMzLDYg
KzI4NCwxNiBAQA0KICAgICByZXR1cm4gbmV3U3RyaW5nOwogfQogCitzdGF0aWMgdjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IG1ha2VFeHRlcm5hbFNjcmlwdFN0cmluZyhjb25zdCBTY3JpcHRTdHJpbmcg
c3RyaW5nKQoreworICAgIFdlYkNvcmVTY3JpcHRTdHJpbmdSZXNvdXJjZSogc2NyaXB0U3RyaW5n
UmVzb3VyY2UgPSBuZXcgV2ViQ29yZVNjcmlwdFN0cmluZ1Jlc291cmNlKHN0cmluZyk7CisgICAg
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5ld1NjcmlwdFN0cmluZyA9IHY4OjpTdHJpbmc6Ok5ld0V4
dGVybmFsKHNjcmlwdFN0cmluZ1Jlc291cmNlKTsKKyAgICBpZiAobmV3U2NyaXB0U3RyaW5nLklz
RW1wdHkoKSkKKyAgICAgICAgZGVsZXRlIHNjcmlwdFN0cmluZ1Jlc291cmNlOworCisgICAgcmV0
dXJuIG5ld1NjcmlwdFN0cmluZzsKK30KKwogdHlwZWRlZiBIYXNoTWFwPFN0cmluZ0ltcGwqLCB2
ODo6U3RyaW5nKj4gU3RyaW5nQ2FjaGU7CiAKIHN0YXRpYyBTdHJpbmdDYWNoZSYgZ2V0U3RyaW5n
Q2FjaGUoKQpAQCAtMjgxLDQgKzM0MiwxMiBAQA0KICAgICByZXR1cm4gbmV3U3RyaW5nOwogfQog
Cit2ODo6TG9jYWw8djg6OlN0cmluZz4gdjhFeHRlcm5hbFNjcmlwdFN0cmluZyhjb25zdCBTY3Jp
cHRTdHJpbmcmIHN0cmluZykKK3sKKyAgICBpZiAoIXN0cmluZy5zaXplKCkpCisgICAgICAgIHJl
dHVybiB2ODo6U3RyaW5nOjpFbXB0eSgpOworCisgICAgcmV0dXJuIG1ha2VFeHRlcm5hbFNjcmlw
dFN0cmluZyhzdHJpbmcpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBiaW5k
aW5ncy92OC9WOEJpbmRpbmcuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGJpbmRpbmdzL3Y4L1Y4QmluZGlu
Zy5oCShyZXZpc2lvbiA0OTA5NykNCisrKyBiaW5kaW5ncy92OC9WOEJpbmRpbmcuaAkod29ya2lu
ZyBjb3B5KQ0KQEAgLTM0LDYgKzM0LDcgQEANCiAjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCiAj
aW5jbHVkZSAiTWF0aEV4dHJhcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5j
bHVkZSAiU2NyaXB0U3RyaW5nLmgiCiAKICNpbmNsdWRlIDx2OC5oPgogCkBAIC03Nyw2ICs3OCwx
OSBAQA0KICAgICAgICAgcmV0dXJuIHY4RXh0ZXJuYWxTdHJpbmcoc3RyaW5nKTsKICAgICB9CiAK
KyAgICAvLyBKdXN0IGxpa2UgdjhFeHRlcm5hbFN0cmluZyBleGNlcHQgdGhhdCB0aGUgYmFja2lu
ZyBidWZmZXIgaXMgYQorICAgIC8vIFNjcmlwdFN0cmluZyBhbmQgbm90IGEgbm9ybWFsIFN0cmlu
Zy4gIFRoZSBzYW1lIGJhY2tpbmcgYnVmZmVyIGNhbgorICAgIC8vIGJlIHJlLXVzZWQgZm9yIG11
bHRpcGxlIGhhbmRsZXMgdG8gdGhlIHNhbWUgU2NyaXB0U3RyaW5nIHNvIGEgYml0IG9mCisgICAg
Ly8gc3BlY2lhbCBoYW5kbGluZyBpcyByZXF1aXJlZC4KKyAgICB2ODo6TG9jYWw8djg6OlN0cmlu
Zz4gdjhFeHRlcm5hbFNjcmlwdFN0cmluZyhjb25zdCBTY3JpcHRTdHJpbmcmKTsKKworICAgIC8v
IENvbnZlcnQgYSBTY3JpcHRTdHJpbmcgdG8gYSBWOCBzdHJpbmcuCisgICAgaW5saW5lIHY4OjpI
YW5kbGU8djg6OlN0cmluZz4gdjhTY3JpcHRTdHJpbmcoY29uc3QgU2NyaXB0U3RyaW5nJiBzdHJp
bmcpCisgICAgeworICAgICAgcmV0dXJuIHY4RXh0ZXJuYWxTY3JpcHRTdHJpbmcoc3RyaW5nKTsK
KyAgICB9CisKKwogICAgIC8vIEVuYWJsZXMgY2FjaGluZyB2OCB3cmFwcGVycyBjcmVhdGVkIGZv
ciBXZWJDb3JlOjpTdHJpbmdJbXBsLiAgQ3VycmVudGx5IHRoaXMgY2FjaGUgcmVxdWlyZXMKICAg
ICAvLyBhbGwgdGhlIGNhbGxzIChib3RoIHRvIGNvbnZlcnQgV2ViQ29yZTo6U3RyaW5nIHRvIHY4
OjpTdHJpbmcgYW5kIHRvIEdDIHRoZSBoYW5kbGUpCiAgICAgLy8gdG8gYmUgcGVyZm9ybWVkIG9u
IHRoZSBtYWluIHRocmVhZC4KQEAgLTE4Myw2ICsxOTcsMTEgQEANCiAgICAgICAgIHJldHVybiBz
dHIuaXNOdWxsKCkgPyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjg6Ok51bGwoKSkgOiB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4odjhTdHJpbmcoc3RyKSk7CiAgICAgfQogCisgICAgaW5saW5lIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB2OFN0cmluZ09yTnVsbChjb25zdCBTY3JpcHRTdHJpbmcmIHN0cikK
KyAgICB7CisgICAgICAgcmV0dXJuIHN0ci5pc051bGwoKSA/IHY4OjpIYW5kbGU8djg6OlZhbHVl
Pih2ODo6TnVsbCgpKSA6IHY4OjpIYW5kbGU8djg6OlZhbHVlPih2OFNjcmlwdFN0cmluZyhzdHIp
KTsKKyAgICB9CisKICAgICBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4U3RyaW5nT3JV
bmRlZmluZWQoY29uc3QgU3RyaW5nJiBzdHIpCiAgICAgewogICAgICAgICByZXR1cm4gc3RyLmlz
TnVsbCgpID8gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KHY4OjpVbmRlZmluZWQoKSkgOiB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4odjhTdHJpbmcoc3RyKSk7CkluZGV4OiBXZWJDb3JlLmd5cGkNCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCi0tLSBXZWJDb3JlLmd5cGkJKHJldmlzaW9uIDQ5MDk3KQ0KKysrIFdlYkNvcmUuZ3lw
aQkod29ya2luZyBjb3B5KQ0KQEAgLTc2NCw2ICs3NjQsOCBAQA0KICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9TY3JpcHRTdGF0ZS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9TY3JpcHRT
dGF0ZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NjcmlwdFN0cmluZy5oJywKKyAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9TY3JpcHRTdHJpbmdJbXBsLmgnLAorICAgICAgICAgICAg
J2JpbmRpbmdzL3Y4L1NjcmlwdFN0cmluZ0ltcGwuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5n
cy92OC9TY3JpcHRWYWx1ZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NjcmlwdFZh
bHVlLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5jcHAn
LAo=
</data>
<flag name="review"
          id="21933"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40834</attachid>
            <date>2009-10-07 17:51:44 -0700</date>
            <delta_ts>2009-10-14 17:04:44 -0700</delta_ts>
            <desc>Uses StringBuilder internally, adds ChangeLog entry</desc>
            <filename>scriptstringimpl.diff</filename>
            <type>text/plain</type>
            <size>16540</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MmI0NWIwMy4uMmVjYzQ3ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAwOS0xMC0wNyAgSmFtZXMgUm9iaW5z
b24gIDxqYW1lc3JAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbXBsZW1lbnRhdGlvbiBmb3IgdGhlIFY4IHZlcnNpb24gb2YgU2Ny
aXB0U3RyaW5nIHRoYXQgYXZvaWRzIGRvaW5nIHRvbworICAgICAgICBtYW55IGNvcGllcyB3aGVu
IHVzZWQgZm9yIFhIUidzIHJlc3BvbnNlVGV4dC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI5OTA5CisKKyAgICAgICAgWE1MSHR0cFJlcXVlc3QncyBt
X3Jlc3BvbnNlVGV4dCBmaWVsZCBpcyBhIFNjcmlwdFN0cmluZyBvYmplY3QgdGhhdCBpcworICAg
ICAgICBhY2Nlc3NpYmxlIHRvIGphdmFzY3JpcHQgdmlhIHRoZSBYTUxIdHRwUmVxdWVzdCdzIHJl
c3BvbnNlVGV4dCBhdHRyaWJ1dGUuCisgICAgICAgIFdoZW5ldmVyIHRoZSByZXNwb25zZSBkYXRh
IGZyb20gdGhlIHNlcnZlciBpcyByZWNlaXZlZCBpbiBtdWx0aXBsZSBjaHVua3MKKyAgICAgICAg
dGhlIHJlc3BvbnNlIGlzIGJ1aWx0IHVwIHVzaW5nIG9wZXJhdG9yICs9IG9uIHRoZSBTY3JpcHRT
dHJpbmcuICBTY3JpcHRzCisgICAgICAgIHdpbGwgc29tZXRpbWVzIHF1ZXJ5IHRoZSBsZW5ndGgg
b2YgdGhlIHJlc3BvbnNlVGV4dCBhdHRyaWJ1dGUgKHRvIGNoZWNrCisgICAgICAgIG9uIHByb2dy
ZXNzIGFuZCBzdWNoKSBidXQgd2lsbCByYXJlbHkgcXVlcnkgdGhlIGRhdGEgd2l0aGluIHJlc3Bv
bnNlVGV4dAorICAgICAgICB1bnRpbCB0aGUgWEhSIGlzIGNvbXBsZXRlZC4KKworICAgICAgICBU
aGlzIGltcGxlbWVudGF0aW9uIG9wdGltaXplcyBmb3IgdGhhdCBjYXNlIGJ5IG1ha2luZyBhcHBl
bmRzIGFuZCBsZW5ndGgKKyAgICAgICAgcXVlcmllcyB2ZXJ5IGNoZWFwIGJ5IG5vdCBhY3R1YWxs
eSBjcmVhdGluZyBhIGZsYXQgYnVmZmVyIHVudGlsIHRoZSBkYXRhIGlzCisgICAgICAgIHJlcXVl
c3RlZC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHNob3VsZCBub3QgY2hhbmdlIHRoZSBzZW1h
bnRpY3Mgb2YgV2ViQ29yZTo6U2NyaXB0U3RyaW5nIGluCisgICAgICAgIGFueSBvYnNlcnZhYmxl
IHdheS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9T
Y3JpcHRTdHJpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFN0cmluZzo6U2NyaXB0U3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFN0cmluZzo6b3BlcmF0b3IgU3RyaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFN0cmluZzo6aXNOdWxsKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdFN0cmluZzo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTdHJpbmc6
OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0U3RyaW5nOjpvcGVyYXRvcj0pOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0U3RyaW5nOjpvcGVyYXRvcis9KToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9WOEJpbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZVNjcmlwdFN0
cmluZ1Jlc291cmNlOjpXZWJDb3JlU2NyaXB0U3RyaW5nUmVzb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViQ29yZVNjcmlwdFN0cmluZ1Jlc291cmNlOjp+V2ViQ29yZVNjcmlwdFN0cmluZ1Jl
c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVTY3JpcHRTdHJpbmdSZXNvdXJjZTo6
ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlU2NyaXB0U3RyaW5nUmVzb3VyY2U6Omxl
bmd0aCk6CisgICAgICAgIChXZWJDb3JlOjptYWtlRXh0ZXJuYWxTY3JpcHRTdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6djhFeHRlcm5hbFNjcmlwdFN0cmluZyk6CisgICAgICAgICogYmluZGlu
Z3MvdjgvVjhCaW5kaW5nLmg6CisgICAgICAgIChXZWJDb3JlOjp2OFNjcmlwdFN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjp2OFN0cmluZ09yTnVsbCk6CisgICAgICAgICogcGxhdGZvcm0vdGV4
dC9TdHJpbmdCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0J1aWxkZXI6OmNs
ZWFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxkZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlN0cmluZ0J1aWxkZXI6Omxlbmd0aCk6CisKIDIwMDktMTAtMDcgIEFhcm9uIEJv
b2RtYW4gIDxhYUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0
aC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggZWYyMzFkZC4uMjU5MzdjZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTc2NSw2ICs3NjUsOCBAQAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L1NjcmlwdFN0YXRlLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvU2NyaXB0U3Ry
aW5nLmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NjcmlwdFN0cmluZ0ltcGwuaCcsCisg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvU2NyaXB0U3RyaW5nSW1wbC5jcHAnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvU2NyaXB0VmFsdWUuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTdHJp
bmcuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3RyaW5nLmgKaW5kZXggZmUyNTRhNS4u
NzE1ZjdhNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTdHJpbmcuaAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0cmluZy5oCkBAIC0zMiwzNCArMzIsNTIg
QEAKICNkZWZpbmUgU2NyaXB0U3RyaW5nX2gKIAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CisjaW5jbHVkZSAiU2NyaXB0U3RyaW5nSW1wbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
Ky8vIFRoaXMgY2xhc3MgaXMgbm90IHRocmVhZC1zYWZlLiAgVG8gYWNjZXNzIHRoZSBkYXRhIGZy
b20gbXVsdGlwbGUgdGhyZWFkcworLy8gdGhlIGNhbGxlciBtdXN0IHNlcmlhbGl6ZSBpbnRvIGEg
U3RyaW5nIG9iamVjdCBhbmQgZXhwbGljaXRseSBjb3B5KCkgdGhlCisvLyBkYXRhLgogY2xhc3Mg
U2NyaXB0U3RyaW5nIHsKIHB1YmxpYzoKLSAgICBTY3JpcHRTdHJpbmcoKSB7fQotICAgIFNjcmlw
dFN0cmluZyhjb25zdCBTdHJpbmcmIHMpIDogbV9zdHIocykge30KLSAgICBTY3JpcHRTdHJpbmco
Y29uc3QgY2hhciogcykgOiBtX3N0cihzKSB7fQorICAgIFNjcmlwdFN0cmluZygpIDogbV9pbXBs
KDApIHt9CisgICAgU2NyaXB0U3RyaW5nKGNvbnN0IFN0cmluZyYgcykgOiBtX2ltcGwobmV3IFNj
cmlwdFN0cmluZ0ltcGwocykpIHt9CisgICAgU2NyaXB0U3RyaW5nKGNvbnN0IGNoYXIqIHMpIDog
bV9pbXBsKG5ldyBTY3JpcHRTdHJpbmdJbXBsKHMpKSB7fQogCi0gICAgb3BlcmF0b3IgU3RyaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9zdHI7IH0KKyAgICBvcGVyYXRvciBTdHJpbmcoKSBjb25zdCB7
IHJldHVybiBtX2ltcGwtPnRvU3RyaW5nKCk7IH0KIAotICAgIGJvb2wgaXNOdWxsKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHIuaXNOdWxsKCk7IH0KLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RyLmxlbmd0aCgpOyB9CisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAh
bV9pbXBsLmdldCgpIHx8IG1faW1wbC0+aXNOdWxsKCk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1faW1wbC0+bGVuZ3RoKCk7IH0KKworICAgIGNvbnN0IFVDaGFyKiBkYXRh
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ltcGwtPmRhdGEoKTsKKyAgICB9CiAK
ICAgICBTY3JpcHRTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBjaGFyKiBzKQogICAgIHsKLSAgICAg
ICAgbV9zdHIgPSBzOworICAgICAgICBtX2ltcGwgPSBuZXcgU2NyaXB0U3RyaW5nSW1wbChzKTsK
KyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIFNjcmlwdFN0cmluZyYgb3BlcmF0
b3I9KGNvbnN0IFN0cmluZyYgcykKKyAgICB7CisgICAgICAgIG1faW1wbCA9IG5ldyBTY3JpcHRT
dHJpbmdJbXBsKHMpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCiAgICAgU2NyaXB0
U3RyaW5nJiBvcGVyYXRvcis9KGNvbnN0IFN0cmluZyYgcykKICAgICB7Ci0gICAgICAgIG1fc3Ry
ICs9IHM7CisgICAgICAgIGlmIChtX2ltcGwuZ2V0KCkpCisgICAgICAgICAgICBtX2ltcGwtPmFw
cGVuZChzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9pbXBsID0gbmV3IFNjcmlwdFN0
cmluZ0ltcGwocyk7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKIHByaXZhdGU6Ci0g
ICAgU3RyaW5nIG1fc3RyOworICAgIFJlZlB0cjxTY3JpcHRTdHJpbmdJbXBsPiBtX2ltcGw7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NjcmlwdFN0cmluZ0ltcGwuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTdHJp
bmdJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDVlZmQzCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTdHJpbmdJbXBsLmNw
cApAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2NyaXB0U3RyaW5nX2gKKyNkZWZpbmUgU2NyaXB0
U3RyaW5nX2gKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcmlwdFN0cmluZ0lt
cGwuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiBTdHJpbmdCdWlsZGVyLmgg
d2l0aCBzb21lIGNhY2hpbmcgYWRkZWQuCisKK1NjcmlwdFN0cmluZ0ltcGw6OlNjcmlwdFN0cmlu
Z0ltcGwoKQoreworfQorU2NyaXB0U3RyaW5nSW1wbDo6U2NyaXB0U3RyaW5nSW1wbChjb25zdCBT
dHJpbmcmIHMpCisgICAgOiBtX2J1ZmZlcihzKQoreworfQorCitTY3JpcHRTdHJpbmdJbXBsOjpT
Y3JpcHRTdHJpbmdJbXBsKGNvbnN0IGNoYXIqIHMpCisgICAgOiBtX2J1ZmZlcihzKQoreworfQor
Citib29sIFNjcmlwdFN0cmluZ0ltcGw6OmlzTnVsbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
YnVmZmVyLmlzTnVsbCgpICYgbV9idWlsZGVyLmlzTnVsbCgpOworfQorCitzaXplX3QgU2NyaXB0
U3RyaW5nSW1wbDo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9idWZmZXIubGVuZ3Ro
KCkgKyBtX2J1aWxkZXIubGVuZ3RoKCk7Cit9CisKK3ZvaWQgU2NyaXB0U3RyaW5nSW1wbDo6YXBw
ZW5kKGNvbnN0IFN0cmluZyYgcykKK3sKKyAgICBtX2J1aWxkZXIuYXBwZW5kKHMpOworfQorCitj
b25zdCBVQ2hhciogU2NyaXB0U3RyaW5nSW1wbDo6ZGF0YSgpIGNvbnN0Cit7CisgICAgVXBkYXRl
QnVmZmVyKCk7CisgICAgcmV0dXJuIG1fYnVmZmVyLmNoYXJhY3RlcnMoKTsKK30KKworLy8gRXZl
cnkgY2FsbCB0byB0b1N0cmluZygpIG11c3QgcmV0dXJuIGEgZmxhdCBidWZmZXIgd2l0aCB0aGUg
ZW50aXJlIHN0cmluZyBjb250ZW50cyBzbyBmYXIuICBIb3dldmVyLAorLy8gaWYgbXVsdGlwbGUg
Y2FsbHMgdG8gdG9TdHJpbmcoKSBhcmUgbWFkZSB3aXRob3V0IGludGVybGVhdmluZyBhcHBlbmQo
KSBjYWxscywgd2UgY2FuIHJldHVybiB0aGUgc2FtZQorLy8gYnVmZmVyLgorU3RyaW5nIFNjcmlw
dFN0cmluZ0ltcGw6OnRvU3RyaW5nKCkgY29uc3QKK3sKKyAgICBVcGRhdGVCdWZmZXIoKTsKKyAg
ICByZXR1cm4gbV9idWZmZXI7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5ldmVyIGNo
YW5nZSBhbnkgb2JzZXJ2YWJsZSBzdGF0ZSwgaGVuY2UgdGhlIGNvbnN0LW5lc3MuCit2b2lkIFNj
cmlwdFN0cmluZ0ltcGw6OlVwZGF0ZUJ1ZmZlcigpIGNvbnN0Cit7CisgICAgaWYgKCFtX2J1aWxk
ZXIubGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fYnVmZmVyLmFwcGVuZChtX2J1
aWxkZXIudG9TdHJpbmcoKSk7CisgICAgbV9idWlsZGVyLmNsZWFyKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNjcmlwdFN0cmluZ19oCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0cmluZ0ltcGwuaCBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0U3RyaW5nSW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmJiMmNjYTEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0
cmluZ0ltcGwuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2NyaXB0U3RyaW5nSW1w
bF9oCisjZGVmaW5lIFNjcmlwdFN0cmluZ0ltcGxfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgU2NyaXB0U3RyaW5nSW1wbCA6IHB1YmxpYyBSZWZDb3VudGVkPFNjcmlwdFN0cmlu
Z0ltcGw+IHsKK3B1YmxpYzoKKyAgICBTY3JpcHRTdHJpbmdJbXBsKCk7CisgICAgU2NyaXB0U3Ry
aW5nSW1wbChjb25zdCBTdHJpbmcmIHMpOworICAgIFNjcmlwdFN0cmluZ0ltcGwoY29uc3QgY2hh
ciogcyk7CisKKyAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKKworICAgIGJvb2wgaXNOdWxs
KCkgY29uc3Q7CisgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0OworCisgICAgY29uc3QgVUNoYXIq
IGRhdGEoKSBjb25zdDsKKworICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgcyk7CisKK3By
aXZhdGU6CisgICAgLy8gRm9yY2VzIGFsbCBhcHBlbmRlZCBzdHJpbmdzIGludG8gYSBmbGF0IGJ1
ZmZlciAoc3RvcmVkIGFzIG1fYnVmZmVyKS4KKyAgICB2b2lkIFVwZGF0ZUJ1ZmZlcigpIGNvbnN0
OworCisgICAgLy8gV2hlbiB3ZSBoYXZlIHRvIGZsYXR0ZW4gdG8gYSBidWZmZXIgdGhlIHJlc3Vs
dCBnb2VzIGludG8gbV9idWZmZXIuCisgICAgbXV0YWJsZSBTdHJpbmcgbV9idWZmZXI7CisgICAg
Ly8gVGhpcyBzdG9yZXMgZXZlcnkgc3RyaW5nIHRoYXQgaGFzIGJlZW4gYXBwZW5kKCknZCBzaW5j
ZSB0aGUgbGFzdCBvcGVyYXRpb24gdGhhdCBmb3JjZWQgdGhlIGJ1ZmZlciB0byBiZSBmbGF0dGVu
ZWQuCisgICAgbXV0YWJsZSBTdHJpbmdCdWlsZGVyIG1fYnVpbGRlcjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNjcmlwdFN0cmluZ0ltcGxfaApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEJpbmRpbmcuY3BwCmluZGV4IDlhYzdlYWUuLjc5ZWU5N2YgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
QmluZGluZy5jcHAKQEAgLTE2OSw2ICsxNjksNTcgQEAgc3RhdGljIFN0cmluZ1R5cGUgdjhTdHJp
bmdUb1dlYkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OFN0cmluZywgRXh0ZXIK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCisKKy8vIFdlYkNvcmVTY3JpcHRTdHJpbmdSZXNvdXJj
ZSBpcyBhIGhlbHBlciBjbGFzcyBmb3IgdjhFeHRlcm5hbFNjcmlwdFN0cmluZyBmb3Igd2hlbgor
Ly8gdGhlIGJhY2tpbmcgb2JqZWN0IGlzIGEgV2ViQ29yZTo6U2NyaXB0U3RyaW5nLgorY2xhc3Mg
V2ViQ29yZVNjcmlwdFN0cmluZ1Jlc291cmNlIDogcHVibGljIHY4OjpTdHJpbmc6OkV4dGVybmFs
U3RyaW5nUmVzb3VyY2UgeworcHVibGljOgorICAgIGV4cGxpY2l0IFdlYkNvcmVTY3JpcHRTdHJp
bmdSZXNvdXJjZShjb25zdCBTY3JpcHRTdHJpbmcmIHN0cmluZykKKyAgICAgICAgOiBtX3Njcmlw
dFN0cmluZyhzdHJpbmcpLAorICAgICAgICAgIG1fbGVuZ3RoKHN0cmluZy5zaXplKCkpCisgICAg
eworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgbV90aHJlYWRJZCA9IFdURjo6Y3VycmVudFRocmVh
ZCgpOworI2VuZGlmCisgICAgICAgIEFTU0VSVCghc3RyaW5nLmlzTnVsbCgpKTsKKyAgICAgICAg
QVNTRVJUKG1fbGVuZ3RoID4gMCk7CisgICAgICAgIEFTU0VSVChzdHJpbmcuZGF0YSgpKTsKKyAg
ICAgICAgLy8gRklYTUUoamFtZXNyKTogZ2V0IHRoaXMgYWNjb3VudGluZyByaWdodAorICAgICAg
ICAvL3Y4OjpWODo6QWRqdXN0QW1vdW50T2ZFeHRlcm5hbEFsbG9jYXRlZE1lbW9yeSgyICogc3Ry
aW5nLmxlbmd0aCgpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5XZWJDb3JlU2NyaXB0U3RyaW5n
UmVzb3VyY2UoKQorICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIEFTU0VSVChtX3RocmVh
ZElkID09IFdURjo6Y3VycmVudFRocmVhZCgpKTsKKyNlbmRpZgorICAgICAgICAvLyBGSVhNRShq
YW1lc3IpOiBnZXQgdGhpcyBhY2NvdW50aW5nIHJpZ2h0CisgICAgICAgIC8vaW50IHJlZHVjZWRF
eHRlcm5hbE1lbW9yeSA9IC0yICogbV9wbGFpblN0cmluZy5sZW5ndGgoKTsKKyAgICAgICAgLy9p
ZiAobV9wbGFpblN0cmluZy5pbXBsKCkgIT0gbV9hdG9taWNTdHJpbmcuaW1wbCgpICYmICFtX2F0
b21pY1N0cmluZy5pc051bGwoKSkKKyAgICAgICAgLy8gICAgcmVkdWNlZEV4dGVybmFsTWVtb3J5
ICo9IDI7CisgICAgICAgIC8vdjg6OlY4OjpBZGp1c3RBbW91bnRPZkV4dGVybmFsQWxsb2NhdGVk
TWVtb3J5KHJlZHVjZWRFeHRlcm5hbE1lbW9yeSk7CisgICAgfQorCisgICAgdmlydHVhbCBjb25z
dCB1aW50MTZfdCogZGF0YSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KG1fc2NyaXB0U3RyaW5nLmRhdGEoKSk7CisgICAgfQor
CisgICAgdmlydHVhbCBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0K
KworcHJpdmF0ZToKKyAgICAvLyBBIHNoYWxsb3cgY29weSBvZiB0aGUgc3RyaW5nLiBLZWVwcyB0
aGUgc3RyaW5nIGJ1ZmZlciBhbGl2ZSB1bnRpbCB0aGUgVjggZW5naW5lIGdhcmJhZ2UgY29sbGVj
dHMgaXQuCisgICAgU2NyaXB0U3RyaW5nIG1fc2NyaXB0U3RyaW5nOworICAgIC8vIFRoZSBTY3Jp
cHRTdHJpbmcgYmFja2luZyB0aGUgYnVmZmVyIG1pZ2h0IGJlIGFwcGVuZGVkIHRvLCBzbyB3ZSBr
ZWVwIGFuIGV4cGxpY2l0IGxlbmd0aCBmb3IgdGhpcyBoYW5kbGUuCisgICAgc2l6ZV90IG1fbGVu
Z3RoOworCisKKyNpZm5kZWYgTkRFQlVHCisgICAgV1RGOjpUaHJlYWRJZGVudGlmaWVyIG1fdGhy
ZWFkSWQ7CisjZW5kaWYKK307CisKKwogU3RyaW5nIHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nKHY4
OjpIYW5kbGU8djg6OlN0cmluZz4gdjhTdHJpbmcpCiB7CiAgICAgcmV0dXJuIHY4U3RyaW5nVG9X
ZWJDb3JlU3RyaW5nPFN0cmluZz4odjhTdHJpbmcsIEV4dGVybmFsaXplKTsKQEAgLTIzMyw2ICsy
ODQsMTYgQEAgc3RhdGljIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBtYWtlRXh0ZXJuYWxTdHJpbmco
Y29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgcmV0dXJuIG5ld1N0cmluZzsKIH0KIAorc3RhdGlj
IHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBtYWtlRXh0ZXJuYWxTY3JpcHRTdHJpbmcoY29uc3QgU2Ny
aXB0U3RyaW5nIHN0cmluZykKK3sKKyAgICBXZWJDb3JlU2NyaXB0U3RyaW5nUmVzb3VyY2UqIHNj
cmlwdFN0cmluZ1Jlc291cmNlID0gbmV3IFdlYkNvcmVTY3JpcHRTdHJpbmdSZXNvdXJjZShzdHJp
bmcpOworICAgIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuZXdTY3JpcHRTdHJpbmcgPSB2ODo6U3Ry
aW5nOjpOZXdFeHRlcm5hbChzY3JpcHRTdHJpbmdSZXNvdXJjZSk7CisgICAgaWYgKG5ld1Njcmlw
dFN0cmluZy5Jc0VtcHR5KCkpCisgICAgICAgIGRlbGV0ZSBzY3JpcHRTdHJpbmdSZXNvdXJjZTsK
KworICAgIHJldHVybiBuZXdTY3JpcHRTdHJpbmc7Cit9CisKIHR5cGVkZWYgSGFzaE1hcDxTdHJp
bmdJbXBsKiwgdjg6OlN0cmluZyo+IFN0cmluZ0NhY2hlOwogCiBzdGF0aWMgU3RyaW5nQ2FjaGUm
IGdldFN0cmluZ0NhY2hlKCkKQEAgLTI4MSw0ICszNDIsMTIgQEAgdjg6OkxvY2FsPHY4OjpTdHJp
bmc+IHY4RXh0ZXJuYWxTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgcmV0dXJuIG5l
d1N0cmluZzsKIH0KIAordjg6OkxvY2FsPHY4OjpTdHJpbmc+IHY4RXh0ZXJuYWxTY3JpcHRTdHJp
bmcoY29uc3QgU2NyaXB0U3RyaW5nJiBzdHJpbmcpCit7CisgICAgaWYgKCFzdHJpbmcuc2l6ZSgp
KQorICAgICAgICByZXR1cm4gdjg6OlN0cmluZzo6RW1wdHkoKTsKKworICAgIHJldHVybiBtYWtl
RXh0ZXJuYWxTY3JpcHRTdHJpbmcoc3RyaW5nKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaCBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKaW5kZXggYTA5MTAyZC4uY2M0ODgyNiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4QmluZGluZy5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQXRvbWljU3RyaW5n
LmgiCiAjaW5jbHVkZSAiTWF0aEV4dHJhcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CisjaW5jbHVkZSAiU2NyaXB0U3RyaW5nLmgiCiAKICNpbmNsdWRlIDx2OC5oPgogCkBAIC03Nyw2
ICs3OCwxOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHJldHVybiB2OEV4dGVybmFs
U3RyaW5nKHN0cmluZyk7CiAgICAgfQogCisgICAgLy8gSnVzdCBsaWtlIHY4RXh0ZXJuYWxTdHJp
bmcgZXhjZXB0IHRoYXQgdGhlIGJhY2tpbmcgYnVmZmVyIGlzIGEKKyAgICAvLyBTY3JpcHRTdHJp
bmcgYW5kIG5vdCBhIG5vcm1hbCBTdHJpbmcuICBUaGUgc2FtZSBiYWNraW5nIGJ1ZmZlciBjYW4K
KyAgICAvLyBiZSByZS11c2VkIGZvciBtdWx0aXBsZSBoYW5kbGVzIHRvIHRoZSBzYW1lIFNjcmlw
dFN0cmluZyBzbyBhIGJpdCBvZgorICAgIC8vIHNwZWNpYWwgaGFuZGxpbmcgaXMgcmVxdWlyZWQu
CisgICAgdjg6OkxvY2FsPHY4OjpTdHJpbmc+IHY4RXh0ZXJuYWxTY3JpcHRTdHJpbmcoY29uc3Qg
U2NyaXB0U3RyaW5nJik7CisKKyAgICAvLyBDb252ZXJ0IGEgU2NyaXB0U3RyaW5nIHRvIGEgVjgg
c3RyaW5nLgorICAgIGlubGluZSB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4U2NyaXB0U3RyaW5n
KGNvbnN0IFNjcmlwdFN0cmluZyYgc3RyaW5nKQorICAgIHsKKyAgICAgIHJldHVybiB2OEV4dGVy
bmFsU2NyaXB0U3RyaW5nKHN0cmluZyk7CisgICAgfQorCisKICAgICAvLyBFbmFibGVzIGNhY2hp
bmcgdjggd3JhcHBlcnMgY3JlYXRlZCBmb3IgV2ViQ29yZTo6U3RyaW5nSW1wbC4gIEN1cnJlbnRs
eSB0aGlzIGNhY2hlIHJlcXVpcmVzCiAgICAgLy8gYWxsIHRoZSBjYWxscyAoYm90aCB0byBjb252
ZXJ0IFdlYkNvcmU6OlN0cmluZyB0byB2ODo6U3RyaW5nIGFuZCB0byBHQyB0aGUgaGFuZGxlKQog
ICAgIC8vIHRvIGJlIHBlcmZvcm1lZCBvbiB0aGUgbWFpbiB0aHJlYWQuCkBAIC0xODMsNiArMTk3
LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgcmV0dXJuIHN0ci5pc051bGwoKSA/
IHY4OjpIYW5kbGU8djg6OlZhbHVlPih2ODo6TnVsbCgpKSA6IHY4OjpIYW5kbGU8djg6OlZhbHVl
Pih2OFN0cmluZyhzdHIpKTsKICAgICB9CiAKKyAgICBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHY4U3RyaW5nT3JOdWxsKGNvbnN0IFNjcmlwdFN0cmluZyYgc3RyKQorICAgIHsKKyAgICAg
ICByZXR1cm4gc3RyLmlzTnVsbCgpID8gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KHY4OjpOdWxsKCkp
IDogdjg6OkhhbmRsZTx2ODo6VmFsdWU+KHY4U2NyaXB0U3RyaW5nKHN0cikpOworICAgIH0KKwog
ICAgIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhTdHJpbmdPclVuZGVmaW5lZChjb25z
dCBTdHJpbmcmIHN0cikKICAgICB7CiAgICAgICAgIHJldHVybiBzdHIuaXNOdWxsKCkgPyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4odjg6OlVuZGVmaW5lZCgpKSA6IHY4OjpIYW5kbGU8djg6OlZhbHVl
Pih2OFN0cmluZyhzdHIpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJp
bmdCdWlsZGVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmNwcApp
bmRleCBjMjFlMzY2Li40YWVjYzNlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
U3RyaW5nQnVpbGRlci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxk
ZXIuY3BwCkBAIC05NSw0ICs5NSwxMCBAQCBTdHJpbmcgU3RyaW5nQnVpbGRlcjo6dG9TdHJpbmco
KSBjb25zdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQgU3RyaW5nQnVpbGRlcjo6Y2xl
YXIoKQoreworICAgIG1fc3RyaW5ncy5jbGVhcigpOworICAgIG1fdG90YWxMZW5ndGggPSAwOwor
fQorCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxkZXIuaAppbmRleCA4ZDc2YjljLi5m
MmY1YzUxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5o
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmgKQEAgLTQ1LDggKzQ1
LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBTdHJpbmcgdG9TdHJpbmcoKSBj
b25zdDsKIAotICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgY2xlYXIoKTsKKwogICAgICAgICBi
b29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxMZW5ndGggPT0gVUlOVF9NQVg7IH0K
KyAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV90b3RhbExlbmd0aCA9
PSBVSU5UX01BWCA/IDAgOiBtX3RvdGFsTGVuZ3RoOyB9CisKKyAgICBwcml2YXRlOgogCiAgICAg
ICAgIHVuc2lnbmVkIG1fdG90YWxMZW5ndGg7CiAgICAgICAgIFZlY3RvcjxTdHJpbmcsIDE2PiBt
X3N0cmluZ3M7Cg==
</data>
<flag name="review"
          id="22127"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41195</attachid>
            <date>2009-10-14 17:04:44 -0700</date>
            <delta_ts>2009-10-14 18:26:49 -0700</delta_ts>
            <desc>Implementation using v8::String::Concat() for operator+=</desc>
            <filename>xhr_patch.diff</filename>
            <type>text/plain</type>
            <size>11098</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
M2VkNGYxNy4uMzM2ZWRlMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAwOS0xMC0xNCAgSmFtZXMgUm9iaW5z
b24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEJldHRlciBpbXBsZW1lbnRhdGlvbiBvZiBXZWJDb3JlOjpTY3Jp
cHRTdHJpbmcgZm9yIHRoZSBWOCBiaW5kaW5ncy4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjk5MDkKKworICAgICAgICBXZWJDb3JlOjpTY3JpcHRT
dHJpbmcgaXMgdXNlZCBmb3IgWE1MSHR0cFJlcXVlc3QncyByZXNwb25zZVRleHQgYXR0cmlidXRl
IHdoaWNoIGlzCisgICAgICAgIHNoYXJlZCB3aXRoIEphdmFTY3JpcHQuICBUaHVzLCBzaW1wbHkg
dXNpbmcgYSBXZWJDb3JlOjpTdHJpbmcgYW5kIGNvcHlpbmcgdGhlIHZhbHVlCisgICAgICAgIGlz
IHByZXR0eSBpbmVmZmljaWVudCwgZXNwZWNpYWxseSBzaW5jZSByZXNwb25zZVRleHQgaXMgYnVp
bHQgdXAgd2l0aCBhIHNlcXVlbmNlIG9mCisgICAgICAgIG9wZXJhdG9yKz0gY2FsbHMuICBKU0Mg
YnVpbGRzIHVzZSBhIEpTQzo6VVN0cmluZyB0byBzaGFyZSB0aGUgYnVmZmVyIHdoZW4gcG9zc2li
bGUsCisgICAgICAgIHRoaXMgcGF0Y2ggYWRvcHRzIGEgc2ltaWxhciBhcHByb2FjaCBmb3IgVjgu
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWhhdmlvciBpcyB1bmNoYW5nZWQgYW5kIGNvdmVy
ZWQgYnkgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdAorCisgICAgICAgICog
V2ViQ29yZS5neXBpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdFN0cmluZy5oOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0U3RyaW5nOjpTY3JpcHRTdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0U3RyaW5nOjpvcGVyYXRvciBTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0U3RyaW5nOjppc051bGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0U3RyaW5nOjpz
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFN0cmluZzo6b3BlcmF0b3I9KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdFN0cmluZzo6b3BlcmF0b3IrPSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRTdHJpbmc6OnY4U3RyaW5nT3JOdWxsKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9T
Y3JpcHRTdHJpbmdJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTdHJp
bmdJbXBsOjpTY3JpcHRTdHJpbmdJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFN0cmlu
Z0ltcGw6On5TY3JpcHRTdHJpbmdJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFN0cmlu
Z0ltcGw6OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFN0cmluZ0ltcGw6Omlz
TnVsbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTdHJpbmdJbXBsOjpzaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdFN0cmluZ0ltcGw6OmFwcGVuZCk6CisgICAgICAgICogYmluZGlu
Z3MvdjgvU2NyaXB0U3RyaW5nSW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dFN0cmluZ0ltcGw6OlNjcmlwdFN0cmluZ0ltcGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
U3RyaW5nSW1wbDo6djhTdHJpbmdIYW5kbGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09S
X0dFVFRFUik6CisKIDIwMDktMTAtMTMgIEdpcmlzaCBSYW1ha3Jpc2huYW4gIDxnaXJpc2hAZm9y
d2FyZGJpYXMuaW4+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCmRpZmYg
LS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4
IGZiYzVlN2QuLmJhNzRmMjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC03NjksNiArNzY5LDggQEAKICAgICAgICAgICAgICdi
aW5kaW5ncy92OC9TY3JpcHRTdGF0ZS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9TY3Jp
cHRTdGF0ZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NjcmlwdFN0cmluZy5oJywK
KyAgICAgICAgICAgICdiaW5kaW5ncy92OC9TY3JpcHRTdHJpbmdJbXBsLmNwcCcsCisgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvU2NyaXB0U3RyaW5nSW1wbC5oJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9TY3JpcHRWYWx1ZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Njcmlw
dFZhbHVlLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5oJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3RyaW5nLmggYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0cmluZy5oCmluZGV4IGZlMjU0YTUuLmIwMTdhMGMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3RyaW5nLmgKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRTdHJpbmcuaApAQCAtMzIsMzQgKzMyLDQxIEBACiAjZGVm
aW5lIFNjcmlwdFN0cmluZ19oCiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1
ZGUgIlNjcmlwdFN0cmluZ0ltcGwuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBTY3JpcHRTdHJpbmcgewogcHVibGljOgotICAgIFNjcmlw
dFN0cmluZygpIHt9Ci0gICAgU2NyaXB0U3RyaW5nKGNvbnN0IFN0cmluZyYgcykgOiBtX3N0cihz
KSB7fQotICAgIFNjcmlwdFN0cmluZyhjb25zdCBjaGFyKiBzKSA6IG1fc3RyKHMpIHt9CisgICAg
U2NyaXB0U3RyaW5nKCkgOiBtX2ltcGwoMCkge30KKyAgICBTY3JpcHRTdHJpbmcoY29uc3QgU3Ry
aW5nJiBzKSA6IG1faW1wbChuZXcgU2NyaXB0U3RyaW5nSW1wbChzKSkge30KKyAgICBTY3JpcHRT
dHJpbmcoY29uc3QgY2hhciogcykgOiBtX2ltcGwobmV3IFNjcmlwdFN0cmluZ0ltcGwocykpIHt9
CiAKLSAgICBvcGVyYXRvciBTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cjsgfQorICAgIG9w
ZXJhdG9yIFN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC0+dG9TdHJpbmcoKTsgfQogCi0g
ICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3N0ci5pc051bGwoKTsgfQotICAgIHNp
emVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdHIubGVuZ3RoKCk7IH0KKyAgICBib29sIGlz
TnVsbCgpIGNvbnN0IHsgcmV0dXJuICFtX2ltcGwuZ2V0KCkgfHwgbV9pbXBsLT5pc051bGwoKTsg
fQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLT5zaXplKCk7IH0KIAog
ICAgIFNjcmlwdFN0cmluZyYgb3BlcmF0b3I9KGNvbnN0IGNoYXIqIHMpCiAgICAgewotICAgICAg
ICBtX3N0ciA9IHM7CisgICAgICAgIG1faW1wbCA9IG5ldyBTY3JpcHRTdHJpbmdJbXBsKHMpOwog
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCiAgICAgU2NyaXB0U3RyaW5nJiBvcGVyYXRv
cis9KGNvbnN0IFN0cmluZyYgcykKICAgICB7Ci0gICAgICAgIG1fc3RyICs9IHM7CisgICAgICAg
IG1faW1wbC0+YXBwZW5kKHMpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCisgICAg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4U3RyaW5nT3JOdWxsKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBpc051bGwoKSA/IHY4OjpIYW5kbGU8djg6OlZhbHVlPih2ODo6TnVsbCgpKSA6
IHY4OjpIYW5kbGU8djg6OlZhbHVlPihtX2ltcGwtPnY4U3RyaW5nSGFuZGxlKCkpOworICAgIH0K
KwogcHJpdmF0ZToKLSAgICBTdHJpbmcgbV9zdHI7CisgICAgUmVmUHRyPFNjcmlwdFN0cmluZ0lt
cGw+IG1faW1wbDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3RyaW5nSW1wbC5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NjcmlwdFN0cmluZ0ltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjhmYmEyMWQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dFN0cmluZ0ltcGwuY3BwCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlNjcmlwdFN0cmluZ0ltcGwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitTY3JpcHRTdHJpbmdJbXBsOjpTY3JpcHRTdHJpbmdJbXBsKGNvbnN0IFN0cmluZyYgcykKK3sK
KyAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CisgICAgbV9oYW5kbGUgPSB2ODo6UGVyc2lzdGVu
dDx2ODo6U3RyaW5nPjo6TmV3KHY4U3RyaW5nKHMpKTsKK30KKworU2NyaXB0U3RyaW5nSW1wbDo6
U2NyaXB0U3RyaW5nSW1wbChjb25zdCBjaGFyKiBzKQoreworICAgIHY4OjpIYW5kbGVTY29wZSBz
Y29wZTsKKyAgICBtX2hhbmRsZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpTdHJpbmc+OjpOZXcodjg6
OlN0cmluZzo6TmV3KHMpKTsKK30KKworU2NyaXB0U3RyaW5nSW1wbDo6flNjcmlwdFN0cmluZ0lt
cGwoKQoreworICAgIG1faGFuZGxlLkRpc3Bvc2UoKTsKK30KKworU3RyaW5nIFNjcmlwdFN0cmlu
Z0ltcGw6OnRvU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdjhTdHJpbmdUb1dlYkNvcmVT
dHJpbmcobV9oYW5kbGUpOworfQorCitib29sIFNjcmlwdFN0cmluZ0ltcGw6OmlzTnVsbCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1faGFuZGxlLklzRW1wdHkoKTsKK30KKworc2l6ZV90IFNjcmlw
dFN0cmluZ0ltcGw6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX2hhbmRsZS0+TGVuZ3Ro
KCk7Cit9CisKK3ZvaWQgU2NyaXB0U3RyaW5nSW1wbDo6YXBwZW5kKGNvbnN0IFN0cmluZyYgcykK
K3sKKyAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CisgICAgaWYgKG1faGFuZGxlLklzRW1wdHko
KSkKKyAgICAgICAgbV9oYW5kbGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6U3RyaW5nPjo6TmV3KHY4
U3RyaW5nKHMpKTsKKyAgICBlbHNlCisgICAgICAgIG1faGFuZGxlID0gdjg6OlBlcnNpc3RlbnQ8
djg6OlN0cmluZz46Ok5ldyh2ODo6U3RyaW5nOjpDb25jYXQobV9oYW5kbGUsIHY4U3RyaW5nKHMp
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0U3RyaW5nSW1wbC5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRT
dHJpbmdJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEyNGVlNAot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3RyaW5nSW1wbC5o
CkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JpcHRTdHJpbmdJbXBsX2gKKyNkZWZp
bmUgU2NyaXB0U3RyaW5nSW1wbF9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2lu
Y2x1ZGUgIlY4QmluZGluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRoaXMgY2xh
c3MgaXMgdXNlZCBmb3Igc3RyaW5ncyB0aGF0IHRlbmQgdG8gYmUgc2hhcmVkIHdpdGggSmF2YVNj
cmlwdCBmcmVxdWVudGx5LiAgVGhlIEpTQyBpbXBsZW1lbnRhdGlvbiB1c2VzIHd0Zjo6VVN0cmlu
ZyAtIHNlZSBiaW5kaW5ncy9qcy9TY3JpcHRTdHJpbmcuaAorLy8gQ3VycmVudGx5IFhNTEh0dHBS
ZXF1ZXN0IHVzZXMgYSBTY3JpcHRTdHJpbmcgdG8gYnVpbGQgdXAgdGhlIHJlc3BvbnNlVGV4dCBh
dHRyaWJ1dGUuICBBcyBkYXRhIGFycml2ZXMgZnJvbSB0aGUgbmV0d29yaywgaXQgaXMgYXBwZW5k
ZWQgdG8gdGhlIFNjcmlwdFN0cmluZworLy8gdmlhIG9wZXJhdG9yKz0gYW5kIGEgSmF2YVNjcmlw
dCByZWFkeXN0YXRlY2hhbmdlIGV2ZW50IGlzIGZpcmVkLiAgSmF2YVNjcmlwdCBjYW4gYWNjZXNz
IHRoZSByZXNwb25zZVRleHQgYXR0cmlidXRlIG9mIHRoZSBYTUxIdHRwUmVxdWVzdCBvYmplY3Qu
ICBKYXZhU2NyaXB0CisvLyBtYXkgYWxzbyBxdWVyeSB0aGUgcmVzcG9uc2VYTUwgYXR0cmlidXRl
IG9mIHRoZSBYTUxIdHRwUmVxdWVzdCBvYmplY3Qgd2hpY2ggcmVzdWx0cyBpbiB0aGUgcmVzcG9u
c2VUZXh0IGF0dHJpYnV0ZSBiZWluZyBjb2VyY2VkIGludG8gYSBXZWJDb3JlOjpTdHJpbmcgYW5k
CisvLyB0aGVuIHBhcnNlZCBhcyBhbiBYTUwgZG9jdW1lbnQuCisvLyBUaGlzIGltcGxlbWVudGF0
aW9uIG9wdGltaXplcyBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHRoZSByZXNwb25zZVRleHQg
aXMgYnVpbHQgdXAgd2l0aCBtYW55IGNhbGxzIHRvIG9wZXJhdG9yKz0gYmVmb3JlIHRoZSBhY3R1
YWwgdGV4dCBpcyBxdWVyaWVkLgorY2xhc3MgU2NyaXB0U3RyaW5nSW1wbCA6IHB1YmxpYyBSZWZD
b3VudGVkPFNjcmlwdFN0cmluZ0ltcGw+IHsKK3B1YmxpYzoKKyAgICBTY3JpcHRTdHJpbmdJbXBs
KCkge30KKyAgICBTY3JpcHRTdHJpbmdJbXBsKGNvbnN0IFN0cmluZyYgcyk7CisgICAgU2NyaXB0
U3RyaW5nSW1wbChjb25zdCBjaGFyKiBzKTsKKworICAgIH5TY3JpcHRTdHJpbmdJbXBsKCk7CisK
KyAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKKworICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7
CisgICAgc2l6ZV90IHNpemUoKSBjb25zdDsKKworICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmlu
ZyYgcyk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4U3RyaW5nSGFuZGxlKCkgeyBy
ZXR1cm4gbV9oYW5kbGU7IH0KKworcHJpdmF0ZToKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6U3Ry
aW5nPiBtX2hhbmRsZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFNjcmlwdFN0cmluZ0ltcGxfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAppbmRleCAzOTEwNWRlLi5jM2U0NjQ1IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9t
LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3Vz
dG9tLmNwcApAQCAtNDYsMTEgKzQ2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBBQ0NFU1NP
Ul9HRVRURVIoWE1MSHR0cFJlcXVlc3RSZXNwb25zZVRleHQpCiB7Ci0gICAgLy8gRklYTUU6IFRo
aXMgaXMgb25seSBuZWVkZWQgYmVjYXVzZSB3ZWJraXQgc2V0IHRoaXMgZ2V0dGVyIGFzIGN1c3Rv
bS4KLSAgICAvLyBTbyB3ZSBuZWVkIGEgY3VzdG9tIG1ldGhvZCB0byBhdm9pZCBmb3JraW5nIHRo
ZSBJREwgZmlsZS4KICAgICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdC5yZXNwb25zZXRl
eHQuX2dldCIpOwogICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6
OlhNTEhUVFBSRVFVRVNULCBpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjhTdHJpbmdPck51
bGwoeG1sSHR0cFJlcXVlc3QtPnJlc3BvbnNlVGV4dCgpKTsKKyAgICByZXR1cm4geG1sSHR0cFJl
cXVlc3QtPnJlc3BvbnNlVGV4dCgpLnY4U3RyaW5nT3JOdWxsKCk7CiB9CiAKIENBTExCQUNLX0ZV
TkNfREVDTChYTUxIdHRwUmVxdWVzdEFkZEV2ZW50TGlzdGVuZXIpCg==
</data>
<flag name="review"
          id="22530"
          type_id="1"
          status="-"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="22531"
          type_id="3"
          status="-"
          setter="jamesr"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41196</attachid>
            <date>2009-10-14 18:26:49 -0700</date>
            <delta_ts>2009-10-19 22:01:45 -0700</delta_ts>
            <desc>Uses OwnHandle&lt;v8::String&gt; instead of a v8::Persistent&lt;v8::String&gt; for management</desc>
            <filename>xhr_patch.diff</filename>
            <type>text/plain</type>
            <size>10954</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
M2VkNGYxNy4uMzM2ZWRlMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAwOS0xMC0xNCAgSmFtZXMgUm9iaW5z
b24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEJldHRlciBpbXBsZW1lbnRhdGlvbiBvZiBXZWJDb3JlOjpTY3Jp
cHRTdHJpbmcgZm9yIHRoZSBWOCBiaW5kaW5ncy4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjk5MDkKKworICAgICAgICBXZWJDb3JlOjpTY3JpcHRT
dHJpbmcgaXMgdXNlZCBmb3IgWE1MSHR0cFJlcXVlc3QncyByZXNwb25zZVRleHQgYXR0cmlidXRl
IHdoaWNoIGlzCisgICAgICAgIHNoYXJlZCB3aXRoIEphdmFTY3JpcHQuICBUaHVzLCBzaW1wbHkg
dXNpbmcgYSBXZWJDb3JlOjpTdHJpbmcgYW5kIGNvcHlpbmcgdGhlIHZhbHVlCisgICAgICAgIGlz
IHByZXR0eSBpbmVmZmljaWVudCwgZXNwZWNpYWxseSBzaW5jZSByZXNwb25zZVRleHQgaXMgYnVp
bHQgdXAgd2l0aCBhIHNlcXVlbmNlIG9mCisgICAgICAgIG9wZXJhdG9yKz0gY2FsbHMuICBKU0Mg
YnVpbGRzIHVzZSBhIEpTQzo6VVN0cmluZyB0byBzaGFyZSB0aGUgYnVmZmVyIHdoZW4gcG9zc2li
bGUsCisgICAgICAgIHRoaXMgcGF0Y2ggYWRvcHRzIGEgc2ltaWxhciBhcHByb2FjaCBmb3IgVjgu
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWhhdmlvciBpcyB1bmNoYW5nZWQgYW5kIGNvdmVy
ZWQgYnkgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdAorCisgICAgICAgICog
V2ViQ29yZS5neXBpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdFN0cmluZy5oOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0U3RyaW5nOjpTY3JpcHRTdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0U3RyaW5nOjpvcGVyYXRvciBTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0U3RyaW5nOjppc051bGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0U3RyaW5nOjpz
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFN0cmluZzo6b3BlcmF0b3I9KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdFN0cmluZzo6b3BlcmF0b3IrPSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRTdHJpbmc6OnY4U3RyaW5nT3JOdWxsKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9T
Y3JpcHRTdHJpbmdJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTdHJp
bmdJbXBsOjpTY3JpcHRTdHJpbmdJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFN0cmlu
Z0ltcGw6On5TY3JpcHRTdHJpbmdJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFN0cmlu
Z0ltcGw6OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFN0cmluZ0ltcGw6Omlz
TnVsbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTdHJpbmdJbXBsOjpzaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdFN0cmluZ0ltcGw6OmFwcGVuZCk6CisgICAgICAgICogYmluZGlu
Z3MvdjgvU2NyaXB0U3RyaW5nSW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dFN0cmluZ0ltcGw6OlNjcmlwdFN0cmluZ0ltcGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
U3RyaW5nSW1wbDo6djhTdHJpbmdIYW5kbGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09S
X0dFVFRFUik6CisKIDIwMDktMTAtMTMgIEdpcmlzaCBSYW1ha3Jpc2huYW4gIDxnaXJpc2hAZm9y
d2FyZGJpYXMuaW4+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCmRpZmYg
LS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4
IGZiYzVlN2QuLmJhNzRmMjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC03NjksNiArNzY5LDggQEAKICAgICAgICAgICAgICdi
aW5kaW5ncy92OC9TY3JpcHRTdGF0ZS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9TY3Jp
cHRTdGF0ZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NjcmlwdFN0cmluZy5oJywK
KyAgICAgICAgICAgICdiaW5kaW5ncy92OC9TY3JpcHRTdHJpbmdJbXBsLmNwcCcsCisgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvU2NyaXB0U3RyaW5nSW1wbC5oJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9TY3JpcHRWYWx1ZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Njcmlw
dFZhbHVlLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5oJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3RyaW5nLmggYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0cmluZy5oCmluZGV4IGZlMjU0YTUuLmIwMTdhMGMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3RyaW5nLmgKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRTdHJpbmcuaApAQCAtMzIsMzQgKzMyLDQxIEBACiAjZGVm
aW5lIFNjcmlwdFN0cmluZ19oCiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1
ZGUgIlNjcmlwdFN0cmluZ0ltcGwuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBTY3JpcHRTdHJpbmcgewogcHVibGljOgotICAgIFNjcmlw
dFN0cmluZygpIHt9Ci0gICAgU2NyaXB0U3RyaW5nKGNvbnN0IFN0cmluZyYgcykgOiBtX3N0cihz
KSB7fQotICAgIFNjcmlwdFN0cmluZyhjb25zdCBjaGFyKiBzKSA6IG1fc3RyKHMpIHt9CisgICAg
U2NyaXB0U3RyaW5nKCkgOiBtX2ltcGwoMCkge30KKyAgICBTY3JpcHRTdHJpbmcoY29uc3QgU3Ry
aW5nJiBzKSA6IG1faW1wbChuZXcgU2NyaXB0U3RyaW5nSW1wbChzKSkge30KKyAgICBTY3JpcHRT
dHJpbmcoY29uc3QgY2hhciogcykgOiBtX2ltcGwobmV3IFNjcmlwdFN0cmluZ0ltcGwocykpIHt9
CiAKLSAgICBvcGVyYXRvciBTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cjsgfQorICAgIG9w
ZXJhdG9yIFN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC0+dG9TdHJpbmcoKTsgfQogCi0g
ICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3N0ci5pc051bGwoKTsgfQotICAgIHNp
emVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdHIubGVuZ3RoKCk7IH0KKyAgICBib29sIGlz
TnVsbCgpIGNvbnN0IHsgcmV0dXJuICFtX2ltcGwuZ2V0KCkgfHwgbV9pbXBsLT5pc051bGwoKTsg
fQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLT5zaXplKCk7IH0KIAog
ICAgIFNjcmlwdFN0cmluZyYgb3BlcmF0b3I9KGNvbnN0IGNoYXIqIHMpCiAgICAgewotICAgICAg
ICBtX3N0ciA9IHM7CisgICAgICAgIG1faW1wbCA9IG5ldyBTY3JpcHRTdHJpbmdJbXBsKHMpOwog
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCiAgICAgU2NyaXB0U3RyaW5nJiBvcGVyYXRv
cis9KGNvbnN0IFN0cmluZyYgcykKICAgICB7Ci0gICAgICAgIG1fc3RyICs9IHM7CisgICAgICAg
IG1faW1wbC0+YXBwZW5kKHMpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCisgICAg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4U3RyaW5nT3JOdWxsKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBpc051bGwoKSA/IHY4OjpIYW5kbGU8djg6OlZhbHVlPih2ODo6TnVsbCgpKSA6
IHY4OjpIYW5kbGU8djg6OlZhbHVlPihtX2ltcGwtPnY4U3RyaW5nSGFuZGxlKCkpOworICAgIH0K
KwogcHJpdmF0ZToKLSAgICBTdHJpbmcgbV9zdHI7CisgICAgUmVmUHRyPFNjcmlwdFN0cmluZ0lt
cGw+IG1faW1wbDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3RyaW5nSW1wbC5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NjcmlwdFN0cmluZ0ltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmFmZTc0YjEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dFN0cmluZ0ltcGwuY3BwCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlNjcmlwdFN0cmluZ0ltcGwuaCIKKworI2luY2x1ZGUgIlY4QmluZGluZy5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NjcmlwdFN0cmluZ0ltcGw6OlNjcmlwdFN0cmlu
Z0ltcGwoY29uc3QgU3RyaW5nJiBzKQoreworICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAg
ICBtX2hhbmRsZS5zZXQodjhTdHJpbmcocykpOworfQorCitTY3JpcHRTdHJpbmdJbXBsOjpTY3Jp
cHRTdHJpbmdJbXBsKGNvbnN0IGNoYXIqIHMpCit7CisgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3Bl
OworICAgIG1faGFuZGxlLnNldCh2ODo6U3RyaW5nOjpOZXcocykpOworfQorCitTdHJpbmcgU2Ny
aXB0U3RyaW5nSW1wbDo6dG9TdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiB2OFN0cmluZ1Rv
V2ViQ29yZVN0cmluZyhtX2hhbmRsZS5nZXQoKSk7Cit9CisKK2Jvb2wgU2NyaXB0U3RyaW5nSW1w
bDo6aXNOdWxsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oYW5kbGUuZ2V0KCkuSXNFbXB0eSgp
OworfQorCitzaXplX3QgU2NyaXB0U3RyaW5nSW1wbDo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1faGFuZGxlLmdldCgpLT5MZW5ndGgoKTsKK30KKwordm9pZCBTY3JpcHRTdHJpbmdJbXBs
OjphcHBlbmQoY29uc3QgU3RyaW5nJiBzKQoreworICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsK
KyAgICBpZiAobV9oYW5kbGUuZ2V0KCkuSXNFbXB0eSgpKQorICAgICAgICBtX2hhbmRsZS5zZXQo
djhTdHJpbmcocykpOworICAgIGVsc2UKKyAgICAgICAgbV9oYW5kbGUuc2V0KHY4OjpTdHJpbmc6
OkNvbmNhdChtX2hhbmRsZS5nZXQoKSwgdjhTdHJpbmcocykpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTdHJpbmdJ
bXBsLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0cmluZ0ltcGwuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmFmMGJhCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRTdHJpbmdJbXBsLmgKQEAgLTAsMCArMSw2OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFNjcmlwdFN0cmluZ0ltcGxfaAorI2RlZmluZSBTY3JpcHRTdHJpbmdJbXBsX2gK
KworI2luY2x1ZGUgIk93bkhhbmRsZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisK
KyNpbmNsdWRlIDx2OC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRoaXMgY2xhc3Mg
aXMgdXNlZCBmb3Igc3RyaW5ncyB0aGF0IHRlbmQgdG8gYmUgc2hhcmVkIHdpdGggSmF2YVNjcmlw
dCBmcmVxdWVudGx5LiAgVGhlIEpTQyBpbXBsZW1lbnRhdGlvbiB1c2VzIHd0Zjo6VVN0cmluZyAt
IHNlZSBiaW5kaW5ncy9qcy9TY3JpcHRTdHJpbmcuaAorLy8gQ3VycmVudGx5IFhNTEh0dHBSZXF1
ZXN0IHVzZXMgYSBTY3JpcHRTdHJpbmcgdG8gYnVpbGQgdXAgdGhlIHJlc3BvbnNlVGV4dCBhdHRy
aWJ1dGUuICBBcyBkYXRhIGFycml2ZXMgZnJvbSB0aGUgbmV0d29yaywgaXQgaXMgYXBwZW5kZWQg
dG8gdGhlIFNjcmlwdFN0cmluZworLy8gdmlhIG9wZXJhdG9yKz0gYW5kIGEgSmF2YVNjcmlwdCBy
ZWFkeXN0YXRlY2hhbmdlIGV2ZW50IGlzIGZpcmVkLiAgSmF2YVNjcmlwdCBjYW4gYWNjZXNzIHRo
ZSByZXNwb25zZVRleHQgYXR0cmlidXRlIG9mIHRoZSBYTUxIdHRwUmVxdWVzdCBvYmplY3QuICBK
YXZhU2NyaXB0CisvLyBtYXkgYWxzbyBxdWVyeSB0aGUgcmVzcG9uc2VYTUwgYXR0cmlidXRlIG9m
IHRoZSBYTUxIdHRwUmVxdWVzdCBvYmplY3Qgd2hpY2ggcmVzdWx0cyBpbiB0aGUgcmVzcG9uc2VU
ZXh0IGF0dHJpYnV0ZSBiZWluZyBjb2VyY2VkIGludG8gYSBXZWJDb3JlOjpTdHJpbmcgYW5kCisv
LyB0aGVuIHBhcnNlZCBhcyBhbiBYTUwgZG9jdW1lbnQuCisvLyBUaGlzIGltcGxlbWVudGF0aW9u
IG9wdGltaXplcyBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHRoZSByZXNwb25zZVRleHQgaXMg
YnVpbHQgdXAgd2l0aCBtYW55IGNhbGxzIHRvIG9wZXJhdG9yKz0gYmVmb3JlIHRoZSBhY3R1YWwg
dGV4dCBpcyBxdWVyaWVkLgorY2xhc3MgU2NyaXB0U3RyaW5nSW1wbCA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFNjcmlwdFN0cmluZ0ltcGw+IHsKK3B1YmxpYzoKKyAgICBTY3JpcHRTdHJpbmdJbXBsKCkg
e30KKyAgICBTY3JpcHRTdHJpbmdJbXBsKGNvbnN0IFN0cmluZyYgcyk7CisgICAgU2NyaXB0U3Ry
aW5nSW1wbChjb25zdCBjaGFyKiBzKTsKKworICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0Owor
CisgICAgYm9vbCBpc051bGwoKSBjb25zdDsKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0OworCisg
ICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBzKTsKKworICAgIHY4OjpIYW5kbGU8djg6OlN0
cmluZz4gdjhTdHJpbmdIYW5kbGUoKSB7IHJldHVybiBtX2hhbmRsZS5nZXQoKTsgfQorCitwcml2
YXRlOgorICAgIE93bkhhbmRsZTx2ODo6U3RyaW5nPiBtX2hhbmRsZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNjcmlwdFN0cmluZ0ltcGxfaApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcApp
bmRleCAzOTEwNWRlLi5jM2U0NjQ1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcApAQCAtNDYsMTEgKzQ2LDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBBQ0NFU1NPUl9HRVRURVIoWE1MSHR0cFJlcXVlc3RSZXNwb25z
ZVRleHQpCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgb25seSBuZWVkZWQgYmVjYXVzZSB3ZWJr
aXQgc2V0IHRoaXMgZ2V0dGVyIGFzIGN1c3RvbS4KLSAgICAvLyBTbyB3ZSBuZWVkIGEgY3VzdG9t
IG1ldGhvZCB0byBhdm9pZCBmb3JraW5nIHRoZSBJREwgZmlsZS4KICAgICBJTkNfU1RBVFMoIkRP
TS5YTUxIdHRwUmVxdWVzdC5yZXNwb25zZXRleHQuX2dldCIpOwogICAgIFhNTEh0dHBSZXF1ZXN0
KiB4bWxIdHRwUmVxdWVzdCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhN
TEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBpbmZvLkhvbGRlcigp
KTsKLSAgICByZXR1cm4gdjhTdHJpbmdPck51bGwoeG1sSHR0cFJlcXVlc3QtPnJlc3BvbnNlVGV4
dCgpKTsKKyAgICByZXR1cm4geG1sSHR0cFJlcXVlc3QtPnJlc3BvbnNlVGV4dCgpLnY4U3RyaW5n
T3JOdWxsKCk7CiB9CiAKIENBTExCQUNLX0ZVTkNfREVDTChYTUxIdHRwUmVxdWVzdEFkZEV2ZW50
TGlzdGVuZXIpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>