<?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>22448</bug_id>
          
          <creation_ts>2008-11-24 01:11:30 -0800</creation_ts>
          <short_desc>Create an abstraction for JSC::SourceCode</short_desc>
          <delta_ts>2008-11-24 15:28:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</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="Darin Fisher (:fishd, Google)">fishd</reporter>
          <assigned_to name="Darin Fisher (:fishd, Google)">fishd</assigned_to>
          <cc>mrowe</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>99908</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2008-11-24 01:11:30 -0800</bug_when>
    <thetext>Create an abstraction for JSC::SourceCode

FrameLoader::executeScript was modified to take a JSC::SourceCode parameter.  I propose defining a ScriptSourceCode class in bindings/js that is a thin wrapper around JSC::SourceCode.  This will allow us to abstract away JSC dependencies within a number of WebCore files, including FrameLoader.cpp, which will make it easier to support V8.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99914</commentid>
    <comment_count>1</comment_count>
      <attachid>25418</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2008-11-24 01:50:58 -0800</bug_when>
    <thetext>Created attachment 25418
v1 patch

Hi Sam, since you introduced JSC::SourceCode into WebCore, I thought I should ask you to review this change.

From the JSC perspective, I think this change is nice because it means that you only need to include one header file (ScriptSourceCode.h) in order to get at the two different ways of calling makeSource.  I&apos;m curious to know what you think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99915</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2008-11-24 01:51:44 -0800</bug_when>
    <thetext>(I will add corresponding XCode project changes if everything else looks good.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99917</commentid>
    <comment_count>3</comment_count>
      <attachid>25419</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2008-11-24 02:22:06 -0800</bug_when>
    <thetext>Created attachment 25419
v2 patch

It turns out that more files were affected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99985</commentid>
    <comment_count>4</comment_count>
      <attachid>25433</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2008-11-24 10:27:06 -0800</bug_when>
    <thetext>Created attachment 25433
v2.1 patch - now with xcode changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100015</commentid>
    <comment_count>5</comment_count>
      <attachid>25433</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-11-24 12:29:36 -0800</bug_when>
    <thetext>Comment on attachment 25433
v2.1 patch - now with xcode changes

&gt; +++ bindings/js/ScriptController.cpp	(working copy)
&gt; @@ -38,6 +38,7 @@
&gt;  #include &quot;PageGroup.h&quot;
&gt;  #include &quot;PausedTimeouts.h&quot;
&gt;  #include &quot;runtime_root.h&quot;
&gt; +#include &quot;ScriptSourceCode.h&quot;
&gt;  #include &quot;ScriptValue.h&quot;
&gt;  #include &quot;Settings.h&quot;
&gt;  #include &quot;StringSourceProvider.h&quot;
This include can be removed.

&gt; @@ -0,0 +1,58 @@
&gt; +/*
&gt; + * Copyright (c) 2008, Google Inc.
&gt; + * All rights reserved.
You probably want the All rights reserved on the same line.

&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +class ScriptSourceCode {
&gt; +public:
&gt; +    ScriptSourceCode(const String&amp; source, const KURL&amp; url = KURL(), int startLine = 1)
&gt; +        : m_code(makeSource(source, url.isNull() ? String() : url.string(), startLine)) {}
&gt; +    ScriptSourceCode(CachedScript* cs)
&gt; +        : m_code(makeSource(cs)) {}
I like the braces to be on there own lines like.

+    ScriptSourceCode(const String&amp; source, const KURL&amp; url = KURL(), int startLine = 1)
+        : m_code(makeSource(source, url.isNull() ? String() : url.string(), startLine))
+    {
+    }



&gt; +
&gt; +    int length() const { return m_code.length(); }
Since the only use of this is for a null check, perhaps we can rename this to isEmpty().

&gt; +
&gt; +    const JSC::SourceCode&amp; jsSourceCode() const { return m_code; }
&gt; +
&gt; +private:
&gt; +    JSC::SourceCode m_code;
&gt; +};
&gt; +
&gt; +} // namespace WebCore
&gt; +
&gt; +#endif // ScriptSourceCode_h
&gt; Index: bindings/js/WorkerScriptController.cpp
&gt; ===================================================================
&gt; --- bindings/js/WorkerScriptController.cpp	(revision 38710)
&gt; +++ bindings/js/WorkerScriptController.cpp	(working copy)
&gt; @@ -32,6 +32,8 @@
&gt;  
&gt;  #include &quot;JSDOMBinding.h&quot;
&gt;  #include &quot;JSWorkerContext.h&quot;
&gt; +#include &quot;ScriptSourceCode.h&quot;
&gt; +#include &quot;ScriptValue.h&quot;
&gt;  #include &quot;WorkerContext.h&quot;
&gt;  #include &quot;WorkerMessagingProxy.h&quot;
&gt;  #include &quot;WorkerThread.h&quot;
Presumably you can remove the #include &lt;parser/SourceCode.h&gt;

&gt; Index: dom/ScriptElement.cpp
&gt; ===================================================================
&gt; --- dom/ScriptElement.cpp	(revision 38710)
&gt; +++ dom/ScriptElement.cpp	(working copy)
&gt; @@ -25,21 +25,19 @@
&gt;  #include &quot;ScriptElement.h&quot;
&gt;  
&gt;  #include &quot;CachedScript.h&quot;
&gt; -#include &quot;CachedScriptSourceProvider.h&quot;
&gt;  #include &quot;DocLoader.h&quot;
&gt;  #include &quot;Document.h&quot;
&gt;  #include &quot;Frame.h&quot;
&gt;  #include &quot;FrameLoader.h&quot;
&gt;  #include &quot;MIMETypeRegistry.h&quot;
&gt;  #include &quot;ScriptController.h&quot;
&gt; +#include &quot;ScriptSourceCode.h&quot;
&gt;  #include &quot;ScriptValue.h&quot;
&gt;  #include &quot;StringHash.h&quot;
&gt;  #include &quot;StringSourceProvider.h&quot;
Can we remove this #include too?

&gt; +++ dom/WorkerThread.cpp	(working copy)
&gt; @@ -31,14 +31,13 @@
&gt;  #include &quot;WorkerThread.h&quot;
&gt;  
&gt;  #include &quot;JSWorkerContext.h&quot;
&gt; -#include &quot;StringSourceProvider.h&quot;
&gt; +#include &quot;ScriptSourceCode.h&quot;
&gt; +#include &quot;ScriptValue.h&quot;
Why is this include necessary?

&gt;  namespace WebCore {
&gt;  
&gt;  PassRefPtr&lt;WorkerThread&gt; WorkerThread::create(const KURL&amp; scriptURL, const String&amp; sourceCode, WorkerMessagingProxy* messagingProxy)

In the WorkerThread constructor we still have the line 
    , m_scriptURL(scriptURL.string().copy())

perhaps, we should add a KURL::copy() method to avoid reparsing.

&gt; +++ dom/XMLTokenizer.cpp	(working copy)
&gt; @@ -48,6 +48,7 @@
&gt;  #include &quot;ResourceRequest.h&quot;
&gt;  #include &quot;ResourceResponse.h&quot;
&gt;  #include &quot;ScriptController.h&quot;
&gt; +#include &quot;ScriptSourceCode.h&quot;
&gt;  #include &quot;ScriptValue.h&quot;
&gt;  #include &quot;StringSourceProvider.h&quot;
&gt;  #include &quot;TextResourceDecoder.h&quot;
You can remove #include &quot;CachedScriptSourceProvider.h&quot; here.

&gt; +++ loader/FrameLoader.cpp	(working copy)
&gt; @@ -80,6 +80,7 @@
&gt;  #include &quot;ResourceHandle.h&quot;
&gt;  #include &quot;ResourceRequest.h&quot;
&gt;  #include &quot;ScriptController.h&quot;
&gt; +#include &quot;ScriptSourceCode.h&quot;
&gt;  #include &quot;ScriptValue.h&quot;
&gt;  #include &quot;SecurityOrigin.h&quot;
&gt;  #include &quot;SegmentedString.h&quot;
You can remove #include &quot;StringSourceProvider.h&quot; here.

r=me, but please consider some of these changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100022</commentid>
    <comment_count>6</comment_count>
      <attachid>25433</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-11-24 12:54:28 -0800</bug_when>
    <thetext>Comment on attachment 25433
v2.1 patch - now with xcode changes

&gt; Index: bindings/js/ScriptSourceCode.h
&gt; ===================================================================
&gt; --- bindings/js/ScriptSourceCode.h	(revision 0)
&gt; +++ bindings/js/ScriptSourceCode.h	(revision 0)
&gt; @@ -0,0 +1,58 @@
&gt; +/*
&gt; + * Copyright (c) 2008, Google Inc.
&gt; + * All rights reserved.
&gt; + * 
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions are
&gt; + * met:
&gt; + * 
&gt; + *     * Redistributions of source code must retain the above copyright
&gt; + * notice, this list of conditions and the following disclaimer.
&gt; + *     * Redistributions in binary form must reproduce the above
&gt; + * copyright notice, this list of conditions and the following disclaimer
&gt; + * in the documentation and/or other materials provided with the
&gt; + * distribution.
&gt; + *     * Neither the name of Google Inc. nor the names of its
&gt; + * contributors may be used to endorse or promote products derived from
&gt; + * this software without specific prior written permission.
&gt; + * 
&gt; + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
&gt; + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
&gt; + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
&gt; + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
&gt; + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
&gt; + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
&gt; + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
&gt; + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
&gt; + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
&gt; + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */

This license header looks a little bit untidy.  Can we please move the &quot;All rights reserved&quot; onto the same line as the copyright notice and fix the indentation of the list.  See &lt;http://trac.webkit.org/browser/trunk/JavaScriptCore/wtf/Threading.h#L1&gt; for a tidier interpretation.

I&apos;m not entirely sure that the third clause of the license makes sense in this context either: what exactly is a contributor to Google Inc.?  You may want to consider using the two-clause license, which is what Apple uses for new WebKit code such as in &lt;http://trac.webkit.org/browser/trunk/WebCore/storage/Storage.h#L1&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100030</commentid>
    <comment_count>7</comment_count>
      <attachid>25443</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2008-11-24 13:14:23 -0800</bug_when>
    <thetext>Created attachment 25443
v2.2 patch - revised per review

Revised per review feedback.  Nothing exciting.  I will add KURL::copy() in a separate change list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100036</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2008-11-24 13:20:48 -0800</bug_when>
    <thetext>Thanks for the observations Mark.  I will get back to you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100077</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2008-11-24 15:09:02 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/38729

As discussed on #webkit with bdash, I will revise the license headers in a separate change list (so that I can update all of them together) once I have had a chance to figure out what the header should change to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100085</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2008-11-24 15:28:40 -0800</bug_when>
    <thetext>Qt build bustage fixed:
http://trac.webkit.org/changeset/38731
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25418</attachid>
            <date>2008-11-24 01:50:58 -0800</date>
            <delta_ts>2008-11-24 02:22:06 -0800</delta_ts>
            <desc>v1 patch</desc>
            <filename>ssc_1.diff</filename>
            <type>text/plain</type>
            <size>18269</size>
            <attacher name="Darin Fisher (:fishd, Google)">fishd</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM4Njk5
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMDgtMTEt
MjQgIERhcmluIEZpc2hlciAgPGRhcmluQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI0NDgKKyAgICAgICAgQ3JlYXRlIGFuIGFic3RyYWN0aW9uIGZvciBK
U0M6OlNvdXJjZUNvZGUKKworICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0NhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmg6Cisg
ICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMv
U2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNv
ZGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2RlOjpTY3JpcHRT
b3VyY2VDb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFNvdXJjZUNvZGU6Omxlbmd0aCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2RlOjpqc1NvdXJjZUNvZGUpOgorICAg
ICAgICAqIGRvbS9TY3JpcHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVs
ZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVs
ZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50
RGF0YTo6ZXZhbHVhdGVTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudERh
dGE6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKiBkb20vU2NyaXB0RWxlbWVudC5oOgorICAg
ICAgICAqIGRvbS9YTUxUb2tlbml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW5p
emVyOjpub3RpZnlGaW5pc2hlZCk6CisgICAgICAgICogZG9tL1hNTFRva2VuaXplckxpYnhtbDIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW5pemVyOjplbmRFbGVtZW50TnMpOgorICAg
ICAgICAqIGh0bWwvSFRNTFRva2VuaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVG9r
ZW5pemVyOjpzY3JpcHRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6
OnNjcmlwdEV4ZWN1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpub3Rp
ZnlGaW5pc2hlZCk6CisgICAgICAgICogaHRtbC9IVE1MVG9rZW5pemVyLmg6CisgICAgICAgICog
bG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpl
eGVjdXRlU2NyaXB0KToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuaDoKKwogMjAwOC0x
MS0yMiAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlz
aW9uIDM4Njk5KQorKysgV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTEzODgxLDYgKzEzODgxLDEwIEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8
RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xTY3JpcHRTb3VyY2VDb2Rl
LmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0
aD0iLi5cYmluZGluZ3NcanNcU2NyaXB0U3RyaW5nLmgiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4N
CkluZGV4OiBiaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGJpbmRpbmdzL2pzL0NhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmgJKHJldmlzaW9u
IDM4Njk5KQorKysgYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VD
bGllbnQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIkNh
Y2hlZFNjcmlwdC5oIgogI2luY2x1ZGUgPHBhcnNlci9Tb3VyY2VDb2RlLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKSW5kZXg6IGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAzODY5
OSkKKysrIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiUGF1c2Vk
VGltZW91dHMuaCIKICNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKKyNpbmNsdWRlICJTY3JpcHRT
b3VyY2VDb2RlLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJTZXR0aW5n
cy5oIgogI2luY2x1ZGUgIlN0cmluZ1NvdXJjZVByb3ZpZGVyLmgiCkBAIC04OCwxMCArODksMTIg
QEAgU2NyaXB0Q29udHJvbGxlcjo6flNjcmlwdENvbnRyb2xsZXIoKQogICAgIGRpc2Nvbm5lY3RQ
bGF0Zm9ybVNjcmlwdE9iamVjdHMoKTsKIH0KIAotU2NyaXB0VmFsdWUgU2NyaXB0Q29udHJvbGxl
cjo6ZXZhbHVhdGUoY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKSAKK1NjcmlwdFZh
bHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNv
dXJjZUNvZGUpIAogewogICAgIC8vIGV2YWx1YXRlIGNvZGUuIFJldHVybnMgdGhlIEpTIHJldHVy
biB2YWx1ZSBvciAwCiAgICAgLy8gaWYgdGhlcmUgd2FzIG5vbmUsIGFuIGVycm9yIG9jY3VyZWQg
b3IgdGhlIHR5cGUgY291bGRuJ3QgYmUgY29udmVydGVkLgorICAgIAorICAgIGNvbnN0IFNvdXJj
ZUNvZGUmIGpzU291cmNlQ29kZSA9IHNvdXJjZUNvZGUuanNTb3VyY2VDb2RlKCk7CiAKICAgICBp
bml0U2NyaXB0SWZOZWVkZWQoKTsKICAgICAvLyBpbmxpbmVDb2RlIGlzIHRydWUgZm9yIDxhIGhy
ZWY9ImphdmFzY3JpcHQ6ZG9Tb21ldGhpbmcoKSI+CkBAIC0xMDAsNyArMTAzLDcgQEAgU2NyaXB0
VmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoYwogICAgIC8vIFNlZSBzbWFydCB3aW5k
b3cub3BlbiBwb2xpY3kgZm9yIHdoZXJlIHRoaXMgaXMgdXNlZC4KICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSBtX3dpbmRvd1NoZWxsLT53aW5kb3coKS0+Z2xvYmFsRXhlYygpOwogICAgIGNvbnN0IFN0
cmluZyogc2F2ZWRTb3VyY2VVUkwgPSBtX3NvdXJjZVVSTDsKLSAgICBTdHJpbmcgc291cmNlVVJM
ID0gc291cmNlQ29kZS5wcm92aWRlcigpLT51cmwoKTsKKyAgICBTdHJpbmcgc291cmNlVVJMID0g
anNTb3VyY2VDb2RlLnByb3ZpZGVyKCktPnVybCgpOwogICAgIG1fc291cmNlVVJMID0gJnNvdXJj
ZVVSTDsKIAogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKQEAgLTExMCw3ICsxMTMsNyBAQCBTY3Jp
cHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjCiAgICAgbV9mcmFtZS0+a2VlcEFs
aXZlKCk7CiAKICAgICBtX3dpbmRvd1NoZWxsLT53aW5kb3coKS0+c3RhcnRUaW1lb3V0Q2hlY2so
KTsKLSAgICBDb21wbGV0aW9uIGNvbXAgPSBKU0M6OmV2YWx1YXRlKGV4ZWMsIGV4ZWMtPmR5bmFt
aWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBzb3VyY2VDb2RlLCBtX3dpbmRv
d1NoZWxsKTsKKyAgICBDb21wbGV0aW9uIGNvbXAgPSBKU0M6OmV2YWx1YXRlKGV4ZWMsIGV4ZWMt
PmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBqc1NvdXJjZUNvZGUs
IG1fd2luZG93U2hlbGwpOwogICAgIG1fd2luZG93U2hlbGwtPndpbmRvdygpLT5zdG9wVGltZW91
dENoZWNrKCk7CiAKICAgICBpZiAoY29tcC5jb21wbFR5cGUoKSA9PSBOb3JtYWwgfHwgY29tcC5j
b21wbFR5cGUoKSA9PSBSZXR1cm5WYWx1ZSkgewpJbmRleDogYmluZGluZ3MvanMvU2NyaXB0Q29u
dHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAko
cmV2aXNpb24gMzg2OTkpCisrKyBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAgc3RydWN0IE5QT2JqZWN0OwogCiBuYW1lc3BhY2Ug
SlNDIHsKICAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKLSAgICBjbGFzcyBTb3VyY2VDb2RlOwog
CiAgICAgbmFtZXNwYWNlIEJpbmRpbmdzIHsKICAgICAgICAgY2xhc3MgSW5zdGFuY2U7CkBAIC01
NSw2ICs1NCw3IEBAIGNsYXNzIEV2ZW50TGlzdGVuZXI7CiBjbGFzcyBIVE1MUGx1Z0luRWxlbWVu
dDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgTm9kZTsKK2NsYXNzIFNjcmlwdFNvdXJjZUNvZGU7CiBj
bGFzcyBTY3JpcHRWYWx1ZTsKIGNsYXNzIFN0cmluZzsKIGNsYXNzIFdpZGdldDsKQEAgLTc5LDcg
Kzc5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV93aW5kb3dTaGVsbC0+d2luZG93KCk7
CiAgICAgfQogCi0gICAgU2NyaXB0VmFsdWUgZXZhbHVhdGUoY29uc3QgSlNDOjpTb3VyY2VDb2Rl
Jik7CisgICAgU2NyaXB0VmFsdWUgZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYpOwog
CiAgICAgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBjcmVhdGVJbmxpbmVFdmVudExpc3RlbmVy
KGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIGNvZGUsIE5vZGUqKTsK
ICNpZiBFTkFCTEUoU1ZHKQpJbmRleDogYmluZGluZ3MvanMvU2NyaXB0U291cmNlQ29kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNvZGUuaAkocmV2aXNpb24gMCkK
KysrIGJpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNvZGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgR29vZ2xlIEluYy4KKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JpcHRTb3VyY2VDb2RlX2gKKyNkZWZpbmUgU2NyaXB0
U291cmNlQ29kZV9oCisKKyNpbmNsdWRlICJDYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oIgor
I2luY2x1ZGUgIktVUkwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JpcHRT
b3VyY2VDb2RlIHsKK3B1YmxpYzoKKyAgICBTY3JpcHRTb3VyY2VDb2RlKGNvbnN0IFN0cmluZyYg
c291cmNlLCBjb25zdCBLVVJMJiB1cmwgPSBLVVJMKCksIGludCBzdGFydExpbmUgPSAxKQorICAg
ICAgICA6IG1fY29kZShKU0M6Om1ha2VTb3VyY2Uoc291cmNlLCB1cmwuaXNOdWxsKCkgPyBTdHJp
bmcoKSA6IHVybC5zdHJpbmcoKSwgc3RhcnRMaW5lKSkge30KKyAgICBTY3JpcHRTb3VyY2VDb2Rl
KENhY2hlZFNjcmlwdCogY3MpCisgICAgICAgIDogbV9jb2RlKG1ha2VTb3VyY2UoY3MpKSB7fQor
CisgICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZS5sZW5ndGgoKTsgfQorCisg
ICAgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBqc1NvdXJjZUNvZGUoKSBjb25zdCB7IHJldHVybiBt
X2NvZGU7IH0KKworcHJpdmF0ZToKKyAgICBKU0M6OlNvdXJjZUNvZGUgbV9jb2RlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2NyaXB0U291cmNlQ29kZV9oCklu
ZGV4OiBkb20vU2NyaXB0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL1NjcmlwdEVsZW1l
bnQuY3BwCShyZXZpc2lvbiAzODY5OSkKKysrIGRvbS9TY3JpcHRFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsMjEgKzI1LDE5IEBACiAjaW5jbHVkZSAiU2NyaXB0RWxlbWVudC5oIgog
CiAjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCi0jaW5jbHVkZSAiQ2FjaGVkU2NyaXB0U291cmNl
UHJvdmlkZXIuaCIKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRl
ICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgorI2lu
Y2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2lu
Y2x1ZGUgIlN0cmluZ0hhc2guaCIKICNpbmNsdWRlICJTdHJpbmdTb3VyY2VQcm92aWRlci5oIgog
I2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKLXVzaW5n
IG5hbWVzcGFjZSBKU0M7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBTY3JpcHRFbGVt
ZW50OjppbnNlcnRlZEludG9Eb2N1bWVudChTY3JpcHRFbGVtZW50RGF0YSYgZGF0YSwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VVcmwpCkBAIC01NSw3ICs1Myw3IEBAIHZvaWQgU2NyaXB0RWxlbWVudDo6
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQKICAgICAvLyBJZiB0aGVyZSdzIGFuIGVtcHR5IHNjcmlwdCBu
b2RlLCB3ZSBzaG91bGRuJ3QgZXZhbHVhdGUgdGhlIHNjcmlwdAogICAgIC8vIGJlY2F1c2UgaWYg
YSBzY3JpcHQgaXMgaW5zZXJ0ZWQgYWZ0ZXJ3YXJkcyAoYnkgc2V0dGluZyB0ZXh0IG9yIGlubmVy
VGV4dCkKICAgICAvLyBpdCBzaG91bGQgYmUgZXZhbHVhdGVkLCBhbmQgZXZhbHVhdGVTY3JpcHQg
b25seSBldmFsdWF0ZXMgYSBzY3JpcHQgb25jZS4KLSAgICBkYXRhLmV2YWx1YXRlU2NyaXB0KG1h
a2VTb3VyY2UoZGF0YS5zY3JpcHRDb250ZW50KCksIGRhdGEuZWxlbWVudCgpLT5kb2N1bWVudCgp
LT51cmwoKS5zdHJpbmcoKSkpOyAvLyBGSVhNRTogUHJvdmlkZSBhIHJlYWwgc3RhcnRpbmcgbGlu
ZSBudW1iZXIgaGVyZS4KKyAgICBkYXRhLmV2YWx1YXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUo
ZGF0YS5zY3JpcHRDb250ZW50KCksIGRhdGEuZWxlbWVudCgpLT5kb2N1bWVudCgpLT51cmwoKSkp
OyAvLyBGSVhNRTogUHJvdmlkZSBhIHJlYWwgc3RhcnRpbmcgbGluZSBudW1iZXIgaGVyZS4KIH0K
IAogdm9pZCBTY3JpcHRFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KFNjcmlwdEVsZW1lbnRE
YXRhJiBkYXRhKQpAQCAtNzUsNyArNzMsNyBAQCB2b2lkIFNjcmlwdEVsZW1lbnQ6OmNoaWxkcmVu
Q2hhbmdlZChTY3JpCiAgICAgLy8gYW5kIHRoZSBzY3JpcHQgZWxlbWVudCBoYXMgYmVlbiBpbnNl
cnRlZCBpbiB0aGUgZG9jdW1lbnQKICAgICAvLyB3ZSBldmFsdWF0ZSB0aGUgc2NyaXB0LgogICAg
IGlmIChlbGVtZW50LT5pbkRvY3VtZW50KCkgJiYgZWxlbWVudC0+Zmlyc3RDaGlsZCgpKQotICAg
ICAgICBkYXRhLmV2YWx1YXRlU2NyaXB0KG1ha2VTb3VyY2UoZGF0YS5zY3JpcHRDb250ZW50KCks
IGVsZW1lbnQtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKSk7IC8vIEZJWE1FOiBQcm92aWRl
IGEgcmVhbCBzdGFydGluZyBsaW5lIG51bWJlciBoZXJlCisgICAgICAgIGRhdGEuZXZhbHVhdGVT
Y3JpcHQoU2NyaXB0U291cmNlQ29kZShkYXRhLnNjcmlwdENvbnRlbnQoKSwgZWxlbWVudC0+ZG9j
dW1lbnQoKS0+dXJsKCkpKTsgLy8gRklYTUU6IFByb3ZpZGUgYSByZWFsIHN0YXJ0aW5nIGxpbmUg
bnVtYmVyIGhlcmUKIH0KIAogdm9pZCBTY3JpcHRFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRy
ZW4oU2NyaXB0RWxlbWVudERhdGEmIGRhdGEsIGNvbnN0IFN0cmluZyYgc291cmNlVXJsKQpAQCAt
MTYyLDcgKzE2MCw3IEBAIHZvaWQgU2NyaXB0RWxlbWVudERhdGE6OnJlcXVlc3RTY3JpcHQoY28K
ICAgICBtX3NjcmlwdEVsZW1lbnQtPmRpc3BhdGNoRXJyb3JFdmVudCgpOwogfQogCi12b2lkIFNj
cmlwdEVsZW1lbnREYXRhOjpldmFsdWF0ZVNjcmlwdChjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlKQordm9pZCBTY3JpcHRFbGVtZW50RGF0YTo6ZXZhbHVhdGVTY3JpcHQoY29uc3QgU2NyaXB0
U291cmNlQ29kZSYgc291cmNlQ29kZSkKIHsKICAgICBpZiAobV9ldmFsdWF0ZWQgfHwgIXNvdXJj
ZUNvZGUubGVuZ3RoKCkgfHwgIXNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTk4LDcgKzE5Niw3IEBAIHZvaWQgU2NyaXB0RWxlbWVudERhdGE6Om5vdGlm
eUZpbmlzaGVkKEMKICAgICBpZiAoY3MtPmVycm9yT2NjdXJyZWQoKSkKICAgICAgICAgbV9zY3Jp
cHRFbGVtZW50LT5kaXNwYXRjaEVycm9yRXZlbnQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgZXZh
bHVhdGVTY3JpcHQobWFrZVNvdXJjZShjcykpOworICAgICAgICBldmFsdWF0ZVNjcmlwdChTY3Jp
cHRTb3VyY2VDb2RlKGNzKSk7CiAgICAgICAgIG1fc2NyaXB0RWxlbWVudC0+ZGlzcGF0Y2hMb2Fk
RXZlbnQoKTsKICAgICB9CiAKSW5kZXg6IGRvbS9TY3JpcHRFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gZG9tL1NjcmlwdEVsZW1lbnQuaAkocmV2aXNpb24gMzg2OTkpCisrKyBkb20vU2NyaXB0RWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxNSArMjQsMTIgQEAKICNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCiAK
LW5hbWVzcGFjZSBKU0MgewotICAgIGNsYXNzIFNvdXJjZUNvZGU7Ci19Ci0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgQ2FjaGVkU2NyaXB0OwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIFNj
cmlwdEVsZW1lbnREYXRhOworY2xhc3MgU2NyaXB0U291cmNlQ29kZTsKIAogY2xhc3MgU2NyaXB0
RWxlbWVudCB7CiBwdWJsaWM6CkBAIC04MSw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dEhhdmVGaXJlZExvYWRFdmVudChib29sIGZpcmVkTG9hZCkgeyBtX2ZpcmVkTG9hZCA9IGZpcmVk
TG9hZDsgfQogCiAgICAgdm9pZCByZXF1ZXN0U2NyaXB0KGNvbnN0IFN0cmluZyYgc291cmNlVXJs
KTsKLSAgICB2b2lkIGV2YWx1YXRlU2NyaXB0KGNvbnN0IEpTQzo6U291cmNlQ29kZSYpOworICAg
IHZvaWQgZXZhbHVhdGVTY3JpcHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYpOwogICAgIHZvaWQg
c3RvcExvYWRSZXF1ZXN0KCk7CiAKIHByaXZhdGU6CkluZGV4OiBkb20vWE1MVG9rZW5pemVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBkb20vWE1MVG9rZW5pemVyLmNwcAkocmV2aXNpb24gMzg2OTkpCisr
KyBkb20vWE1MVG9rZW5pemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQAog
I2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2Uu
aCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiU2NyaXB0U291cmNl
Q29kZS5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiU3RyaW5nU291cmNl
UHJvdmlkZXIuaCIKICNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCkBAIC0zMjYsNyAr
MzI3LDcgQEAgdm9pZCBYTUxUb2tlbml6ZXI6Om5vdGlmeUZpbmlzaGVkKENhY2hlZAogICAgIEFT
U0VSVChtX3BlbmRpbmdTY3JpcHQgPT0gZmluaXNoZWRPYmopOwogICAgIEFTU0VSVChtX3BlbmRp
bmdTY3JpcHQtPmFjY2Vzc0NvdW50KCkgPiAwKTsKICAgICAgICAgCi0gICAgSlNDOjpTb3VyY2VD
b2RlIHNvdXJjZUNvZGUgPSBtYWtlU291cmNlKG1fcGVuZGluZ1NjcmlwdC5nZXQoKSk7CisgICAg
U2NyaXB0U291cmNlQ29kZSBzb3VyY2VDb2RlKG1fcGVuZGluZ1NjcmlwdC5nZXQoKSk7CiAgICAg
Ym9vbCBlcnJvck9jY3VycmVkID0gbV9wZW5kaW5nU2NyaXB0LT5lcnJvck9jY3VycmVkKCk7CiAK
ICAgICBtX3BlbmRpbmdTY3JpcHQtPnJlbW92ZUNsaWVudCh0aGlzKTsKSW5kZXg6IGRvbS9YTUxU
b2tlbml6ZXJMaWJ4bWwyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vWE1MVG9rZW5pemVyTGlieG1s
Mi5jcHAJKHJldmlzaW9uIDM4Njk5KQorKysgZG9tL1hNTFRva2VuaXplckxpYnhtbDIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0Nyw4IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25z
ZS5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTY3JpcHRFbGVt
ZW50LmgiCisjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgogI2luY2x1ZGUgIlNjcmlwdFZh
bHVlLmgiCi0jaW5jbHVkZSAiU3RyaW5nU291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlICJUZXh0
UmVzb3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgogI2luY2x1ZGUg
PGxpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaD4KQEAgLTgwNyw3ICs4MDcsNyBAQCB2b2lkIFhNTFRv
a2VuaXplcjo6ZW5kRWxlbWVudE5zKCkKICAgICAgICAgICAgIH0gZWxzZSAKICAgICAgICAgICAg
ICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1f
dmlldy0+ZnJhbWUoKS0+bG9hZGVyKCktPmV4ZWN1dGVTY3JpcHQobWFrZVNvdXJjZShzY3JpcHRF
bGVtZW50LT5zY3JpcHRDb250ZW50KCksIG1fZG9jLT51cmwoKS5zdHJpbmcoKSwgbV9zY3JpcHRT
dGFydExpbmUpKTsKKyAgICAgICAgICAgIG1fdmlldy0+ZnJhbWUoKS0+bG9hZGVyKCktPmV4ZWN1
dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCks
IG1fZG9jLT51cmwoKSwgbV9zY3JpcHRTdGFydExpbmUpKTsKIAogICAgICAgICBtX3JlcXVlc3Rp
bmdTY3JpcHQgPSBmYWxzZTsKICAgICB9CkluZGV4OiBodG1sL0hUTUxUb2tlbml6ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGh0bWwvSFRNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDM4Njk5KQorKysg
aHRtbC9IVE1MVG9rZW5pemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAog
I2luY2x1ZGUgIkNTU0hlbHBlci5oIgogI2luY2x1ZGUgIkNhY2hlLmgiCiAjaW5jbHVkZSAiQ2Fj
aGVkU2NyaXB0LmgiCi0jaW5jbHVkZSAiQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIuaCIKICNp
bmNsdWRlICJEb2NMb2FkZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgpAQCAtNDUsOCArNDQsOCBAQAogI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJQcmVsb2FkU2Nhbm5lci5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIu
aCIKKyNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUu
aCIKLSNpbmNsdWRlICJTdHJpbmdTb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIlN5c3RlbVRp
bWUuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogCkBAIC01NSw3ICs1NCw2IEBACiAj
ZGVmaW5lIFBSRUxPQURfU0NBTk5FUl9FTkFCTEVEIDEKIC8vICNkZWZpbmUgSU5TVFJVTUVOVF9M
QVlPVVRfU0NIRURVTElORyAxCiAKLXVzaW5nIG5hbWVzcGFjZSBKU0M7CiB1c2luZyBuYW1lc3Bh
Y2UgV1RGOwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAtNTAzLDcgKzUwMSw3IEBAIEhUTUxU
b2tlbml6ZXI6OlN0YXRlIEhUTUxUb2tlbml6ZXI6OnNjcmkKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICBwcmVwZW5kaW5nU3JjID0gbV9zcmM7CiAgICAgICAgICAgICBzZXRTcmMo
U2VnbWVudGVkU3RyaW5nKCkpOwotICAgICAgICAgICAgc3RhdGUgPSBzY3JpcHRFeGVjdXRpb24o
bWFrZVNvdXJjZShzY3JpcHRTdHJpbmcsIG1fZG9jLT5mcmFtZSgpID8gbV9kb2MtPmZyYW1lKCkt
PmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpIDogU3RyaW5nKCksIHN0YXJ0TGluZSksIHN0YXRl
KTsKKyAgICAgICAgICAgIHN0YXRlID0gc2NyaXB0RXhlY3V0aW9uKFNjcmlwdFNvdXJjZUNvZGUo
c2NyaXB0U3RyaW5nLCBtX2RvYy0+ZnJhbWUoKSA/IG1fZG9jLT5mcmFtZSgpLT5kb2N1bWVudCgp
LT51cmwoKSA6IEtVUkwoKSwgc3RhcnRMaW5lKSwgc3RhdGUpOwogICAgICAgICB9CiAgICAgfQog
CkBAIC01NDUsNyArNTQzLDcgQEAgSFRNTFRva2VuaXplcjo6U3RhdGUgSFRNTFRva2VuaXplcjo6
c2NyaQogICAgIHJldHVybiBzdGF0ZTsKIH0KIAotSFRNTFRva2VuaXplcjo6U3RhdGUgSFRNTFRv
a2VuaXplcjo6c2NyaXB0RXhlY3V0aW9uKGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIFN0
YXRlIHN0YXRlKQorSFRNTFRva2VuaXplcjo6U3RhdGUgSFRNTFRva2VuaXplcjo6c2NyaXB0RXhl
Y3V0aW9uKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIFN0YXRlIHN0YXRlKQog
ewogICAgIGlmIChtX2ZyYWdtZW50IHx8ICFtX2RvYy0+ZnJhbWUoKSkKICAgICAgICAgcmV0dXJu
IHN0YXRlOwpAQCAtMTk2OSw3ICsxOTY3LDcgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpub3RpZnlG
aW5pc2hlZChDYWNoZQogCiAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBmb3JnZXQgYWJvdXQgdGhl
IHNjcmlwdCBiZWZvcmUgd2UgZXhlY3V0ZSB0aGUgbmV3IG9uZQogICAgICAgICAvLyBpbmZpbml0
ZSByZWN1cnNpb24gbWlnaHQgaGFwcGVuIG90aGVyd2lzZQotICAgICAgICBKU0M6OlNvdXJjZUNv
ZGUgc291cmNlQ29kZSA9IG1ha2VTb3VyY2UoY3MpOworICAgICAgICBTY3JpcHRTb3VyY2VDb2Rl
IHNvdXJjZUNvZGUoY3MpOwogICAgICAgICBib29sIGVycm9yT2NjdXJyZWQgPSBjcy0+ZXJyb3JP
Y2N1cnJlZCgpOwogICAgICAgICBjcy0+cmVtb3ZlQ2xpZW50KHRoaXMpOwogCkluZGV4OiBodG1s
L0hUTUxUb2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxUb2tlbml6ZXIuaAkocmV2
aXNpb24gMzg2OTkpCisrKyBodG1sL0hUTUxUb2tlbml6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsMTAgKzM0LDYgQEAKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCi1uYW1lc3BhY2UgSlNDIHsKLSAgICBjbGFzcyBTb3VyY2VDb2RlOwotfQotCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhY2hlZFNjcmlwdDsKQEAgLTUwLDYgKzQ2LDcg
QEAgY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgSFRNTFBhcnNlcjsKIGNsYXNzIE5vZGU7CiBjbGFz
cyBQcmVsb2FkU2Nhbm5lcjsKK2NsYXNzIFNjcmlwdFNvdXJjZUNvZGU7CiAKIC8qKgogICogQGlu
dGVybmFsCkBAIC0xODEsNyArMTc4LDcgQEAgcHJpdmF0ZToKICAgICBTdGF0ZSBwYXJzZUVudGl0
eShTZWdtZW50ZWRTdHJpbmcmLCBVQ2hhciomIGRlc3QsIFN0YXRlLCB1bnNpZ25lZCYgY0J1ZmZl
clBvcywgYm9vbCBzdGFydCwgYm9vbCBwYXJzaW5nVGFnKTsKICAgICBTdGF0ZSBwYXJzZVByb2Nl
c3NpbmdJbnN0cnVjdGlvbihTZWdtZW50ZWRTdHJpbmcmLCBTdGF0ZSk7CiAgICAgU3RhdGUgc2Ny
aXB0SGFuZGxlcihTdGF0ZSk7Ci0gICAgU3RhdGUgc2NyaXB0RXhlY3V0aW9uKGNvbnN0IEpTQzo6
U291cmNlQ29kZSYsIFN0YXRlKTsKKyAgICBTdGF0ZSBzY3JpcHRFeGVjdXRpb24oY29uc3QgU2Ny
aXB0U291cmNlQ29kZSYsIFN0YXRlKTsKICAgICB2b2lkIHNldFNyYyhjb25zdCBTZWdtZW50ZWRT
dHJpbmcmKTsKICAKICAgICAvLyBjaGVjayBpZiB3ZSBoYXZlIGVub3VnaCBzcGFjZSBpbiB0aGUg
YnVmZmVyLgpJbmRleDogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiAzODY5OSkKKysrIGxvYWRlci9GcmFtZUxvYWRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDcgQEAKICNpbmNsdWRlICJSZXNvdXJj
ZUhhbmRsZS5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlNjcmlw
dENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCiAjaW5jbHVkZSAi
U2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNl
Z21lbnRlZFN0cmluZy5oIgpAQCAtOTAsOCArOTEsNiBAQAogI2luY2x1ZGUgIldpbmRvd0ZlYXR1
cmVzLmgiCiAjaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3QuaCIKICNpbmNsdWRlICJYTUxUb2tlbml6
ZXIuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNP
YmplY3QuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKICNpZiBFTkFCTEUoT0ZG
TElORV9XRUJfQVBQTElDQVRJT05TKQpAQCAtMTA5LDggKzEwOCw2IEBACiAjaW5jbHVkZSAiU1ZH
Vmlld1NwZWMuaCIKICNlbmRpZgogCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICNpZiBFTkFCTEUoU1ZHKQpAQCAtNzc2LDEwICs3NzMsMTAgQEAgYm9vbCBG
cmFtZUxvYWRlcjo6ZXhlY3V0ZUlmSmF2YVNjcmlwdFVSTAogCiBTY3JpcHRWYWx1ZSBGcmFtZUxv
YWRlcjo6ZXhlY3V0ZVNjcmlwdChjb25zdCBTdHJpbmcmIHNjcmlwdCwgYm9vbCBmb3JjZVVzZXJH
ZXN0dXJlKQogewotICAgIHJldHVybiBleGVjdXRlU2NyaXB0KG1ha2VTb3VyY2Uoc2NyaXB0LCBm
b3JjZVVzZXJHZXN0dXJlID8gU3RyaW5nKCkgOiBtX1VSTC5zdHJpbmcoKSkpOworICAgIHJldHVy
biBleGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0LCBmb3JjZVVzZXJHZXN0dXJl
ID8gS1VSTCgpIDogbV9VUkwpKTsKIH0KIAotU2NyaXB0VmFsdWUgRnJhbWVMb2FkZXI6OmV4ZWN1
dGVTY3JpcHQoY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSkKK1NjcmlwdFZhbHVlIEZyYW1l
TG9hZGVyOjpleGVjdXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUp
CiB7CiAgICAgaWYgKCFtX2ZyYW1lLT5zY3JpcHQoKS0+aXNFbmFibGVkKCkgfHwgbV9mcmFtZS0+
c2NyaXB0KCktPmlzUGF1c2VkKCkpCiAgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOwpJbmRl
eDogbG9hZGVyL0ZyYW1lTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbG9hZGVyL0ZyYW1lTG9hZGVy
LmgJKHJldmlzaW9uIDM4Njk5KQorKysgbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDEwICs0OSw2IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIK
ICNlbmRpZgogCi1uYW1lc3BhY2UgSlNDIHsKLSAgICBjbGFzcyBTb3VyY2VDb2RlOwotfQotCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBBcmNoaXZlOwpAQCAtNzksNiArNzUsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgUmVzb3VyY2VMb2FkZXI7CiAgICAgY2xh
c3MgUmVzb3VyY2VSZXF1ZXN0OwogICAgIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CisgICAgY2xh
c3MgU2NyaXB0U291cmNlQ29kZTsKICAgICBjbGFzcyBTY3JpcHRWYWx1ZTsKICAgICBjbGFzcyBT
ZWN1cml0eU9yaWdpbjsKICAgICBjbGFzcyBTaGFyZWRCdWZmZXI7CkBAIC0zMzksNyArMzM2LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdXJsIGlz
IGEgSmF2YVNjcmlwdCBVUkwuCiAgICAgICAgIGJvb2wgZXhlY3V0ZUlmSmF2YVNjcmlwdFVSTChj
b25zdCBLVVJMJiB1cmwsIGJvb2wgdXNlckdlc3R1cmUgPSBmYWxzZSwgYm9vbCByZXBsYWNlRG9j
dW1lbnQgPSB0cnVlKTsKIAotICAgICAgICBTY3JpcHRWYWx1ZSBleGVjdXRlU2NyaXB0KGNvbnN0
IEpTQzo6U291cmNlQ29kZSYpOworICAgICAgICBTY3JpcHRWYWx1ZSBleGVjdXRlU2NyaXB0KGNv
bnN0IFNjcmlwdFNvdXJjZUNvZGUmKTsKICAgICAgICAgU2NyaXB0VmFsdWUgZXhlY3V0ZVNjcmlw
dChjb25zdCBTdHJpbmcmIHNjcmlwdCwgYm9vbCBmb3JjZVVzZXJHZXN0dXJlID0gZmFsc2UpOwog
CiAgICAgICAgIHZvaWQgZ290b0FuY2hvcigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25419</attachid>
            <date>2008-11-24 02:22:06 -0800</date>
            <delta_ts>2008-11-24 10:27:06 -0800</delta_ts>
            <desc>v2 patch</desc>
            <filename>ssc_2.diff</filename>
            <type>text/plain</type>
            <size>23659</size>
            <attacher name="Darin Fisher (:fishd, Google)">fishd</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM4NzAw
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAKKzIwMDgtMTEt
MjQgIERhcmluIEZpc2hlciAgPGRhcmluQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI0NDgKKyAgICAgICAgQ3JlYXRlIGFuIGFic3RyYWN0aW9uIGZvciBK
U0M6OlNvdXJjZUNvZGUKKworICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0NhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmg6Cisg
ICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMv
U2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNv
ZGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2RlOjpTY3JpcHRT
b3VyY2VDb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFNvdXJjZUNvZGU6Omxlbmd0aCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2RlOjpqc1NvdXJjZUNvZGUpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBkb20vU2NyaXB0
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjppbnNlcnRlZElu
dG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpjaGlsZHJlbkNo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudERhdGE6OmV2YWx1YXRlU2Ny
aXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnREYXRhOjpub3RpZnlGaW5pc2hl
ZCk6CisgICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQuaDoKKyAgICAgICAgKiBkb20vV29ya2Vy
VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6d29ya2VyVGhyZWFk
KToKKyAgICAgICAgKiBkb20vV29ya2VyVGhyZWFkLmg6CisgICAgICAgICogZG9tL1hNTFRva2Vu
aXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6Om5vdGlmeUZpbmlzaGVk
KToKKyAgICAgICAgKiBkb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpYTUxUb2tlbml6ZXI6OmVuZEVsZW1lbnROcyk6CisgICAgICAgICogZG9tL1hNTFRva2Vu
aXplclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6cGFyc2VFbmRFbGVt
ZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxUb2tlbml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFRva2VuaXplcjo6c2NyaXB0SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
VG9rZW5pemVyOjpzY3JpcHRFeGVjdXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2Vu
aXplcjo6bm90aWZ5RmluaXNoZWQpOgorICAgICAgICAqIGh0bWwvSFRNTFRva2VuaXplci5oOgor
ICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZUxvYWRlcjo6ZXhlY3V0ZVNjcmlwdCk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmg6
CisKIDIwMDgtMTEtMjIgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCShyZXZpc2lvbiAzODY5OSkKKysrIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzg4MSw2ICsxMzg4MSwxMCBAQAogCQkJCQk+DQogCQkJCTwvRmls
ZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcU2NyaXB0
U291cmNlQ29kZS5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQogCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFNjcmlwdFN0cmluZy5oIg0KIAkJCQkJPg0KIAkJ
CQk8L0ZpbGU+DQpJbmRleDogYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5o
CShyZXZpc2lvbiAzODY5OSkKKysrIGJpbmRpbmdzL2pzL0NhY2hlZFNjcmlwdFNvdXJjZVByb3Zp
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNp
bmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKICNpbmNsdWRlIDxwYXJzZXIvU291cmNlQ29kZS5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2
aXNpb24gMzg2OTkpCisrKyBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1
ZGUgIlBhdXNlZFRpbWVvdXRzLmgiCiAjaW5jbHVkZSAicnVudGltZV9yb290LmgiCisjaW5jbHVk
ZSAiU2NyaXB0U291cmNlQ29kZS5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTdHJpbmdTb3VyY2VQcm92aWRlci5oIgpAQCAtODgs
MTAgKzg5LDEyIEBAIFNjcmlwdENvbnRyb2xsZXI6On5TY3JpcHRDb250cm9sbGVyKCkKICAgICBk
aXNjb25uZWN0UGxhdGZvcm1TY3JpcHRPYmplY3RzKCk7CiB9CiAKLVNjcmlwdFZhbHVlIFNjcmlw
dENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNlQ29kZSkg
CitTY3JpcHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3Vy
Y2VDb2RlJiBzb3VyY2VDb2RlKSAKIHsKICAgICAvLyBldmFsdWF0ZSBjb2RlLiBSZXR1cm5zIHRo
ZSBKUyByZXR1cm4gdmFsdWUgb3IgMAogICAgIC8vIGlmIHRoZXJlIHdhcyBub25lLCBhbiBlcnJv
ciBvY2N1cmVkIG9yIHRoZSB0eXBlIGNvdWxkbid0IGJlIGNvbnZlcnRlZC4KKyAgICAKKyAgICBj
b25zdCBTb3VyY2VDb2RlJiBqc1NvdXJjZUNvZGUgPSBzb3VyY2VDb2RlLmpzU291cmNlQ29kZSgp
OwogCiAgICAgaW5pdFNjcmlwdElmTmVlZGVkKCk7CiAgICAgLy8gaW5saW5lQ29kZSBpcyB0cnVl
IGZvciA8YSBocmVmPSJqYXZhc2NyaXB0OmRvU29tZXRoaW5nKCkiPgpAQCAtMTAwLDcgKzEwMyw3
IEBAIFNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGMKICAgICAvLyBTZWUg
c21hcnQgd2luZG93Lm9wZW4gcG9saWN5IGZvciB3aGVyZSB0aGlzIGlzIHVzZWQuCiAgICAgRXhl
Y1N0YXRlKiBleGVjID0gbV93aW5kb3dTaGVsbC0+d2luZG93KCktPmdsb2JhbEV4ZWMoKTsKICAg
ICBjb25zdCBTdHJpbmcqIHNhdmVkU291cmNlVVJMID0gbV9zb3VyY2VVUkw7Ci0gICAgU3RyaW5n
IHNvdXJjZVVSTCA9IHNvdXJjZUNvZGUucHJvdmlkZXIoKS0+dXJsKCk7CisgICAgU3RyaW5nIHNv
dXJjZVVSTCA9IGpzU291cmNlQ29kZS5wcm92aWRlcigpLT51cmwoKTsKICAgICBtX3NvdXJjZVVS
TCA9ICZzb3VyY2VVUkw7CiAKICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CkBAIC0xMTAsNyArMTEz
LDcgQEAgU2NyaXB0VmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoYwogICAgIG1fZnJh
bWUtPmtlZXBBbGl2ZSgpOwogCiAgICAgbV93aW5kb3dTaGVsbC0+d2luZG93KCktPnN0YXJ0VGlt
ZW91dENoZWNrKCk7Ci0gICAgQ29tcGxldGlvbiBjb21wID0gSlNDOjpldmFsdWF0ZShleGVjLCBl
eGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwgc291cmNlQ29k
ZSwgbV93aW5kb3dTaGVsbCk7CisgICAgQ29tcGxldGlvbiBjb21wID0gSlNDOjpldmFsdWF0ZShl
eGVjLCBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwganNT
b3VyY2VDb2RlLCBtX3dpbmRvd1NoZWxsKTsKICAgICBtX3dpbmRvd1NoZWxsLT53aW5kb3coKS0+
c3RvcFRpbWVvdXRDaGVjaygpOwogCiAgICAgaWYgKGNvbXAuY29tcGxUeXBlKCkgPT0gTm9ybWFs
IHx8IGNvbXAuY29tcGxUeXBlKCkgPT0gUmV0dXJuVmFsdWUpIHsKSW5kZXg6IGJpbmRpbmdzL2pz
L1NjcmlwdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9qcy9TY3JpcHRDb250
cm9sbGVyLmgJKHJldmlzaW9uIDM4Njk5KQorKysgYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBAIHN0cnVjdCBOUE9iamVjdDsKIAog
bmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci0gICAgY2xhc3MgU291
cmNlQ29kZTsKIAogICAgIG5hbWVzcGFjZSBCaW5kaW5ncyB7CiAgICAgICAgIGNsYXNzIEluc3Rh
bmNlOwpAQCAtNTUsNiArNTQsNyBAQCBjbGFzcyBFdmVudExpc3RlbmVyOwogY2xhc3MgSFRNTFBs
dWdJbkVsZW1lbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIE5vZGU7CitjbGFzcyBTY3JpcHRTb3Vy
Y2VDb2RlOwogY2xhc3MgU2NyaXB0VmFsdWU7CiBjbGFzcyBTdHJpbmc7CiBjbGFzcyBXaWRnZXQ7
CkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fd2luZG93U2hlbGwt
PndpbmRvdygpOwogICAgIH0KIAotICAgIFNjcmlwdFZhbHVlIGV2YWx1YXRlKGNvbnN0IEpTQzo6
U291cmNlQ29kZSYpOworICAgIFNjcmlwdFZhbHVlIGV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJj
ZUNvZGUmKTsKIAogICAgIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gY3JlYXRlSW5saW5lRXZl
bnRMaXN0ZW5lcihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBjb2Rl
LCBOb2RlKik7CiAjaWYgRU5BQkxFKFNWRykKSW5kZXg6IGJpbmRpbmdzL2pzL1NjcmlwdFNvdXJj
ZUNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9qcy9TY3JpcHRTb3VyY2VDb2RlLmgJKHJl
dmlzaW9uIDApCisrKyBiaW5kaW5ncy9qcy9TY3JpcHRTb3VyY2VDb2RlLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMu
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2NyaXB0U291cmNlQ29kZV9oCisjZGVm
aW5lIFNjcmlwdFNvdXJjZUNvZGVfaAorCisjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0U291cmNlUHJv
dmlkZXIuaCIKKyNpbmNsdWRlICJTdHJpbmdTb3VyY2VQcm92aWRlci5oIgorI2luY2x1ZGUgIktV
UkwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JpcHRTb3VyY2VDb2RlIHsK
K3B1YmxpYzoKKyAgICBTY3JpcHRTb3VyY2VDb2RlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25z
dCBLVVJMJiB1cmwgPSBLVVJMKCksIGludCBzdGFydExpbmUgPSAxKQorICAgICAgICA6IG1fY29k
ZShtYWtlU291cmNlKHNvdXJjZSwgdXJsLmlzTnVsbCgpID8gU3RyaW5nKCkgOiB1cmwuc3RyaW5n
KCksIHN0YXJ0TGluZSkpIHt9CisgICAgU2NyaXB0U291cmNlQ29kZShDYWNoZWRTY3JpcHQqIGNz
KQorICAgICAgICA6IG1fY29kZShtYWtlU291cmNlKGNzKSkge30KKworICAgIGludCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX2NvZGUubGVuZ3RoKCk7IH0KKworICAgIGNvbnN0IEpTQzo6U291
cmNlQ29kZSYganNTb3VyY2VDb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlOyB9CisKK3ByaXZh
dGU6CisgICAgSlNDOjpTb3VyY2VDb2RlIG1fY29kZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFNjcmlwdFNvdXJjZUNvZGVfaApJbmRleDogYmluZGluZ3MvanMv
V29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvanMvV29y
a2VyU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDM4Njk5KQorKysgYmluZGluZ3MvanMv
V29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDgg
QEAKIAogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTV29ya2VyQ29udGV4
dC5oIgorI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1
ZS5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKICNpbmNsdWRlICJXb3JrZXJNZXNzYWdp
bmdQcm94eS5oIgogI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgpAQCAtNzAsNyArNzIsNyBAQCB2
b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmluaXRTY3JpcHQoCiAgICAgbV93b3JrZXJDb250
ZXh0V3JhcHBlciA9IG5ldyAobV9nbG9iYWxEYXRhLmdldCgpKSBKU1dvcmtlckNvbnRleHQobV93
b3JrZXJDb250ZXh0KTsKIH0KIAotSlNWYWx1ZSogV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZh
bHVhdGUoY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQorU2NyaXB0VmFsdWUgV29y
a2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291
cmNlQ29kZSkKIHsKICAgICB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9zaGFyZWREYXRh
TXV0ZXgpOwpAQCAtODMsNyArODUsNyBAQCBKU1ZhbHVlKiBXb3JrZXJTY3JpcHRDb250cm9sbGVy
OjpldmFsdWF0CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX3dvcmtlckNvbnRleHRXcmFwcGVy
LT5nbG9iYWxFeGVjKCk7CiAgICAgbV93b3JrZXJDb250ZXh0V3JhcHBlci0+c3RhcnRUaW1lb3V0
Q2hlY2soKTsKLSAgICBDb21wbGV0aW9uIGNvbXAgPSBKU0M6OmV2YWx1YXRlKGV4ZWMsIGV4ZWMt
PmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBzb3VyY2VDb2RlLCBt
X3dvcmtlckNvbnRleHRXcmFwcGVyKTsKKyAgICBDb21wbGV0aW9uIGNvbXAgPSBKU0M6OmV2YWx1
YXRlKGV4ZWMsIGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigp
LCBzb3VyY2VDb2RlLmpzU291cmNlQ29kZSgpLCBtX3dvcmtlckNvbnRleHRXcmFwcGVyKTsKICAg
ICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5zdG9wVGltZW91dENoZWNrKCk7CiAKICAgICBtX3dv
cmtlckNvbnRleHQtPnRocmVhZCgpLT5tZXNzYWdpbmdQcm94eSgpLT5yZXBvcnRXb3JrZXJUaHJl
YWRBY3Rpdml0eShtX3dvcmtlckNvbnRleHQtPmhhc1BlbmRpbmdBY3Rpdml0eSgpKTsKSW5kZXg6
IGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5k
aW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDM4Njk5KQorKysgYmlu
ZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwx
MyArMzUsMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNHbG9iYWxEYXRhOwot
ICAgIGNsYXNzIEpTVmFsdWU7Ci0gICAgY2xhc3MgU291cmNlQ29kZTsKIH0KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgY2xhc3MgSlNXb3JrZXJDb250ZXh0OworICAgIGNsYXNzIFNjcmlw
dFNvdXJjZUNvZGU7CisgICAgY2xhc3MgU2NyaXB0VmFsdWU7CiAgICAgY2xhc3MgU3RyaW5nOwog
ICAgIGNsYXNzIFdvcmtlckNvbnRleHQ7CiAKQEAgLTU2LDcgKzU2LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIG1fd29ya2VyQ29udGV4dFdyYXBwZXI7CiAgICAg
ICAgIH0KIAotICAgICAgICBKU0M6OkpTVmFsdWUqIGV2YWx1YXRlKGNvbnN0IEpTQzo6U291cmNl
Q29kZSYpOworICAgICAgICBTY3JpcHRWYWx1ZSBldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VD
b2RlJik7CiAKICAgICAgICAgdm9pZCBmb3JiaWRFeGVjdXRpb24oKTsKIApJbmRleDogZG9tL1Nj
cmlwdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9TY3JpcHRFbGVtZW50LmNwcAkocmV2
aXNpb24gMzg2OTkpCisrKyBkb20vU2NyaXB0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDIxICsyNSwxOSBAQAogI2luY2x1ZGUgIlNjcmlwdEVsZW1lbnQuaCIKIAogI2luY2x1ZGUg
IkNhY2hlZFNjcmlwdC5oIgotI2luY2x1ZGUgIkNhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmgi
CiAjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVS
ZWdpc3RyeS5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTY3Jp
cHRTb3VyY2VDb2RlLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJTdHJp
bmdIYXNoLmgiCiAjaW5jbHVkZSAiU3RyaW5nU291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlICJU
ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCi11c2luZyBuYW1lc3BhY2Ug
SlNDOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgU2NyaXB0RWxlbWVudDo6aW5zZXJ0
ZWRJbnRvRG9jdW1lbnQoU2NyaXB0RWxlbWVudERhdGEmIGRhdGEsIGNvbnN0IFN0cmluZyYgc291
cmNlVXJsKQpAQCAtNTUsNyArNTMsNyBAQCB2b2lkIFNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50
b0RvY3VtZW50CiAgICAgLy8gSWYgdGhlcmUncyBhbiBlbXB0eSBzY3JpcHQgbm9kZSwgd2Ugc2hv
dWxkbid0IGV2YWx1YXRlIHRoZSBzY3JpcHQKICAgICAvLyBiZWNhdXNlIGlmIGEgc2NyaXB0IGlz
IGluc2VydGVkIGFmdGVyd2FyZHMgKGJ5IHNldHRpbmcgdGV4dCBvciBpbm5lclRleHQpCiAgICAg
Ly8gaXQgc2hvdWxkIGJlIGV2YWx1YXRlZCwgYW5kIGV2YWx1YXRlU2NyaXB0IG9ubHkgZXZhbHVh
dGVzIGEgc2NyaXB0IG9uY2UuCi0gICAgZGF0YS5ldmFsdWF0ZVNjcmlwdChtYWtlU291cmNlKGRh
dGEuc2NyaXB0Q29udGVudCgpLCBkYXRhLmVsZW1lbnQoKS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3Ry
aW5nKCkpKTsgLy8gRklYTUU6IFByb3ZpZGUgYSByZWFsIHN0YXJ0aW5nIGxpbmUgbnVtYmVyIGhl
cmUuCisgICAgZGF0YS5ldmFsdWF0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKGRhdGEuc2NyaXB0
Q29udGVudCgpLCBkYXRhLmVsZW1lbnQoKS0+ZG9jdW1lbnQoKS0+dXJsKCkpKTsgLy8gRklYTUU6
IFByb3ZpZGUgYSByZWFsIHN0YXJ0aW5nIGxpbmUgbnVtYmVyIGhlcmUuCiB9CiAKIHZvaWQgU2Ny
aXB0RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudChTY3JpcHRFbGVtZW50RGF0YSYgZGF0YSkK
QEAgLTc1LDcgKzczLDcgQEAgdm9pZCBTY3JpcHRFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoU2Ny
aQogICAgIC8vIGFuZCB0aGUgc2NyaXB0IGVsZW1lbnQgaGFzIGJlZW4gaW5zZXJ0ZWQgaW4gdGhl
IGRvY3VtZW50CiAgICAgLy8gd2UgZXZhbHVhdGUgdGhlIHNjcmlwdC4KICAgICBpZiAoZWxlbWVu
dC0+aW5Eb2N1bWVudCgpICYmIGVsZW1lbnQtPmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgZGF0YS5l
dmFsdWF0ZVNjcmlwdChtYWtlU291cmNlKGRhdGEuc2NyaXB0Q29udGVudCgpLCBlbGVtZW50LT5k
b2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSkpOyAvLyBGSVhNRTogUHJvdmlkZSBhIHJlYWwgc3Rh
cnRpbmcgbGluZSBudW1iZXIgaGVyZQorICAgICAgICBkYXRhLmV2YWx1YXRlU2NyaXB0KFNjcmlw
dFNvdXJjZUNvZGUoZGF0YS5zY3JpcHRDb250ZW50KCksIGVsZW1lbnQtPmRvY3VtZW50KCktPnVy
bCgpKSk7IC8vIEZJWE1FOiBQcm92aWRlIGEgcmVhbCBzdGFydGluZyBsaW5lIG51bWJlciBoZXJl
CiB9CiAKIHZvaWQgU2NyaXB0RWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKFNjcmlwdEVs
ZW1lbnREYXRhJiBkYXRhLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVybCkKQEAgLTE2Miw3ICsxNjAs
NyBAQCB2b2lkIFNjcmlwdEVsZW1lbnREYXRhOjpyZXF1ZXN0U2NyaXB0KGNvCiAgICAgbV9zY3Jp
cHRFbGVtZW50LT5kaXNwYXRjaEVycm9yRXZlbnQoKTsKIH0KIAotdm9pZCBTY3JpcHRFbGVtZW50
RGF0YTo6ZXZhbHVhdGVTY3JpcHQoY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSkKK3ZvaWQg
U2NyaXB0RWxlbWVudERhdGE6OmV2YWx1YXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUm
IHNvdXJjZUNvZGUpCiB7CiAgICAgaWYgKG1fZXZhbHVhdGVkIHx8ICFzb3VyY2VDb2RlLmxlbmd0
aCgpIHx8ICFzaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE5OCw3ICsxOTYsNyBAQCB2b2lkIFNjcmlwdEVsZW1lbnREYXRhOjpub3RpZnlGaW5pc2hlZChD
CiAgICAgaWYgKGNzLT5lcnJvck9jY3VycmVkKCkpCiAgICAgICAgIG1fc2NyaXB0RWxlbWVudC0+
ZGlzcGF0Y2hFcnJvckV2ZW50KCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGV2YWx1YXRlU2NyaXB0
KG1ha2VTb3VyY2UoY3MpKTsKKyAgICAgICAgZXZhbHVhdGVTY3JpcHQoU2NyaXB0U291cmNlQ29k
ZShjcykpOwogICAgICAgICBtX3NjcmlwdEVsZW1lbnQtPmRpc3BhdGNoTG9hZEV2ZW50KCk7CiAg
ICAgfQogCkluZGV4OiBkb20vU2NyaXB0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9TY3Jp
cHRFbGVtZW50LmgJKHJldmlzaW9uIDM4Njk5KQorKysgZG9tL1NjcmlwdEVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjQsMTUgKzI0LDEyIEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VD
bGllbnQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgogCi1uYW1lc3BhY2Ug
SlNDIHsKLSAgICBjbGFzcyBTb3VyY2VDb2RlOwotfQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIENhY2hlZFNjcmlwdDsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBTY3JpcHRFbGVtZW50
RGF0YTsKK2NsYXNzIFNjcmlwdFNvdXJjZUNvZGU7CiAKIGNsYXNzIFNjcmlwdEVsZW1lbnQgewog
cHVibGljOgpAQCAtODEsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIYXZlRmlyZWRM
b2FkRXZlbnQoYm9vbCBmaXJlZExvYWQpIHsgbV9maXJlZExvYWQgPSBmaXJlZExvYWQ7IH0KIAog
ICAgIHZvaWQgcmVxdWVzdFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZVVybCk7Ci0gICAgdm9p
ZCBldmFsdWF0ZVNjcmlwdChjb25zdCBKU0M6OlNvdXJjZUNvZGUmKTsKKyAgICB2b2lkIGV2YWx1
YXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmKTsKICAgICB2b2lkIHN0b3BMb2FkUmVx
dWVzdCgpOwogCiBwcml2YXRlOgpJbmRleDogZG9tL1dvcmtlclRocmVhZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gZG9tL1dvcmtlclRocmVhZC5jcHAJKHJldmlzaW9uIDM4Njk5KQorKysgZG9tL1dvcmtl
clRocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE0ICszMSwxMyBAQAogI2luY2x1ZGUg
IldvcmtlclRocmVhZC5oIgogCiAjaW5jbHVkZSAiSlNXb3JrZXJDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiU3RyaW5nU291cmNlUHJvdmlkZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgi
CisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJXb3JrZXIuaCIKICNpbmNsdWRl
ICJXb3JrZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV29ya2VyTWVzc2FnaW5nUHJveHkuaCIKICNp
bmNsdWRlICJXb3JrZXJUYXNrLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogUGFzc1JlZlB0cjxXb3JrZXJUaHJlYWQ+IFdvcmtlclRocmVhZDo6Y3Jl
YXRlKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3Jr
ZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHkpCkBAIC03NSwxMCArNzQsMTAgQEAgdm9p
ZCogV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRTdGFydCh2bwogCiB2b2lkKiBXb3JrZXJUaHJl
YWQ6OndvcmtlclRocmVhZCgpCiB7Ci0gICAgbV93b3JrZXJDb250ZXh0ID0gV29ya2VyQ29udGV4
dDo6Y3JlYXRlKEtVUkwobV9zY3JpcHRVUkwpLCB0aGlzKTsKKyAgICBtX3dvcmtlckNvbnRleHQg
PSBXb3JrZXJDb250ZXh0OjpjcmVhdGUobV9zY3JpcHRVUkwsIHRoaXMpOwogICAgIFdvcmtlclNj
cmlwdENvbnRyb2xsZXIqIHNjcmlwdCA9IG1fd29ya2VyQ29udGV4dC0+c2NyaXB0KCk7CiAKLSAg
ICBzY3JpcHQtPmV2YWx1YXRlKG1ha2VTb3VyY2UobV9zb3VyY2VDb2RlLCBtX3NjcmlwdFVSTCkp
OworICAgIHNjcmlwdC0+ZXZhbHVhdGUoU2NyaXB0U291cmNlQ29kZShtX3NvdXJjZUNvZGUsIG1f
c2NyaXB0VVJMKSk7CiAgICAgbV9tZXNzYWdpbmdQcm94eS0+Y29uZmlybVdvcmtlclRocmVhZE1l
c3NhZ2UobV93b3JrZXJDb250ZXh0LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSk7IC8vIFRoaXMgd2Fz
bid0IHJlYWxseSBhIG1lc3NhZ2UsIGJ1dCBpdCBjb3VudHMgYXMgb25lIGZvciBHQy4KIAogICAg
IHdoaWxlICh0cnVlKSB7CkluZGV4OiBkb20vV29ya2VyVGhyZWFkLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
ZG9tL1dvcmtlclRocmVhZC5oCShyZXZpc2lvbiAzODY5OSkKKysrIGRvbS9Xb3JrZXJUaHJlYWQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5LDEyIEBACiAKICNpZiBFTkFCTEUoV09SS0VS
UykKIAotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiS1VSTC5oIgogI2lu
Y2x1ZGUgPHd0Zi9NZXNzYWdlUXVldWUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIFdvcmtl
ckNvbnRleHQ7CiAgICAgY2xhc3MgV29ya2VyTWVzc2FnaW5nUHJveHk7CiAgICAgY2xhc3MgV29y
a2VyVGFzazsKQEAgLTYxLDcgKzYwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAg
IFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKIAotICAgICAgICBTdHJpbmcgbV9zY3JpcHRV
Ukw7CisgICAgICAgIEtVUkwgbV9zY3JpcHRVUkw7CiAgICAgICAgIFN0cmluZyBtX3NvdXJjZUNv
ZGU7CiAgICAgICAgIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtX21lc3NhZ2luZ1Byb3h5OwogCklu
ZGV4OiBkb20vWE1MVG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vWE1MVG9rZW5pemVy
LmNwcAkocmV2aXNpb24gMzg2OTkpCisrKyBkb20vWE1MVG9rZW5pemVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2lu
Y2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgi
CisjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgi
CiAjaW5jbHVkZSAiU3RyaW5nU291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlICJUZXh0UmVzb3Vy
Y2VEZWNvZGVyLmgiCkBAIC0zMjYsNyArMzI3LDcgQEAgdm9pZCBYTUxUb2tlbml6ZXI6Om5vdGlm
eUZpbmlzaGVkKENhY2hlZAogICAgIEFTU0VSVChtX3BlbmRpbmdTY3JpcHQgPT0gZmluaXNoZWRP
YmopOwogICAgIEFTU0VSVChtX3BlbmRpbmdTY3JpcHQtPmFjY2Vzc0NvdW50KCkgPiAwKTsKICAg
ICAgICAgCi0gICAgSlNDOjpTb3VyY2VDb2RlIHNvdXJjZUNvZGUgPSBtYWtlU291cmNlKG1fcGVu
ZGluZ1NjcmlwdC5nZXQoKSk7CisgICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VDb2RlKG1fcGVu
ZGluZ1NjcmlwdC5nZXQoKSk7CiAgICAgYm9vbCBlcnJvck9jY3VycmVkID0gbV9wZW5kaW5nU2Ny
aXB0LT5lcnJvck9jY3VycmVkKCk7CiAKICAgICBtX3BlbmRpbmdTY3JpcHQtPnJlbW92ZUNsaWVu
dCh0aGlzKTsKSW5kZXg6IGRvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBkb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAJKHJldmlzaW9uIDM4Njk5KQorKysgZG9tL1hN
TFRva2VuaXplckxpYnhtbDIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0Nyw4IEBACiAj
aW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJTY3JpcHRFbGVtZW50LmgiCisjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29k
ZS5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAiU3RyaW5nU291cmNlUHJv
dmlkZXIuaCIKICNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVkZSA8bGli
eG1sL3BhcnNlci5oPgogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaD4KQEAgLTgw
Nyw3ICs4MDcsNyBAQCB2b2lkIFhNTFRva2VuaXplcjo6ZW5kRWxlbWVudE5zKCkKICAgICAgICAg
ICAgIH0gZWxzZSAKICAgICAgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOwogICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIG1fdmlldy0+ZnJhbWUoKS0+bG9hZGVyKCktPmV4ZWN1dGVT
Y3JpcHQobWFrZVNvdXJjZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIG1fZG9jLT51
cmwoKS5zdHJpbmcoKSwgbV9zY3JpcHRTdGFydExpbmUpKTsKKyAgICAgICAgICAgIG1fdmlldy0+
ZnJhbWUoKS0+bG9hZGVyKCktPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRF
bGVtZW50LT5zY3JpcHRDb250ZW50KCksIG1fZG9jLT51cmwoKSwgbV9zY3JpcHRTdGFydExpbmUp
KTsKIAogICAgICAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSBmYWxzZTsKICAgICB9CkluZGV4OiBk
b20vWE1MVG9rZW5pemVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9YTUxUb2tlbml6ZXJRdC5j
cHAJKHJldmlzaW9uIDM4Njk5KQorKysgZG9tL1hNTFRva2VuaXplclF0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDcsOCArNDcsOCBAQAogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKICNp
bmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0RWxlbWVudC5oIgor
I2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgot
I2luY2x1ZGUgIlN0cmluZ1NvdXJjZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNl
RGVjb2Rlci5oIgogI2luY2x1ZGUgPFFEZWJ1Zz4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
QEAgLTU4NSw3ICs1ODUsNyBAQCB2b2lkIFhNTFRva2VuaXplcjo6cGFyc2VFbmRFbGVtZW50KCkK
ICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7
CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV92aWV3LT5mcmFtZSgpLT5sb2FkZXIoKS0+
ZXhlY3V0ZVNjcmlwdChtYWtlU291cmNlKHNjcmlwdEVsZW1lbnQtPnNjcmlwdENvbnRlbnQoKSwg
bV9kb2MtPnVybCgpLnN0cmluZygpLCBtX3NjcmlwdFN0YXJ0TGluZSkpOworICAgICAgICAgICAg
bV92aWV3LT5mcmFtZSgpLT5sb2FkZXIoKS0+ZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2Rl
KHNjcmlwdEVsZW1lbnQtPnNjcmlwdENvbnRlbnQoKSwgbV9kb2MtPnVybCgpLCBtX3NjcmlwdFN0
YXJ0TGluZSkpOwogCiAgICAgICAgIG1fcmVxdWVzdGluZ1NjcmlwdCA9IGZhbHNlOwogICAgIH0K
SW5kZXg6IGh0bWwvSFRNTFRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MVG9r
ZW5pemVyLmNwcAkocmV2aXNpb24gMzg2OTkpCisrKyBodG1sL0hUTUxUb2tlbml6ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiQ1NTSGVscGVyLmgiCiAj
aW5jbHVkZSAiQ2FjaGUuaCIKICNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKLSNpbmNsdWRlICJD
YWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCkBAIC00
NSw4ICs0NCw4IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlByZWxvYWRTY2FubmVy
LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlNjcmlwdFNvdXJj
ZUNvZGUuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgIlN0cmluZ1NvdXJj
ZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgogI2luY2x1ZGUgPHd0Zi9BU0NJ
SUNUeXBlLmg+CiAKQEAgLTU1LDcgKzU0LDYgQEAKICNkZWZpbmUgUFJFTE9BRF9TQ0FOTkVSX0VO
QUJMRUQgMQogLy8gI2RlZmluZSBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5HIDEKIAotdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiB1c2luZyBuYW1lc3BhY2Ug
c3RkOwogCkBAIC01MDMsNyArNTAxLDcgQEAgSFRNTFRva2VuaXplcjo6U3RhdGUgSFRNTFRva2Vu
aXplcjo6c2NyaQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHByZXBlbmRpbmdT
cmMgPSBtX3NyYzsKICAgICAgICAgICAgIHNldFNyYyhTZWdtZW50ZWRTdHJpbmcoKSk7Ci0gICAg
ICAgICAgICBzdGF0ZSA9IHNjcmlwdEV4ZWN1dGlvbihtYWtlU291cmNlKHNjcmlwdFN0cmluZywg
bV9kb2MtPmZyYW1lKCkgPyBtX2RvYy0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5n
KCkgOiBTdHJpbmcoKSwgc3RhcnRMaW5lKSwgc3RhdGUpOworICAgICAgICAgICAgc3RhdGUgPSBz
Y3JpcHRFeGVjdXRpb24oU2NyaXB0U291cmNlQ29kZShzY3JpcHRTdHJpbmcsIG1fZG9jLT5mcmFt
ZSgpID8gbV9kb2MtPmZyYW1lKCktPmRvY3VtZW50KCktPnVybCgpIDogS1VSTCgpLCBzdGFydExp
bmUpLCBzdGF0ZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTU0NSw3ICs1NDMsNyBAQCBIVE1M
VG9rZW5pemVyOjpTdGF0ZSBIVE1MVG9rZW5pemVyOjpzY3JpCiAgICAgcmV0dXJuIHN0YXRlOwog
fQogCi1IVE1MVG9rZW5pemVyOjpTdGF0ZSBIVE1MVG9rZW5pemVyOjpzY3JpcHRFeGVjdXRpb24o
Y29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgU3RhdGUgc3RhdGUpCitIVE1MVG9rZW5pemVy
OjpTdGF0ZSBIVE1MVG9rZW5pemVyOjpzY3JpcHRFeGVjdXRpb24oY29uc3QgU2NyaXB0U291cmNl
Q29kZSYgc291cmNlQ29kZSwgU3RhdGUgc3RhdGUpCiB7CiAgICAgaWYgKG1fZnJhZ21lbnQgfHwg
IW1fZG9jLT5mcmFtZSgpKQogICAgICAgICByZXR1cm4gc3RhdGU7CkBAIC0xOTY5LDcgKzE5Njcs
NyBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6Om5vdGlmeUZpbmlzaGVkKENhY2hlCiAKICAgICAgICAg
Ly8gbWFrZSBzdXJlIHdlIGZvcmdldCBhYm91dCB0aGUgc2NyaXB0IGJlZm9yZSB3ZSBleGVjdXRl
IHRoZSBuZXcgb25lCiAgICAgICAgIC8vIGluZmluaXRlIHJlY3Vyc2lvbiBtaWdodCBoYXBwZW4g
b3RoZXJ3aXNlCi0gICAgICAgIEpTQzo6U291cmNlQ29kZSBzb3VyY2VDb2RlID0gbWFrZVNvdXJj
ZShjcyk7CisgICAgICAgIFNjcmlwdFNvdXJjZUNvZGUgc291cmNlQ29kZShjcyk7CiAgICAgICAg
IGJvb2wgZXJyb3JPY2N1cnJlZCA9IGNzLT5lcnJvck9jY3VycmVkKCk7CiAgICAgICAgIGNzLT5y
ZW1vdmVDbGllbnQodGhpcyk7CiAKSW5kZXg6IGh0bWwvSFRNTFRva2VuaXplci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGh0bWwvSFRNTFRva2VuaXplci5oCShyZXZpc2lvbiAzODY5OSkKKysrIGh0bWwvSFRN
TFRva2VuaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsNiBAQAogI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLW5hbWVzcGFjZSBKU0Mg
ewotICAgIGNsYXNzIFNvdXJjZUNvZGU7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgQ2FjaGVkU2NyaXB0OwpAQCAtNTAsNiArNDYsNyBAQCBjbGFzcyBGcmFtZVZpZXc7CiBjbGFz
cyBIVE1MUGFyc2VyOwogY2xhc3MgTm9kZTsKIGNsYXNzIFByZWxvYWRTY2FubmVyOworY2xhc3Mg
U2NyaXB0U291cmNlQ29kZTsKIAogLyoqCiAgKiBAaW50ZXJuYWwKQEAgLTE4MSw3ICsxNzgsNyBA
QCBwcml2YXRlOgogICAgIFN0YXRlIHBhcnNlRW50aXR5KFNlZ21lbnRlZFN0cmluZyYsIFVDaGFy
KiYgZGVzdCwgU3RhdGUsIHVuc2lnbmVkJiBjQnVmZmVyUG9zLCBib29sIHN0YXJ0LCBib29sIHBh
cnNpbmdUYWcpOwogICAgIFN0YXRlIHBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKFNlZ21lbnRl
ZFN0cmluZyYsIFN0YXRlKTsKICAgICBTdGF0ZSBzY3JpcHRIYW5kbGVyKFN0YXRlKTsKLSAgICBT
dGF0ZSBzY3JpcHRFeGVjdXRpb24oY29uc3QgSlNDOjpTb3VyY2VDb2RlJiwgU3RhdGUpOworICAg
IFN0YXRlIHNjcmlwdEV4ZWN1dGlvbihjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiwgU3RhdGUpOwog
ICAgIHZvaWQgc2V0U3JjKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpOwogIAogICAgIC8vIGNoZWNr
IGlmIHdlIGhhdmUgZW5vdWdoIHNwYWNlIGluIHRoZSBidWZmZXIuCkluZGV4OiBsb2FkZXIvRnJh
bWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlz
aW9uIDM4Njk5KQorKysgbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODAsNiArODAsNyBAQAogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiUmVz
b3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgorI2luY2x1ZGUg
IlNjcmlwdFNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgiCkBAIC05MCw4
ICs5MSw2IEBACiAjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKICNpbmNsdWRlICJYTUxIdHRw
UmVxdWVzdC5oIgogI2luY2x1ZGUgIlhNTFRva2VuaXplci5oIgotI2luY2x1ZGUgPHJ1bnRpbWUv
SlNMb2NrLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgogI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KIAogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCkBA
IC0xMDksOCArMTA4LDYgQEAKICNpbmNsdWRlICJTVkdWaWV3U3BlYy5oIgogI2VuZGlmCiAKLXVz
aW5nIG5hbWVzcGFjZSBKU0M7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIEVOQUJMRShT
VkcpCkBAIC03NzYsMTAgKzc3MywxMCBAQCBib29sIEZyYW1lTG9hZGVyOjpleGVjdXRlSWZKYXZh
U2NyaXB0VVJMCiAKIFNjcmlwdFZhbHVlIEZyYW1lTG9hZGVyOjpleGVjdXRlU2NyaXB0KGNvbnN0
IFN0cmluZyYgc2NyaXB0LCBib29sIGZvcmNlVXNlckdlc3R1cmUpCiB7Ci0gICAgcmV0dXJuIGV4
ZWN1dGVTY3JpcHQobWFrZVNvdXJjZShzY3JpcHQsIGZvcmNlVXNlckdlc3R1cmUgPyBTdHJpbmco
KSA6IG1fVVJMLnN0cmluZygpKSk7CisgICAgcmV0dXJuIGV4ZWN1dGVTY3JpcHQoU2NyaXB0U291
cmNlQ29kZShzY3JpcHQsIGZvcmNlVXNlckdlc3R1cmUgPyBLVVJMKCkgOiBtX1VSTCkpOwogfQog
Ci1TY3JpcHRWYWx1ZSBGcmFtZUxvYWRlcjo6ZXhlY3V0ZVNjcmlwdChjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2VDb2RlKQorU2NyaXB0VmFsdWUgRnJhbWVMb2FkZXI6OmV4ZWN1dGVTY3JpcHQoY29u
c3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSkKIHsKICAgICBpZiAoIW1fZnJhbWUtPnNj
cmlwdCgpLT5pc0VuYWJsZWQoKSB8fCBtX2ZyYW1lLT5zY3JpcHQoKS0+aXNQYXVzZWQoKSkKICAg
ICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7CkluZGV4OiBsb2FkZXIvRnJhbWVMb2FkZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBsb2FkZXIvRnJhbWVMb2FkZXIuaAkocmV2aXNpb24gMzg2OTkpCisrKyBs
b2FkZXIvRnJhbWVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTAgKzQ5LDYgQEAKICNp
bmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2VuZGlmCiAKLW5hbWVzcGFjZSBKU0Mg
ewotICAgIGNsYXNzIFNvdXJjZUNvZGU7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
IGNsYXNzIEFyY2hpdmU7CkBAIC03OSw2ICs3NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICBjbGFzcyBSZXNvdXJjZUxvYWRlcjsKICAgICBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiAgICAg
Y2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKKyAgICBjbGFzcyBTY3JpcHRTb3VyY2VDb2RlOwogICAg
IGNsYXNzIFNjcmlwdFZhbHVlOwogICAgIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogICAgIGNsYXNz
IFNoYXJlZEJ1ZmZlcjsKQEAgLTMzOSw3ICszMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB1cmwgaXMgYSBKYXZhU2NyaXB0IFVSTC4KICAgICAg
ICAgYm9vbCBleGVjdXRlSWZKYXZhU2NyaXB0VVJMKGNvbnN0IEtVUkwmIHVybCwgYm9vbCB1c2Vy
R2VzdHVyZSA9IGZhbHNlLCBib29sIHJlcGxhY2VEb2N1bWVudCA9IHRydWUpOwogCi0gICAgICAg
IFNjcmlwdFZhbHVlIGV4ZWN1dGVTY3JpcHQoY29uc3QgSlNDOjpTb3VyY2VDb2RlJik7CisgICAg
ICAgIFNjcmlwdFZhbHVlIGV4ZWN1dGVTY3JpcHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYpOwog
ICAgICAgICBTY3JpcHRWYWx1ZSBleGVjdXRlU2NyaXB0KGNvbnN0IFN0cmluZyYgc2NyaXB0LCBi
b29sIGZvcmNlVXNlckdlc3R1cmUgPSBmYWxzZSk7CiAKICAgICAgICAgdm9pZCBnb3RvQW5jaG9y
KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25433</attachid>
            <date>2008-11-24 10:27:06 -0800</date>
            <delta_ts>2008-11-24 13:14:23 -0800</delta_ts>
            <desc>v2.1 patch - now with xcode changes</desc>
            <filename>ssc_2.1.diff</filename>
            <type>text/plain</type>
            <size>27255</size>
            <attacher name="Darin Fisher (:fishd, Google)">fishd</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM4NzEw
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAKKzIwMDgtMTEt
MjQgIERhcmluIEZpc2hlciAgPGRhcmluQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI0NDgKKyAgICAgICAgQ3JlYXRlIGFuIGFic3RyYWN0aW9uIGZvciBK
U0M6OlNvdXJjZUNvZGUKKworICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0NhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmg6Cisg
ICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMv
U2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNv
ZGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2RlOjpTY3JpcHRT
b3VyY2VDb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFNvdXJjZUNvZGU6Omxlbmd0aCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2RlOjpqc1NvdXJjZUNvZGUpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBkb20vU2NyaXB0
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjppbnNlcnRlZElu
dG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpjaGlsZHJlbkNo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudERhdGE6OmV2YWx1YXRlU2Ny
aXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnREYXRhOjpub3RpZnlGaW5pc2hl
ZCk6CisgICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQuaDoKKyAgICAgICAgKiBkb20vV29ya2Vy
VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6d29ya2VyVGhyZWFk
KToKKyAgICAgICAgKiBkb20vV29ya2VyVGhyZWFkLmg6CisgICAgICAgICogZG9tL1hNTFRva2Vu
aXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6Om5vdGlmeUZpbmlzaGVk
KToKKyAgICAgICAgKiBkb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpYTUxUb2tlbml6ZXI6OmVuZEVsZW1lbnROcyk6CisgICAgICAgICogZG9tL1hNTFRva2Vu
aXplclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6cGFyc2VFbmRFbGVt
ZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxUb2tlbml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFRva2VuaXplcjo6c2NyaXB0SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
VG9rZW5pemVyOjpzY3JpcHRFeGVjdXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2Vu
aXplcjo6bm90aWZ5RmluaXNoZWQpOgorICAgICAgICAqIGh0bWwvSFRNTFRva2VuaXplci5oOgor
ICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZUxvYWRlcjo6ZXhlY3V0ZVNjcmlwdCk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmg6
CisKIDIwMDgtMTEtMjQgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IE1hcmsgUm93ZS4KSW5kZXg6IFdlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShy
ZXZpc2lvbiAzODcxMCkKKysrIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzg4MSw2ICsxMzg4MSwxMCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJ
CQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcU2NyaXB0U291cmNl
Q29kZS5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFNjcmlwdFN0cmluZy5oIg0KIAkJCQkJPg0KIAkJCQk8L0Zp
bGU+DQpJbmRleDogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMzg3MTApCisr
KyBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE4
MDEsNiArMTgwMSw3IEBACiAJCTkzNDQyQ0EwMEQyQjMzNjAwMDMzOEZGOSAvKiBIVE1MVGFibGVS
b3dzQ29sbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MzQ0MkM5RjBEMkIzMzYwMDAzMzhGRjkgLyogSFRNTFRhYmxlUm93c0NvbGxlY3Rp
b24uY3BwICovOyB9OwogCQk5MzRDQzBFMTBFRDM5RDZGMDBBNjU4RjIgLyogU2NyaXB0VmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM0Q0Mw
REYwRUQzOUQ2RjAwQTY1OEYyIC8qIFNjcmlwdFZhbHVlLmNwcCAqLzsgfTsKIAkJOTM0Q0MwRTIw
RUQzOUQ2RjAwQTY1OEYyIC8qIFNjcmlwdFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzRDQzBFMDBFRDM5RDZGMDBBNjU4RjIgLyogU2NyaXB0
VmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk5MzRDQzEwQTBFREIyMjM5MDBBNjU4RjIgLyogU2NyaXB0U291cmNlQ29kZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM0Q0MxMDkwRURCMjIzOTAw
QTY1OEYyIC8qIFNjcmlwdFNvdXJjZUNvZGUuaCAqLzsgfTsKIAkJOTM0RDlCQTUwQjhDMTE2QjAw
N0I0MkE5IC8qIFdlYkNvcmVOU1N0cmluZ0V4dHJhcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNEQ5QkE0MEI4QzExNkIwMDdCNDJBOSAvKiBXZWJD
b3JlTlNTdHJpbmdFeHRyYXMubW0gKi87IH07CiAJCTkzNEQ5QkE3MEI4QzExNzUwMDdCNDJBOSAv
KiBXZWJDb3JlTlNTdHJpbmdFeHRyYXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzNEQ5QkE2MEI4QzExNzUwMDdCNDJBOSAvKiBXZWJDb3JlTlNTdHJp
bmdFeHRyYXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk5MzRGNzEzODBENUE2RUZGMDAwMThENjkgLyogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VC
YXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
NEY3MTM3MEQ1QTZFRkYwMDAxOEQ2OSAvKiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2UuY3Bw
ICovOyB9OwpAQCAtNjU4Miw2ICs2NTgzLDcgQEAKIAkJOTM0NDJDOUYwRDJCMzM2MDAwMzM4RkY5
IC8qIEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTM0Q0MwREYwRUQzOUQ2RjAwQTY1OEYyIC8qIFNjcmlwdFZhbHVlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdFZhbHVlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM0Q0MwRTAwRUQzOUQ2RjAwQTY1OEYyIC8q
IFNjcmlwdFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFZh
bHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzNENDMTA5MEVEQjIyMzkwMEE2
NThGMiAvKiBTY3JpcHRTb3VyY2VDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNjcmlwdFNvdXJjZUNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM0
RDlCQTQwQjhDMTE2QjAwN0I0MkE5IC8qIFdlYkNvcmVOU1N0cmluZ0V4dHJhcy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb3JlTlNTdHJpbmdFeHRyYXMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNEQ5QkE2MEI4QzExNzUwMDdCNDJB
OSAvKiBXZWJDb3JlTlNTdHJpbmdFeHRyYXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYkNvcmVOU1N0cmluZ0V4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5MzRGNzEzNzBENUE2RUZGMDAwMThENjkgLyogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VC
YXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZUJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMw
NjcsNiArMTMwNjksNyBAQAogCQkJCTkzQjcwRDUzMDlFQjBDN0MwMDlEODQ2OCAvKiBTY3JpcHRD
b250cm9sbGVyLmNwcCAqLywKIAkJCQk5M0I3MEQ1NDA5RUIwQzdDMDA5RDg0NjggLyogU2NyaXB0
Q29udHJvbGxlci5oICovLAogCQkJCUE4M0UxQzcyMEU0OTA0MkIwMDE0MEI5QyAvKiBTY3JpcHRD
b250cm9sbGVyTWFjLm1tICovLAorCQkJCTkzNENDMTA5MEVEQjIyMzkwMEE2NThGMiAvKiBTY3Jp
cHRTb3VyY2VDb2RlLmggKi8sCiAJCQkJNDE2RjQ1RUYwRUQ3QjMxMTAwODIxNUI2IC8qIFNjcmlw
dFN0cmluZy5oICovLAogCQkJCTkzNENDMERGMEVEMzlENkYwMEE2NThGMiAvKiBTY3JpcHRWYWx1
ZS5jcHAgKi8sCiAJCQkJOTM0Q0MwRTAwRUQzOUQ2RjAwQTY1OEYyIC8qIFNjcmlwdFZhbHVlLmgg
Ki8sCkBAIC0xNjM4OCw2ICsxNjM5MSw3IEBACiAJCQkJNDE2RjQ1RjAwRUQ3QjMxMTAwODIxNUI2
IC8qIFNjcmlwdFN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDgwQUVDODIwRUQ4NzA4QjAw
REY0Q0NFIC8qIFdNTEludHJpbnNpY0V2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwODBBRUM4
NDBFRDg3MDhCMDBERjRDQ0UgLyogV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk5MzRDQzEwQTBFREIyMjM5MDBBNjU4RjIgLyogU2NyaXB0U291cmNlQ29kZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkluZGV4OiBiaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRTb3VyY2VQcm92
aWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL0NhY2hlZFNjcmlwdFNvdXJjZVByb3Zp
ZGVyLmgJKHJldmlzaW9uIDM4NzEwKQorKysgYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0U291cmNl
UHJvdmlkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAi
Q2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5o
IgorI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgogI2luY2x1ZGUgPHBhcnNlci9Tb3VyY2VDb2Rl
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IGJpbmRpbmdzL2pzL1NjcmlwdENvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3Bw
CShyZXZpc2lvbiAzODcxMCkKKysrIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCiAj
aW5jbHVkZSAiUGF1c2VkVGltZW91dHMuaCIKICNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKKyNp
bmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNp
bmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0cmluZ1NvdXJjZVByb3ZpZGVyLmgiCkBA
IC04OCwxMCArODksMTIgQEAgU2NyaXB0Q29udHJvbGxlcjo6flNjcmlwdENvbnRyb2xsZXIoKQog
ICAgIGRpc2Nvbm5lY3RQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKTsKIH0KIAotU2NyaXB0VmFsdWUg
U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlKSAKK1NjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IFNjcmlw
dFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpIAogewogICAgIC8vIGV2YWx1YXRlIGNvZGUuIFJldHVy
bnMgdGhlIEpTIHJldHVybiB2YWx1ZSBvciAwCiAgICAgLy8gaWYgdGhlcmUgd2FzIG5vbmUsIGFu
IGVycm9yIG9jY3VyZWQgb3IgdGhlIHR5cGUgY291bGRuJ3QgYmUgY29udmVydGVkLgorICAgIAor
ICAgIGNvbnN0IFNvdXJjZUNvZGUmIGpzU291cmNlQ29kZSA9IHNvdXJjZUNvZGUuanNTb3VyY2VD
b2RlKCk7CiAKICAgICBpbml0U2NyaXB0SWZOZWVkZWQoKTsKICAgICAvLyBpbmxpbmVDb2RlIGlz
IHRydWUgZm9yIDxhIGhyZWY9ImphdmFzY3JpcHQ6ZG9Tb21ldGhpbmcoKSI+CkBAIC0xMDAsNyAr
MTAzLDcgQEAgU2NyaXB0VmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoYwogICAgIC8v
IFNlZSBzbWFydCB3aW5kb3cub3BlbiBwb2xpY3kgZm9yIHdoZXJlIHRoaXMgaXMgdXNlZC4KICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBtX3dpbmRvd1NoZWxsLT53aW5kb3coKS0+Z2xvYmFsRXhlYygp
OwogICAgIGNvbnN0IFN0cmluZyogc2F2ZWRTb3VyY2VVUkwgPSBtX3NvdXJjZVVSTDsKLSAgICBT
dHJpbmcgc291cmNlVVJMID0gc291cmNlQ29kZS5wcm92aWRlcigpLT51cmwoKTsKKyAgICBTdHJp
bmcgc291cmNlVVJMID0ganNTb3VyY2VDb2RlLnByb3ZpZGVyKCktPnVybCgpOwogICAgIG1fc291
cmNlVVJMID0gJnNvdXJjZVVSTDsKIAogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKQEAgLTExMCw3
ICsxMTMsNyBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjCiAgICAg
bV9mcmFtZS0+a2VlcEFsaXZlKCk7CiAKICAgICBtX3dpbmRvd1NoZWxsLT53aW5kb3coKS0+c3Rh
cnRUaW1lb3V0Q2hlY2soKTsKLSAgICBDb21wbGV0aW9uIGNvbXAgPSBKU0M6OmV2YWx1YXRlKGV4
ZWMsIGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBzb3Vy
Y2VDb2RlLCBtX3dpbmRvd1NoZWxsKTsKKyAgICBDb21wbGV0aW9uIGNvbXAgPSBKU0M6OmV2YWx1
YXRlKGV4ZWMsIGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigp
LCBqc1NvdXJjZUNvZGUsIG1fd2luZG93U2hlbGwpOwogICAgIG1fd2luZG93U2hlbGwtPndpbmRv
dygpLT5zdG9wVGltZW91dENoZWNrKCk7CiAKICAgICBpZiAoY29tcC5jb21wbFR5cGUoKSA9PSBO
b3JtYWwgfHwgY29tcC5jb21wbFR5cGUoKSA9PSBSZXR1cm5WYWx1ZSkgewpJbmRleDogYmluZGlu
Z3MvanMvU2NyaXB0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL1Njcmlw
dENvbnRyb2xsZXIuaAkocmV2aXNpb24gMzg3MTApCisrKyBiaW5kaW5ncy9qcy9TY3JpcHRDb250
cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAgc3RydWN0IE5QT2JqZWN0
OwogCiBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKLSAgICBjbGFz
cyBTb3VyY2VDb2RlOwogCiAgICAgbmFtZXNwYWNlIEJpbmRpbmdzIHsKICAgICAgICAgY2xhc3Mg
SW5zdGFuY2U7CkBAIC01NSw2ICs1NCw3IEBAIGNsYXNzIEV2ZW50TGlzdGVuZXI7CiBjbGFzcyBI
VE1MUGx1Z0luRWxlbWVudDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgTm9kZTsKK2NsYXNzIFNjcmlw
dFNvdXJjZUNvZGU7CiBjbGFzcyBTY3JpcHRWYWx1ZTsKIGNsYXNzIFN0cmluZzsKIGNsYXNzIFdp
ZGdldDsKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV93aW5kb3dT
aGVsbC0+d2luZG93KCk7CiAgICAgfQogCi0gICAgU2NyaXB0VmFsdWUgZXZhbHVhdGUoY29uc3Qg
SlNDOjpTb3VyY2VDb2RlJik7CisgICAgU2NyaXB0VmFsdWUgZXZhbHVhdGUoY29uc3QgU2NyaXB0
U291cmNlQ29kZSYpOwogCiAgICAgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBjcmVhdGVJbmxp
bmVFdmVudExpc3RlbmVyKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcm
IGNvZGUsIE5vZGUqKTsKICNpZiBFTkFCTEUoU1ZHKQpJbmRleDogYmluZGluZ3MvanMvU2NyaXB0
U291cmNlQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNvZGUu
aAkocmV2aXNpb24gMCkKKysrIGJpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNvZGUuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgR29vZ2xl
IEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JpcHRTb3VyY2VDb2RlX2gK
KyNkZWZpbmUgU2NyaXB0U291cmNlQ29kZV9oCisKKyNpbmNsdWRlICJDYWNoZWRTY3JpcHRTb3Vy
Y2VQcm92aWRlci5oIgorI2luY2x1ZGUgIlN0cmluZ1NvdXJjZVByb3ZpZGVyLmgiCisjaW5jbHVk
ZSAiS1VSTC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcmlwdFNvdXJjZUNv
ZGUgeworcHVibGljOgorICAgIFNjcmlwdFNvdXJjZUNvZGUoY29uc3QgU3RyaW5nJiBzb3VyY2Us
IGNvbnN0IEtVUkwmIHVybCA9IEtVUkwoKSwgaW50IHN0YXJ0TGluZSA9IDEpCisgICAgICAgIDog
bV9jb2RlKG1ha2VTb3VyY2Uoc291cmNlLCB1cmwuaXNOdWxsKCkgPyBTdHJpbmcoKSA6IHVybC5z
dHJpbmcoKSwgc3RhcnRMaW5lKSkge30KKyAgICBTY3JpcHRTb3VyY2VDb2RlKENhY2hlZFNjcmlw
dCogY3MpCisgICAgICAgIDogbV9jb2RlKG1ha2VTb3VyY2UoY3MpKSB7fQorCisgICAgaW50IGxl
bmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZS5sZW5ndGgoKTsgfQorCisgICAgY29uc3QgSlND
OjpTb3VyY2VDb2RlJiBqc1NvdXJjZUNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGU7IH0KKwor
cHJpdmF0ZToKKyAgICBKU0M6OlNvdXJjZUNvZGUgbV9jb2RlOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2NyaXB0U291cmNlQ29kZV9oCkluZGV4OiBiaW5kaW5n
cy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9q
cy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMzg3MTApCisrKyBiaW5kaW5n
cy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsOCBAQAogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNXb3JrZXJD
b250ZXh0LmgiCisjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgorI2luY2x1ZGUgIlNjcmlw
dFZhbHVlLmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIldvcmtlck1l
c3NhZ2luZ1Byb3h5LmgiCiAjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCkBAIC03MCw3ICs3Miw3
IEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6aW5pdFNjcmlwdCgKICAgICBtX3dvcmtl
ckNvbnRleHRXcmFwcGVyID0gbmV3IChtX2dsb2JhbERhdGEuZ2V0KCkpIEpTV29ya2VyQ29udGV4
dChtX3dvcmtlckNvbnRleHQpOwogfQogCi1KU1ZhbHVlKiBXb3JrZXJTY3JpcHRDb250cm9sbGVy
OjpldmFsdWF0ZShjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCitTY3JpcHRWYWx1
ZSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2Rl
JiBzb3VyY2VDb2RlKQogewogICAgIHsKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX3NoYXJl
ZERhdGFNdXRleCk7CkBAIC04Myw3ICs4NSw3IEBAIEpTVmFsdWUqIFdvcmtlclNjcmlwdENvbnRy
b2xsZXI6OmV2YWx1YXQKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fd29ya2VyQ29udGV4dFdy
YXBwZXItPmdsb2JhbEV4ZWMoKTsKICAgICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5zdGFydFRp
bWVvdXRDaGVjaygpOwotICAgIENvbXBsZXRpb24gY29tcCA9IEpTQzo6ZXZhbHVhdGUoZXhlYywg
ZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCksIHNvdXJjZUNv
ZGUsIG1fd29ya2VyQ29udGV4dFdyYXBwZXIpOworICAgIENvbXBsZXRpb24gY29tcCA9IEpTQzo6
ZXZhbHVhdGUoZXhlYywgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNo
YWluKCksIHNvdXJjZUNvZGUuanNTb3VyY2VDb2RlKCksIG1fd29ya2VyQ29udGV4dFdyYXBwZXIp
OwogICAgIG1fd29ya2VyQ29udGV4dFdyYXBwZXItPnN0b3BUaW1lb3V0Q2hlY2soKTsKIAogICAg
IG1fd29ya2VyQ29udGV4dC0+dGhyZWFkKCktPm1lc3NhZ2luZ1Byb3h5KCktPnJlcG9ydFdvcmtl
clRocmVhZEFjdGl2aXR5KG1fd29ya2VyQ29udGV4dC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpOwpJ
bmRleDogYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaAkocmV2aXNpb24gMzg3MTApCisr
KyBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDEzICszNSwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBKU0dsb2JhbERh
dGE7Ci0gICAgY2xhc3MgSlNWYWx1ZTsKLSAgICBjbGFzcyBTb3VyY2VDb2RlOwogfQogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBKU1dvcmtlckNvbnRleHQ7CisgICAgY2xhc3Mg
U2NyaXB0U291cmNlQ29kZTsKKyAgICBjbGFzcyBTY3JpcHRWYWx1ZTsKICAgICBjbGFzcyBTdHJp
bmc7CiAgICAgY2xhc3MgV29ya2VyQ29udGV4dDsKIApAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1cm4gbV93b3JrZXJDb250ZXh0V3JhcHBlcjsK
ICAgICAgICAgfQogCi0gICAgICAgIEpTQzo6SlNWYWx1ZSogZXZhbHVhdGUoY29uc3QgSlNDOjpT
b3VyY2VDb2RlJik7CisgICAgICAgIFNjcmlwdFZhbHVlIGV2YWx1YXRlKGNvbnN0IFNjcmlwdFNv
dXJjZUNvZGUmKTsKIAogICAgICAgICB2b2lkIGZvcmJpZEV4ZWN1dGlvbigpOwogCkluZGV4OiBk
b20vU2NyaXB0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL1NjcmlwdEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAzODcxMCkKKysrIGRvbS9TY3JpcHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjUsMjEgKzI1LDE5IEBACiAjaW5jbHVkZSAiU2NyaXB0RWxlbWVudC5oIgogCiAjaW5j
bHVkZSAiQ2FjaGVkU2NyaXB0LmgiCi0jaW5jbHVkZSAiQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlk
ZXIuaCIKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJNSU1F
VHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgorI2luY2x1ZGUg
IlNjcmlwdFNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUg
IlN0cmluZ0hhc2guaCIKICNpbmNsdWRlICJTdHJpbmdTb3VyY2VQcm92aWRlci5oIgogI2luY2x1
ZGUgIlRleHQuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKLXVzaW5nIG5hbWVz
cGFjZSBKU0M7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBTY3JpcHRFbGVtZW50Ojpp
bnNlcnRlZEludG9Eb2N1bWVudChTY3JpcHRFbGVtZW50RGF0YSYgZGF0YSwgY29uc3QgU3RyaW5n
JiBzb3VyY2VVcmwpCkBAIC01NSw3ICs1Myw3IEBAIHZvaWQgU2NyaXB0RWxlbWVudDo6aW5zZXJ0
ZWRJbnRvRG9jdW1lbnQKICAgICAvLyBJZiB0aGVyZSdzIGFuIGVtcHR5IHNjcmlwdCBub2RlLCB3
ZSBzaG91bGRuJ3QgZXZhbHVhdGUgdGhlIHNjcmlwdAogICAgIC8vIGJlY2F1c2UgaWYgYSBzY3Jp
cHQgaXMgaW5zZXJ0ZWQgYWZ0ZXJ3YXJkcyAoYnkgc2V0dGluZyB0ZXh0IG9yIGlubmVyVGV4dCkK
ICAgICAvLyBpdCBzaG91bGQgYmUgZXZhbHVhdGVkLCBhbmQgZXZhbHVhdGVTY3JpcHQgb25seSBl
dmFsdWF0ZXMgYSBzY3JpcHQgb25jZS4KLSAgICBkYXRhLmV2YWx1YXRlU2NyaXB0KG1ha2VTb3Vy
Y2UoZGF0YS5zY3JpcHRDb250ZW50KCksIGRhdGEuZWxlbWVudCgpLT5kb2N1bWVudCgpLT51cmwo
KS5zdHJpbmcoKSkpOyAvLyBGSVhNRTogUHJvdmlkZSBhIHJlYWwgc3RhcnRpbmcgbGluZSBudW1i
ZXIgaGVyZS4KKyAgICBkYXRhLmV2YWx1YXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoZGF0YS5z
Y3JpcHRDb250ZW50KCksIGRhdGEuZWxlbWVudCgpLT5kb2N1bWVudCgpLT51cmwoKSkpOyAvLyBG
SVhNRTogUHJvdmlkZSBhIHJlYWwgc3RhcnRpbmcgbGluZSBudW1iZXIgaGVyZS4KIH0KIAogdm9p
ZCBTY3JpcHRFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KFNjcmlwdEVsZW1lbnREYXRhJiBk
YXRhKQpAQCAtNzUsNyArNzMsNyBAQCB2b2lkIFNjcmlwdEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdl
ZChTY3JpCiAgICAgLy8gYW5kIHRoZSBzY3JpcHQgZWxlbWVudCBoYXMgYmVlbiBpbnNlcnRlZCBp
biB0aGUgZG9jdW1lbnQKICAgICAvLyB3ZSBldmFsdWF0ZSB0aGUgc2NyaXB0LgogICAgIGlmIChl
bGVtZW50LT5pbkRvY3VtZW50KCkgJiYgZWxlbWVudC0+Zmlyc3RDaGlsZCgpKQotICAgICAgICBk
YXRhLmV2YWx1YXRlU2NyaXB0KG1ha2VTb3VyY2UoZGF0YS5zY3JpcHRDb250ZW50KCksIGVsZW1l
bnQtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKSk7IC8vIEZJWE1FOiBQcm92aWRlIGEgcmVh
bCBzdGFydGluZyBsaW5lIG51bWJlciBoZXJlCisgICAgICAgIGRhdGEuZXZhbHVhdGVTY3JpcHQo
U2NyaXB0U291cmNlQ29kZShkYXRhLnNjcmlwdENvbnRlbnQoKSwgZWxlbWVudC0+ZG9jdW1lbnQo
KS0+dXJsKCkpKTsgLy8gRklYTUU6IFByb3ZpZGUgYSByZWFsIHN0YXJ0aW5nIGxpbmUgbnVtYmVy
IGhlcmUKIH0KIAogdm9pZCBTY3JpcHRFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oU2Ny
aXB0RWxlbWVudERhdGEmIGRhdGEsIGNvbnN0IFN0cmluZyYgc291cmNlVXJsKQpAQCAtMTYyLDcg
KzE2MCw3IEBAIHZvaWQgU2NyaXB0RWxlbWVudERhdGE6OnJlcXVlc3RTY3JpcHQoY28KICAgICBt
X3NjcmlwdEVsZW1lbnQtPmRpc3BhdGNoRXJyb3JFdmVudCgpOwogfQogCi12b2lkIFNjcmlwdEVs
ZW1lbnREYXRhOjpldmFsdWF0ZVNjcmlwdChjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQor
dm9pZCBTY3JpcHRFbGVtZW50RGF0YTo6ZXZhbHVhdGVTY3JpcHQoY29uc3QgU2NyaXB0U291cmNl
Q29kZSYgc291cmNlQ29kZSkKIHsKICAgICBpZiAobV9ldmFsdWF0ZWQgfHwgIXNvdXJjZUNvZGUu
bGVuZ3RoKCkgfHwgIXNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTk4LDcgKzE5Niw3IEBAIHZvaWQgU2NyaXB0RWxlbWVudERhdGE6Om5vdGlmeUZpbmlz
aGVkKEMKICAgICBpZiAoY3MtPmVycm9yT2NjdXJyZWQoKSkKICAgICAgICAgbV9zY3JpcHRFbGVt
ZW50LT5kaXNwYXRjaEVycm9yRXZlbnQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgZXZhbHVhdGVT
Y3JpcHQobWFrZVNvdXJjZShjcykpOworICAgICAgICBldmFsdWF0ZVNjcmlwdChTY3JpcHRTb3Vy
Y2VDb2RlKGNzKSk7CiAgICAgICAgIG1fc2NyaXB0RWxlbWVudC0+ZGlzcGF0Y2hMb2FkRXZlbnQo
KTsKICAgICB9CiAKSW5kZXg6IGRvbS9TY3JpcHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9t
L1NjcmlwdEVsZW1lbnQuaAkocmV2aXNpb24gMzg3MTApCisrKyBkb20vU2NyaXB0RWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxNSArMjQsMTIgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCiAKLW5hbWVz
cGFjZSBKU0MgewotICAgIGNsYXNzIFNvdXJjZUNvZGU7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgQ2FjaGVkU2NyaXB0OwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIFNjcmlwdEVs
ZW1lbnREYXRhOworY2xhc3MgU2NyaXB0U291cmNlQ29kZTsKIAogY2xhc3MgU2NyaXB0RWxlbWVu
dCB7CiBwdWJsaWM6CkBAIC04MSw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhdmVG
aXJlZExvYWRFdmVudChib29sIGZpcmVkTG9hZCkgeyBtX2ZpcmVkTG9hZCA9IGZpcmVkTG9hZDsg
fQogCiAgICAgdm9pZCByZXF1ZXN0U2NyaXB0KGNvbnN0IFN0cmluZyYgc291cmNlVXJsKTsKLSAg
ICB2b2lkIGV2YWx1YXRlU2NyaXB0KGNvbnN0IEpTQzo6U291cmNlQ29kZSYpOworICAgIHZvaWQg
ZXZhbHVhdGVTY3JpcHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYpOwogICAgIHZvaWQgc3RvcExv
YWRSZXF1ZXN0KCk7CiAKIHByaXZhdGU6CkluZGV4OiBkb20vV29ya2VyVGhyZWFkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBkb20vV29ya2VyVGhyZWFkLmNwcAkocmV2aXNpb24gMzg3MTApCisrKyBkb20v
V29ya2VyVGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTQgKzMxLDEzIEBACiAjaW5j
bHVkZSAiV29ya2VyVGhyZWFkLmgiCiAKICNpbmNsdWRlICJKU1dvcmtlckNvbnRleHQuaCIKLSNp
bmNsdWRlICJTdHJpbmdTb3VyY2VQcm92aWRlci5oIgorI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNv
ZGUuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIldvcmtlci5oIgogI2lu
Y2x1ZGUgIldvcmtlckNvbnRleHQuaCIKICNpbmNsdWRlICJXb3JrZXJNZXNzYWdpbmdQcm94eS5o
IgogI2luY2x1ZGUgIldvcmtlclRhc2suaCIKIAotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzUmVmUHRyPFdvcmtlclRocmVhZD4gV29ya2VyVGhyZWFk
OjpjcmVhdGUoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUs
IFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94eSkKQEAgLTc1LDEwICs3NCwxMCBA
QCB2b2lkKiBXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZFN0YXJ0KHZvCiAKIHZvaWQqIFdvcmtl
clRocmVhZDo6d29ya2VyVGhyZWFkKCkKIHsKLSAgICBtX3dvcmtlckNvbnRleHQgPSBXb3JrZXJD
b250ZXh0OjpjcmVhdGUoS1VSTChtX3NjcmlwdFVSTCksIHRoaXMpOworICAgIG1fd29ya2VyQ29u
dGV4dCA9IFdvcmtlckNvbnRleHQ6OmNyZWF0ZShtX3NjcmlwdFVSTCwgdGhpcyk7CiAgICAgV29y
a2VyU2NyaXB0Q29udHJvbGxlciogc2NyaXB0ID0gbV93b3JrZXJDb250ZXh0LT5zY3JpcHQoKTsK
IAotICAgIHNjcmlwdC0+ZXZhbHVhdGUobWFrZVNvdXJjZShtX3NvdXJjZUNvZGUsIG1fc2NyaXB0
VVJMKSk7CisgICAgc2NyaXB0LT5ldmFsdWF0ZShTY3JpcHRTb3VyY2VDb2RlKG1fc291cmNlQ29k
ZSwgbV9zY3JpcHRVUkwpKTsKICAgICBtX21lc3NhZ2luZ1Byb3h5LT5jb25maXJtV29ya2VyVGhy
ZWFkTWVzc2FnZShtX3dvcmtlckNvbnRleHQtPmhhc1BlbmRpbmdBY3Rpdml0eSgpKTsgLy8gVGhp
cyB3YXNuJ3QgcmVhbGx5IGEgbWVzc2FnZSwgYnV0IGl0IGNvdW50cyBhcyBvbmUgZm9yIEdDLgog
CiAgICAgd2hpbGUgKHRydWUpIHsKSW5kZXg6IGRvbS9Xb3JrZXJUaHJlYWQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBkb20vV29ya2VyVGhyZWFkLmgJKHJldmlzaW9uIDM4NzEwKQorKysgZG9tL1dvcmtlclRo
cmVhZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMyArMjksMTIgQEAKIAogI2lmIEVOQUJMRShX
T1JLRVJTKQogCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJLVVJMLmgi
CiAjaW5jbHVkZSA8d3RmL01lc3NhZ2VRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIEtVUkw7CiAgICAgY2xhc3Mg
V29ya2VyQ29udGV4dDsKICAgICBjbGFzcyBXb3JrZXJNZXNzYWdpbmdQcm94eTsKICAgICBjbGFz
cyBXb3JrZXJUYXNrOwpAQCAtNjEsNyArNjAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOwogCi0gICAgICAgIFN0cmluZyBtX3Nj
cmlwdFVSTDsKKyAgICAgICAgS1VSTCBtX3NjcmlwdFVSTDsKICAgICAgICAgU3RyaW5nIG1fc291
cmNlQ29kZTsKICAgICAgICAgV29ya2VyTWVzc2FnaW5nUHJveHkqIG1fbWVzc2FnaW5nUHJveHk7
CiAKSW5kZXg6IGRvbS9YTUxUb2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9YTUxUb2tl
bml6ZXIuY3BwCShyZXZpc2lvbiAzODcxMCkKKysrIGRvbS9YTUxUb2tlbml6ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0Lmgi
CiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xs
ZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFs
dWUuaCIKICNpbmNsdWRlICJTdHJpbmdTb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIlRleHRS
ZXNvdXJjZURlY29kZXIuaCIKQEAgLTMyNiw3ICszMjcsNyBAQCB2b2lkIFhNTFRva2VuaXplcjo6
bm90aWZ5RmluaXNoZWQoQ2FjaGVkCiAgICAgQVNTRVJUKG1fcGVuZGluZ1NjcmlwdCA9PSBmaW5p
c2hlZE9iaik7CiAgICAgQVNTRVJUKG1fcGVuZGluZ1NjcmlwdC0+YWNjZXNzQ291bnQoKSA+IDAp
OwogICAgICAgICAKLSAgICBKU0M6OlNvdXJjZUNvZGUgc291cmNlQ29kZSA9IG1ha2VTb3VyY2Uo
bV9wZW5kaW5nU2NyaXB0LmdldCgpKTsKKyAgICBTY3JpcHRTb3VyY2VDb2RlIHNvdXJjZUNvZGUo
bV9wZW5kaW5nU2NyaXB0LmdldCgpKTsKICAgICBib29sIGVycm9yT2NjdXJyZWQgPSBtX3BlbmRp
bmdTY3JpcHQtPmVycm9yT2NjdXJyZWQoKTsKIAogICAgIG1fcGVuZGluZ1NjcmlwdC0+cmVtb3Zl
Q2xpZW50KHRoaXMpOwpJbmRleDogZG9tL1hNTFRva2VuaXplckxpYnhtbDIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGRvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcAkocmV2aXNpb24gMzg3MTApCisrKyBk
b20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDggKzQ3LDgg
QEAKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJv
bGxlci5oIgogI2luY2x1ZGUgIlNjcmlwdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTY3JpcHRTb3Vy
Y2VDb2RlLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKLSNpbmNsdWRlICJTdHJpbmdTb3Vy
Y2VQcm92aWRlci5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNpbmNsdWRl
IDxsaWJ4bWwvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bGlieG1sL3BhcnNlckludGVybmFscy5oPgpA
QCAtODA3LDcgKzgwNyw3IEBAIHZvaWQgWE1MVG9rZW5pemVyOjplbmRFbGVtZW50TnMoKQogICAg
ICAgICAgICAgfSBlbHNlIAogICAgICAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7CiAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV92aWV3LT5mcmFtZSgpLT5sb2FkZXIoKS0+ZXhl
Y3V0ZVNjcmlwdChtYWtlU291cmNlKHNjcmlwdEVsZW1lbnQtPnNjcmlwdENvbnRlbnQoKSwgbV9k
b2MtPnVybCgpLnN0cmluZygpLCBtX3NjcmlwdFN0YXJ0TGluZSkpOworICAgICAgICAgICAgbV92
aWV3LT5mcmFtZSgpLT5sb2FkZXIoKS0+ZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNj
cmlwdEVsZW1lbnQtPnNjcmlwdENvbnRlbnQoKSwgbV9kb2MtPnVybCgpLCBtX3NjcmlwdFN0YXJ0
TGluZSkpOwogCiAgICAgICAgIG1fcmVxdWVzdGluZ1NjcmlwdCA9IGZhbHNlOwogICAgIH0KSW5k
ZXg6IGRvbS9YTUxUb2tlbml6ZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL1hNTFRva2VuaXpl
clF0LmNwcAkocmV2aXNpb24gMzg3MTApCisrKyBkb20vWE1MVG9rZW5pemVyUXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nyw4ICs0Nyw4IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5o
IgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTY3JpcHRFbGVtZW50
LmgiCisjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVl
LmgiCi0jaW5jbHVkZSAiU3RyaW5nU291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlICJUZXh0UmVz
b3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVkZSA8UURlYnVnPgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgpAQCAtNTg1LDcgKzU4NSw3IEBAIHZvaWQgWE1MVG9rZW5pemVyOjpwYXJzZUVuZEVsZW1l
bnQoKQogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50
ID0gMDsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3ZpZXctPmZyYW1lKCktPmxvYWRl
cigpLT5leGVjdXRlU2NyaXB0KG1ha2VTb3VyY2Uoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVu
dCgpLCBtX2RvYy0+dXJsKCkuc3RyaW5nKCksIG1fc2NyaXB0U3RhcnRMaW5lKSk7CisgICAgICAg
ICAgICBtX3ZpZXctPmZyYW1lKCktPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJj
ZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBtX2RvYy0+dXJsKCksIG1fc2Ny
aXB0U3RhcnRMaW5lKSk7CiAKICAgICAgICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0gZmFsc2U7CiAg
ICAgfQpJbmRleDogaHRtbC9IVE1MVG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hU
TUxUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiAzODcxMCkKKysrIGh0bWwvSFRNTFRva2VuaXplci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJDU1NIZWxwZXIu
aCIKICNpbmNsdWRlICJDYWNoZS5oIgogI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgotI2luY2x1
ZGUgIkNhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiRG9jTG9hZGVyLmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIK
QEAgLTQ1LDggKzQ0LDggQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUHJlbG9hZFNj
YW5uZXIuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiU2NyaXB0
U291cmNlQ29kZS5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAiU3RyaW5n
U291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCiAjaW5jbHVkZSA8d3Rm
L0FTQ0lJQ1R5cGUuaD4KIApAQCAtNTUsNyArNTQsNiBAQAogI2RlZmluZSBQUkVMT0FEX1NDQU5O
RVJfRU5BQkxFRCAxCiAvLyAjZGVmaW5lIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcgMQog
Ci11c2luZyBuYW1lc3BhY2UgSlNDOwogdXNpbmcgbmFtZXNwYWNlIFdURjsKIHVzaW5nIG5hbWVz
cGFjZSBzdGQ7CiAKQEAgLTUwMyw3ICs1MDEsNyBAQCBIVE1MVG9rZW5pemVyOjpTdGF0ZSBIVE1M
VG9rZW5pemVyOjpzY3JpCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcHJlcGVu
ZGluZ1NyYyA9IG1fc3JjOwogICAgICAgICAgICAgc2V0U3JjKFNlZ21lbnRlZFN0cmluZygpKTsK
LSAgICAgICAgICAgIHN0YXRlID0gc2NyaXB0RXhlY3V0aW9uKG1ha2VTb3VyY2Uoc2NyaXB0U3Ry
aW5nLCBtX2RvYy0+ZnJhbWUoKSA/IG1fZG9jLT5mcmFtZSgpLT5kb2N1bWVudCgpLT51cmwoKS5z
dHJpbmcoKSA6IFN0cmluZygpLCBzdGFydExpbmUpLCBzdGF0ZSk7CisgICAgICAgICAgICBzdGF0
ZSA9IHNjcmlwdEV4ZWN1dGlvbihTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdFN0cmluZywgbV9kb2Mt
PmZyYW1lKCkgPyBtX2RvYy0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCkgOiBLVVJMKCksIHN0
YXJ0TGluZSksIHN0YXRlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTQ1LDcgKzU0Myw3IEBA
IEhUTUxUb2tlbml6ZXI6OlN0YXRlIEhUTUxUb2tlbml6ZXI6OnNjcmkKICAgICByZXR1cm4gc3Rh
dGU7CiB9CiAKLUhUTUxUb2tlbml6ZXI6OlN0YXRlIEhUTUxUb2tlbml6ZXI6OnNjcmlwdEV4ZWN1
dGlvbihjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBTdGF0ZSBzdGF0ZSkKK0hUTUxUb2tl
bml6ZXI6OlN0YXRlIEhUTUxUb2tlbml6ZXI6OnNjcmlwdEV4ZWN1dGlvbihjb25zdCBTY3JpcHRT
b3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBTdGF0ZSBzdGF0ZSkKIHsKICAgICBpZiAobV9mcmFnbWVu
dCB8fCAhbV9kb2MtPmZyYW1lKCkpCiAgICAgICAgIHJldHVybiBzdGF0ZTsKQEAgLTE5NjksNyAr
MTk2Nyw3IEBAIHZvaWQgSFRNTFRva2VuaXplcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGUKIAogICAg
ICAgICAvLyBtYWtlIHN1cmUgd2UgZm9yZ2V0IGFib3V0IHRoZSBzY3JpcHQgYmVmb3JlIHdlIGV4
ZWN1dGUgdGhlIG5ldyBvbmUKICAgICAgICAgLy8gaW5maW5pdGUgcmVjdXJzaW9uIG1pZ2h0IGhh
cHBlbiBvdGhlcndpc2UKLSAgICAgICAgSlNDOjpTb3VyY2VDb2RlIHNvdXJjZUNvZGUgPSBtYWtl
U291cmNlKGNzKTsKKyAgICAgICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VDb2RlKGNzKTsKICAg
ICAgICAgYm9vbCBlcnJvck9jY3VycmVkID0gY3MtPmVycm9yT2NjdXJyZWQoKTsKICAgICAgICAg
Y3MtPnJlbW92ZUNsaWVudCh0aGlzKTsKIApJbmRleDogaHRtbC9IVE1MVG9rZW5pemVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gaHRtbC9IVE1MVG9rZW5pemVyLmgJKHJldmlzaW9uIDM4NzEwKQorKysgaHRt
bC9IVE1MVG9rZW5pemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEwICszNCw2IEBACiAjaW5j
bHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAotbmFtZXNwYWNl
IEpTQyB7Ci0gICAgY2xhc3MgU291cmNlQ29kZTsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBDYWNoZWRTY3JpcHQ7CkBAIC01MCw2ICs0Niw3IEBAIGNsYXNzIEZyYW1lVmlldzsK
IGNsYXNzIEhUTUxQYXJzZXI7CiBjbGFzcyBOb2RlOwogY2xhc3MgUHJlbG9hZFNjYW5uZXI7Citj
bGFzcyBTY3JpcHRTb3VyY2VDb2RlOwogCiAvKioKICAqIEBpbnRlcm5hbApAQCAtMTgxLDcgKzE3
OCw3IEBAIHByaXZhdGU6CiAgICAgU3RhdGUgcGFyc2VFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiwg
VUNoYXIqJiBkZXN0LCBTdGF0ZSwgdW5zaWduZWQmIGNCdWZmZXJQb3MsIGJvb2wgc3RhcnQsIGJv
b2wgcGFyc2luZ1RhZyk7CiAgICAgU3RhdGUgcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oU2Vn
bWVudGVkU3RyaW5nJiwgU3RhdGUpOwogICAgIFN0YXRlIHNjcmlwdEhhbmRsZXIoU3RhdGUpOwot
ICAgIFN0YXRlIHNjcmlwdEV4ZWN1dGlvbihjb25zdCBKU0M6OlNvdXJjZUNvZGUmLCBTdGF0ZSk7
CisgICAgU3RhdGUgc2NyaXB0RXhlY3V0aW9uKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmLCBTdGF0
ZSk7CiAgICAgdm9pZCBzZXRTcmMoY29uc3QgU2VnbWVudGVkU3RyaW5nJik7CiAgCiAgICAgLy8g
Y2hlY2sgaWYgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgaW4gdGhlIGJ1ZmZlci4KSW5kZXg6IGxvYWRl
ci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAko
cmV2aXNpb24gMzg3MTApCisrKyBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MCw2ICs4MCw3IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRl
ICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5j
bHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5j
bHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKQEAg
LTkwLDggKzkxLDYgQEAKICNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlhN
TEh0dHBSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiWE1MVG9rZW5pemVyLmgiCi0jaW5jbHVkZSA8cnVu
dGltZS9KU0xvY2suaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+CiAjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgogCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9O
UykKQEAgLTEwOSw4ICsxMDgsNiBAQAogI2luY2x1ZGUgIlNWR1ZpZXdTcGVjLmgiCiAjZW5kaWYK
IAotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgRU5B
QkxFKFNWRykKQEAgLTc3NiwxMCArNzczLDEwIEBAIGJvb2wgRnJhbWVMb2FkZXI6OmV4ZWN1dGVJ
ZkphdmFTY3JpcHRVUkwKIAogU2NyaXB0VmFsdWUgRnJhbWVMb2FkZXI6OmV4ZWN1dGVTY3JpcHQo
Y29uc3QgU3RyaW5nJiBzY3JpcHQsIGJvb2wgZm9yY2VVc2VyR2VzdHVyZSkKIHsKLSAgICByZXR1
cm4gZXhlY3V0ZVNjcmlwdChtYWtlU291cmNlKHNjcmlwdCwgZm9yY2VVc2VyR2VzdHVyZSA/IFN0
cmluZygpIDogbV9VUkwuc3RyaW5nKCkpKTsKKyAgICByZXR1cm4gZXhlY3V0ZVNjcmlwdChTY3Jp
cHRTb3VyY2VDb2RlKHNjcmlwdCwgZm9yY2VVc2VyR2VzdHVyZSA/IEtVUkwoKSA6IG1fVVJMKSk7
CiB9CiAKLVNjcmlwdFZhbHVlIEZyYW1lTG9hZGVyOjpleGVjdXRlU2NyaXB0KGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZUNvZGUpCitTY3JpcHRWYWx1ZSBGcmFtZUxvYWRlcjo6ZXhlY3V0ZVNjcmlw
dChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQogewogICAgIGlmICghbV9mcmFt
ZS0+c2NyaXB0KCktPmlzRW5hYmxlZCgpIHx8IG1fZnJhbWUtPnNjcmlwdCgpLT5pc1BhdXNlZCgp
KQogICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKSW5kZXg6IGxvYWRlci9GcmFtZUxvYWRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9GcmFtZUxvYWRlci5oCShyZXZpc2lvbiAzODcxMCkK
KysrIGxvYWRlci9GcmFtZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMCArNDksNiBA
QAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCiAjZW5kaWYKIAotbmFtZXNwYWNl
IEpTQyB7Ci0gICAgY2xhc3MgU291cmNlQ29kZTsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgY2xhc3MgQXJjaGl2ZTsKQEAgLTc5LDYgKzc1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIGNsYXNzIFJlc291cmNlTG9hZGVyOwogICAgIGNsYXNzIFJlc291cmNlUmVxdWVzdDsK
ICAgICBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworICAgIGNsYXNzIFNjcmlwdFNvdXJjZUNvZGU7
CiAgICAgY2xhc3MgU2NyaXB0VmFsdWU7CiAgICAgY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAgICAg
Y2xhc3MgU2hhcmVkQnVmZmVyOwpAQCAtMzM5LDcgKzMzNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHVybCBpcyBhIEphdmFTY3JpcHQgVVJMLgog
ICAgICAgICBib29sIGV4ZWN1dGVJZkphdmFTY3JpcHRVUkwoY29uc3QgS1VSTCYgdXJsLCBib29s
IHVzZXJHZXN0dXJlID0gZmFsc2UsIGJvb2wgcmVwbGFjZURvY3VtZW50ID0gdHJ1ZSk7CiAKLSAg
ICAgICAgU2NyaXB0VmFsdWUgZXhlY3V0ZVNjcmlwdChjb25zdCBKU0M6OlNvdXJjZUNvZGUmKTsK
KyAgICAgICAgU2NyaXB0VmFsdWUgZXhlY3V0ZVNjcmlwdChjb25zdCBTY3JpcHRTb3VyY2VDb2Rl
Jik7CiAgICAgICAgIFNjcmlwdFZhbHVlIGV4ZWN1dGVTY3JpcHQoY29uc3QgU3RyaW5nJiBzY3Jp
cHQsIGJvb2wgZm9yY2VVc2VyR2VzdHVyZSA9IGZhbHNlKTsKIAogICAgICAgICB2b2lkIGdvdG9B
bmNob3IoKTsK
</data>
<flag name="review"
          id="11793"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25443</attachid>
            <date>2008-11-24 13:14:23 -0800</date>
            <delta_ts>2008-11-24 14:36:06 -0800</delta_ts>
            <desc>v2.2 patch - revised per review</desc>
            <filename>ssc_2.2.diff</filename>
            <type>text/plain</type>
            <size>29061</size>
            <attacher name="Darin Fisher (:fishd, Google)">fishd</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM4NzE3
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAKKzIwMDgtMTEt
MjQgIERhcmluIEZpc2hlciAgPGRhcmluQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBTYW0gV2VpbmlnLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMjQ0OAorICAgICAgICBDcmVhdGUgYW4gYWJzdHJhY3Rpb24gZm9yIEpTQzo6
U291cmNlQ29kZQorCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6Cisg
ICAgICAgICogYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIuaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3Jp
cHRDb250cm9sbGVyLmg6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0U291cmNlQ29kZS5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFNvdXJjZUNvZGU6OlNjcmlwdFNvdXJj
ZUNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0U291cmNlQ29kZTo6bGVuZ3RoKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdFNvdXJjZUNvZGU6OmpzU291cmNlQ29kZSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXZuIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgICogZG9tL1NjcmlwdEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRv
RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6Y2hpbGRyZW5DaGFu
Z2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnREYXRhOjpldmFsdWF0ZVNjcmlw
dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50RGF0YTo6bm90aWZ5RmluaXNoZWQp
OgorICAgICAgICAqIGRvbS9TY3JpcHRFbGVtZW50Lmg6CisgICAgICAgICogZG9tL1dvcmtlclRo
cmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZCk6
CisgICAgICAgICogZG9tL1dvcmtlclRocmVhZC5oOgorICAgICAgICAqIGRvbS9YTUxUb2tlbml6
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW5pemVyOjpub3RpZnlGaW5pc2hlZCk6
CisgICAgICAgICogZG9tL1hNTFRva2VuaXplckxpYnhtbDIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6WE1MVG9rZW5pemVyOjplbmRFbGVtZW50TnMpOgorICAgICAgICAqIGRvbS9YTUxUb2tlbml6
ZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6OnBhcnNlRW5kRWxlbWVu
dCk6CisgICAgICAgICogaHRtbC9IVE1MVG9rZW5pemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUb2tlbml6ZXI6OnNjcmlwdEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRv
a2VuaXplcjo6c2NyaXB0RXhlY3V0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6
ZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKiBodG1sL0hUTUxUb2tlbml6ZXIuaDoKKyAg
ICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXI6OmV4ZWN1dGVTY3JpcHQpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5oOgor
CiAyMDA4LTExLTI0ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4KSW5kZXg6IFdlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CShyZXZpc2lvbiAzODcxNykKKysrIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzg4MSw2ICsxMzg4MSwxMCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4N
CiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcU2NyaXB0U291
cmNlQ29kZS5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQogCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFNjcmlwdFN0cmluZy5oIg0KIAkJCQkJPg0KIAkJCQk8
L0ZpbGU+DQpJbmRleDogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMzg3MTcp
CisrKyBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTE4MDEsNiArMTgwMSw3IEBACiAJCTkzNDQyQ0EwMEQyQjMzNjAwMDMzOEZGOSAvKiBIVE1MVGFi
bGVSb3dzQ29sbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MzQ0MkM5RjBEMkIzMzYwMDAzMzhGRjkgLyogSFRNTFRhYmxlUm93c0NvbGxl
Y3Rpb24uY3BwICovOyB9OwogCQk5MzRDQzBFMTBFRDM5RDZGMDBBNjU4RjIgLyogU2NyaXB0VmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM0
Q0MwREYwRUQzOUQ2RjAwQTY1OEYyIC8qIFNjcmlwdFZhbHVlLmNwcCAqLzsgfTsKIAkJOTM0Q0Mw
RTIwRUQzOUQ2RjAwQTY1OEYyIC8qIFNjcmlwdFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzRDQzBFMDBFRDM5RDZGMDBBNjU4RjIgLyogU2Ny
aXB0VmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk5MzRDQzEwQTBFREIyMjM5MDBBNjU4RjIgLyogU2NyaXB0U291cmNlQ29kZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM0Q0MxMDkwRURCMjIz
OTAwQTY1OEYyIC8qIFNjcmlwdFNvdXJjZUNvZGUuaCAqLzsgfTsKIAkJOTM0RDlCQTUwQjhDMTE2
QjAwN0I0MkE5IC8qIFdlYkNvcmVOU1N0cmluZ0V4dHJhcy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNEQ5QkE0MEI4QzExNkIwMDdCNDJBOSAvKiBX
ZWJDb3JlTlNTdHJpbmdFeHRyYXMubW0gKi87IH07CiAJCTkzNEQ5QkE3MEI4QzExNzUwMDdCNDJB
OSAvKiBXZWJDb3JlTlNTdHJpbmdFeHRyYXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzNEQ5QkE2MEI4QzExNzUwMDdCNDJBOSAvKiBXZWJDb3JlTlNT
dHJpbmdFeHRyYXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk5MzRGNzEzODBENUE2RUZGMDAwMThENjkgLyogQXV0aGVudGljYXRpb25DaGFsbGVu
Z2VCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzNEY3MTM3MEQ1QTZFRkYwMDAxOEQ2OSAvKiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2Uu
Y3BwICovOyB9OwpAQCAtNjU4Miw2ICs2NTgzLDcgQEAKIAkJOTM0NDJDOUYwRDJCMzM2MDAwMzM4
RkY5IC8qIEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTM0Q0MwREYwRUQzOUQ2RjAwQTY1OEYyIC8qIFNjcmlwdFZhbHVl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdFZhbHVlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM0Q0MwRTAwRUQzOUQ2RjAwQTY1OEYy
IC8qIFNjcmlwdFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlw
dFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzNENDMTA5MEVEQjIyMzkw
MEE2NThGMiAvKiBTY3JpcHRTb3VyY2VDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNjcmlwdFNvdXJjZUNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTM0RDlCQTQwQjhDMTE2QjAwN0I0MkE5IC8qIFdlYkNvcmVOU1N0cmluZ0V4dHJhcy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb3JlTlNTdHJpbmdFeHRy
YXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNEQ5QkE2MEI4QzExNzUwMDdC
NDJBOSAvKiBXZWJDb3JlTlNTdHJpbmdFeHRyYXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkNvcmVOU1N0cmluZ0V4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5MzRGNzEzNzBENUE2RUZGMDAwMThENjkgLyogQXV0aGVudGljYXRpb25DaGFsbGVu
Z2VCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZUJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTMwNjcsNiArMTMwNjksNyBAQAogCQkJCTkzQjcwRDUzMDlFQjBDN0MwMDlEODQ2OCAvKiBTY3Jp
cHRDb250cm9sbGVyLmNwcCAqLywKIAkJCQk5M0I3MEQ1NDA5RUIwQzdDMDA5RDg0NjggLyogU2Ny
aXB0Q29udHJvbGxlci5oICovLAogCQkJCUE4M0UxQzcyMEU0OTA0MkIwMDE0MEI5QyAvKiBTY3Jp
cHRDb250cm9sbGVyTWFjLm1tICovLAorCQkJCTkzNENDMTA5MEVEQjIyMzkwMEE2NThGMiAvKiBT
Y3JpcHRTb3VyY2VDb2RlLmggKi8sCiAJCQkJNDE2RjQ1RUYwRUQ3QjMxMTAwODIxNUI2IC8qIFNj
cmlwdFN0cmluZy5oICovLAogCQkJCTkzNENDMERGMEVEMzlENkYwMEE2NThGMiAvKiBTY3JpcHRW
YWx1ZS5jcHAgKi8sCiAJCQkJOTM0Q0MwRTAwRUQzOUQ2RjAwQTY1OEYyIC8qIFNjcmlwdFZhbHVl
LmggKi8sCkBAIC0xNjM4OCw2ICsxNjM5MSw3IEBACiAJCQkJNDE2RjQ1RjAwRUQ3QjMxMTAwODIx
NUI2IC8qIFNjcmlwdFN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDgwQUVDODIwRUQ4NzA4
QjAwREY0Q0NFIC8qIFdNTEludHJpbnNpY0V2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwODBB
RUM4NDBFRDg3MDhCMDBERjRDQ0UgLyogV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk5MzRDQzEwQTBFREIyMjM5MDBBNjU4RjIgLyogU2NyaXB0U291cmNlQ29k
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBiaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRTb3VyY2VQ
cm92aWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL0NhY2hlZFNjcmlwdFNvdXJjZVBy
b3ZpZGVyLmgJKHJldmlzaW9uIDM4NzE3KQorKysgYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0U291
cmNlUHJvdmlkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVk
ZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRs
ZS5oIgorI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgogI2luY2x1ZGUgPHBhcnNlci9Tb3VyY2VD
b2RlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IGJpbmRpbmdzL2pzL1NjcmlwdENv
bnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIu
Y3BwCShyZXZpc2lvbiAzODcxNykKKysrIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw5ICszOCw5IEBACiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgi
CiAjaW5jbHVkZSAiUGF1c2VkVGltZW91dHMuaCIKICNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIK
KyNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIK
ICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlN0cmluZ1NvdXJjZVByb3ZpZGVyLmgi
CiAKICNpbmNsdWRlIDxydW50aW1lL0NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxkZWJ1Z2dlci9E
ZWJ1Z2dlci5oPgpAQCAtODgsMTAgKzg4LDEyIEBAIFNjcmlwdENvbnRyb2xsZXI6On5TY3JpcHRD
b250cm9sbGVyKCkKICAgICBkaXNjb25uZWN0UGxhdGZvcm1TY3JpcHRPYmplY3RzKCk7CiB9CiAK
LVNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IEpTQzo6U291cmNl
Q29kZSYgc291cmNlQ29kZSkgCitTY3JpcHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0
ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKSAKIHsKICAgICAvLyBldmFsdWF0
ZSBjb2RlLiBSZXR1cm5zIHRoZSBKUyByZXR1cm4gdmFsdWUgb3IgMAogICAgIC8vIGlmIHRoZXJl
IHdhcyBub25lLCBhbiBlcnJvciBvY2N1cmVkIG9yIHRoZSB0eXBlIGNvdWxkbid0IGJlIGNvbnZl
cnRlZC4KKyAgICAKKyAgICBjb25zdCBTb3VyY2VDb2RlJiBqc1NvdXJjZUNvZGUgPSBzb3VyY2VD
b2RlLmpzU291cmNlQ29kZSgpOwogCiAgICAgaW5pdFNjcmlwdElmTmVlZGVkKCk7CiAgICAgLy8g
aW5saW5lQ29kZSBpcyB0cnVlIGZvciA8YSBocmVmPSJqYXZhc2NyaXB0OmRvU29tZXRoaW5nKCki
PgpAQCAtMTAwLDcgKzEwMiw3IEBAIFNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1
YXRlKGMKICAgICAvLyBTZWUgc21hcnQgd2luZG93Lm9wZW4gcG9saWN5IGZvciB3aGVyZSB0aGlz
IGlzIHVzZWQuCiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV93aW5kb3dTaGVsbC0+d2luZG93KCkt
Pmdsb2JhbEV4ZWMoKTsKICAgICBjb25zdCBTdHJpbmcqIHNhdmVkU291cmNlVVJMID0gbV9zb3Vy
Y2VVUkw7Ci0gICAgU3RyaW5nIHNvdXJjZVVSTCA9IHNvdXJjZUNvZGUucHJvdmlkZXIoKS0+dXJs
KCk7CisgICAgU3RyaW5nIHNvdXJjZVVSTCA9IGpzU291cmNlQ29kZS5wcm92aWRlcigpLT51cmwo
KTsKICAgICBtX3NvdXJjZVVSTCA9ICZzb3VyY2VVUkw7CiAKICAgICBKU0xvY2sgbG9jayhmYWxz
ZSk7CkBAIC0xMTAsNyArMTEyLDcgQEAgU2NyaXB0VmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXZh
bHVhdGUoYwogICAgIG1fZnJhbWUtPmtlZXBBbGl2ZSgpOwogCiAgICAgbV93aW5kb3dTaGVsbC0+
d2luZG93KCktPnN0YXJ0VGltZW91dENoZWNrKCk7Ci0gICAgQ29tcGxldGlvbiBjb21wID0gSlND
OjpldmFsdWF0ZShleGVjLCBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3Bl
Q2hhaW4oKSwgc291cmNlQ29kZSwgbV93aW5kb3dTaGVsbCk7CisgICAgQ29tcGxldGlvbiBjb21w
ID0gSlNDOjpldmFsdWF0ZShleGVjLCBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmdsb2Jh
bFNjb3BlQ2hhaW4oKSwganNTb3VyY2VDb2RlLCBtX3dpbmRvd1NoZWxsKTsKICAgICBtX3dpbmRv
d1NoZWxsLT53aW5kb3coKS0+c3RvcFRpbWVvdXRDaGVjaygpOwogCiAgICAgaWYgKGNvbXAuY29t
cGxUeXBlKCkgPT0gTm9ybWFsIHx8IGNvbXAuY29tcGxUeXBlKCkgPT0gUmV0dXJuVmFsdWUpIHsK
SW5kZXg6IGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5k
aW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDM4NzE3KQorKysgYmluZGluZ3Mv
anMvU2NyaXB0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBAIHN0
cnVjdCBOUE9iamVjdDsKIAogbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNHbG9iYWxPYmpl
Y3Q7Ci0gICAgY2xhc3MgU291cmNlQ29kZTsKIAogICAgIG5hbWVzcGFjZSBCaW5kaW5ncyB7CiAg
ICAgICAgIGNsYXNzIEluc3RhbmNlOwpAQCAtNTUsNiArNTQsNyBAQCBjbGFzcyBFdmVudExpc3Rl
bmVyOwogY2xhc3MgSFRNTFBsdWdJbkVsZW1lbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIE5vZGU7
CitjbGFzcyBTY3JpcHRTb3VyY2VDb2RlOwogY2xhc3MgU2NyaXB0VmFsdWU7CiBjbGFzcyBTdHJp
bmc7CiBjbGFzcyBXaWRnZXQ7CkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIG1fd2luZG93U2hlbGwtPndpbmRvdygpOwogICAgIH0KIAotICAgIFNjcmlwdFZhbHVlIGV2
YWx1YXRlKGNvbnN0IEpTQzo6U291cmNlQ29kZSYpOworICAgIFNjcmlwdFZhbHVlIGV2YWx1YXRl
KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmKTsKIAogICAgIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gY3JlYXRlSW5saW5lRXZlbnRMaXN0ZW5lcihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwg
Y29uc3QgU3RyaW5nJiBjb2RlLCBOb2RlKik7CiAjaWYgRU5BQkxFKFNWRykKSW5kZXg6IGJpbmRp
bmdzL2pzL1NjcmlwdFNvdXJjZUNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9qcy9TY3Jp
cHRTb3VyY2VDb2RlLmgJKHJldmlzaW9uIDApCisrKyBiaW5kaW5ncy9qcy9TY3JpcHRTb3VyY2VD
b2RlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JpcHRTb3Vy
Y2VDb2RlX2gKKyNkZWZpbmUgU2NyaXB0U291cmNlQ29kZV9oCisKKyNpbmNsdWRlICJDYWNoZWRT
Y3JpcHRTb3VyY2VQcm92aWRlci5oIgorI2luY2x1ZGUgIlN0cmluZ1NvdXJjZVByb3ZpZGVyLmgi
CisjaW5jbHVkZSAiS1VSTC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcmlw
dFNvdXJjZUNvZGUgeworcHVibGljOgorICAgIFNjcmlwdFNvdXJjZUNvZGUoY29uc3QgU3RyaW5n
JiBzb3VyY2UsIGNvbnN0IEtVUkwmIHVybCA9IEtVUkwoKSwgaW50IHN0YXJ0TGluZSA9IDEpCisg
ICAgICAgIDogbV9jb2RlKG1ha2VTb3VyY2Uoc291cmNlLCB1cmwuaXNOdWxsKCkgPyBTdHJpbmco
KSA6IHVybC5zdHJpbmcoKSwgc3RhcnRMaW5lKSkKKyAgICB7CisgICAgfQorCisgICAgU2NyaXB0
U291cmNlQ29kZShDYWNoZWRTY3JpcHQqIGNzKQorICAgICAgICA6IG1fY29kZShtYWtlU291cmNl
KGNzKSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
bV9jb2RlLmxlbmd0aCgpID09IDA7IH0KKworICAgIGNvbnN0IEpTQzo6U291cmNlQ29kZSYganNT
b3VyY2VDb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlOyB9CisKK3ByaXZhdGU6CisgICAgSlND
OjpTb3VyY2VDb2RlIG1fY29kZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFNjcmlwdFNvdXJjZUNvZGVfaApJbmRleDogYmluZGluZ3MvanMvU2NyaXB0U3RyaW5n
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvanMvU2NyaXB0U3RyaW5nLmgJKHJldmlzaW9uIDM4
NzE3KQorKysgYmluZGluZ3MvanMvU2NyaXB0U3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4LCBHb29nbGUgSW5jLgotICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOCwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIAogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCklu
ZGV4OiBiaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL2pz
L1NjcmlwdFZhbHVlLmgJKHJldmlzaW9uIDM4NzE3KQorKysgYmluZGluZ3MvanMvU2NyaXB0VmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMp
IDIwMDgsIEdvb2dsZSBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChjKSAyMDA4LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKSW5kZXg6IGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENv
bnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiAzODcxNykKKysrIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENv
bnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMTIgQEAKIAogI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTV29ya2VyQ29udGV4dC5oIgorI2luY2x1
ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1
ZGUgIldvcmtlckNvbnRleHQuaCIKICNpbmNsdWRlICJXb3JrZXJNZXNzYWdpbmdQcm94eS5oIgog
I2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgogI2luY2x1ZGUgPGludGVycHJldGVyL0ludGVycHJl
dGVyLmg+Ci0jaW5jbHVkZSA8cGFyc2VyL1NvdXJjZUNvZGUuaD4KICNpbmNsdWRlIDxydW50aW1l
L0NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxydW50aW1lL0NvbXBsZXRpb24uaD4KICNpbmNsdWRl
IDxydW50aW1lL0pTTG9jay5oPgpAQCAtNzAsNyArNzEsNyBAQCB2b2lkIFdvcmtlclNjcmlwdENv
bnRyb2xsZXI6OmluaXRTY3JpcHQoCiAgICAgbV93b3JrZXJDb250ZXh0V3JhcHBlciA9IG5ldyAo
bV9nbG9iYWxEYXRhLmdldCgpKSBKU1dvcmtlckNvbnRleHQobV93b3JrZXJDb250ZXh0KTsKIH0K
IAotSlNWYWx1ZSogV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY29uc3QgSlNDOjpT
b3VyY2VDb2RlJiBzb3VyY2VDb2RlKQorU2NyaXB0VmFsdWUgV29ya2VyU2NyaXB0Q29udHJvbGxl
cjo6ZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSkKIHsKICAgICB7
CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9zaGFyZWREYXRhTXV0ZXgpOwpAQCAtODMsNyAr
ODQsNyBAQCBKU1ZhbHVlKiBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0CiAKICAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5nbG9iYWxFeGVjKCk7CiAg
ICAgbV93b3JrZXJDb250ZXh0V3JhcHBlci0+c3RhcnRUaW1lb3V0Q2hlY2soKTsKLSAgICBDb21w
bGV0aW9uIGNvbXAgPSBKU0M6OmV2YWx1YXRlKGV4ZWMsIGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBzb3VyY2VDb2RlLCBtX3dvcmtlckNvbnRleHRXcmFw
cGVyKTsKKyAgICBDb21wbGV0aW9uIGNvbXAgPSBKU0M6OmV2YWx1YXRlKGV4ZWMsIGV4ZWMtPmR5
bmFtaWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBzb3VyY2VDb2RlLmpzU291
cmNlQ29kZSgpLCBtX3dvcmtlckNvbnRleHRXcmFwcGVyKTsKICAgICBtX3dvcmtlckNvbnRleHRX
cmFwcGVyLT5zdG9wVGltZW91dENoZWNrKCk7CiAKICAgICBtX3dvcmtlckNvbnRleHQtPnRocmVh
ZCgpLT5tZXNzYWdpbmdQcm94eSgpLT5yZXBvcnRXb3JrZXJUaHJlYWRBY3Rpdml0eShtX3dvcmtl
ckNvbnRleHQtPmhhc1BlbmRpbmdBY3Rpdml0eSgpKTsKSW5kZXg6IGJpbmRpbmdzL2pzL1dvcmtl
clNjcmlwdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9qcy9Xb3JrZXJTY3Jp
cHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDM4NzE3KQorKysgYmluZGluZ3MvanMvV29ya2VyU2Ny
aXB0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMTMgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNHbG9iYWxEYXRhOwotICAgIGNsYXNzIEpTVmFsdWU7
Ci0gICAgY2xhc3MgU291cmNlQ29kZTsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
Y2xhc3MgSlNXb3JrZXJDb250ZXh0OworICAgIGNsYXNzIFNjcmlwdFNvdXJjZUNvZGU7CisgICAg
Y2xhc3MgU2NyaXB0VmFsdWU7CiAgICAgY2xhc3MgU3RyaW5nOwogICAgIGNsYXNzIFdvcmtlckNv
bnRleHQ7CiAKQEAgLTU2LDcgKzU2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAg
ICAgcmV0dXJuIG1fd29ya2VyQ29udGV4dFdyYXBwZXI7CiAgICAgICAgIH0KIAotICAgICAgICBK
U0M6OkpTVmFsdWUqIGV2YWx1YXRlKGNvbnN0IEpTQzo6U291cmNlQ29kZSYpOworICAgICAgICBT
Y3JpcHRWYWx1ZSBldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJik7CiAKICAgICAgICAg
dm9pZCBmb3JiaWRFeGVjdXRpb24oKTsKIApJbmRleDogZG9tL1NjcmlwdEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGRvbS9TY3JpcHRFbGVtZW50LmNwcAkocmV2aXNpb24gMzg3MTcpCisrKyBk
b20vU2NyaXB0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDIxICsyNSwxOCBAQAog
I2luY2x1ZGUgIlNjcmlwdEVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgot
I2luY2x1ZGUgIkNhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiRG9jTG9h
ZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1
ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCiAj
aW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCi0jaW5jbHVk
ZSAiU3RyaW5nU291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgogCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHZvaWQgU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoU2Ny
aXB0RWxlbWVudERhdGEmIGRhdGEsIGNvbnN0IFN0cmluZyYgc291cmNlVXJsKQpAQCAtNTUsNyAr
NTIsNyBAQCB2b2lkIFNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50CiAgICAgLy8g
SWYgdGhlcmUncyBhbiBlbXB0eSBzY3JpcHQgbm9kZSwgd2Ugc2hvdWxkbid0IGV2YWx1YXRlIHRo
ZSBzY3JpcHQKICAgICAvLyBiZWNhdXNlIGlmIGEgc2NyaXB0IGlzIGluc2VydGVkIGFmdGVyd2Fy
ZHMgKGJ5IHNldHRpbmcgdGV4dCBvciBpbm5lclRleHQpCiAgICAgLy8gaXQgc2hvdWxkIGJlIGV2
YWx1YXRlZCwgYW5kIGV2YWx1YXRlU2NyaXB0IG9ubHkgZXZhbHVhdGVzIGEgc2NyaXB0IG9uY2Uu
Ci0gICAgZGF0YS5ldmFsdWF0ZVNjcmlwdChtYWtlU291cmNlKGRhdGEuc2NyaXB0Q29udGVudCgp
LCBkYXRhLmVsZW1lbnQoKS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpKTsgLy8gRklYTUU6
IFByb3ZpZGUgYSByZWFsIHN0YXJ0aW5nIGxpbmUgbnVtYmVyIGhlcmUuCisgICAgZGF0YS5ldmFs
dWF0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKGRhdGEuc2NyaXB0Q29udGVudCgpLCBkYXRhLmVs
ZW1lbnQoKS0+ZG9jdW1lbnQoKS0+dXJsKCkpKTsgLy8gRklYTUU6IFByb3ZpZGUgYSByZWFsIHN0
YXJ0aW5nIGxpbmUgbnVtYmVyIGhlcmUuCiB9CiAKIHZvaWQgU2NyaXB0RWxlbWVudDo6cmVtb3Zl
ZEZyb21Eb2N1bWVudChTY3JpcHRFbGVtZW50RGF0YSYgZGF0YSkKQEAgLTc1LDcgKzcyLDcgQEAg
dm9pZCBTY3JpcHRFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoU2NyaQogICAgIC8vIGFuZCB0aGUg
c2NyaXB0IGVsZW1lbnQgaGFzIGJlZW4gaW5zZXJ0ZWQgaW4gdGhlIGRvY3VtZW50CiAgICAgLy8g
d2UgZXZhbHVhdGUgdGhlIHNjcmlwdC4KICAgICBpZiAoZWxlbWVudC0+aW5Eb2N1bWVudCgpICYm
IGVsZW1lbnQtPmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgZGF0YS5ldmFsdWF0ZVNjcmlwdChtYWtl
U291cmNlKGRhdGEuc2NyaXB0Q29udGVudCgpLCBlbGVtZW50LT5kb2N1bWVudCgpLT51cmwoKS5z
dHJpbmcoKSkpOyAvLyBGSVhNRTogUHJvdmlkZSBhIHJlYWwgc3RhcnRpbmcgbGluZSBudW1iZXIg
aGVyZQorICAgICAgICBkYXRhLmV2YWx1YXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoZGF0YS5z
Y3JpcHRDb250ZW50KCksIGVsZW1lbnQtPmRvY3VtZW50KCktPnVybCgpKSk7IC8vIEZJWE1FOiBQ
cm92aWRlIGEgcmVhbCBzdGFydGluZyBsaW5lIG51bWJlciBoZXJlCiB9CiAKIHZvaWQgU2NyaXB0
RWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKFNjcmlwdEVsZW1lbnREYXRhJiBkYXRhLCBj
b25zdCBTdHJpbmcmIHNvdXJjZVVybCkKQEAgLTE2Miw5ICsxNTksOSBAQCB2b2lkIFNjcmlwdEVs
ZW1lbnREYXRhOjpyZXF1ZXN0U2NyaXB0KGNvCiAgICAgbV9zY3JpcHRFbGVtZW50LT5kaXNwYXRj
aEVycm9yRXZlbnQoKTsKIH0KIAotdm9pZCBTY3JpcHRFbGVtZW50RGF0YTo6ZXZhbHVhdGVTY3Jp
cHQoY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSkKK3ZvaWQgU2NyaXB0RWxlbWVudERhdGE6
OmV2YWx1YXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCiB7Ci0g
ICAgaWYgKG1fZXZhbHVhdGVkIHx8ICFzb3VyY2VDb2RlLmxlbmd0aCgpIHx8ICFzaG91bGRFeGVj
dXRlQXNKYXZhU2NyaXB0KCkpCisgICAgaWYgKG1fZXZhbHVhdGVkIHx8IHNvdXJjZUNvZGUuaXNF
bXB0eSgpIHx8ICFzaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmIChGcmFtZSogZnJhbWUgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCkp
IHsKQEAgLTE5OCw3ICsxOTUsNyBAQCB2b2lkIFNjcmlwdEVsZW1lbnREYXRhOjpub3RpZnlGaW5p
c2hlZChDCiAgICAgaWYgKGNzLT5lcnJvck9jY3VycmVkKCkpCiAgICAgICAgIG1fc2NyaXB0RWxl
bWVudC0+ZGlzcGF0Y2hFcnJvckV2ZW50KCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGV2YWx1YXRl
U2NyaXB0KG1ha2VTb3VyY2UoY3MpKTsKKyAgICAgICAgZXZhbHVhdGVTY3JpcHQoU2NyaXB0U291
cmNlQ29kZShjcykpOwogICAgICAgICBtX3NjcmlwdEVsZW1lbnQtPmRpc3BhdGNoTG9hZEV2ZW50
KCk7CiAgICAgfQogCkluZGV4OiBkb20vU2NyaXB0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRv
bS9TY3JpcHRFbGVtZW50LmgJKHJldmlzaW9uIDM4NzE3KQorKysgZG9tL1NjcmlwdEVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTUgKzI0LDEyIEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVz
b3VyY2VDbGllbnQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgogCi1uYW1l
c3BhY2UgSlNDIHsKLSAgICBjbGFzcyBTb3VyY2VDb2RlOwotfQotCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIENhY2hlZFNjcmlwdDsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBTY3JpcHRF
bGVtZW50RGF0YTsKK2NsYXNzIFNjcmlwdFNvdXJjZUNvZGU7CiAKIGNsYXNzIFNjcmlwdEVsZW1l
bnQgewogcHVibGljOgpAQCAtODEsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIYXZl
RmlyZWRMb2FkRXZlbnQoYm9vbCBmaXJlZExvYWQpIHsgbV9maXJlZExvYWQgPSBmaXJlZExvYWQ7
IH0KIAogICAgIHZvaWQgcmVxdWVzdFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZVVybCk7Ci0g
ICAgdm9pZCBldmFsdWF0ZVNjcmlwdChjb25zdCBKU0M6OlNvdXJjZUNvZGUmKTsKKyAgICB2b2lk
IGV2YWx1YXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmKTsKICAgICB2b2lkIHN0b3BM
b2FkUmVxdWVzdCgpOwogCiBwcml2YXRlOgpJbmRleDogZG9tL1dvcmtlclRocmVhZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gZG9tL1dvcmtlclRocmVhZC5jcHAJKHJldmlzaW9uIDM4NzE3KQorKysgZG9t
L1dvcmtlclRocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE0ICszMSwxMyBAQAogI2lu
Y2x1ZGUgIldvcmtlclRocmVhZC5oIgogCiAjaW5jbHVkZSAiSlNXb3JrZXJDb250ZXh0LmgiCi0j
aW5jbHVkZSAiU3RyaW5nU291cmNlUHJvdmlkZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRTb3VyY2VD
b2RlLmgiCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJXb3JrZXIuaCIKICNp
bmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV29ya2VyTWVzc2FnaW5nUHJveHku
aCIKICNpbmNsdWRlICJXb3JrZXJUYXNrLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogUGFzc1JlZlB0cjxXb3JrZXJUaHJlYWQ+IFdvcmtlclRocmVh
ZDo6Y3JlYXRlKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2Rl
LCBXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHkpCkBAIC03OCwxMSArNzcsMTEg
QEAgdm9pZCogV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWQoKQogICAgIHsKICAgICAgICAgLy8g
TXV0ZXggcHJvdGVjdGlvbiBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzdG9wKCkgY2FuIGJlIGNhbGxl
ZCBiZWZvcmUgdGhlIGNvbnRleHQgaXMgZnVsbHkgY3JlYXRlZC4KICAgICAgICAgTXV0ZXhMb2Nr
ZXIgbG9jayhtX3dvcmtlckNvbnRleHRNdXRleCk7Ci0gICAgICAgIG1fd29ya2VyQ29udGV4dCA9
IFdvcmtlckNvbnRleHQ6OmNyZWF0ZShLVVJMKG1fc2NyaXB0VVJMKSwgdGhpcyk7CisgICAgICAg
IG1fd29ya2VyQ29udGV4dCA9IFdvcmtlckNvbnRleHQ6OmNyZWF0ZShtX3NjcmlwdFVSTCwgdGhp
cyk7CiAgICAgfQogCiAgICAgV29ya2VyU2NyaXB0Q29udHJvbGxlciogc2NyaXB0ID0gbV93b3Jr
ZXJDb250ZXh0LT5zY3JpcHQoKTsKLSAgICBzY3JpcHQtPmV2YWx1YXRlKG1ha2VTb3VyY2UobV9z
b3VyY2VDb2RlLCBtX3NjcmlwdFVSTCkpOworICAgIHNjcmlwdC0+ZXZhbHVhdGUoU2NyaXB0U291
cmNlQ29kZShtX3NvdXJjZUNvZGUsIG1fc2NyaXB0VVJMKSk7CiAgICAgbV9tZXNzYWdpbmdQcm94
eS0+Y29uZmlybVdvcmtlclRocmVhZE1lc3NhZ2UobV93b3JrZXJDb250ZXh0LT5oYXNQZW5kaW5n
QWN0aXZpdHkoKSk7IC8vIFRoaXMgd2Fzbid0IHJlYWxseSBhIG1lc3NhZ2UsIGJ1dCBpdCBjb3Vu
dHMgYXMgb25lIGZvciBHQy4KIAogICAgIHdoaWxlICh0cnVlKSB7CkluZGV4OiBkb20vV29ya2Vy
VGhyZWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL1dvcmtlclRocmVhZC5oCShyZXZpc2lvbiAzODcx
NykKKysrIGRvbS9Xb3JrZXJUaHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5LDEy
IEBACiAKICNpZiBFTkFCTEUoV09SS0VSUykKIAotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CisjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgPHd0Zi9NZXNzYWdlUXVldWUuaD4KICNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFz
cyBLVVJMOwogICAgIGNsYXNzIFdvcmtlckNvbnRleHQ7CiAgICAgY2xhc3MgV29ya2VyTWVzc2Fn
aW5nUHJveHk7CiAgICAgY2xhc3MgV29ya2VyVGFzazsKQEAgLTYxLDcgKzYwLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKIAot
ICAgICAgICBTdHJpbmcgbV9zY3JpcHRVUkw7CisgICAgICAgIEtVUkwgbV9zY3JpcHRVUkw7CiAg
ICAgICAgIFN0cmluZyBtX3NvdXJjZUNvZGU7CiAgICAgICAgIFdvcmtlck1lc3NhZ2luZ1Byb3h5
KiBtX21lc3NhZ2luZ1Byb3h5OwogCkluZGV4OiBkb20vWE1MVG9rZW5pemVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBkb20vWE1MVG9rZW5pemVyLmNwcAkocmV2aXNpb24gMzg3MTcpCisrKyBkb20vWE1M
VG9rZW5pemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUg
IkNEQVRBU2VjdGlvbi5oIgogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJDYWNoZWRT
Y3JpcHQuaCIKLSNpbmNsdWRlICJDYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oIgogI2luY2x1
ZGUgIkNvbW1lbnQuaCIKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgpAQCAtNDgsNiArNDcsNyBAQAogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2lu
Y2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgi
CisjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgi
CiAjaW5jbHVkZSAiU3RyaW5nU291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlICJUZXh0UmVzb3Vy
Y2VEZWNvZGVyLmgiCkBAIC0zMjYsNyArMzI2LDcgQEAgdm9pZCBYTUxUb2tlbml6ZXI6Om5vdGlm
eUZpbmlzaGVkKENhY2hlZAogICAgIEFTU0VSVChtX3BlbmRpbmdTY3JpcHQgPT0gZmluaXNoZWRP
YmopOwogICAgIEFTU0VSVChtX3BlbmRpbmdTY3JpcHQtPmFjY2Vzc0NvdW50KCkgPiAwKTsKICAg
ICAgICAgCi0gICAgSlNDOjpTb3VyY2VDb2RlIHNvdXJjZUNvZGUgPSBtYWtlU291cmNlKG1fcGVu
ZGluZ1NjcmlwdC5nZXQoKSk7CisgICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VDb2RlKG1fcGVu
ZGluZ1NjcmlwdC5nZXQoKSk7CiAgICAgYm9vbCBlcnJvck9jY3VycmVkID0gbV9wZW5kaW5nU2Ny
aXB0LT5lcnJvck9jY3VycmVkKCk7CiAKICAgICBtX3BlbmRpbmdTY3JpcHQtPnJlbW92ZUNsaWVu
dCh0aGlzKTsKSW5kZXg6IGRvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBkb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAJKHJldmlzaW9uIDM4NzE3KQorKysgZG9tL1hN
TFRva2VuaXplckxpYnhtbDIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0Nyw4IEBACiAj
aW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJTY3JpcHRFbGVtZW50LmgiCisjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29k
ZS5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAiU3RyaW5nU291cmNlUHJv
dmlkZXIuaCIKICNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVkZSA8bGli
eG1sL3BhcnNlci5oPgogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaD4KQEAgLTgw
Nyw3ICs4MDcsNyBAQCB2b2lkIFhNTFRva2VuaXplcjo6ZW5kRWxlbWVudE5zKCkKICAgICAgICAg
ICAgIH0gZWxzZSAKICAgICAgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOwogICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIG1fdmlldy0+ZnJhbWUoKS0+bG9hZGVyKCktPmV4ZWN1dGVT
Y3JpcHQobWFrZVNvdXJjZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIG1fZG9jLT51
cmwoKS5zdHJpbmcoKSwgbV9zY3JpcHRTdGFydExpbmUpKTsKKyAgICAgICAgICAgIG1fdmlldy0+
ZnJhbWUoKS0+bG9hZGVyKCktPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRF
bGVtZW50LT5zY3JpcHRDb250ZW50KCksIG1fZG9jLT51cmwoKSwgbV9zY3JpcHRTdGFydExpbmUp
KTsKIAogICAgICAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSBmYWxzZTsKICAgICB9CkluZGV4OiBk
b20vWE1MVG9rZW5pemVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9YTUxUb2tlbml6ZXJRdC5j
cHAJKHJldmlzaW9uIDM4NzE3KQorKysgZG9tL1hNTFRva2VuaXplclF0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDcsOCArNDcsOCBAQAogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKICNp
bmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0RWxlbWVudC5oIgor
I2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgot
I2luY2x1ZGUgIlN0cmluZ1NvdXJjZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNl
RGVjb2Rlci5oIgogI2luY2x1ZGUgPFFEZWJ1Zz4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
QEAgLTU4NSw3ICs1ODUsNyBAQCB2b2lkIFhNTFRva2VuaXplcjo6cGFyc2VFbmRFbGVtZW50KCkK
ICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7
CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV92aWV3LT5mcmFtZSgpLT5sb2FkZXIoKS0+
ZXhlY3V0ZVNjcmlwdChtYWtlU291cmNlKHNjcmlwdEVsZW1lbnQtPnNjcmlwdENvbnRlbnQoKSwg
bV9kb2MtPnVybCgpLnN0cmluZygpLCBtX3NjcmlwdFN0YXJ0TGluZSkpOworICAgICAgICAgICAg
bV92aWV3LT5mcmFtZSgpLT5sb2FkZXIoKS0+ZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2Rl
KHNjcmlwdEVsZW1lbnQtPnNjcmlwdENvbnRlbnQoKSwgbV9kb2MtPnVybCgpLCBtX3NjcmlwdFN0
YXJ0TGluZSkpOwogCiAgICAgICAgIG1fcmVxdWVzdGluZ1NjcmlwdCA9IGZhbHNlOwogICAgIH0K
SW5kZXg6IGh0bWwvSFRNTFRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MVG9r
ZW5pemVyLmNwcAkocmV2aXNpb24gMzg3MTcpCisrKyBodG1sL0hUTUxUb2tlbml6ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiQ1NTSGVscGVyLmgiCiAj
aW5jbHVkZSAiQ2FjaGUuaCIKICNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKLSNpbmNsdWRlICJD
YWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCkBAIC00
NSw4ICs0NCw4IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlByZWxvYWRTY2FubmVy
LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlNjcmlwdFNvdXJj
ZUNvZGUuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgIlN0cmluZ1NvdXJj
ZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgogI2luY2x1ZGUgPHd0Zi9BU0NJ
SUNUeXBlLmg+CiAKQEAgLTU1LDcgKzU0LDYgQEAKICNkZWZpbmUgUFJFTE9BRF9TQ0FOTkVSX0VO
QUJMRUQgMQogLy8gI2RlZmluZSBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5HIDEKIAotdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiB1c2luZyBuYW1lc3BhY2Ug
c3RkOwogCkBAIC01MDMsNyArNTAxLDcgQEAgSFRNTFRva2VuaXplcjo6U3RhdGUgSFRNTFRva2Vu
aXplcjo6c2NyaQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHByZXBlbmRpbmdT
cmMgPSBtX3NyYzsKICAgICAgICAgICAgIHNldFNyYyhTZWdtZW50ZWRTdHJpbmcoKSk7Ci0gICAg
ICAgICAgICBzdGF0ZSA9IHNjcmlwdEV4ZWN1dGlvbihtYWtlU291cmNlKHNjcmlwdFN0cmluZywg
bV9kb2MtPmZyYW1lKCkgPyBtX2RvYy0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5n
KCkgOiBTdHJpbmcoKSwgc3RhcnRMaW5lKSwgc3RhdGUpOworICAgICAgICAgICAgc3RhdGUgPSBz
Y3JpcHRFeGVjdXRpb24oU2NyaXB0U291cmNlQ29kZShzY3JpcHRTdHJpbmcsIG1fZG9jLT5mcmFt
ZSgpID8gbV9kb2MtPmZyYW1lKCktPmRvY3VtZW50KCktPnVybCgpIDogS1VSTCgpLCBzdGFydExp
bmUpLCBzdGF0ZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTU0NSw3ICs1NDMsNyBAQCBIVE1M
VG9rZW5pemVyOjpTdGF0ZSBIVE1MVG9rZW5pemVyOjpzY3JpCiAgICAgcmV0dXJuIHN0YXRlOwog
fQogCi1IVE1MVG9rZW5pemVyOjpTdGF0ZSBIVE1MVG9rZW5pemVyOjpzY3JpcHRFeGVjdXRpb24o
Y29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgU3RhdGUgc3RhdGUpCitIVE1MVG9rZW5pemVy
OjpTdGF0ZSBIVE1MVG9rZW5pemVyOjpzY3JpcHRFeGVjdXRpb24oY29uc3QgU2NyaXB0U291cmNl
Q29kZSYgc291cmNlQ29kZSwgU3RhdGUgc3RhdGUpCiB7CiAgICAgaWYgKG1fZnJhZ21lbnQgfHwg
IW1fZG9jLT5mcmFtZSgpKQogICAgICAgICByZXR1cm4gc3RhdGU7CkBAIC0xOTY5LDcgKzE5Njcs
NyBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6Om5vdGlmeUZpbmlzaGVkKENhY2hlCiAKICAgICAgICAg
Ly8gbWFrZSBzdXJlIHdlIGZvcmdldCBhYm91dCB0aGUgc2NyaXB0IGJlZm9yZSB3ZSBleGVjdXRl
IHRoZSBuZXcgb25lCiAgICAgICAgIC8vIGluZmluaXRlIHJlY3Vyc2lvbiBtaWdodCBoYXBwZW4g
b3RoZXJ3aXNlCi0gICAgICAgIEpTQzo6U291cmNlQ29kZSBzb3VyY2VDb2RlID0gbWFrZVNvdXJj
ZShjcyk7CisgICAgICAgIFNjcmlwdFNvdXJjZUNvZGUgc291cmNlQ29kZShjcyk7CiAgICAgICAg
IGJvb2wgZXJyb3JPY2N1cnJlZCA9IGNzLT5lcnJvck9jY3VycmVkKCk7CiAgICAgICAgIGNzLT5y
ZW1vdmVDbGllbnQodGhpcyk7CiAKSW5kZXg6IGh0bWwvSFRNTFRva2VuaXplci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGh0bWwvSFRNTFRva2VuaXplci5oCShyZXZpc2lvbiAzODcxNykKKysrIGh0bWwvSFRN
TFRva2VuaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsNiBAQAogI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLW5hbWVzcGFjZSBKU0Mg
ewotICAgIGNsYXNzIFNvdXJjZUNvZGU7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgQ2FjaGVkU2NyaXB0OwpAQCAtNTAsNiArNDYsNyBAQCBjbGFzcyBGcmFtZVZpZXc7CiBjbGFz
cyBIVE1MUGFyc2VyOwogY2xhc3MgTm9kZTsKIGNsYXNzIFByZWxvYWRTY2FubmVyOworY2xhc3Mg
U2NyaXB0U291cmNlQ29kZTsKIAogLyoqCiAgKiBAaW50ZXJuYWwKQEAgLTE4MSw3ICsxNzgsNyBA
QCBwcml2YXRlOgogICAgIFN0YXRlIHBhcnNlRW50aXR5KFNlZ21lbnRlZFN0cmluZyYsIFVDaGFy
KiYgZGVzdCwgU3RhdGUsIHVuc2lnbmVkJiBjQnVmZmVyUG9zLCBib29sIHN0YXJ0LCBib29sIHBh
cnNpbmdUYWcpOwogICAgIFN0YXRlIHBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKFNlZ21lbnRl
ZFN0cmluZyYsIFN0YXRlKTsKICAgICBTdGF0ZSBzY3JpcHRIYW5kbGVyKFN0YXRlKTsKLSAgICBT
dGF0ZSBzY3JpcHRFeGVjdXRpb24oY29uc3QgSlNDOjpTb3VyY2VDb2RlJiwgU3RhdGUpOworICAg
IFN0YXRlIHNjcmlwdEV4ZWN1dGlvbihjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiwgU3RhdGUpOwog
ICAgIHZvaWQgc2V0U3JjKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpOwogIAogICAgIC8vIGNoZWNr
IGlmIHdlIGhhdmUgZW5vdWdoIHNwYWNlIGluIHRoZSBidWZmZXIuCkluZGV4OiBsb2FkZXIvRnJh
bWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlz
aW9uIDM4NzE3KQorKysgbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODAsMTggKzgwLDE2IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJS
ZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5jbHVk
ZSAiU2NyaXB0U291cmNlQ29kZS5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlN0cmluZ1NvdXJjZVByb3ZpZGVyLmgiCiAjaW5j
bHVkZSAiU3lzdGVtVGltZS5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNp
bmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0LmgiCiAj
aW5jbHVkZSAiWE1MVG9rZW5pemVyLmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KLSNp
bmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgogCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKQEAgLTEwOSw4ICsxMDcs
NiBAQAogI2luY2x1ZGUgIlNWR1ZpZXdTcGVjLmgiCiAjZW5kaWYKIAotdXNpbmcgbmFtZXNwYWNl
IEpTQzsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgRU5BQkxFKFNWRykKQEAgLTc3Niwx
MCArNzcyLDEwIEBAIGJvb2wgRnJhbWVMb2FkZXI6OmV4ZWN1dGVJZkphdmFTY3JpcHRVUkwKIAog
U2NyaXB0VmFsdWUgRnJhbWVMb2FkZXI6OmV4ZWN1dGVTY3JpcHQoY29uc3QgU3RyaW5nJiBzY3Jp
cHQsIGJvb2wgZm9yY2VVc2VyR2VzdHVyZSkKIHsKLSAgICByZXR1cm4gZXhlY3V0ZVNjcmlwdCht
YWtlU291cmNlKHNjcmlwdCwgZm9yY2VVc2VyR2VzdHVyZSA/IFN0cmluZygpIDogbV9VUkwuc3Ry
aW5nKCkpKTsKKyAgICByZXR1cm4gZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlw
dCwgZm9yY2VVc2VyR2VzdHVyZSA/IEtVUkwoKSA6IG1fVVJMKSk7CiB9CiAKLVNjcmlwdFZhbHVl
IEZyYW1lTG9hZGVyOjpleGVjdXRlU2NyaXB0KGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUp
CitTY3JpcHRWYWx1ZSBGcmFtZUxvYWRlcjo6ZXhlY3V0ZVNjcmlwdChjb25zdCBTY3JpcHRTb3Vy
Y2VDb2RlJiBzb3VyY2VDb2RlKQogewogICAgIGlmICghbV9mcmFtZS0+c2NyaXB0KCktPmlzRW5h
YmxlZCgpIHx8IG1fZnJhbWUtPnNjcmlwdCgpLT5pc1BhdXNlZCgpKQogICAgICAgICByZXR1cm4g
U2NyaXB0VmFsdWUoKTsKSW5kZXg6IGxvYWRlci9GcmFtZUxvYWRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGxvYWRlci9GcmFtZUxvYWRlci5oCShyZXZpc2lvbiAzODcxNykKKysrIGxvYWRlci9GcmFtZUxv
YWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMCArNDksNiBAQAogI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlQ2xpZW50LmgiCiAjZW5kaWYKIAotbmFtZXNwYWNlIEpTQyB7Ci0gICAgY2xhc3Mg
U291cmNlQ29kZTsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgQXJjaGl2
ZTsKQEAgLTc5LDYgKzc1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFJlc291
cmNlTG9hZGVyOwogICAgIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKICAgICBjbGFzcyBSZXNvdXJj
ZVJlc3BvbnNlOworICAgIGNsYXNzIFNjcmlwdFNvdXJjZUNvZGU7CiAgICAgY2xhc3MgU2NyaXB0
VmFsdWU7CiAgICAgY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAgICAgY2xhc3MgU2hhcmVkQnVmZmVy
OwpAQCAtMzM5LDcgKzMzNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHVybCBpcyBhIEphdmFTY3JpcHQgVVJMLgogICAgICAgICBib29sIGV4ZWN1
dGVJZkphdmFTY3JpcHRVUkwoY29uc3QgS1VSTCYgdXJsLCBib29sIHVzZXJHZXN0dXJlID0gZmFs
c2UsIGJvb2wgcmVwbGFjZURvY3VtZW50ID0gdHJ1ZSk7CiAKLSAgICAgICAgU2NyaXB0VmFsdWUg
ZXhlY3V0ZVNjcmlwdChjb25zdCBKU0M6OlNvdXJjZUNvZGUmKTsKKyAgICAgICAgU2NyaXB0VmFs
dWUgZXhlY3V0ZVNjcmlwdChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJik7CiAgICAgICAgIFNjcmlw
dFZhbHVlIGV4ZWN1dGVTY3JpcHQoY29uc3QgU3RyaW5nJiBzY3JpcHQsIGJvb2wgZm9yY2VVc2Vy
R2VzdHVyZSA9IGZhbHNlKTsKIAogICAgICAgICB2b2lkIGdvdG9BbmNob3IoKTsK
</data>
<flag name="review"
          id="11803"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>