<?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>110194</bug_id>
          
          <creation_ts>2013-02-19 02:04:38 -0800</creation_ts>
          <short_desc>[Meta] Implement Stream API</short_desc>
          <delta_ts>2014-11-24 19:00:01 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>138561</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>110556</dependson>
    
    <dependson>110558</dependson>
    
    <dependson>110841</dependson>
    
    <dependson>110938</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zachary Kuznia">zork</reporter>
          <assigned_to name="Zachary Kuznia">zork</assigned_to>
          <cc>abarth</cc>
    
    <cc>acolwell</cc>
    
    <cc>buildbot</cc>
    
    <cc>calvaris</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dominicc</cc>
    
    <cc>dstockwell</cc>
    
    <cc>eojin.ham</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>fishd</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>haraken</cc>
    
    <cc>jamesr</cc>
    
    <cc>japhet</cc>
    
    <cc>kinuko</cc>
    
    <cc>levin+threading</cc>
    
    <cc>mike</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rego+ews</cc>
    
    <cc>rniwa</cc>
    
    <cc>s.choi</cc>
    
    <cc>syoichi</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>youennf</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>836140</commentid>
    <comment_count>0</comment_count>
    <who name="Zachary Kuznia">zork</who>
    <bug_when>2013-02-19 02:04:38 -0800</bug_when>
    <thetext>WIP-Prototype implmentation of Stream API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836143</commentid>
    <comment_count>1</comment_count>
      <attachid>189030</attachid>
    <who name="Zachary Kuznia">zork</who>
    <bug_when>2013-02-19 02:05:59 -0800</bug_when>
    <thetext>Created attachment 189030
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836147</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-19 02:08:19 -0800</bug_when>
    <thetext>Attachment 189030 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/Configurations/FeatureDefines.xcconfig&apos;, u&apos;Source/WebCore/DerivedSources.cpp&apos;, u&apos;Source/WebCore/DerivedSources.make&apos;, u&apos;Source/WebCore/DerivedSources.pri&apos;, u&apos;Source/WebCore/GNUmakefile.features.am.in&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/WebCore.gypi&apos;, u&apos;Source/WebCore/bindings/js/JSStreamReaderCustom.cpp&apos;, u&apos;Source/WebCore/bindings/v8/custom/V8StreamCustom.cpp&apos;, u&apos;Source/WebCore/bindings/v8/custom/V8StreamReaderCustom.cpp&apos;, u&apos;Source/WebCore/bindings/v8/custom/V8XMLHttpRequestCustom.cpp&apos;, u&apos;Source/WebCore/dom/EventTarget.h&apos;, u&apos;Source/WebCore/dom/EventTargetFactory.in&apos;, u&apos;Source/WebCore/fileapi/Stream.cpp&apos;, u&apos;Source/WebCore/fileapi/Stream.h&apos;, u&apos;Source/WebCore/fileapi/Stream.idl&apos;, u&apos;Source/WebCore/fileapi/StreamError.h&apos;, u&apos;Source/WebCore/fileapi/StreamError.idl&apos;, u&apos;Source/WebCore/fileapi/StreamReader.cpp&apos;, u&apos;Source/WebCore/fileapi/StreamReader.h&apos;, u&apos;Source/WebCore/fileapi/StreamReader.idl&apos;, u&apos;Source/WebCore/page/DOMWindow.idl&apos;, u&apos;Source/WebCore/xml/XMLHttpRequest.cpp&apos;, u&apos;Source/WebCore/xml/XMLHttpRequest.h&apos;, u&apos;Source/WebKit/chromium/ChangeLog&apos;, u&apos;Source/WebKit/chromium/features.gypi&apos;]&quot; exit_code: 1
Source/WebCore/fileapi/StreamReader.h:66:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/fileapi/StreamReader.h:67:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/fileapi/StreamReader.h:68:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/fileapi/StreamError.h:44:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/fileapi/StreamError.h:45:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/fileapi/StreamError.h:46:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/fileapi/StreamError.h:47:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/fileapi/StreamError.h:48:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/fileapi/StreamError.h:49:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/fileapi/StreamError.h:50:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/fileapi/StreamError.h:51:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/fileapi/StreamError.h:52:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/fileapi/StreamError.h:53:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/fileapi/StreamError.h:54:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/fileapi/StreamError.h:55:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/fileapi/StreamError.h:56:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/bindings/js/JSStreamReaderCustom.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/bindings/js/JSStreamReaderCustom.cpp:38:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 18 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836158</commentid>
    <comment_count>3</comment_count>
      <attachid>189030</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-02-19 02:21:23 -0800</bug_when>
    <thetext>Comment on attachment 189030
WIP Patch

Attachment 189030 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/16611699</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836161</commentid>
    <comment_count>4</comment_count>
      <attachid>189030</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-02-19 02:28:41 -0800</bug_when>
    <thetext>Comment on attachment 189030
WIP Patch

Attachment 189030 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/16612657</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836206</commentid>
    <comment_count>5</comment_count>
      <attachid>189030</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-02-19 03:59:15 -0800</bug_when>
    <thetext>Comment on attachment 189030
WIP Patch

Attachment 189030 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/16557073</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836236</commentid>
    <comment_count>6</comment_count>
      <attachid>189030</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-19 04:37:53 -0800</bug_when>
    <thetext>Comment on attachment 189030
WIP Patch

Attachment 189030 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16617630</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836295</commentid>
    <comment_count>7</comment_count>
      <attachid>189030</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-02-19 05:56:54 -0800</bug_when>
    <thetext>Comment on attachment 189030
WIP Patch

Attachment 189030 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/16613700</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836577</commentid>
    <comment_count>8</comment_count>
      <attachid>189030</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-19 11:16:31 -0800</bug_when>
    <thetext>Comment on attachment 189030
WIP Patch

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

&gt; Source/WebCore/bindings/v8/custom/V8StreamCustom.cpp:56
&gt; +v8::Handle&lt;v8::Object&gt; wrap(Stream* impl, v8::Handle&lt;v8::Object&gt; creationContext, v8::Isolate* isolate)
&gt; +{
&gt; +    ASSERT(impl);
&gt; +    return V8Stream::createWrapper(impl, creationContext, isolate);
&gt; +}
&gt; +
&gt; +v8::Handle&lt;v8::Value&gt; V8Stream::constructorCallbackCustom(const v8::Arguments&amp; args)
&gt; +{
&gt; +    // ScriptExecutionContext* context = getScriptExecutionContext();
&gt; +
&gt; +    if (!args.Length()) {
&gt; +        RefPtr&lt;Stream&gt; stream = Stream::create();
&gt; +        return toV8(stream.get(), args.Holder(), args.GetIsolate());
&gt; +    }
&gt; +
&gt; +    RefPtr&lt;Stream&gt; stream = Stream::create();
&gt; +    return toV8(stream.get(), args.Holder(), args.GetIsolate());
&gt; +}

You shouldn&apos;t need any of this custom code.

&gt; Source/WebCore/bindings/v8/custom/V8StreamReaderCustom.cpp:47
&gt; +    if (imp-&gt;readType() == StreamReader::ReadAsArrayBuffer)

This one does look needed, however.  :)

&gt; Source/WebCore/fileapi/Stream.cpp:69
&gt; +    unsigned long long remaining = m_buffer-&gt;size() - m_readHead;
&gt; +    unsigned long long length = remaining;

Should we use size_t for these?

&gt; Source/WebCore/fileapi/Stream.cpp:80
&gt; +    return data;

data.release()

See http://www.webkit.org/coding/RefPtr.html

&gt; Source/WebCore/fileapi/Stream.idl:32
&gt; +    JSGenerateIsReachable=Impl,

This seems unlikely

&gt; Source/WebCore/fileapi/Stream.idl:34
&gt; +    CustomToJSObject,
&gt; +    JSNoStaticTables,

These shouldn&apos;t be needed either.

&gt; Source/WebCore/fileapi/Stream.idl:44
&gt; +#if !defined(LANGUAGE_OBJECTIVE_C)
&gt; +#if defined(ENABLE_STREAM) &amp;&amp; ENABLE_STREAM
&gt; +    void close();
&gt; +#endif
&gt; +#endif

Shouldn&apos;t the whole interface have Conditional=STREAM ?

I doubt you need these LANGUAGE_OBJECTIVE_C ifdefs.

&gt; Source/WebCore/fileapi/StreamError.h:64
&gt; +    StreamError(ErrorCode code)

please add the &quot;explicit&quot; keyword to one argument constructors.

&gt; Source/WebCore/fileapi/StreamError.h:66
&gt; +    { }

These should be a on separate lines.

&gt; Source/WebCore/fileapi/StreamError.idl:33
&gt; +    JSNoStaticTables,

JSNoStaticTables probably isn&apos;t needed.

&gt; Source/WebCore/fileapi/StreamError.idl:49
&gt; +    const unsigned short NOT_FOUND_ERR = 1;
&gt; +    const unsigned short SECURITY_ERR = 2;
&gt; +    const unsigned short ABORT_ERR = 3;
&gt; +    const unsigned short NOT_READABLE_ERR = 4;
&gt; +    const unsigned short ENCODING_ERR = 5;
&gt; +    const unsigned short NO_MODIFICATION_ALLOWED_ERR = 6;
&gt; +    const unsigned short INVALID_STATE_ERR = 7;
&gt; +    const unsigned short SYNTAX_ERR = 8;
&gt; +    const unsigned short INVALID_MODIFICATION_ERR = 9;
&gt; +    const unsigned short QUOTA_EXCEEDED_ERR = 10;
&gt; +    const unsigned short TYPE_MISMATCH_ERR = 11;
&gt; +    const unsigned short PATH_EXISTS_ERR = 12;

Yuck!  This isn&apos;t the modern way to do errors.  We should provide feedback to the working group that we should use DOM4-style errors.

&gt; Source/WebCore/fileapi/StreamReader.cpp:155
&gt; +    fireEvent(eventNames().errorEvent);
&gt; +    fireEvent(eventNames().abortEvent);
&gt; +    fireEvent(eventNames().loadendEvent);

Does this fire these event synchronously?

&gt; Source/WebCore/fileapi/StreamReader.h:113
&gt; +    StreamReader(ScriptExecutionContext*);

Please mark one-argument constructors explicit.

&gt; Source/WebCore/fileapi/StreamReader.idl:37
&gt; +    JSNoStaticTables

This probably isn&apos;t needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836579</commentid>
    <comment_count>9</comment_count>
      <attachid>189030</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-19 11:16:58 -0800</bug_when>
    <thetext>Comment on attachment 189030
WIP Patch

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

&gt; Source/WebCore/Configurations/FeatureDefines.xcconfig:147
&gt; +ENABLE_STREAM = ENABLE_STREAM;

You can skip these changes to xcconfig.  The default is for the feature to be disabled, which is what you probably want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836580</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-19 11:17:57 -0800</bug_when>
    <thetext>The comments above are all pretty shallow.  Would you be willing to break this patch into smaller pieces so that it is easier to review?  For example, we could try to do one interface at a time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837080</commentid>
    <comment_count>11</comment_count>
    <who name="Zachary Kuznia">zork</who>
    <bug_when>2013-02-19 19:40:26 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; The comments above are all pretty shallow.  Would you be willing to break this patch into smaller pieces so that it is easier to review?  For example, we could try to do one interface at a time.

I&apos;m more than happy to split this up!  I&apos;m changing it to share more with the FileReader and Blob implementation before it&apos;s ready for review, but once that&apos;s done I&apos;ll divide it into more manageable chunks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837268</commentid>
    <comment_count>12</comment_count>
      <attachid>189030</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-20 01:47:33 -0800</bug_when>
    <thetext>Comment on attachment 189030
WIP Patch

Attachment 189030 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16657133</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837303</commentid>
    <comment_count>13</comment_count>
      <attachid>189030</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-20 03:11:51 -0800</bug_when>
    <thetext>Comment on attachment 189030
WIP Patch

Attachment 189030 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16646191</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837330</commentid>
    <comment_count>14</comment_count>
      <attachid>189030</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-20 04:15:15 -0800</bug_when>
    <thetext>Comment on attachment 189030
WIP Patch

Attachment 189030 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16654185</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837471</commentid>
    <comment_count>15</comment_count>
      <attachid>189030</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-20 07:57:32 -0800</bug_when>
    <thetext>Comment on attachment 189030
WIP Patch

Attachment 189030 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16654337</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839209</commentid>
    <comment_count>16</comment_count>
      <attachid>189676</attachid>
    <who name="Zachary Kuznia">zork</who>
    <bug_when>2013-02-21 21:36:02 -0800</bug_when>
    <thetext>Created attachment 189676
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841593</commentid>
    <comment_count>17</comment_count>
      <attachid>190196</attachid>
    <who name="Zachary Kuznia">zork</who>
    <bug_when>2013-02-25 21:02:14 -0800</bug_when>
    <thetext>Created attachment 190196
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841596</commentid>
    <comment_count>18</comment_count>
      <attachid>190196</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-02-25 21:14:58 -0800</bug_when>
    <thetext>Comment on attachment 190196
WIP Patch

Attachment 190196 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/16745744</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841597</commentid>
    <comment_count>19</comment_count>
      <attachid>190196</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-02-25 21:15:40 -0800</bug_when>
    <thetext>Comment on attachment 190196
WIP Patch

Attachment 190196 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/16749698</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841623</commentid>
    <comment_count>20</comment_count>
      <attachid>190196</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-02-25 22:01:41 -0800</bug_when>
    <thetext>Comment on attachment 190196
WIP Patch

Attachment 190196 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/16752695</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841641</commentid>
    <comment_count>21</comment_count>
      <attachid>190196</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-25 22:24:10 -0800</bug_when>
    <thetext>Comment on attachment 190196
WIP Patch

Attachment 190196 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16752686</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841673</commentid>
    <comment_count>22</comment_count>
      <attachid>190196</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-25 23:17:03 -0800</bug_when>
    <thetext>Comment on attachment 190196
WIP Patch

Attachment 190196 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16756719</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841785</commentid>
    <comment_count>23</comment_count>
      <attachid>190196</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-26 01:38:31 -0800</bug_when>
    <thetext>Comment on attachment 190196
WIP Patch

Attachment 190196 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-commit-queue.appspot.com/results/16760678</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841802</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-26 02:00:47 -0800</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841803</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-26 02:01:04 -0800</bug_when>
    <thetext>Attachment 190196 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/Platform/ChangeLog&apos;, u&apos;Source/Platform/chromium/public/WebBlobRegistry.h&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/DerivedSources.cpp&apos;, u&apos;Source/WebCore/DerivedSources.make&apos;, u&apos;Source/WebCore/DerivedSources.pri&apos;, u&apos;Source/WebCore/WebCore.gypi&apos;, u&apos;Source/WebCore/bindings/js/JSStreamReaderCustom.cpp&apos;, u&apos;Source/WebCore/bindings/v8/custom/V8StreamReaderCustom.cpp&apos;, u&apos;Source/WebCore/bindings/v8/custom/V8XMLHttpRequestCustom.cpp&apos;, u&apos;Source/WebCore/dom/EventTarget.h&apos;, u&apos;Source/WebCore/dom/EventTargetFactory.in&apos;, u&apos;Source/WebCore/fileapi/FileReaderLoader.cpp&apos;, u&apos;Source/WebCore/fileapi/FileReaderLoader.h&apos;, u&apos;Source/WebCore/fileapi/Stream.cpp&apos;, u&apos;Source/WebCore/fileapi/Stream.h&apos;, u&apos;Source/WebCore/fileapi/Stream.idl&apos;, u&apos;Source/WebCore/fileapi/StreamReader.cpp&apos;, u&apos;Source/WebCore/fileapi/StreamReader.h&apos;, u&apos;Source/WebCore/fileapi/StreamReader.idl&apos;, u&apos;Source/WebCore/fileapi/ThreadableBlobRegistry.cpp&apos;, u&apos;Source/WebCore/fileapi/ThreadableBlobRegistry.h&apos;, u&apos;Source/WebCore/page/DOMWindow.idl&apos;, u&apos;Source/WebCore/platform/network/BlobRegistry.h&apos;, u&apos;Source/WebCore/platform/network/chromium/BlobRegistryProxy.cpp&apos;, u&apos;Source/WebCore/platform/network/chromium/BlobRegistryProxy.h&apos;, u&apos;Source/WebCore/xml/XMLHttpRequest.cpp&apos;, u&apos;Source/WebCore/xml/XMLHttpRequest.h&apos;, u&apos;Source/WebKit/chromium/ChangeLog&apos;, u&apos;Source/WebKit/chromium/features.gypi&apos;]&quot; exit_code: 1
Source/WebCore/fileapi/StreamReader.h:60:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/fileapi/StreamReader.h:61:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/fileapi/StreamReader.h:62:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 3 in 30 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842407</commentid>
    <comment_count>26</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-26 14:59:41 -0800</bug_when>
    <thetext>Note that this topic is current being discussed in webapp:

http://lists.w3.org/Archives/Public/public-webapps/2013JanMar/0569.html

We should participate in that discussion to ensure that other vendors are on board with implementing this API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843926</commentid>
    <comment_count>27</comment_count>
      <attachid>190196</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-28 02:43:00 -0800</bug_when>
    <thetext>Comment on attachment 190196
WIP Patch

Attachment 190196 did not pass win-ews (win):
Output: http://webkit-commit-queue.appspot.com/results/16781563</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047496</commentid>
    <comment_count>28</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-11-10 00:17:36 -0800</bug_when>
    <thetext>I plan to close that bug in favor of bug 138561</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050473</commentid>
    <comment_count>29</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-11-21 09:07:44 -0800</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 138561 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189030</attachid>
            <date>2013-02-19 02:05:59 -0800</date>
            <delta_ts>2013-02-21 21:35:57 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-110194-20130219190221.patch</filename>
            <type>text/plain</type>
            <size>58664</size>
            <attacher name="Zachary Kuznia">zork</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzMjkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTFiOWEzNzBjMjgzODUy
YmM2NGI2MGU5NjU1N2JkYjAwYzgyOWNlZi4uZGY0NGEzY2JiODhjYjY4MmMxMGZiOTk4NmQ5Mjdm
ZDY3YmViZmQ1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEzLTAyLTE5ICBaYWNo
IEt1em5pYSAgPHpvcmtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdJUC1Qcm90b3R5cGUgaW1w
bG1lbnRhdGlvbiBvZiBTdHJlYW0gQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTAxOTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIENvbmZp
Z3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOgorICAgICAgICAqIERlcml2ZWRTb3Vy
Y2VzLmNwcDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIERlcml2
ZWRTb3VyY2VzLnByaToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5mZWF0dXJlcy5hbS5pbjoKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU1N0cmVhbVJlYWRlckN1c3RvbS5jcHA6IEFkZGVkLgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0cmVhbUN1c3RvbS5jcHA6IEFkZGVkLgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0cmVhbVJlYWRlckN1c3RvbS5jcHA6IEFkZGVk
LgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNw
cDoKKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXQuaDoKKyAgICAgICAgKiBkb20vRXZlbnRUYXJn
ZXRGYWN0b3J5LmluOgorICAgICAgICAqIGZpbGVhcGkvU3RyZWFtLmNwcDogQWRkZWQuCisgICAg
ICAgICogZmlsZWFwaS9TdHJlYW0uaDogQWRkZWQuCisgICAgICAgICogZmlsZWFwaS9TdHJlYW0u
aWRsOiBBZGRlZC4KKyAgICAgICAgKiBmaWxlYXBpL1N0cmVhbUVycm9yLmg6IEFkZGVkLgorICAg
ICAgICAqIGZpbGVhcGkvU3RyZWFtRXJyb3IuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBmaWxlYXBp
L1N0cmVhbVJlYWRlci5jcHA6IEFkZGVkLgorICAgICAgICAqIGZpbGVhcGkvU3RyZWFtUmVhZGVy
Lmg6IEFkZGVkLgorICAgICAgICAqIGZpbGVhcGkvU3RyZWFtUmVhZGVyLmlkbDogQWRkZWQuCisg
ICAgICAgICogcGFnZS9ET01XaW5kb3cuaWRsOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVz
dC5jcHA6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0Lmg6CisKIDIwMTMtMDItMTggIFJ5
b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWVyZ2UgaGFuZGxlU3Bl
Y2lhbENoaWxkIGludG8gbGF5b3V0QmxvY2tDaGlsZHJlbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwppbmRleCBmNDA5ZmYwOTMxOWRmMDk5Y2Q5MzY0ZWJkOGQ3MWZjNmZkZjE2NGJmLi41Y2NlNzQw
OTllMDAxNTU3MGY1OWVmYTJkM2FjNTU1NmFmYzFmYzNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEzLTAyLTE5ICBaYWNoIEt1em5pYSAgPHpvcmtAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFdJUC1Qcm90b3R5cGUgaW1wbG1lbnRhdGlvbiBvZiBTdHJl
YW0gQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTAxOTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGZlYXR1cmVzLmd5cGk6CisKIDIwMTMtMDItMTggIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmll
dy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuICBSb2xsZWQgQ2hyb21pdW0g
REVQUyB0byByMTgzMTA1LiAgUmVxdWVzdGVkIGJ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyBiL1NvdXJjZS9XZWJDb3Jl
L0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCmluZGV4IDYyMjE5ZTEyZGNm
ODA3OWE3NDcyNzBmN2NkYjgyMGFiZDMwZThkNWYuLmE2OThkMDFiYzI5YzNjOWNiNjc2NDNkZWRl
M2IxOGMwYzVjZjYyOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NvbmZpZ3VyYXRpb25z
L0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NvbmZpZ3VyYXRp
b25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCkBAIC0xNDQsNiArMTQ0LDcgQEAgRU5BQkxFX1NI
QURPV19ET00gPSA7CiBFTkFCTEVfU0hBUkVEX1dPUktFUlMgPSBFTkFCTEVfU0hBUkVEX1dPUktF
UlM7CiBFTkFCTEVfU1BFRUNIX1NZTlRIRVNJUyA9IDsKIEVOQUJMRV9TUUxfREFUQUJBU0UgPSBF
TkFCTEVfU1FMX0RBVEFCQVNFOworRU5BQkxFX1NUUkVBTSA9IEVOQUJMRV9TVFJFQU07CiBFTkFC
TEVfU1RZTEVfU0NPUEVEID0gOwogRU5BQkxFX1NVQlBJWEVMX0xBWU9VVCA9IEVOQUJMRV9TVUJQ
SVhFTF9MQVlPVVQ7CiBFTkFCTEVfU1ZHID0gRU5BQkxFX1NWRzsKQEAgLTE2Niw0ICsxNjcsNCBA
QCBFTkFCTEVfV09SS0VSUyA9IEVOQUJMRV9XT1JLRVJTOwogRU5BQkxFX1hIUl9USU1FT1VUID0g
RU5BQkxFX1hIUl9USU1FT1VUOwogRU5BQkxFX1hTTFQgPSBFTkFCTEVfWFNMVDsKIAotRkVBVFVS
RV9ERUZJTkVTID0gJChFTkFCTEVfM0RfUkVOREVSSU5HKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF8y
RF9DQU5WQVMpICQoRU5BQkxFX0JMT0IpICQoRU5BQkxFX0NBTlZBU19QQVRIKSAkKEVOQUJMRV9D
QU5WQVNfUFJPWFkpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9DU1BfTkVY
VCkgJChFTkFCTEVfQ1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFLKSAkKEVOQUJMRV9DU1NfREVWSUNF
X0FEQVBUQVRJT04pICQoRU5BQkxFX0NTU19FWENMVVNJT05TKSAkKEVOQUJMRV9DU1NfRklMVEVS
UykgJChFTkFCTEVfQ1NTX0lNQUdFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9DU1NfSU1BR0VfUkVT
T0xVVElPTikgJChFTkFCTEVfQ1NTX1JFR0lPTlMpICQoRU5BQkxFX0NTU19TSEFERVJTKSAkKEVO
QUJMRV9DU1NfQ09NUE9TSVRJTkcpICQoRU5BQkxFX0NTU19TVElDS1lfUE9TSVRJT04pICQoRU5B
QkxFX0NTU19UUkFOU0ZPUk1TX0FOSU1BVElPTlNfVU5QUkVGSVhFRCkgJChFTkFCTEVfQ1NTX1ZB
UklBQkxFUykgJChFTkFCTEVfQ1NTM19DT05ESVRJT05BTF9SVUxFUykgJChFTkFCTEVfQ1NTM19U
RVhUKSAkKEVOQUJMRV9DVVNUT01fU0NIRU1FX0hBTkRMRVIpICQoRU5BQkxFX0RBU0hCT0FSRF9T
VVBQT1JUKSAkKEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UKSAkKEVOQUJMRV9EQVRBX1RSQU5TRkVS
X0lURU1TKSAkKEVOQUJMRV9ERVRBSUxTX0VMRU1FTlQpICQoRU5BQkxFX0RFVklDRV9PUklFTlRB
VElPTikgJChFTkFCTEVfRElBTE9HX0VMRU1FTlQpICQoRU5BQkxFX0RJUkVDVE9SWV9VUExPQUQp
ICQoRU5BQkxFX0RPTTRfRVZFTlRTX0NPTlNUUlVDVE9SKSAkKEVOQUJMRV9EUkFHR0FCTEVfUkVH
SU9OKSAkKEVOQUJMRV9FTkNSWVBURURfTUVESUFfVjIpICQoRU5BQkxFX0ZJTEVfU1lTVEVNKSAk
KEVOQUJMRV9GSUxURVJTKSAkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfR0FNRVBB
RCkgJChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxFX0hJRERFTl9QQUdFX0RPTV9USU1FUl9U
SFJPVFRMSU5HKSAkKEVOQUJMRV9ISUdIX0RQSV9DQU5WQVMpICQoRU5BQkxFX0lDT05EQVRBQkFT
RSkgJChFTkFCTEVfSUZSQU1FX1NFQU1MRVNTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAk
KEVOQUJMRV9JTlBVVF9TUEVFQ0gpICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQoRU5BQkxF
X0lOUFVUX1RZUEVfREFURSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRSkgJChFTkFCTEVf
SU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FMKSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKSAkKEVO
QUJMRV9JTlBVVF9UWVBFX1RJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChFTkFCTEVf
SkFWQVNDUklQVF9ERUJVR0dFUikgJChFTkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJFRklYRVMp
ICQoRU5BQkxFX0xFR0FDWV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9MRUdBQ1lfVkVORE9SX1BS
RUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfV0VCX0FVRElPKSAkKEVOQUJMRV9MSU5LX1BSRUZFVENI
KSAkKEVOQUJMRV9MSU5LX1BSRVJFTkRFUikgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9NRURJ
QV9TT1VSQ0UpICQoRU5BQkxFX01FRElBX1NUQVRJU1RJQ1MpICQoRU5BQkxFX01FVEVSX0VMRU1F
TlQpICQoRU5BQkxFX01IVE1MKSAkKEVOQUJMRV9NSUNST0RBVEEpICQoRU5BQkxFX01PVVNFX0NV
UlNPUl9TQ0FMRSkgJChFTkFCTEVfTkFWSUdBVE9SX0NPTlRFTlRfVVRJTFMpICQoRU5BQkxFX05P
VElGSUNBVElPTlMpICQoRU5BQkxFX1BBR0VfVklTSUJJTElUWV9BUEkpICQoRU5BQkxFX1BERktJ
VF9QTFVHSU4pICQoRU5BQkxFX1BMVUdJTl9QUk9YWV9GT1JfVklERU8pICQoRU5BQkxFX1BST0dS
RVNTX0VMRU1FTlQpICQoRU5BQkxFX1BST1hJTUlUWV9FVkVOVFMpICQoRU5BQkxFX1FVT1RBKSAk
KEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkgJChFTkFCTEVfUkVTT0xVVElPTl9NRURJ
QV9RVUVSWSkgJChFTkFCTEVfU0NSSVBURURfU1BFRUNIKSAkKEVOQUJMRV9TSEFET1dfRE9NKSAk
KEVOQUJMRV9TSEFSRURfV09SS0VSUykgJChFTkFCTEVfU1BFRUNIX1NZTlRIRVNJUykgJChFTkFC
TEVfU1FMX0RBVEFCQVNFKSAkKEVOQUJMRV9TVFlMRV9TQ09QRUQpICQoRU5BQkxFX1NVQlBJWEVM
X0xBWU9VVCkgJChFTkFCTEVfU1ZHKSAkKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpICQo
RU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVfVEVNUExBVEVfRUxFTUVOVCkgJChFTkFCTEVfVEVY
VF9BVVRPU0laSU5HKSAkKEVOQUJMRV9URVhUX05PVElGSUNBVElPTlNfT05MWSkgJChFTkFCTEVf
VE9VQ0hfSUNPTl9MT0FESU5HKSAkKEVOQUJMRV9VU0VSU0VMRUNUX0FMTCkgJChFTkFCTEVfVklE
RU8pICQoRU5BQkxFX1ZJREVPX1RSQUNLKSAkKEVOQUJMRV9XRUJHTCkgJChFTkFCTEVfV0VCX0FV
RElPKSAkKEVOQUJMRV9XRUJfU09DS0VUUykgJChFTkFCTEVfV0VCX1RJTUlORykgJChFTkFCTEVf
V09SS0VSUykgJChFTkFCTEVfWEhSX1RJTUVPVVQpICQoRU5BQkxFX1hTTFQpICQoRkVBVFVSRV9E
RUZJTkVTXyQoUExBVEZPUk1fTkFNRSkpOworRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0Rf
UkVOREVSSU5HKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICQoRU5BQkxFX0JMT0Ip
ICQoRU5BQkxFX0NBTlZBU19QQVRIKSAkKEVOQUJMRV9DQU5WQVNfUFJPWFkpICQoRU5BQkxFX0NI
QU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9DU1BfTkVYVCkgJChFTkFCTEVfQ1NTX0JPWF9ERUNP
UkFUSU9OX0JSRUFLKSAkKEVOQUJMRV9DU1NfREVWSUNFX0FEQVBUQVRJT04pICQoRU5BQkxFX0NT
U19FWENMVVNJT05TKSAkKEVOQUJMRV9DU1NfRklMVEVSUykgJChFTkFCTEVfQ1NTX0lNQUdFX09S
SUVOVEFUSU9OKSAkKEVOQUJMRV9DU1NfSU1BR0VfUkVTT0xVVElPTikgJChFTkFCTEVfQ1NTX1JF
R0lPTlMpICQoRU5BQkxFX0NTU19TSEFERVJTKSAkKEVOQUJMRV9DU1NfQ09NUE9TSVRJTkcpICQo
RU5BQkxFX0NTU19TVElDS1lfUE9TSVRJT04pICQoRU5BQkxFX0NTU19UUkFOU0ZPUk1TX0FOSU1B
VElPTlNfVU5QUkVGSVhFRCkgJChFTkFCTEVfQ1NTX1ZBUklBQkxFUykgJChFTkFCTEVfQ1NTM19D
T05ESVRJT05BTF9SVUxFUykgJChFTkFCTEVfQ1NTM19URVhUKSAkKEVOQUJMRV9DVVNUT01fU0NI
RU1FX0hBTkRMRVIpICQoRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUKSAkKEVOQUJMRV9EQVRBTElT
VF9FTEVNRU5UKSAkKEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TKSAkKEVOQUJMRV9ERVRBSUxT
X0VMRU1FTlQpICQoRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTikgJChFTkFCTEVfRElBTE9HX0VM
RU1FTlQpICQoRU5BQkxFX0RJUkVDVE9SWV9VUExPQUQpICQoRU5BQkxFX0RPTTRfRVZFTlRTX0NP
TlNUUlVDVE9SKSAkKEVOQUJMRV9EUkFHR0FCTEVfUkVHSU9OKSAkKEVOQUJMRV9FTkNSWVBURURf
TUVESUFfVjIpICQoRU5BQkxFX0ZJTEVfU1lTVEVNKSAkKEVOQUJMRV9GSUxURVJTKSAkKEVOQUJM
RV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0VPTE9DQVRJT04p
ICQoRU5BQkxFX0hJRERFTl9QQUdFX0RPTV9USU1FUl9USFJPVFRMSU5HKSAkKEVOQUJMRV9ISUdI
X0RQSV9DQU5WQVMpICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSUZSQU1FX1NFQU1M
RVNTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9JTlBVVF9TUEVFQ0gpICQo
RU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURSkgJChFTkFC
TEVfSU5QVVRfVFlQRV9EQVRFVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FM
KSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUpICQo
RU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJChF
TkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9OT1RJRklD
QVRJT05TKSAkKEVOQUJMRV9MRUdBQ1lfVkVORE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lf
V0VCX0FVRElPKSAkKEVOQUJMRV9MSU5LX1BSRUZFVENIKSAkKEVOQUJMRV9MSU5LX1BSRVJFTkRF
UikgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9NRURJQV9TT1VSQ0UpICQoRU5BQkxFX01FRElB
X1NUQVRJU1RJQ1MpICQoRU5BQkxFX01FVEVSX0VMRU1FTlQpICQoRU5BQkxFX01IVE1MKSAkKEVO
QUJMRV9NSUNST0RBVEEpICQoRU5BQkxFX01PVVNFX0NVUlNPUl9TQ0FMRSkgJChFTkFCTEVfTkFW
SUdBVE9SX0NPTlRFTlRfVVRJTFMpICQoRU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxFX1BB
R0VfVklTSUJJTElUWV9BUEkpICQoRU5BQkxFX1BERktJVF9QTFVHSU4pICQoRU5BQkxFX1BMVUdJ
Tl9QUk9YWV9GT1JfVklERU8pICQoRU5BQkxFX1BST0dSRVNTX0VMRU1FTlQpICQoRU5BQkxFX1BS
T1hJTUlUWV9FVkVOVFMpICQoRU5BQkxFX1FVT1RBKSAkKEVOQUJMRV9SRVFVRVNUX0FOSU1BVElP
Tl9GUkFNRSkgJChFTkFCTEVfUkVTT0xVVElPTl9NRURJQV9RVUVSWSkgJChFTkFCTEVfU0NSSVBU
RURfU1BFRUNIKSAkKEVOQUJMRV9TSEFET1dfRE9NKSAkKEVOQUJMRV9TSEFSRURfV09SS0VSUykg
JChFTkFCTEVfU1BFRUNIX1NZTlRIRVNJUykgJChFTkFCTEVfU1FMX0RBVEFCQVNFKSAkKEVOQUJM
RV9TVFJFQU0pICQoRU5BQkxFX1NUWUxFX1NDT1BFRCkgJChFTkFCTEVfU1VCUElYRUxfTEFZT1VU
KSAkKEVOQUJMRV9TVkcpICQoRU5BQkxFX1NWR19ET01fT0JKQ19CSU5ESU5HUykgJChFTkFCTEVf
U1ZHX0ZPTlRTKSAkKEVOQUJMRV9URU1QTEFURV9FTEVNRU5UKSAkKEVOQUJMRV9URVhUX0FVVE9T
SVpJTkcpICQoRU5BQkxFX1RFWFRfTk9USUZJQ0FUSU9OU19PTkxZKSAkKEVOQUJMRV9UT1VDSF9J
Q09OX0xPQURJTkcpICQoRU5BQkxFX1VTRVJTRUxFQ1RfQUxMKSAkKEVOQUJMRV9WSURFTykgJChF
TkFCTEVfVklERU9fVFJBQ0spICQoRU5BQkxFX1dFQkdMKSAkKEVOQUJMRV9XRUJfQVVESU8pICQo
RU5BQkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XRUJfVElNSU5HKSAkKEVOQUJMRV9XT1JLRVJT
KSAkKEVOQUJMRV9YSFJfVElNRU9VVCkgJChFTkFCTEVfWFNMVCkgJChGRUFUVVJFX0RFRklORVNf
JChQTEFURk9STV9OQU1FKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291
cmNlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5jcHAKaW5kZXggMTk1YmVh
Y2Q1YmZmYzMxNjJmMTE5YWE0NTJhYmU0YTNhNDc3MzU5MS4uY2VmMmQzODA1YjQ2ZDg4ZGZkZWY0
ZDM5Mjk1YTg0NDJhNDdlMGY0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNv
dXJjZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLmNwcApAQCAtMzEz
LDYgKzMxMyw5IEBACiAjaW5jbHVkZSAiSlNTdG9yYWdlSW5mb0Vycm9yQ2FsbGJhY2suY3BwIgog
I2luY2x1ZGUgIkpTU3RvcmFnZUluZm9RdW90YUNhbGxiYWNrLmNwcCIKICNpbmNsdWRlICJKU1N0
b3JhZ2VJbmZvVXNhZ2VDYWxsYmFjay5jcHAiCisjaW5jbHVkZSAiSlNTdHJlYW0uY3BwIgorI2lu
Y2x1ZGUgIkpTU3RyZWFtRXJyb3IuY3BwIgorI2luY2x1ZGUgIkpTU3RyZWFtUmVhZGVyLmNwcCIK
ICNpbmNsdWRlICJKU1N0cmluZ0NhbGxiYWNrLmNwcCIKICNpbmNsdWRlICJKU1N0eWxlTWVkaWEu
Y3BwIgogI2luY2x1ZGUgIkpTU3R5bGVTaGVldC5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQppbmRleCAzNzcyMjUyZTUwNDYyOWZmNzMwZDIxNjMwNjRhYjdhYzNmYzRiNjBjLi45NzQ5
M2I1ZDEwMmFkYTYwNjQxMWEyN2Y0NzE4NjMwY2NmMjUwZTIwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UKQEAgLTI4OSw2ICsyODksOSBAQCBCSU5ESU5HX0lETFMgPSBcCiAgICAgJChX
ZWJDb3JlKS9maWxlYXBpL0ZpbGVMaXN0LmlkbCBcCiAgICAgJChXZWJDb3JlKS9maWxlYXBpL0Zp
bGVSZWFkZXIuaWRsIFwKICAgICAkKFdlYkNvcmUpL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuaWRs
IFwKKyAgICAkKFdlYkNvcmUpL2ZpbGVhcGkvU3RyZWFtLmlkbCBcCisgICAgJChXZWJDb3JlKS9m
aWxlYXBpL1N0cmVhbUVycm9yLmlkbCBcCisgICAgJChXZWJDb3JlKS9maWxlYXBpL1N0cmVhbVJl
YWRlci5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9ET01Gb3JtRGF0YS5pZGwgXAogICAgICQo
V2ViQ29yZSkvaHRtbC9ET01TZXR0YWJsZVRva2VuTGlzdC5pZGwgXAogICAgICQoV2ViQ29yZSkv
aHRtbC9ET01Ub2tlbkxpc3QuaWRsIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2
ZWRTb3VyY2VzLnByaSBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnByaQppbmRleCBk
MTFiZTRkOWRiYTUzOTdlYjljNDFjZmFjMzllZmQ3MjExNGFmZmE4Li5kN2IyYjk3MDJmZmRjZjhl
MzJhYTFiODcxZmIyNjZlZTUzNjNlODhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9EZXJp
dmVkU291cmNlcy5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpCkBA
IC0yOTYsNiArMjk2LDkgQEAgSURMX0JJTkRJTkdTICs9IFwKICAgICAkJFBXRC9maWxlYXBpL0Zp
bGVMaXN0LmlkbCBcCiAgICAgJCRQV0QvZmlsZWFwaS9GaWxlUmVhZGVyLmlkbCBcCiAgICAgJCRQ
V0QvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5pZGwgXAorICAgICQkUFdEL2ZpbGVhcGkvU3RyZWFt
LmlkbCBcCisgICAgJCRQV0QvZmlsZWFwaS9TdHJlYW1FcnJvci5pZGwgXAorICAgICQkUFdEL2Zp
bGVhcGkvU3RyZWFtUmVhZGVyLmlkbCBcCiAgICAgJCRQV0QvaHRtbC9jYW52YXMvQXJyYXlCdWZm
ZXJWaWV3LmlkbCBcCiAgICAgJCRQV0QvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaWRsIFwKICAg
ICAkJFBXRC9odG1sL2NhbnZhcy9EYXRhVmlldy5pZGwgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUuZmVhdHVyZXMuYW0uaW4gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5mZWF0dXJlcy5hbS5pbgppbmRleCBhNmRjNDM5ZDFjY2RiNWI0ZmFmNTEwNWU3MGFjOGU2
MDU4MmNhZmQ5Li45YThkYzI0ZmFjYmE5MTRiMTY1NmM1MzVjNmEwMDg4ODE5ZTJjZWYwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5mZWF0dXJlcy5hbS5pbgorKysgYi9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5mZWF0dXJlcy5hbS5pbgpAQCAtODUsNiArODUsNyBA
QCBmZWF0dXJlX2RlZmluZXNfZGVmYXVsdHMgKz0gXAogCUVOQUJMRV9TTU9PVEhfU0NST0xMSU5H
PTEgXAogCUVOQUJMRV9TUEVMTENIRUNLPTEgXAogCUVOQUJMRV9TUUxfREFUQUJBU0U9MSBcCisJ
RU5BQkxFX1NUUkVBTT0xIFwKIAlFTkFCTEVfU1RZTEVfU0NPUEVEPTAgXAogCUVOQUJMRV9TVkc9
MSBcCiAJRU5BQkxFX1NWR19ET01fT0JKQ19CSU5ESU5HUz0wIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCmluZGV4IDY3MTk2ZDQ2YWFhMDQyZTE3YmRjNGZjYzU1ZGJkZTE5MDQxODk4ODMu
LjU2MzAwY2YyNjgzODBmYzVmZDc1NWY3NDMwMjk1ZTllMTIzOWVkZjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQpAQCAtNzE5LDYgKzcxOSwxMiBAQCB3ZWJjb3JlX2J1aWx0X3NvdXJj
ZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTdG9yYWdlSW5mb1F1b3RhQ2FsbGJh
Y2suaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1N0b3JhZ2VJbmZvVXNhZ2VDYWxsYmFj
ay5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTdG9yYWdlSW5mb1VzYWdlQ2FsbGJh
Y2suaCBcCisJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1N0cmVhbS5jcHAgXAorCURlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNTdHJlYW0uaCBcCisJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1N0
cmVhbUVycm9yLmNwcCBcCisJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1N0cmVhbUVycm9yLmgg
XAorCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTdHJlYW1SZWFkZXIuY3BwIFwKKwlEZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTU3RyZWFtUmVhZGVyLmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNTdHJpbmdDYWxsYmFjay5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTdHJp
bmdDYWxsYmFjay5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU3R5bGVNZWRpYS5jcHAg
XApAQCAtMTQzNSw2ICsxNDQxLDkgQEAgZG9tX2JpbmRpbmdfaWRscyArPSBcCiAJJChXZWJDb3Jl
KS9maWxlYXBpL0ZpbGVMaXN0LmlkbCBcCiAJJChXZWJDb3JlKS9maWxlYXBpL0ZpbGVSZWFkZXIu
aWRsIFwKIAkkKFdlYkNvcmUpL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuaWRsIFwKKwkkKFdlYkNv
cmUpL2ZpbGVhcGkvU3RyZWFtLmlkbCBcCisJJChXZWJDb3JlKS9maWxlYXBpL1N0cmVhbUVycm9y
LmlkbCBcCisJJChXZWJDb3JlKS9maWxlYXBpL1N0cmVhbVJlYWRlci5pZGwgXAogCSQoV2ViQ29y
ZSkvaHRtbC9ET01Gb3JtRGF0YS5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9ET01TZXR0YWJsZVRv
a2VuTGlzdC5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9ET01Ub2tlbkxpc3QuaWRsIFwKQEAgLTMy
MjAsNiArMzIyOSwxMSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvRmlsZVRocmVhZC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVRocmVh
ZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVUaHJlYWRUYXNrLmggXAorCVNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvU3RyZWFtLmNwcCBcCisJU291cmNlL1dlYkNvcmUvZmlsZWFwaS9T
dHJlYW0uaCBcCisJU291cmNlL1dlYkNvcmUvZmlsZWFwaS9TdHJlYW1FcnJvci5oIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL1N0cmVhbVJlYWRlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvU3RyZWFtUmVhZGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJs
ZUJsb2JSZWdpc3RyeS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJs
b2JSZWdpc3RyeS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1dlYktpdEJsb2JCdWlsZGVy
LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNzg4ZmIzOGYyOTI3YmQwZDFhNGYwMzkwMjUwMGY1
YmRkMjFlYjE3NS4uZjBhYjk4ODcwMWM3MDg0MTA0MWM4MWI1ZjY2YmM2NDJlZTFlMWFiYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtMjY4LDYgKzI2OCw5IEBACiAgICAgICAgICAgICAnZmlsZWFwaS9G
aWxlTGlzdC5pZGwnLAogICAgICAgICAgICAgJ2ZpbGVhcGkvRmlsZVJlYWRlci5pZGwnLAogICAg
ICAgICAgICAgJ2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuaWRsJywKKyAgICAgICAgICAgICdmaWxl
YXBpL1N0cmVhbS5pZGwnLAorICAgICAgICAgICAgJ2ZpbGVhcGkvU3RyZWFtRXJyb3IuaWRsJywK
KyAgICAgICAgICAgICdmaWxlYXBpL1N0cmVhbVJlYWRlci5pZGwnLAogICAgICAgICAgICAgJ2h0
bWwvRE9NRm9ybURhdGEuaWRsJywKICAgICAgICAgICAgICdodG1sL0RPTVNldHRhYmxlVG9rZW5M
aXN0LmlkbCcsCiAgICAgICAgICAgICAnaHRtbC9ET01Ub2tlbkxpc3QuaWRsJywKQEAgLTE0MTAs
NiArMTQxMyw4IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHTGVuZ3Ro
Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHUGF0aFNl
Z0N1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0b3JhZ2VD
dXN0b20uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTdHJlYW1DdXN0
b20uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTdHJlYW1SZWFkZXJD
dXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0
Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVl
dExpc3RDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhUcmFj
a0V2ZW50Q3VzdG9tLmNwcCcsCkBAIC0xNzcwLDYgKzE3NzUsMTEgQEAKICAgICAgICAgICAgICdm
aWxlYXBpL0ZpbGVUaHJlYWQuY3BwJywKICAgICAgICAgICAgICdmaWxlYXBpL0ZpbGVUaHJlYWQu
aCcsCiAgICAgICAgICAgICAnZmlsZWFwaS9GaWxlVGhyZWFkVGFzay5oJywKKyAgICAgICAgICAg
ICdmaWxlYXBpL1N0cmVhbS5jcHAnLAorICAgICAgICAgICAgJ2ZpbGVhcGkvU3RyZWFtLmgnLAor
ICAgICAgICAgICAgJ2ZpbGVhcGkvU3RyZWFtRXJyb3IuaCcsCisgICAgICAgICAgICAnZmlsZWFw
aS9TdHJlYW1SZWFkZXIuY3BwJywKKyAgICAgICAgICAgICdmaWxlYXBpL1N0cmVhbVJlYWRlci5o
JywKICAgICAgICAgICAgICdmaWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwJywKICAg
ICAgICAgICAgICdmaWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaCcsCiAgICAgICAgICAg
ICAnZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5jcHAnLApAQCAtNTg3NCw2ICs1ODg0LDEwIEBA
CiAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9ET01S
YW5nZS5tbScsCiAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9ET01SZWN0Lm1tJywKICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EZXJpdmVkU291
cmNlcy9XZWJDb3JlL0RPTVJlY3RJbnRlcm5hbC5oJywKKyAgICAgICAgICAgICc8KFBST0RVQ1Rf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0RPTVN0cmVhbS5tbScsCisgICAgICAgICAgICAn
PChQUk9EVUNUX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9ET01TdHJlYW1FcnJvci5oJywK
KyAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0RPTVN0
cmVhbUVycm9yLm1tJywKKyAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJDb3JlL0RPTVN0cmVhbUVycm9ySW50ZXJuYWwuaCcsCiAgICAgICAgICAgICAnPChQUk9E
VUNUX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9ET01TVkdBRWxlbWVudC5kZXAnLAogICAg
ICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvRE9NU1ZHQUVs
ZW1lbnQubW0nLAogICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvRE9NU1ZHQWx0R2x5cGhFbGVtZW50LmRlcCcsCkBAIC03MTAyLDYgKzcxMTYsMTIgQEAK
ICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU3Rv
cmFnZUluZm9RdW90YUNhbGxiYWNrLmgnLAogICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTdG9yYWdlSW5mb1VzYWdlQ2FsbGJhY2suY3BwJywKICAg
ICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU3RvcmFn
ZUluZm9Vc2FnZUNhbGxiYWNrLmgnLAorICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNTdHJlYW0uY3BwJywKKyAgICAgICAgICAgICc8KFBST0RVQ1Rf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU3RyZWFtLmgnLAorICAgICAgICAgICAgJzwo
UFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTdHJlYW1FcnJvci5jcHAnLAor
ICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTdHJl
YW1FcnJvci5oJywKKyAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTU3RyZWFtUmVhZGVyLmNwcCcsCisgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikv
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1N0cmVhbVJlYWRlci5oJywKICAgICAgICAgICAgICc8
KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU3R5bGVNZWRpYS5jcHAnLAog
ICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTdHls
ZU1lZGlhLmgnLAogICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNTdHlsZVNoZWV0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1N0cmVhbVJlYWRlckN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1N0cmVhbVJlYWRlckN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDIzNmNlMTg3YWRlZjFh
YjdlMjBmNzQ5MjlkYTNmY2UyNjIzOTlkZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU3RyZWFtUmVhZGVyQ3VzdG9tLmNwcApAQCAtMCwwICsxLDU1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNUUkVBTSkKKworI2luY2x1ZGUgIkpT
U3JlYW1SZWFkZXIuaCIKKworI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJT
dHJlYW1SZWFkZXIuaCIKKyNpbmNsdWRlIDx3dGYvQXJyYXlCdWZmZXIuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitKU1ZhbHVlIEpTU3RyZWFtUmVh
ZGVyOjpyZXN1bHQoRXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIFN0cmVhbVJlYWRlciog
aW1wID0gaW1wbCgpOworICAgIC8vIFRPRE8KKyAgICByZXR1cm4ganNPd25lZFN0cmluZ09yTnVs
bChleGVjLCBpbXAtPnN0cmluZ1Jlc3VsdCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKEJMT0IpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0cmVhbUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhTdHJlYW1DdXN0b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE2OGMyNTM4
ODEyYzMyMTMzOGQ0OWVmNjZjMTYzZmZkYWM1NGZhNDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTdHJlYW1DdXN0b20uY3BwCkBAIC0wLDAg
KzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3RyZWFtLmgiCisKKyNpbmNs
dWRlICJWOFN0cmVhbS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoU3RyZWFtKiBpbXBsLCB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUp
Cit7CisgICAgQVNTRVJUKGltcGwpOworICAgIHJldHVybiBWOFN0cmVhbTo6Y3JlYXRlV3JhcHBl
cihpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworfQorCit2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhTdHJlYW06OmNvbnN0cnVjdG9yQ2FsbGJhY2tDdXN0b20oY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKK3sKKyAgICAvLyBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0g
Z2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworCisgICAgaWYgKCFhcmdzLkxlbmd0aCgpKSB7
CisgICAgICAgIFJlZlB0cjxTdHJlYW0+IHN0cmVhbSA9IFN0cmVhbTo6Y3JlYXRlKCk7CisgICAg
ICAgIHJldHVybiB0b1Y4KHN0cmVhbS5nZXQoKSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29s
YXRlKCkpOworICAgIH0KKworICAgIFJlZlB0cjxTdHJlYW0+IHN0cmVhbSA9IFN0cmVhbTo6Y3Jl
YXRlKCk7CisgICAgcmV0dXJuIHRvVjgoc3RyZWFtLmdldCgpLCBhcmdzLkhvbGRlcigpLCBhcmdz
LkdldElzb2xhdGUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3RyZWFtUmVhZGVyQ3VzdG9t
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0cmVhbVJlYWRlckN1
c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZTMyY2M3Njc5MzMxZmE4OWFkZDYwNDgxNjg5NDk5MTgxOGEz
ZTgzZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFN0cmVhbVJlYWRlckN1c3RvbS5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShTVFJFQU0pCisKKyNpbmNsdWRlICJWOFN0cmVhbVJlYWRlci5o
IgorCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlY4QXJy
YXlCdWZmZXIuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhTdHJlYW1SZWFkZXI6OnJlc3VsdEF0dHJHZXR0
ZXJDdXN0b20odjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nvcklu
Zm8mIGluZm8pCit7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhv
bGRlcigpOworICAgIFN0cmVhbVJlYWRlciogaW1wID0gVjhTdHJlYW1SZWFkZXI6OnRvTmF0aXZl
KGhvbGRlcik7CisgICAgaWYgKGltcC0+cmVhZFR5cGUoKSA9PSBTdHJlYW1SZWFkZXI6OlJlYWRB
c0FycmF5QnVmZmVyKQorICAgICAgICByZXR1cm4gdG9WOChpbXAtPmFycmF5QnVmZmVyUmVzdWx0
KCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdjhTdHJp
bmdPck51bGwoaW1wLT5zdHJpbmdSZXN1bHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RD
dXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJl
cXVlc3RDdXN0b20uY3BwCmluZGV4IGFkYzU0ODI3M2ZkYjViYTZkODA0NjUyZGE1MmNhYzIxZTk0
MjRkY2YuLjA4NjQwYjkzZGU2OTZmNjJkMzFmZjIwOTMzYzJkMmVjNmZjMGIwZmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRw
UmVxdWVzdEN1c3RvbS5jcHAKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJWOERPTUZvcm1E
YXRhLmgiCiAjaW5jbHVkZSAiVjhEb2N1bWVudC5oIgogI2luY2x1ZGUgIlY4SFRNTERvY3VtZW50
LmgiCisjaW5jbHVkZSAiVjhTdHJlYW0uaCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgogI2lu
Y2x1ZGUgIldvcmtlckNvbnRleHQuaCIKICNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdC5oIgpAQCAt
MTEwLDYgKzExMSwxNSBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhYTUxIdHRwUmVxdWVzdDo6
cmVzcG9uc2VBdHRyR2V0dGVyQ3VzdG9tKHY4OjpMb2NhbDx2ODo6UwogICAgICAgICAgICAgICAg
IHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGluZm8uR2V0SXNvbGF0ZSgpKTsKICAgICAgICAg
ICAgIHJldHVybiB0b1Y4RmFzdChhcnJheUJ1ZmZlciwgaW5mbywgeG1sSHR0cFJlcXVlc3QpOwog
ICAgICAgICB9CisKKyAgICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpSZXNwb25zZVR5cGVTdHJlYW06
CisgICAgICAgIHsKKyAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICAg
ICAgU3RyZWFtKiBzdHJlYW0gPSB4bWxIdHRwUmVxdWVzdC0+cmVzcG9uc2VTdHJlYW0oZWMpOwor
ICAgICAgICAgICAgaWYgKGVjKQorICAgICAgICAgICAgICAgIHJldHVybiBzZXRET01FeGNlcHRp
b24oZWMsIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiB0b1Y4KHN0cmVh
bSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgICAgICB9CiAgICAgfQog
CiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudFRhcmdldC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKaW5k
ZXggN2EyZTEwMGEwNTUwNTNiMGQ1NWI0ZDFjOTc2YTUwY2U4MjE1ODkxOS4uNjNjMWNhMGE1YmZm
OWY1YmI1MDAwOWJjNDgyZWU5ODM4YWY0NjlmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50VGFyZ2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgK
QEAgLTY1LDYgKzY1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFNoYXJlZFdv
cmtlcjsKICAgICBjbGFzcyBTaGFyZWRXb3JrZXJDb250ZXh0OwogICAgIGNsYXNzIFNvdXJjZUJ1
ZmZlckxpc3Q7CisgICAgY2xhc3MgU3RyZWFtUmVhZGVyOwogICAgIGNsYXNzIFRleHRUcmFjazsK
ICAgICBjbGFzcyBUZXh0VHJhY2tDdWU7CiAgICAgY2xhc3MgV2ViU29ja2V0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0RmFjdG9yeS5pbiBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudFRhcmdldEZhY3RvcnkuaW4KaW5kZXggY2Y1YWNmNzVjM2JlNDkwMzBkMzg3
MTIzOTMwMzg0ZTE4MDA0ZjRjOC4uZjUxYmFkNzEwY2U5NDNlYmYyYjg5OGFlNWYzMTMxNzIwOWE2
NTcxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0RmFjdG9yeS5p
bgorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXRGYWN0b3J5LmluCkBAIC0zMiw2
ICszMiw3IEBAIFNoYXJlZFdvcmtlckNvbnRleHQgY29uZGl0aW9uYWw9U0hBUkVEX1dPUktFUlMK
IFNvdXJjZUJ1ZmZlckxpc3QgY29uZGl0aW9uYWw9TUVESUFfU09VUkNFCiBTcGVlY2hSZWNvZ25p
dGlvbiBjb25kaXRpb25hbD1TQ1JJUFRFRF9TUEVFQ0gKIFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5j
ZSBjb25kaXRpb25hbD1TUEVFQ0hfU1lOVEhFU0lTCitTdHJlYW1SZWFkZXIgY29uZGl0aW9uYWw9
U1RSRUFNCiBTVkdFbGVtZW50SW5zdGFuY2UgY29uZGl0aW9uYWw9U1ZHCiBUZXh0VHJhY2sgY29u
ZGl0aW9uYWw9VklERU9fVFJBQ0sKIFRleHRUcmFja0N1ZSBjb25kaXRpb25hbD1WSURFT19UUkFD
SwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9TdHJlYW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9TdHJlYW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjOWNiODg2ZTg2MThlNDY1
NTU0NzRmZTA3YTIyNjMxZGE2MDYzZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL1N0cmVhbS5jcHAKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiU3RyZWFtLmgiCisKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNs
dWRlIDx3dGYvQXJyYXlCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVm
UHRyPFN0cmVhbT4gU3RyZWFtOjpjcmVhdGUoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZl
cikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0cmVhbShidWZmZXIpKTsKK30KKworU3Ry
ZWFtOjpTdHJlYW0oKQorICAgIDogbV9yZWFkSGVhZCgwKQoreworfQorCitTdHJlYW06OlN0cmVh
bShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyKQorICAgIDogbV9yZWFkSGVhZCgwKQor
ICAgICwgbV9idWZmZXIoYnVmZmVyKQoreworfQorCitTdHJlYW06On5TdHJlYW0oKQoreworfQor
Cit2b2lkIFN0cmVhbTo6Y2xvc2UoKQoreworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBT
dHJlYW06OnJlYWRBc0FycmF5QnVmZmVyKCkKK3sKKyAgICBpZiAoIW1fYnVmZmVyKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyByZW1haW5pbmcgPSBtX2J1ZmZl
ci0+c2l6ZSgpIC0gbV9yZWFkSGVhZDsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbGVuZ3RoID0g
cmVtYWluaW5nOworCisgICAgaWYgKGxlbmd0aCA8PSAwKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gZGF0YSA9IEFycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCksIDEpOworCisgICAgbWVtY3B5KHN0YXRpY19jYXN0PGNo
YXIqPihkYXRhLT5kYXRhKCkpLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obV9idWZmZXItPmRh
dGEoKSkgKyBtX3JlYWRIZWFkLCBsZW5ndGgpOworCisgICAgbV9yZWFkSGVhZCArPSBsZW5ndGg7
CisKKyAgICByZXR1cm4gZGF0YTsKK30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gU3RyZWFt
OjpyZWFkQXNBcnJheUJ1ZmZlcih1bnNpZ25lZCBsb25nIGxvbmcgbWF4U2l6ZSkKK3sKKyAgICBp
ZiAoIW1fYnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHVuc2lnbmVkIGxvbmcgbG9u
ZyByZW1haW5pbmcgPSBtX2J1ZmZlci0+c2l6ZSgpIC0gbV9yZWFkSGVhZDsKKyAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgbGVuZ3RoID0gbWF4U2l6ZSA8IHJlbWFpbmluZyA/IG1heFNpemUgOiByZW1h
aW5pbmc7CisKKyAgICBpZiAobGVuZ3RoIDw9IDApCisgICAgICAgIHJldHVybiAwOworCisgICAg
UmVmUHRyPEFycmF5QnVmZmVyPiBkYXRhID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obGVuZ3RoKSwgMSk7CisKKyAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8Y2hhcio+
KGRhdGEtPmRhdGEoKSksIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihtX2J1ZmZlci0+ZGF0YSgp
KSArIG1fcmVhZEhlYWQsIGxlbmd0aCk7CisKKyAgICBtX3JlYWRIZWFkICs9IGxlbmd0aDsKKwor
ICAgIHJldHVybiBkYXRhOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1N0cmVhbS5oIGIvU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9TdHJlYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZjZkYzRmZmMwMGUxZGI1YjIwNTRhNThjOGNjMGMxZDY5
Nzk1YzU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9TdHJlYW0u
aApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFN0cmVhbV9oCisjZGVmaW5lIFN0cmVhbV9oCisKKyNpbmNsdWRl
ICJTY3JpcHRXcmFwcGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2hhcmVkQnVmZmVyOworCitjbGFzcyBTdHJlYW0g
OiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxTdHJlYW0+IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJlYW0+IGNyZWF0ZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0cmVhbSk7CisgICAgfQorCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8U3RyZWFtPiBjcmVhdGUoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+KTsKKworICAg
IHZpcnR1YWwgflN0cmVhbSgpOworCisgICAgY29uc3QgU3RyaW5nJiB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKKworICAgIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IHJlYWRBc0FycmF5QnVmZmVyKCk7CisgICAgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gcmVhZEFzQXJyYXlCdWZmZXIodW5zaWduZWQgbG9uZyBsb25nIG1heFNpemUp
OworCitwcm90ZWN0ZWQ6CisgICAgU3RyZWFtKCk7CisgICAgU3RyZWFtKFBhc3NSZWZQdHI8U2hh
cmVkQnVmZmVyPik7CisKKyAgICBTdHJpbmcgbV90eXBlOworICAgIGxvbmcgbG9uZyBtX3JlYWRI
ZWFkOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fYnVmZmVyOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU3RyZWFtX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9TdHJlYW0uaWRsIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9TdHJl
YW0uaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmIyZjgyZDQ2ZTcyY2YwZDdkZWNjNjc0ZGRmYTJiYzQyODc4OTdi
MzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1N0cmVhbS5pZGwK
QEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKK1sKKyAgICBKU0dlbmVyYXRlSXNSZWFjaGFibGU9SW1wbCwKKyAgICBD
dXN0b21Ub0pTT2JqZWN0LAorICAgIEpTTm9TdGF0aWNUYWJsZXMsCisgICAgQ3VzdG9tQ29uc3Ry
dWN0b3IsCisgICAgQ29uc3RydWN0b3JQYXJhbWV0ZXJzPTIKK10gaW50ZXJmYWNlIFN0cmVhbSB7
CisgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB0eXBlOworCisjaWYgIWRlZmluZWQo
TEFOR1VBR0VfT0JKRUNUSVZFX0MpCisjaWYgZGVmaW5lZChFTkFCTEVfU1RSRUFNKSAmJiBFTkFC
TEVfU1RSRUFNCisgICAgdm9pZCBjbG9zZSgpOworI2VuZGlmCisjZW5kaWYKK307CisKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9TdHJlYW1FcnJvci5oIGIvU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9TdHJlYW1FcnJvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAwNzg5YThmNmRmNGI5YWUx
YTk5OTUyYzBiNjQ5ZDc5NWZkNTc3MzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL1N0cmVhbUVycm9yLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFN0cmVhbUVy
cm9yX2gKKyNkZWZpbmUgU3RyZWFtRXJyb3JfaAorCisjaWYgRU5BQkxFKFNUUkVBTSkKKworI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTdHJlYW1FcnJvciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFN0cmVhbUVycm9yPiB7CitwdWJsaWM6CisgICAgZW51bSBFcnJvckNvZGUgeworICAgICAg
ICBPSyA9IDAsCisgICAgICAgIE5PVF9GT1VORF9FUlIgPSAxLAorICAgICAgICBTRUNVUklUWV9F
UlIgPSAyLAorICAgICAgICBBQk9SVF9FUlIgPSAzLAorICAgICAgICBOT1RfUkVBREFCTEVfRVJS
ID0gNCwKKyAgICAgICAgRU5DT0RJTkdfRVJSID0gNSwKKyAgICAgICAgTk9fTU9ESUZJQ0FUSU9O
X0FMTE9XRURfRVJSID0gNiwKKyAgICAgICAgSU5WQUxJRF9TVEFURV9FUlIgPSA3LAorICAgICAg
ICBTWU5UQVhfRVJSID0gOCwKKyAgICAgICAgSU5WQUxJRF9NT0RJRklDQVRJT05fRVJSID0gOSwK
KyAgICAgICAgUVVPVEFfRVhDRUVERURfRVJSID0gMTAsCisgICAgICAgIFRZUEVfTUlTTUFUQ0hf
RVJSID0gMTEsCisgICAgICAgIFBBVEhfRVhJU1RTX0VSUiA9IDEyLAorICAgIH07CisKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTdHJlYW1FcnJvcj4gY3JlYXRlKEVycm9yQ29kZSBjb2RlKSB7IHJl
dHVybiBhZG9wdFJlZihuZXcgU3RyZWFtRXJyb3IoY29kZSkpOyB9CisKKyAgICBFcnJvckNvZGUg
Y29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZTsgfQorCitwcml2YXRlOgorICAgIFN0cmVhbUVy
cm9yKEVycm9yQ29kZSBjb2RlKQorICAgICAgICA6IG1fY29kZShjb2RlKQorICAgIHsgfQorCisg
ICAgRXJyb3JDb2RlIG1fY29kZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShTVFJFQU0pCisKKyNlbmRpZiAvLyBTdHJlYW1FcnJvcl9oCisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvU3RyZWFtRXJyb3IuaWRsIGIvU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9TdHJlYW1FcnJvci5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzhiODlmY2IwNjYzOGQ2
NGJkNzkwMTgwMTdjOGI5NTdiYmFhNzQ5NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvU3RyZWFtRXJyb3IuaWRsCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworWworICAgIENvbmRp
dGlvbmFsPVNUUkVBTSwKKyAgICBKU05vU3RhdGljVGFibGVzLAorICAgIEltcGxlbWVudGF0aW9u
TGFja3NWVGFibGUKK10gaW50ZXJmYWNlIFN0cmVhbUVycm9yIHsKKyNpZiAhZGVmaW5lZChMQU5H
VUFHRV9PQkpFQ1RJVkVfQykKKyAgICAvLyBGSVhNRTogU29tZSBvZiBjb25zdGFudCBuYW1lcyBh
cmUgYWxyZWFkeSBkZWZpbmVkIGluIERPTUV4Y2VwdGlvbi5oIGZvciBPYmplY3RpdmUtQyBiaW5k
aW5nIGFuZCB3ZSBjYW5ub3QgaGF2ZSB0aGUgc2FtZSBuYW1lcyBoZXJlICh0aGV5IGFyZSB0cmFu
c2xhdGVkIGludG8gYSBlbnVtIGluIHRoZSBzYW1lIG5hbWVzcGFjZSkuCisgICAgY29uc3QgdW5z
aWduZWQgc2hvcnQgTk9UX0ZPVU5EX0VSUiA9IDE7CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
U0VDVVJJVFlfRVJSID0gMjsKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBBQk9SVF9FUlIgPSAz
OworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5PVF9SRUFEQUJMRV9FUlIgPSA0OworICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IEVOQ09ESU5HX0VSUiA9IDU7CisgICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSID0gNjsKKyAgICBjb25zdCB1bnNpZ25l
ZCBzaG9ydCBJTlZBTElEX1NUQVRFX0VSUiA9IDc7CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
U1lOVEFYX0VSUiA9IDg7CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgSU5WQUxJRF9NT0RJRklD
QVRJT05fRVJSID0gOTsKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBRVU9UQV9FWENFRURFRF9F
UlIgPSAxMDsKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBUWVBFX01JU01BVENIX0VSUiA9IDEx
OworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFBBVEhfRVhJU1RTX0VSUiA9IDEyOworI2VuZGlm
CisgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0IGNvZGU7Cit9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9TdHJlYW1SZWFkZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9TdHJlYW1SZWFkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhMDQ1NTM4ZTEwYTA0
MDI5ZWI4YWE1ZTE0N2VhYTkzZGUzNWFhOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL1N0cmVhbVJlYWRlci5jcHAKQEAgLTAsMCArMSwxODUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNUUkVBTSkKKworI2luY2x1ZGUgIlN0cmVhbVJlYWRl
ci5oIgorCisjaW5jbHVkZSAiUHJvZ3Jlc3NFdmVudC5oIgorI2luY2x1ZGUgIlN0cmVhbS5oIgor
I2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bh
c3NSZWZQdHI8U3RyZWFtUmVhZGVyPiBTdHJlYW1SZWFkZXI6OmNyZWF0ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0KQoreworICAgIFJlZlB0cjxTdHJlYW1SZWFkZXI+IHN0cmVhbVJl
YWRlcihhZG9wdFJlZihuZXcgU3RyZWFtUmVhZGVyKGNvbnRleHQpKSk7CisgICAgc3RyZWFtUmVh
ZGVyLT5zdXNwZW5kSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gc3RyZWFtUmVhZGVyLnJlbGVhc2Uo
KTsKK30KKworU3RyZWFtUmVhZGVyOjpTdHJlYW1SZWFkZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCkKKyAgICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlzKQorICAgICwg
bV9zdGF0ZShFTVBUWSkKKyAgICAsIG1fYWJvcnRpbmcoZmFsc2UpCisgICAgLCBtX3JlYWRUeXBl
KFJlYWRBc0JpbmFyeVN0cmluZykKK3sKK30KKworU3RyZWFtUmVhZGVyOjp+U3RyZWFtUmVhZGVy
KCkKK3sKKyAgICB0ZXJtaW5hdGUoKTsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBTdHJlYW1S
ZWFkZXI6OmludGVyZmFjZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBldmVudE5hbWVzKCku
aW50ZXJmYWNlRm9yU3RyZWFtUmVhZGVyOworfQorCitib29sIFN0cmVhbVJlYWRlcjo6Y2FuU3Vz
cGVuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFN0cmVhbVJlYWRl
cjo6c3RvcCgpCit7CisgICAgdGVybWluYXRlKCk7Cit9CisKKwordm9pZCBTdHJlYW1SZWFkZXI6
OnJlYWRBc0Jsb2IoU3RyZWFtKiwgRXhjZXB0aW9uQ29kZSYpCit7Cit9CisKK3ZvaWQgU3RyZWFt
UmVhZGVyOjpyZWFkQXNCbG9iKFN0cmVhbSosIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhTaXplLCBF
eGNlcHRpb25Db2RlJikKK3sKK30KKwordm9pZCBTdHJlYW1SZWFkZXI6OnJlYWRBc0FycmF5QnVm
ZmVyKFN0cmVhbSogc3RyZWFtLCBFeGNlcHRpb25Db2RlJikKK3sKKyAgICBtX3JlYWRUeXBlID0g
UmVhZEFzQXJyYXlCdWZmZXI7CisgICAgbV9yYXdEYXRhID0gc3RyZWFtLT5yZWFkQXNBcnJheUJ1
ZmZlcigpOworCisgICAgZmlyZUV2ZW50KGV2ZW50TmFtZXMoKS5wcm9ncmVzc0V2ZW50KTsKKyAg
ICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLmxvYWRFdmVudCk7CisgICAgZmlyZUV2ZW50KGV2ZW50
TmFtZXMoKS5sb2FkZW5kRXZlbnQpOworfQorCit2b2lkIFN0cmVhbVJlYWRlcjo6cmVhZEFzQXJy
YXlCdWZmZXIoU3RyZWFtKiBzdHJlYW0sIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhTaXplLCBFeGNl
cHRpb25Db2RlJikKK3sKKyAgICBtX3JlYWRUeXBlID0gUmVhZEFzQXJyYXlCdWZmZXI7CisgICAg
bV9yYXdEYXRhID0gc3RyZWFtLT5yZWFkQXNBcnJheUJ1ZmZlcihtYXhTaXplKTsKKworICAgIGZp
cmVFdmVudChldmVudE5hbWVzKCkucHJvZ3Jlc3NFdmVudCk7CisgICAgZmlyZUV2ZW50KGV2ZW50
TmFtZXMoKS5sb2FkRXZlbnQpOworICAgIGZpcmVFdmVudChldmVudE5hbWVzKCkubG9hZGVuZEV2
ZW50KTsKK30KKwordm9pZCBTdHJlYW1SZWFkZXI6OnJlYWRBc0JpbmFyeVN0cmluZyhTdHJlYW0q
LCBFeGNlcHRpb25Db2RlJikKK3sKK30KKwordm9pZCBTdHJlYW1SZWFkZXI6OnJlYWRBc0JpbmFy
eVN0cmluZyhTdHJlYW0qLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4U2l6ZSwgRXhjZXB0aW9uQ29k
ZSYpCit7Cit9CisKK3ZvaWQgU3RyZWFtUmVhZGVyOjpyZWFkQXNUZXh0KFN0cmVhbSosIGNvbnN0
IFN0cmluZyYgZW5jb2RpbmcsIEV4Y2VwdGlvbkNvZGUmKQoreworfQorCit2b2lkIFN0cmVhbVJl
YWRlcjo6cmVhZEFzVGV4dChTdHJlYW0qLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCB1bnNpZ25l
ZCBsb25nIGxvbmcgbWF4U2l6ZSwgRXhjZXB0aW9uQ29kZSYpCit7Cit9CisKK3ZvaWQgU3RyZWFt
UmVhZGVyOjpyZWFkQXNUZXh0KFN0cmVhbSosIEV4Y2VwdGlvbkNvZGUmKQoreworfQorCit2b2lk
IFN0cmVhbVJlYWRlcjo6cmVhZEFzVGV4dChTdHJlYW0qLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4
U2l6ZSwgRXhjZXB0aW9uQ29kZSYpCit7Cit9CisKK3ZvaWQgU3RyZWFtUmVhZGVyOjpyZWFkQXNE
YXRhVVJMKFN0cmVhbSosIEV4Y2VwdGlvbkNvZGUmKQoreworfQorCit2b2lkIFN0cmVhbVJlYWRl
cjo6cmVhZEFzRGF0YVVSTChTdHJlYW0qLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4U2l6ZSwgRXhj
ZXB0aW9uQ29kZSYpCit7Cit9CisKK3ZvaWQgU3RyZWFtUmVhZGVyOjphYm9ydCgpCit7Cit9CisK
Kwordm9pZCBTdHJlYW1SZWFkZXI6OmRvQWJvcnQoKQoreworICAgIEFTU0VSVChtX3N0YXRlICE9
IERPTkUpOworCisgICAgdGVybWluYXRlKCk7CisgICAgbV9hYm9ydGluZyA9IGZhbHNlOworCisg
ICAgbV9lcnJvciA9IFN0cmVhbUVycm9yOjpjcmVhdGUoU3RyZWFtRXJyb3I6OkFCT1JUX0VSUik7
CisKKyAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLmVycm9yRXZlbnQpOworICAgIGZpcmVFdmVu
dChldmVudE5hbWVzKCkuYWJvcnRFdmVudCk7CisgICAgZmlyZUV2ZW50KGV2ZW50TmFtZXMoKS5s
b2FkZW5kRXZlbnQpOworCisgICAgLy8gQWxsIHBvc3NpYmxlIGV2ZW50cyBoYXZlIGZpcmVkIGFu
ZCB3ZSdyZSBkb25lLCBubyBtb3JlIHBlbmRpbmcgYWN0aXZpdHkuCisgICAgdW5zZXRQZW5kaW5n
QWN0aXZpdHkodGhpcyk7Cit9CisKK3ZvaWQgU3RyZWFtUmVhZGVyOjp0ZXJtaW5hdGUoKQorewor
ICAgIG1fc3RhdGUgPSBET05FOworfQorCit2b2lkIFN0cmVhbVJlYWRlcjo6ZmlyZUV2ZW50KGNv
bnN0IEF0b21pY1N0cmluZyYgdHlwZSkKK3sKKyAgICBkaXNwYXRjaEV2ZW50KFByb2dyZXNzRXZl
bnQ6OmNyZWF0ZSh0eXBlLCB0cnVlLCAwLCAwKSk7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IFN0cmVhbVJlYWRlcjo6YXJyYXlCdWZmZXJSZXN1bHQoKSBjb25zdAoreworICAgIGlmICgh
bV9yYXdEYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9yYXdEYXRhOworfQor
CitTdHJpbmcgU3RyZWFtUmVhZGVyOjpzdHJpbmdSZXN1bHQoKQoreworICAgIHJldHVybiBTdHJp
bmcoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNU
UkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvU3RyZWFtUmVhZGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1N0cmVhbVJlYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVlY2Q4
YmE0YTEzOWRlYjI1ODBlYjVmMGUzNTE1NGE1ZGM4YjhkNDMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL1N0cmVhbVJlYWRlci5oCkBAIC0wLDAgKzEsMTQwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgU3RyZWFtUmVhZGVyX2gKKyNkZWZpbmUgU3RyZWFtUmVhZGVyX2gKKworI2lmIEVOQUJM
RShTVFJFQU0pCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJCbG9i
LmgiCisjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJTdHJlYW1FcnJvci5oIgor
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworY2xhc3MgU3RyZWFtOworCit0eXBlZGVmIGlu
dCBFeGNlcHRpb25Db2RlOworCitjbGFzcyBTdHJlYW1SZWFkZXIgOiBwdWJsaWMgUmVmQ291bnRl
ZDxTdHJlYW1SZWFkZXI+LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMgRXZlbnRUYXJn
ZXQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmVhbVJlYWRlcj4gY3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKworICAgIHZpcnR1YWwgflN0cmVhbVJlYWRlcigp
OworCisgICAgZW51bSBSZWFkVHlwZSB7CisgICAgICAgIFJlYWRBc0FycmF5QnVmZmVyLAorICAg
ICAgICBSZWFkQXNCaW5hcnlTdHJpbmcsCisgICAgICAgIFJlYWRBc1RleHQsCisgICAgICAgIFJl
YWRBc0RhdGFVUkwsCisgICAgICAgIFJlYWRBc0Jsb2IKKyAgICB9OworCisgICAgZW51bSBSZWFk
eVN0YXRlIHsKKyAgICAgICAgRU1QVFkgPSAwLAorICAgICAgICBMT0FESU5HID0gMSwKKyAgICAg
ICAgRE9ORSA9IDIKKyAgICB9OworCisgICAgdm9pZCByZWFkQXNCbG9iKFN0cmVhbSosIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlYWRBc0Jsb2IoU3RyZWFtKiwgdW5zaWduZWQgbG9uZyBs
b25nIG1heFNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlYWRBc0FycmF5QnVmZmVy
KFN0cmVhbSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlYWRBc0FycmF5QnVmZmVyKFN0
cmVhbSosIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhTaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAg
dm9pZCByZWFkQXNCaW5hcnlTdHJpbmcoU3RyZWFtKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZv
aWQgcmVhZEFzQmluYXJ5U3RyaW5nKFN0cmVhbSosIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhTaXpl
LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCByZWFkQXNUZXh0KFN0cmVhbSosIGNvbnN0IFN0
cmluZyYgZW5jb2RpbmcsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlYWRBc1RleHQoU3Ry
ZWFtKiwgY29uc3QgU3RyaW5nJiBlbmNvZGluZywgdW5zaWduZWQgbG9uZyBsb25nIG1heFNpemUs
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlYWRBc1RleHQoU3RyZWFtKiwgRXhjZXB0aW9u
Q29kZSYpOworICAgIHZvaWQgcmVhZEFzVGV4dChTdHJlYW0qLCB1bnNpZ25lZCBsb25nIGxvbmcg
bWF4U2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcmVhZEFzRGF0YVVSTChTdHJlYW0q
LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCByZWFkQXNEYXRhVVJMKFN0cmVhbSosIHVuc2ln
bmVkIGxvbmcgbG9uZyBtYXhTaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBhYm9ydCgp
OworCisgICAgdm9pZCBkb0Fib3J0KCk7CisKKyAgICBSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAgUGFzc1JlZlB0cjxTdHJlYW1FcnJvcj4gZXJy
b3IoKSB7IHJldHVybiBtX2Vycm9yOyB9CisgICAgU3RyZWFtUmVhZGVyOjpSZWFkVHlwZSByZWFk
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZFR5cGU7IH0KKyAgICBQYXNzUmVmUHRyPEJsb2I+
IGJsb2JSZXN1bHQoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1
ZmZlclJlc3VsdCgpIGNvbnN0OworICAgIFN0cmluZyBzdHJpbmdSZXN1bHQoKTsKKworICAgIC8v
IEFjdGl2ZURPTU9iamVjdAorICAgIHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKKworICAgIC8vIEV2ZW50VGFyZ2V0CisgICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7
IHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQorCisg
ICAgdXNpbmcgUmVmQ291bnRlZDxTdHJlYW1SZWFkZXI+OjpyZWY7CisgICAgdXNpbmcgUmVmQ291
bnRlZDxTdHJlYW1SZWFkZXI+OjpkZXJlZjsKKworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRf
TElTVEVORVIobG9hZHN0YXJ0KTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVS
KHByb2dyZXNzKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGxvYWQpOwor
ICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYWJvcnQpOworICAgIERFRklORV9B
VFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZXJyb3IpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZF
TlRfTElTVEVORVIobG9hZGVuZCk7CisKK3ByaXZhdGU6CisgICAgU3RyZWFtUmVhZGVyKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqKTsKKworICAgIC8vIEV2ZW50VGFyZ2V0CisgICAgdmlydHVhbCB2
b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2
ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CisgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2
ZW50VGFyZ2V0RGF0YSgpIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsgfQorICAgIHZpcnR1
YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKSB7IHJldHVybiAmbV9l
dmVudFRhcmdldERhdGE7IH0KKworICAgIHZvaWQgdGVybWluYXRlKCk7CisgICAgdm9pZCBmaXJl
RXJyb3JFdmVudChpbnQgaHR0cFN0YXR1c0NvZGUpOworICAgIHZvaWQgZmlyZUV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyYgdHlwZSk7CisKKyAgICBSZWFkeVN0YXRlIG1fc3RhdGU7CisgICAgYm9v
bCBtX2Fib3J0aW5nOworICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKKwor
ICAgIFJlYWRUeXBlIG1fcmVhZFR5cGU7CisKKyAgICBSZWZQdHI8U3RyZWFtRXJyb3I+IG1fZXJy
b3I7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX3Jhd0RhdGE7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNKQorCisjZW5kaWYgLy8gU3Ry
ZWFtUmVhZGVyX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9TdHJlYW1S
ZWFkZXIuaWRsIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9TdHJlYW1SZWFkZXIuaWRsCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjkzODU5NmI4N2ZjNjllMWI3Y2JhMTRmYjQ3NTc0MTVmNTdjNGRkZDYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1N0cmVhbVJlYWRlci5pZGwKQEAgLTAs
MCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKK1sKKyAgICBDb25kaXRpb25hbD1TVFJFQU0sCisgICAgQWN0aXZlRE9NT2JqZWN0
LAorICAgIENvbnN0cnVjdG9yLAorICAgIENhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQs
CisgICAgRXZlbnRUYXJnZXQsCisgICAgSlNOb1N0YXRpY1RhYmxlcworXSBpbnRlcmZhY2UgU3Ry
ZWFtUmVhZGVyIHsKKyAgICAvLyByZWFkeSBzdGF0ZXMKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCBFTVBUWSA9IDA7CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTE9BRElORyA9IDE7CisgICAg
Y29uc3QgdW5zaWduZWQgc2hvcnQgRE9ORSA9IDI7CisgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVu
c2lnbmVkIHNob3J0IHJlYWR5U3RhdGU7CisKKyAgICAvLyBhc3luYyByZWFkIG1ldGhvZHMKKyAg
ICB2b2lkIHJlYWRBc0Jsb2IoaW4gU3RyZWFtIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAg
aW4gW09wdGlvbmFsXSB1bnNpZ25lZCBsb25nIGxvbmcgbWF4U2l6ZSkKKyAgICAgICAgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7CisgICAgdm9pZCByZWFkQXNBcnJheUJ1ZmZlcihpbiBTdHJlYW0gc3Ry
ZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsXSB1bnNpZ25lZCBs
b25nIGxvbmcgbWF4U2l6ZSkKKyAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgdm9p
ZCByZWFkQXNUZXh0KGluIFN0cmVhbSBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgIGluIFtP
cHRpb25hbF0gRE9NU3RyaW5nIGVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICBpbiBbT3B0
aW9uYWxdIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhTaXplKQorICAgICAgICByYWlzZXMoRE9NRXhj
ZXB0aW9uKTsKKyAgICB2b2lkIHJlYWRBc0RhdGFVUkwoaW4gU3RyZWFtIHN0cmVhbSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsXSB1bnNpZ25lZCBsb25nIGxvbmcgbWF4U2l6
ZSkKKyAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisKKyAgICB2b2lkIGFib3J0KCk7CisK
KyAgICAvLyBmaWxlIGRhdGEKKyAgICBbQ3VzdG9tXSByZWFkb25seSBhdHRyaWJ1dGUgYW55IHJl
c3VsdDsKKworICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTdHJlYW1FcnJvciBlcnJvcjsKKworICAg
IC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQorICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBE
T01TdHJpbmcgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5l
ciBsaXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsXSBib29s
ZWFuIHVzZUNhcHR1cmUpOworICAgIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJp
bmcgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBs
aXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsXSBib29s
ZWFuIHVzZUNhcHR1cmUpOworICAgIGJvb2xlYW4gZGlzcGF0Y2hFdmVudChpbiBFdmVudCBldnQp
CisgICAgICAgIHJhaXNlcyhFdmVudEV4Y2VwdGlvbik7CisKKyAgICBhdHRyaWJ1dGUgRXZlbnRM
aXN0ZW5lciBvbmxvYWRzdGFydDsKKyAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbnByb2dy
ZXNzOworICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ubG9hZDsKKyAgICBhdHRyaWJ1dGUg
RXZlbnRMaXN0ZW5lciBvbmFib3J0OworICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uZXJy
b3I7CisgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25sb2FkZW5kOworfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmlkbAppbmRleCA2NzFlYzViZjFkZTViYWJkOTVlMWVlNjk0MWUzNDQ3OWY3
MGI0ZmI2Li5jZDg3MzI3NmViYjQ0MTA4MjBjOWI2ZDAzYmVlZDZkZTI4NWNiYWU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9ET01XaW5kb3cuaWRsCkBAIC01OTMsNiArNTkzLDcgQEAKICAgICBhdHRyaWJ1dGUg
RmlsZUNvbnN0cnVjdG9yIEZpbGU7CiAgICAgYXR0cmlidXRlIEZpbGVMaXN0Q29uc3RydWN0b3Ig
RmlsZUxpc3Q7CiAgICAgYXR0cmlidXRlIEJsb2JDb25zdHJ1Y3RvciBCbG9iOworICAgIGF0dHJp
YnV0ZSBTdHJlYW1Db25zdHJ1Y3RvciBTdHJlYW07CiAKICAgICBhdHRyaWJ1dGUgTm9kZUZpbHRl
ckNvbnN0cnVjdG9yIE5vZGVGaWx0ZXI7CiAgICAgYXR0cmlidXRlIFJhbmdlQ29uc3RydWN0b3Ig
UmFuZ2U7CkBAIC03OTQsNiArNzk1LDkgQEAKICAgICBbQ29uZGl0aW9uYWw9QkxPQnxGSUxFX1NZ
U1RFTV0gYXR0cmlidXRlIEZpbGVFcnJvckNvbnN0cnVjdG9yIEZpbGVFcnJvcjsKICAgICBbQ29u
ZGl0aW9uYWw9QkxPQl0gYXR0cmlidXRlIEZpbGVSZWFkZXJDb25zdHJ1Y3RvciBGaWxlUmVhZGVy
OwogCisgICAgW0NvbmRpdGlvbmFsPVNUUkVBTV0gYXR0cmlidXRlIFN0cmVhbUVycm9yQ29uc3Ry
dWN0b3IgU3RyZWFtRXJyb3I7CisgICAgW0NvbmRpdGlvbmFsPVNUUkVBTV0gYXR0cmlidXRlIFN0
cmVhbVJlYWRlckNvbnN0cnVjdG9yIFN0cmVhbVJlYWRlcjsKKwogICAgIFtDb25kaXRpb25hbD1C
TE9CXSBhdHRyaWJ1dGUgRE9NVVJMQ29uc3RydWN0b3IgVVJMOwogICAgIFtDb25kaXRpb25hbD1C
TE9CXSBhdHRyaWJ1dGUgRE9NVVJMQ29uc3RydWN0b3Igd2Via2l0VVJMOyAvLyBGSVhNRTogZGVw
cmVjYXRlIHRoaXMuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVx
dWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IGVl
MDI0MDBlZjE3YTIyOTY2YjEzOThiMWE0Zjk4MTc0YTE3M2E4OWUuLmQ3ODNjZjU4MmZjOTJjYWVi
NjdlYzU3MDQ5OThiMjBiN2Q5YWJmOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
LmNwcApAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJT
dHJlYW0uaCIKICNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiVGhy
ZWFkYWJsZUxvYWRlci5oIgogI2luY2x1ZGUgIldlYkNvcmVNZW1vcnlJbnN0cnVtZW50YXRpb24u
aCIKQEAgLTMzNyw2ICszMzgsMjIgQEAgQXJyYXlCdWZmZXIqIFhNTEh0dHBSZXF1ZXN0OjpyZXNw
b25zZUFycmF5QnVmZmVyKEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHJldHVybiBtX3Jlc3BvbnNl
QXJyYXlCdWZmZXIuZ2V0KCk7CiB9CiAKK1N0cmVhbSogWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNl
U3RyZWFtKEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmIChtX3Jlc3BvbnNlVHlwZUNvZGUg
IT0gUmVzcG9uc2VUeXBlU3RyZWFtKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAvLyBXZSBhbHdheXMgcmV0dXJuIG51bGwg
YmVmb3JlIExPQURJTkcuCisgICAgaWYgKG1fc3RhdGUgPCBMT0FESU5HKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGlmICghbV9yZXNwb25zZVN0cmVhbSkKKyAgICAgICAgbV9yZXNwb25zZVN0
cmVhbSA9IFN0cmVhbTo6Y3JlYXRlKG1fYmluYXJ5UmVzcG9uc2VCdWlsZGVyKTsKKworICAgIHJl
dHVybiBtX3Jlc3BvbnNlU3RyZWFtLmdldCgpOworfQorCiAjaWYgRU5BQkxFKFhIUl9USU1FT1VU
KQogdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2V0VGltZW91dCh1bnNpZ25lZCBsb25nIHRpbWVvdXQs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewpAQCAtMzc4LDYgKzM5NSw4IEBAIHZvaWQgWE1MSHR0cFJl
cXVlc3Q6OnNldFJlc3BvbnNlVHlwZShjb25zdCBTdHJpbmcmIHJlc3BvbnNlVHlwZSwgRXhjZXB0
aW9uQ29kZSYKICAgICAgICAgbV9yZXNwb25zZVR5cGVDb2RlID0gUmVzcG9uc2VUeXBlQmxvYjsK
ICAgICBlbHNlIGlmIChyZXNwb25zZVR5cGUgPT0gImFycmF5YnVmZmVyIikKICAgICAgICAgbV9y
ZXNwb25zZVR5cGVDb2RlID0gUmVzcG9uc2VUeXBlQXJyYXlCdWZmZXI7CisgICAgZWxzZSBpZiAo
cmVzcG9uc2VUeXBlID09ICJzdHJlYW0iKQorICAgICAgICBtX3Jlc3BvbnNlVHlwZUNvZGUgPSBS
ZXNwb25zZVR5cGVTdHJlYW07CiAgICAgZWxzZQogICAgICAgICBsb2dDb25zb2xlRXJyb3Ioc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLCAiWE1MSHR0cFJlcXVlc3QucmVzcG9uc2VUeXBlIFwiIiAr
IHJlc3BvbnNlVHlwZSArICJcIiBpcyBub3Qgc3VwcG9ydGVkLiIpOwogfQpAQCAtMzk1LDYgKzQx
NCw4IEBAIFN0cmluZyBYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VUeXBlKCkKICAgICAgICAgcmV0
dXJuICJibG9iIjsKICAgICBjYXNlIFJlc3BvbnNlVHlwZUFycmF5QnVmZmVyOgogICAgICAgICBy
ZXR1cm4gImFycmF5YnVmZmVyIjsKKyAgICBjYXNlIFJlc3BvbnNlVHlwZVN0cmVhbToKKyAgICAg
ICAgcmV0dXJuICJzdHJlYW0iOwogICAgIH0KICAgICByZXR1cm4gIiI7CiB9CkBAIC0xMjIyLDcg
KzEyNDMsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFy
KiBkYXRhLCBpbnQgbGVuKQogCiAgICAgaWYgKHVzZURlY29kZXIpCiAgICAgICAgIG1fcmVzcG9u
c2VCdWlsZGVyLmFwcGVuZChtX2RlY29kZXItPmRlY29kZShkYXRhLCBsZW4pKTsKLSAgICBlbHNl
IGlmIChtX3Jlc3BvbnNlVHlwZUNvZGUgPT0gUmVzcG9uc2VUeXBlQXJyYXlCdWZmZXIgfHwgbV9y
ZXNwb25zZVR5cGVDb2RlID09IFJlc3BvbnNlVHlwZUJsb2IpIHsKKyAgICBlbHNlIGlmIChtX3Jl
c3BvbnNlVHlwZUNvZGUgPT0gUmVzcG9uc2VUeXBlQXJyYXlCdWZmZXIgfHwgbV9yZXNwb25zZVR5
cGVDb2RlID09IFJlc3BvbnNlVHlwZUJsb2IgfHwgbV9yZXNwb25zZVR5cGVDb2RlID09IFJlc3Bv
bnNlVHlwZVN0cmVhbSkgewogICAgICAgICAvLyBCdWZmZXIgYmluYXJ5IGRhdGEuCiAgICAgICAg
IGlmICghbV9iaW5hcnlSZXNwb25zZUJ1aWxkZXIpCiAgICAgICAgICAgICBtX2JpbmFyeVJlc3Bv
bnNlQnVpbGRlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdC5oCmluZGV4IGY3MDFmM2FhOWEzMGQzNzMxYWUyMDcxYmM1M2E5N2E2NDA1NmQ3OTUu
LmJjMjA1YzgwYTBmOTMzMWMyYjBjMWZjNjFmNzkwNDYyMjdlMjRlMTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdC5oCkBAIC00NCw2ICs0NCw3IEBAIGNsYXNzIERPTUZvcm1EYXRhOwog
Y2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBjbGFzcyBTaGFy
ZWRCdWZmZXI7CitjbGFzcyBTdHJlYW07CiBjbGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVyOwogY2xh
c3MgVGhyZWFkYWJsZUxvYWRlcjsKIApAQCAtNjcsNyArNjgsOCBAQCBwdWJsaWM6CiAgICAgICAg
IFJlc3BvbnNlVHlwZVRleHQsIAogICAgICAgICBSZXNwb25zZVR5cGVEb2N1bWVudCwKICAgICAg
ICAgUmVzcG9uc2VUeXBlQmxvYiwKLSAgICAgICAgUmVzcG9uc2VUeXBlQXJyYXlCdWZmZXIKKyAg
ICAgICAgUmVzcG9uc2VUeXBlQXJyYXlCdWZmZXIsCisgICAgICAgIFJlc3BvbnNlVHlwZVN0cmVh
bQogICAgIH07CiAKICAgICB2aXJ0dWFsIHZvaWQgY29udGV4dERlc3Ryb3llZCgpOwpAQCAtMTA5
LDYgKzExMSw3IEBAIHB1YmxpYzoKICAgICBEb2N1bWVudCogb3B0aW9uYWxSZXNwb25zZVhNTCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2VEb2N1bWVudC5nZXQoKTsgfQogICAgIEJsb2IqIHJl
c3BvbnNlQmxvYihFeGNlcHRpb25Db2RlJik7CiAgICAgQmxvYiogb3B0aW9uYWxSZXNwb25zZUJs
b2IoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlQmxvYi5nZXQoKTsgfQorICAgIFN0cmVhbSog
cmVzcG9uc2VTdHJlYW0oRXhjZXB0aW9uQ29kZSYpOwogI2lmIEVOQUJMRShYSFJfVElNRU9VVCkK
ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQoKSBjb25zdCB7IHJldHVybiBtX3RpbWVvdXRNaWxs
aXNlY29uZHM7IH0KICAgICB2b2lkIHNldFRpbWVvdXQodW5zaWduZWQgbG9uZyB0aW1lb3V0LCBF
eGNlcHRpb25Db2RlJik7CkBAIC0yMDksNiArMjEyLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25l
ZCBsb25nIG1fdGltZW91dE1pbGxpc2Vjb25kczsKICNlbmRpZgogICAgIFJlZlB0cjxCbG9iPiBt
X3Jlc3BvbnNlQmxvYjsKKyAgICBSZWZQdHI8U3RyZWFtPiBtX3Jlc3BvbnNlU3RyZWFtOwogCiAg
ICAgUmVmUHRyPFRocmVhZGFibGVMb2FkZXI+IG1fbG9hZGVyOwogICAgIFN0YXRlIG1fc3RhdGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKaW5kZXggZjJlMGE0MTI3ODI1NDRlZDdl
NTJmMmVhNDAxNzk4MDY4YjExNmQwMi4uYTMyMGNjMzgzZTIwZTMwZmE4MzdkODQzYjRmMjkxNzli
NDBiNmFjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBp
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQpAQCAtMTEzLDYgKzEx
Myw3IEBACiAgICAgICAnRU5BQkxFX1NNT09USF9TQ1JPTExJTkc9MScsCiAgICAgICAnRU5BQkxF
X1NQRUVDSF9TWU5USEVTSVM9MCcsCiAgICAgICAnRU5BQkxFX1NRTF9EQVRBQkFTRT0xJywKKyAg
ICAgICdFTkFCTEVfU1RSRUFNPTEnLAogICAgICAgJ0VOQUJMRV9TVFlMRV9TQ09QRUQ9MScsCiAg
ICAgICAnRU5BQkxFX1NVQlBJWEVMX0xBWU9VVD0xJywKICAgICAgICdFTkFCTEVfU1ZHPTwoZW5h
YmxlX3N2ZyknLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189676</attachid>
            <date>2013-02-21 21:36:02 -0800</date>
            <delta_ts>2013-02-25 21:02:08 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-110194-20130222143222.patch</filename>
            <type>text/plain</type>
            <size>74151</size>
            <attacher name="Zachary Kuznia">zork</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzMjkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCAyMTQ2ZDIyZTg0NjA2
NjM3ZTYwMWQxODg1Yzc2MTI1NDg3MWNjOTUxLi40Y2U4MzMyZmZiMTA2NzA2OTVlMGE4ZWQ0M2Nj
NDQwZjY2MDMwYzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMy0wMi0yMSAg
WmFjaCBLdXpuaWEgIDx6b3JrQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbXBsZW1lbnQgU3Ry
ZWFtIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTEwMTk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBQbGF0Zm9ybS5neXBpOgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJCbG9iUmVnaXN0
cnkuaDoKKwogMjAxMy0wMi0xNCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFp
bC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE0Mjg0MS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCA1MWI5YTM3MGMyODM4NTJiYzY0YjYwZTk2NTU3YmRiMDBjODI5Y2VmLi5mZjBmYzQx
YWJjYWVkNGJkYWEwN2ZjMmY0MjFkNjljZmEwZWY4NTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
NDAgQEAKKzIwMTMtMDItMjEgIFphY2ggS3V6bmlhICA8em9ya0BjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgSW1wbGVtZW50IFN0cmVhbSBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExMDE5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogRGVy
aXZlZFNvdXJjZXMuY3BwOgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAg
ICogRGVyaXZlZFNvdXJjZXMucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU1N0cmVhbVJlYWRlckN1c3RvbS5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYlJlZ2lzdHJ5LmguCisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4U3RyZWFtUmVhZGVyQ3VzdG9tLmNwcDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9CbG9iUmVnaXN0cnlQcm94
eS5oLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9t
LmNwcDoKKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXQuaDoKKyAgICAgICAgKiBkb20vRXZlbnRU
YXJnZXRGYWN0b3J5LmluOgorICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHA6
CisgICAgICAgICogZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmg6CisgICAgICAgICogZmlsZWFw
aS9TdHJlYW0uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFi
bGVCbG9iUmVnaXN0cnkuaC4KKyAgICAgICAgKiBmaWxlYXBpL1N0cmVhbS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBmaWxlYXBpL1N0cmVhbS5pZGw6IENvcGllZCBmcm9tIFNvdXJjZS9QbGF0Zm9ybS9j
aHJvbWl1bS9wdWJsaWMvV2ViQmxvYlJlZ2lzdHJ5LmguCisgICAgICAgICogZmlsZWFwaS9TdHJl
YW1FcnJvci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVC
bG9iUmVnaXN0cnkuaC4KKyAgICAgICAgKiBmaWxlYXBpL1N0cmVhbUVycm9yLmlkbDogQ29waWVk
IGZyb20gU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iUmVnaXN0cnkuaC4K
KyAgICAgICAgKiBmaWxlYXBpL1N0cmVhbVJlYWRlci5jcHA6IEFkZGVkLgorICAgICAgICAqIGZp
bGVhcGkvU3RyZWFtUmVhZGVyLmg6IEFkZGVkLgorICAgICAgICAqIGZpbGVhcGkvU3RyZWFtUmVh
ZGVyLmlkbDogQWRkZWQuCisgICAgICAgICogZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5
LmNwcDoKKyAgICAgICAgKiBmaWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaDoKKyAgICAg
ICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9i
UmVnaXN0cnkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Jsb2JSZWdp
c3RyeVByb3h5LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Jsb2JS
ZWdpc3RyeVByb3h5Lmg6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAg
ICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuaDoKKwogMjAxMy0wMi0xOCAgUnlvc3VrZSBOaXdhICA8
cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBNZXJnZSBoYW5kbGVTcGVjaWFsQ2hpbGQgaW50
byBsYXlvdXRCbG9ja0NoaWxkcmVuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGY0MDlm
ZjA5MzE5ZGYwOTljZDkzNjRlYmQ4ZDcxZmM2ZmRmMTY0YmYuLmVhZTRkYmJkMjk0NWFlMjAyOTky
YTkwYzlhN2Y2ZGUwMzQ2YWExOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTIgQEAKKzIwMTMtMDItMjEgIFphY2ggS3V6bmlhICA8em9ya0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgSW1wbGVtZW50IFN0cmVhbSBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDE5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogZmVhdHVyZXMuZ3lwaToKKwogMjAxMy0wMi0xOCAgU2hl
cmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZC4gIFJvbGxlZCBDaHJvbWl1bSBERVBTIHRvIHIxODMxMDUuICBSZXF1ZXN0ZWQgYnkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBpIGIvU291cmNlL1BsYXRmb3Jt
L1BsYXRmb3JtLmd5cGkKaW5kZXggNDU4YTdlZWVlNzNjOGVmNThhNGE4NDhmMWI4NDVkYjBlYjZl
N2NkNy4uZmZjNTg1OTM3NTI0NTE5NzZkNWY0YzUxY2U5NGU4ZDZiNTI4M2Y2OCAxMDA2NDQKLS0t
IGEvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkKKysrIGIvU291cmNlL1BsYXRmb3JtL1Bs
YXRmb3JtLmd5cGkKQEAgLTEyOCw2ICsxMjgsNyBAQAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1
YmxpYy9XZWJTb2xpZENvbG9yTGF5ZXIuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGlj
L1dlYlN0b3JhZ2VBcmVhLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJTdG9y
YWdlTmFtZXNwYWNlLmgnLAorICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJTdHJlYW1E
YXRhLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJTdHJpbmcuaCcsCiAgICAg
ICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlRocmVhZC5oJywKICAgICAgICAgICAgICdjaHJv
bWl1bS9wdWJsaWMvV2ViVGhyZWFkU2FmZURhdGEuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxh
dGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkJsb2JSZWdpc3RyeS5oIGIvU291cmNlL1BsYXRmb3Jt
L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iUmVnaXN0cnkuaAppbmRleCBkODgyYWJhZDk5ZGQzODc4
MWJlODMzYjE4MzA5OGY5MGMyNzE2MTM2Li4wYTI3ZGJhMzUwODE2ODFlZGIyNTg1M2FlZTUwOWFj
NGVlMDZiYzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dl
YkJsb2JSZWdpc3RyeS5oCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2Vi
QmxvYlJlZ2lzdHJ5LmgKQEAgLTM2LDYgKzM2LDcgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBj
bGFzcyBXZWJCbG9iRGF0YTsKK2NsYXNzIFdlYlRocmVhZFNhZmVEYXRhOwogY2xhc3MgV2ViVVJM
OwogCiBjbGFzcyBXZWJCbG9iUmVnaXN0cnkgewpAQCAtNDYsMTEgKzQ3LDI1IEBAIHB1YmxpYzoK
IAogICAgIC8vIFJlZ2lzdGVycyBhIGJsb2IgVVJMIHJlZmVycmluZyB0byB0aGUgc3BlY2lmaWVk
IGJsb2IgZGF0YS4KICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFdlYlVS
TCYsIFdlYkJsb2JEYXRhJikgPSAwOwotICAgIAorCiAgICAgLy8gUmVnaXN0ZXJzIGEgYmxvYiBV
UkwgcmVmZXJyaW5nIHRvIHRoZSBibG9iIGRhdGEgaWRlbnRpZmllZCBieSB0aGUgc3BlY2lmaWVk
IHNyY1VSTC4KICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFdlYlVSTCYs
IGNvbnN0IFdlYlVSTCYgc3JjVVJMKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3Rl
ckJsb2JVUkwoY29uc3QgV2ViVVJMJikgPSAwOworCisgICAgLy8gUmVnaXN0ZXJzIGEgc3RyZWFt
IFVSTCByZWZlcnJpbmcgdG8gdGhlIHNwZWNpZmllZCBzdHJlYW0gZGF0YS4KKyAgICB2aXJ0dWFs
IHZvaWQgcmVnaXN0ZXJTdHJlYW1VUkwoY29uc3QgV2ViVVJMJikgPSAwOworCisgICAgLy8gUmVn
aXN0ZXJzIGEgc3RyZWFtIFVSTCByZWZlcnJpbmcgdG8gdGhlIHN0cmVhbSBpZGVudGlmaWVkIGJ5
IHRoZSBzcGVjaWZpZWQgc3JjVVJMLgorICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclN0cmVhbVVS
TChjb25zdCBXZWJVUkwmLCBjb25zdCBXZWJVUkwmIHNyY1VSTCkgPSAwOworCisgICAgLy8gQWRk
IGRhdGEgdG8gdGhlIHNwZWNpZmllZCBzdHJlYW0gVVJMCisgICAgdmlydHVhbCB2b2lkIGFkZERh
dGFUb1N0cmVhbShjb25zdCBXZWJVUkwmLCBXZWJUaHJlYWRTYWZlRGF0YSYpID0gMDsKKworICAg
IC8vIFRlbGwgdGhlIHJlZ2lzdHJ5IHRoYXQgdGhpcyBzdHJlYW0gd29uJ3QgcmVjaWV2ZSBhbnkg
bW9yZSBkYXRhLgorICAgIHZpcnR1YWwgdm9pZCBjbG9zZVN0cmVhbShjb25zdCBXZWJVUkwmKSA9
IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlclN0cmVhbVVSTChjb25zdCBXZWJVUkwm
KSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2Vz
LmNwcAppbmRleCAxOTViZWFjZDViZmZjMzE2MmYxMTlhYTQ1MmFiZTRhM2E0NzczNTkxLi5jZWYy
ZDM4MDViNDZkODhkZmRlZjRkMzkyOTVhODQ0MmE0N2UwZjRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9EZXJpdmVkU291cmNlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNv
dXJjZXMuY3BwCkBAIC0zMTMsNiArMzEzLDkgQEAKICNpbmNsdWRlICJKU1N0b3JhZ2VJbmZvRXJy
b3JDYWxsYmFjay5jcHAiCiAjaW5jbHVkZSAiSlNTdG9yYWdlSW5mb1F1b3RhQ2FsbGJhY2suY3Bw
IgogI2luY2x1ZGUgIkpTU3RvcmFnZUluZm9Vc2FnZUNhbGxiYWNrLmNwcCIKKyNpbmNsdWRlICJK
U1N0cmVhbS5jcHAiCisjaW5jbHVkZSAiSlNTdHJlYW1FcnJvci5jcHAiCisjaW5jbHVkZSAiSlNT
dHJlYW1SZWFkZXIuY3BwIgogI2luY2x1ZGUgIkpTU3RyaW5nQ2FsbGJhY2suY3BwIgogI2luY2x1
ZGUgIkpTU3R5bGVNZWRpYS5jcHAiCiAjaW5jbHVkZSAiSlNTdHlsZVNoZWV0LmNwcCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViQ29y
ZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IDM3NzIyNTJlNTA0NjI5ZmY3MzBkMjE2MzA2NGFi
N2FjM2ZjNGI2MGMuLjk3NDkzYjVkMTAyYWRhNjA2NDExYTI3ZjQ3MTg2MzBjY2YyNTBlMjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMjg5LDYgKzI4OSw5IEBAIEJJTkRJTkdf
SURMUyA9IFwKICAgICAkKFdlYkNvcmUpL2ZpbGVhcGkvRmlsZUxpc3QuaWRsIFwKICAgICAkKFdl
YkNvcmUpL2ZpbGVhcGkvRmlsZVJlYWRlci5pZGwgXAogICAgICQoV2ViQ29yZSkvZmlsZWFwaS9G
aWxlUmVhZGVyU3luYy5pZGwgXAorICAgICQoV2ViQ29yZSkvZmlsZWFwaS9TdHJlYW0uaWRsIFwK
KyAgICAkKFdlYkNvcmUpL2ZpbGVhcGkvU3RyZWFtRXJyb3IuaWRsIFwKKyAgICAkKFdlYkNvcmUp
L2ZpbGVhcGkvU3RyZWFtUmVhZGVyLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL0RPTUZvcm1E
YXRhLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL0RPTVNldHRhYmxlVG9rZW5MaXN0LmlkbCBc
CiAgICAgJChXZWJDb3JlKS9odG1sL0RPTVRva2VuTGlzdC5pZGwgXApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNv
dXJjZXMucHJpCmluZGV4IGQxMWJlNGQ5ZGJhNTM5N2ViOWM0MWNmYWMzOWVmZDcyMTE0YWZmYTgu
LmQ3YjJiOTcwMmZmZGNmOGUzMmFhMWI4NzFmYjI2NmVlNTM2M2U4OGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9EZXJp
dmVkU291cmNlcy5wcmkKQEAgLTI5Niw2ICsyOTYsOSBAQCBJRExfQklORElOR1MgKz0gXAogICAg
ICQkUFdEL2ZpbGVhcGkvRmlsZUxpc3QuaWRsIFwKICAgICAkJFBXRC9maWxlYXBpL0ZpbGVSZWFk
ZXIuaWRsIFwKICAgICAkJFBXRC9maWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmlkbCBcCisgICAgJCRQ
V0QvZmlsZWFwaS9TdHJlYW0uaWRsIFwKKyAgICAkJFBXRC9maWxlYXBpL1N0cmVhbUVycm9yLmlk
bCBcCisgICAgJCRQV0QvZmlsZWFwaS9TdHJlYW1SZWFkZXIuaWRsIFwKICAgICAkJFBXRC9odG1s
L2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaWRsIFwKICAgICAkJFBXRC9odG1sL2NhbnZhcy9BcnJh
eUJ1ZmZlci5pZGwgXAogICAgICQkUFdEL2h0bWwvY2FudmFzL0RhdGFWaWV3LmlkbCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKaW5kZXggNzg4ZmIzOGYyOTI3YmQwZDFhNGYwMzkwMjUwMGY1YmRkMjFlYjE3NS4u
MDUzMDk3ODY1ZDhmMDU3MTk5NWVhMGE2NDM5MzY5OTk5YTdhNTBmZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtMjY4LDYgKzI2OCw5IEBACiAgICAgICAgICAgICAnZmlsZWFwaS9GaWxlTGlzdC5pZGwn
LAogICAgICAgICAgICAgJ2ZpbGVhcGkvRmlsZVJlYWRlci5pZGwnLAogICAgICAgICAgICAgJ2Zp
bGVhcGkvRmlsZVJlYWRlclN5bmMuaWRsJywKKyAgICAgICAgICAgICdmaWxlYXBpL1N0cmVhbS5p
ZGwnLAorICAgICAgICAgICAgJ2ZpbGVhcGkvU3RyZWFtRXJyb3IuaWRsJywKKyAgICAgICAgICAg
ICdmaWxlYXBpL1N0cmVhbVJlYWRlci5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvRE9NRm9ybURh
dGEuaWRsJywKICAgICAgICAgICAgICdodG1sL0RPTVNldHRhYmxlVG9rZW5MaXN0LmlkbCcsCiAg
ICAgICAgICAgICAnaHRtbC9ET01Ub2tlbkxpc3QuaWRsJywKQEAgLTE0MTAsNiArMTQxMyw3IEBA
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHTGVuZ3RoQ3VzdG9tLmNwcCcs
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHUGF0aFNlZ0N1c3RvbS5jcHAn
LAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0b3JhZ2VDdXN0b20uY3BwJywK
KyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTdHJlYW1SZWFkZXJDdXN0b20uY3Bw
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0Q3VzdG9tLmNw
cCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldExpc3RDdXN0
b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhUcmFja0V2ZW50Q3Vz
dG9tLmNwcCcsCkBAIC0xNzcwLDYgKzE3NzQsMTEgQEAKICAgICAgICAgICAgICdmaWxlYXBpL0Zp
bGVUaHJlYWQuY3BwJywKICAgICAgICAgICAgICdmaWxlYXBpL0ZpbGVUaHJlYWQuaCcsCiAgICAg
ICAgICAgICAnZmlsZWFwaS9GaWxlVGhyZWFkVGFzay5oJywKKyAgICAgICAgICAgICdmaWxlYXBp
L1N0cmVhbS5jcHAnLAorICAgICAgICAgICAgJ2ZpbGVhcGkvU3RyZWFtLmgnLAorICAgICAgICAg
ICAgJ2ZpbGVhcGkvU3RyZWFtRXJyb3IuaCcsCisgICAgICAgICAgICAnZmlsZWFwaS9TdHJlYW1S
ZWFkZXIuY3BwJywKKyAgICAgICAgICAgICdmaWxlYXBpL1N0cmVhbVJlYWRlci5oJywKICAgICAg
ICAgICAgICdmaWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwJywKICAgICAgICAgICAg
ICdmaWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaCcsCiAgICAgICAgICAgICAnZmlsZWFw
aS9XZWJLaXRCbG9iQnVpbGRlci5jcHAnLApAQCAtNTg3NCw2ICs1ODgzLDEwIEBACiAgICAgICAg
ICAgICAnPChQUk9EVUNUX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9ET01SYW5nZS5tbScs
CiAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9ET01S
ZWN0Lm1tJywKICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNlcy9XZWJD
b3JlL0RPTVJlY3RJbnRlcm5hbC5oJywKKyAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJDb3JlL0RPTVN0cmVhbS5tbScsCisgICAgICAgICAgICAnPChQUk9EVUNU
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9ET01TdHJlYW1FcnJvci5oJywKKyAgICAgICAg
ICAgICc8KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0RPTVN0cmVhbUVycm9y
Lm1tJywKKyAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0RPTVN0cmVhbUVycm9ySW50ZXJuYWwuaCcsCiAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikv
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9ET01TVkdBRWxlbWVudC5kZXAnLAogICAgICAgICAgICAg
JzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvRE9NU1ZHQUVsZW1lbnQubW0n
LAogICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvRE9N
U1ZHQWx0R2x5cGhFbGVtZW50LmRlcCcsCkBAIC03MTAyLDYgKzcxMTUsMTIgQEAKICAgICAgICAg
ICAgICc8KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU3RvcmFnZUluZm9R
dW90YUNhbGxiYWNrLmgnLAogICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNTdG9yYWdlSW5mb1VzYWdlQ2FsbGJhY2suY3BwJywKICAgICAgICAgICAg
ICc8KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU3RvcmFnZUluZm9Vc2Fn
ZUNhbGxiYWNrLmgnLAorICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNTdHJlYW0uY3BwJywKKyAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJDb3JlL0pTU3RyZWFtLmgnLAorICAgICAgICAgICAgJzwoUFJPRFVDVF9E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTdHJlYW1FcnJvci5jcHAnLAorICAgICAgICAg
ICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTdHJlYW1FcnJvci5o
JywKKyAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
U3RyZWFtUmVhZGVyLmNwcCcsCisgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS9KU1N0cmVhbVJlYWRlci5oJywKICAgICAgICAgICAgICc8KFBST0RVQ1Rf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU3R5bGVNZWRpYS5jcHAnLAogICAgICAgICAg
ICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTdHlsZU1lZGlhLmgn
LAogICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNT
dHlsZVNoZWV0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1N0cmVhbVJlYWRlckN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0
cmVhbVJlYWRlckN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWVlZGQ5Y2Q5YjNjMzgzMmQ4NGY4YzE3
MDIzYTg1YzZlNjlhOTU3YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU3RyZWFtUmVhZGVyQ3VzdG9tLmNwcApAQCAtMCwwICsxLDU3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNUUkVBTSkKKworI2luY2x1ZGUgIlN0cmVhbVJlYWRl
ci5oIgorCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTU3JlYW1SZWFk
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvQXJyYXlCdWZmZXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpT
QzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitKU1ZhbHVlIEpTU3RyZWFtUmVhZGVyOjpyZXN1
bHQoRXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIFN0cmVhbVJlYWRlciogaW1wID0gaW1w
bCgpOworICAgIGlmIChpbXAtPnJlYWRUeXBlKCkgPT0gRmlsZVJlYWRlckxvYWRlcjo6UmVhZEFz
QXJyYXlCdWZmZXIpCisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBX
VEY6OmdldFB0cihpbXAtPmFycmF5QnVmZmVyUmVzdWx0KCkpKTsKKyAgICBpZiAoaW1wLT5yZWFk
VHlwZSgpID09IEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRBc0Jsb2IpCisgICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXAtPmJsb2JSZXN1bHQoKSkp
OworICAgIHJldHVybiBqc093bmVkU3RyaW5nT3JOdWxsKGV4ZWMsIGltcC0+c3RyaW5nUmVzdWx0
KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1RS
RUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3Ry
ZWFtUmVhZGVyQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OFN0cmVhbVJlYWRlckN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzEzMTc1NzAwZDllODYzMGIxY2Nl
ODA2ZDJkZWYxYjQ5Nzg1MTg0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFN0cmVhbVJlYWRlckN1c3RvbS5jcHAKQEAgLTAsMCArMSw1NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVFJFQU0pCisKKyNpbmNsdWRlICJW
OFN0cmVhbVJlYWRlci5oIgorCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgor
I2luY2x1ZGUgIlY4QXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNs
dWRlICJWOEJsb2IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhTdHJlYW1SZWFkZXI6OnJlc3VsdEF0dHJHZXR0ZXJDdXN0b20odjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRlcigpOworICAgIFN0cmVhbVJl
YWRlciogaW1wID0gVjhTdHJlYW1SZWFkZXI6OnRvTmF0aXZlKGhvbGRlcik7CisgICAgaWYgKGlt
cC0+cmVhZFR5cGUoKSA9PSBGaWxlUmVhZGVyTG9hZGVyOjpSZWFkQXNBcnJheUJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuIHRvVjgoaW1wLT5hcnJheUJ1ZmZlclJlc3VsdCgpLCBpbmZvLkhvbGRlcigp
LCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgaWYgKGltcC0+cmVhZFR5cGUoKSA9PSBGaWxlUmVh
ZGVyTG9hZGVyOjpSZWFkQXNCbG9iKQorICAgICAgICByZXR1cm4gdG9WOChpbXAtPmJsb2JSZXN1
bHQoKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB2OFN0
cmluZ09yTnVsbChpbXAtPnN0cmluZ1Jlc3VsdCgpLCBpbmZvLkdldElzb2xhdGUoKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU0pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVz
dEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRw
UmVxdWVzdEN1c3RvbS5jcHAKaW5kZXggYWRjNTQ4MjczZmRiNWJhNmQ4MDQ2NTJkYTUyY2FjMjFl
OTQyNGRjZi4uMTE3OTAwNjk0NGQzNWI0ZDNjMDg0ZThkMjgyODcwYjg5NTQ0NWYwNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RD
dXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0
dHBSZXF1ZXN0Q3VzdG9tLmNwcApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIlY4RE9NRm9y
bURhdGEuaCIKICNpbmNsdWRlICJWOERvY3VtZW50LmgiCiAjaW5jbHVkZSAiVjhIVE1MRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJWOFN0cmVhbS5oIgogI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCiAj
aW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0LmgiCkBA
IC0xMTAsNiArMTExLDE3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFhNTEh0dHBSZXF1ZXN0
OjpyZXNwb25zZUF0dHJHZXR0ZXJDdXN0b20odjg6OkxvY2FsPHY4OjpTCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihlYywgaW5mby5HZXRJc29sYXRlKCkpOwogICAgICAg
ICAgICAgcmV0dXJuIHRvVjhGYXN0KGFycmF5QnVmZmVyLCBpbmZvLCB4bWxIdHRwUmVxdWVzdCk7
CiAgICAgICAgIH0KKworI2lmIEVOQUJMRShTVFJFQU0pCisgICAgY2FzZSBYTUxIdHRwUmVxdWVz
dDo6UmVzcG9uc2VUeXBlU3RyZWFtOgorICAgICAgICB7CisgICAgICAgICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICAgICAgICAgIFN0cmVhbSogc3RyZWFtID0geG1sSHR0cFJlcXVlc3Qt
PnJlc3BvbnNlU3RyZWFtKGVjKTsKKyAgICAgICAgICAgIGlmIChlYykKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgICAg
ICAgICByZXR1cm4gdG9WOChzdHJlYW0sIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgp
KTsKKyAgICAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU0pCiAgICAgfQogCiAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dFRhcmdldC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKaW5kZXggN2EyZTEw
MGEwNTUwNTNiMGQ1NWI0ZDFjOTc2YTUwY2U4MjE1ODkxOS4uNjNjMWNhMGE1YmZmOWY1YmI1MDAw
OWJjNDgyZWU5ODM4YWY0NjlmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
VGFyZ2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKQEAgLTY1LDYg
KzY1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFNoYXJlZFdvcmtlcjsKICAg
ICBjbGFzcyBTaGFyZWRXb3JrZXJDb250ZXh0OwogICAgIGNsYXNzIFNvdXJjZUJ1ZmZlckxpc3Q7
CisgICAgY2xhc3MgU3RyZWFtUmVhZGVyOwogICAgIGNsYXNzIFRleHRUcmFjazsKICAgICBjbGFz
cyBUZXh0VHJhY2tDdWU7CiAgICAgY2xhc3MgV2ViU29ja2V0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0RmFjdG9yeS5pbiBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudFRhcmdldEZhY3RvcnkuaW4KaW5kZXggY2Y1YWNmNzVjM2JlNDkwMzBkMzg3MTIzOTMwMzg0
ZTE4MDA0ZjRjOC4uZjUxYmFkNzEwY2U5NDNlYmYyYjg5OGFlNWYzMTMxNzIwOWE2NTcxMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0RmFjdG9yeS5pbgorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXRGYWN0b3J5LmluCkBAIC0zMiw2ICszMiw3IEBA
IFNoYXJlZFdvcmtlckNvbnRleHQgY29uZGl0aW9uYWw9U0hBUkVEX1dPUktFUlMKIFNvdXJjZUJ1
ZmZlckxpc3QgY29uZGl0aW9uYWw9TUVESUFfU09VUkNFCiBTcGVlY2hSZWNvZ25pdGlvbiBjb25k
aXRpb25hbD1TQ1JJUFRFRF9TUEVFQ0gKIFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSBjb25kaXRp
b25hbD1TUEVFQ0hfU1lOVEhFU0lTCitTdHJlYW1SZWFkZXIgY29uZGl0aW9uYWw9U1RSRUFNCiBT
VkdFbGVtZW50SW5zdGFuY2UgY29uZGl0aW9uYWw9U1ZHCiBUZXh0VHJhY2sgY29uZGl0aW9uYWw9
VklERU9fVFJBQ0sKIFRleHRUcmFja0N1ZSBjb25kaXRpb25hbD1WSURFT19UUkFDSwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAKaW5kZXggZjI0Y2RjODJmYmMy
MjMxMmE0NDk3ZmNiMmMxN2M2NGFiYzdiZTg2My4uZTBmYmEyMWY2NTM5ZjEwZjc5MDQyNWFhM2Jh
MGU2YmUyZDM0M2U0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVh
ZGVyTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2Fk
ZXIuY3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaCIKKyNpbmNsdWRlICJTdHJlYW0uaCIKICNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNv
ZGVyLmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlRo
cmVhZGFibGVMb2FkZXIuaCIKQEAgLTU0LDEzICs1NSwxOSBAQCB1c2luZyBuYW1lc3BhY2Ugc3Rk
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NvbnN0IGludCBrRGVmYXVsdEJ1ZmZlckxlbmd0
aCA9IDMyNzY4OworCiBGaWxlUmVhZGVyTG9hZGVyOjpGaWxlUmVhZGVyTG9hZGVyKFJlYWRUeXBl
IHJlYWRUeXBlLCBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50KiBjbGllbnQpCiAgICAgOiBtX3JlYWRU
eXBlKHJlYWRUeXBlKQogICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9pc1Jhd0RhdGFD
b252ZXJ0ZWQoZmFsc2UpCiAgICAgLCBtX3N0cmluZ1Jlc3VsdCgiIikKKyAgICAsIG1fdmFyaWFi
bGVMZW5ndGgoZmFsc2UpCiAgICAgLCBtX2J5dGVzTG9hZGVkKDApCiAgICAgLCBtX3RvdGFsQnl0
ZXMoMCkKKyAgICAsIG1faGFzUmFuZ2UoZmFsc2UpCisgICAgLCBtX3JhbmdlU3RhcnQoMCkKKyAg
ICAsIG1fcmFuZ2VFbmQoMCkKICAgICAsIG1fZXJyb3JDb2RlKDApCiB7CiB9CkBAIC04NSw2ICs5
MiwzNyBAQCB2b2lkIEZpbGVSZWFkZXJMb2FkZXI6OnN0YXJ0KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEJsbwogICAgIC8vIENvbnN0cnVjdCBhbmQgbG9h
ZCB0aGUgcmVxdWVzdC4KICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChtX3VybEZvclJlYWRp
bmcpOwogICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7CisgICAgaWYgKG1faGFzUmFu
Z2UpCisgICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKCJSYW5nZSIsIFN0cmluZygi
Ynl0ZXM9IikgKyBTdHJpbmc6Om51bWJlcihtX3JhbmdlU3RhcnQpICsgKCItIikgKyBTdHJpbmc6
Om51bWJlcihtX3JhbmdlRW5kKSk7CisKKyAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRp
b25zOworICAgIG9wdGlvbnMuc2VuZExvYWRDYWxsYmFja3MgPSBTZW5kQ2FsbGJhY2tzOworICAg
IG9wdGlvbnMuc25pZmZDb250ZW50ID0gRG9Ob3RTbmlmZkNvbnRlbnQ7CisgICAgb3B0aW9ucy5w
cmVmbGlnaHRQb2xpY3kgPSBDb25zaWRlclByZWZsaWdodDsKKyAgICBvcHRpb25zLmFsbG93Q3Jl
ZGVudGlhbHMgPSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzOworICAgIG9wdGlvbnMuY3Jvc3NPcmln
aW5SZXF1ZXN0UG9saWN5ID0gRGVueUNyb3NzT3JpZ2luUmVxdWVzdHM7CisKKyAgICBpZiAobV9j
bGllbnQpCisgICAgICAgIG1fbG9hZGVyID0gVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQsIHRoaXMsIHJlcXVlc3QsIG9wdGlvbnMpOworICAgIGVsc2UKKyAg
ICAgICAgVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShzY3JpcHRF
eGVjdXRpb25Db250ZXh0LCByZXF1ZXN0LCAqdGhpcywgb3B0aW9ucyk7Cit9CisKK3ZvaWQgRmls
ZVJlYWRlckxvYWRlcjo6c3RhcnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCwgU3RyZWFtKiBzdHJlYW0pCit7CisgICAgLy8gVGhlIGJsb2IgaXMgcmVhZCBi
eSByb3V0aW5nIHRocm91Z2ggdGhlIHJlcXVlc3QgaGFuZGxpbmcgbGF5ZXIgZ2l2ZW4gYSB0ZW1w
b3JhcnkgcHVibGljIHVybC4KKyAgICBtX3VybEZvclJlYWRpbmcgPSBCbG9iVVJMOjpjcmVhdGVQ
dWJsaWNVUkwoc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAg
aWYgKG1fdXJsRm9yUmVhZGluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgZmFpbGVkKEZpbGVFcnJv
cjo6U0VDVVJJVFlfRVJSKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBUaHJlYWRhYmxl
QmxvYlJlZ2lzdHJ5OjpyZWdpc3RlclN0cmVhbVVSTChzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5z
ZWN1cml0eU9yaWdpbigpLCBtX3VybEZvclJlYWRpbmcsIHN0cmVhbS0+dXJsKCkpOworCisgICAg
Ly8gQ29uc3RydWN0IGFuZCBsb2FkIHRoZSByZXF1ZXN0LgorICAgIFJlc291cmNlUmVxdWVzdCBy
ZXF1ZXN0KG1fdXJsRm9yUmVhZGluZyk7CisgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJHRVQi
KTsKKyAgICBpZiAobV9oYXNSYW5nZSkKKyAgICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmll
bGQoIlJhbmdlIiwgU3RyaW5nKCJieXRlcz0iKSArIFN0cmluZzo6bnVtYmVyKG1fcmFuZ2VTdGFy
dCkgKyAoIi0iKSArIFN0cmluZzo6bnVtYmVyKG1fcmFuZ2VFbmQpKTsKIAogICAgIFRocmVhZGFi
bGVMb2FkZXJPcHRpb25zIG9wdGlvbnM7CiAgICAgb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9
IFNlbmRDYWxsYmFja3M7CkBAIC0xMzcsOCArMTc1LDExIEBAIHZvaWQgRmlsZVJlYWRlckxvYWRl
cjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcsIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmCiAgICAgLy8gc28gdG8gY2FsbCBBcnJheUJ1ZmZlcidzIGNyZWF0ZSBmdW5jdGlvbi4KICAg
ICAvLyBGSVhNRTogU3VwcG9ydCByZWFkaW5nIG1vcmUgdGhhbiB0aGUgY3VycmVudCBzaXplIGxp
bWl0IG9mIEFycmF5QnVmZmVyLgogICAgIGlmIChsZW5ndGggPiBudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpKSB7Ci0gICAgICAgIGZhaWxlZChGaWxlRXJyb3I6Ok5PVF9SRUFEQUJMRV9F
UlIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIG1fdmFyaWFibGVMZW5ndGggPSB0cnVlOwor
ICAgICAgICBpZiAobV9oYXNSYW5nZSkKKyAgICAgICAgICAgIGxlbmd0aCA9IDEgKyBtX3Jhbmdl
RW5kIC0gbV9yYW5nZVN0YXJ0OworICAgICAgICBlbHNlCisgICAgICAgICAgICBsZW5ndGggPSBr
RGVmYXVsdEJ1ZmZlckxlbmd0aDsKICAgICB9CiAKICAgICBBU1NFUlQoIW1fcmF3RGF0YSk7CkBA
IC0xNjYsOCArMjA3LDIyIEBAIHZvaWQgRmlsZVJlYWRlckxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEo
Y29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgpCiAKICAgICBpbnQgbGVuZ3RoID0gZGF0
YUxlbmd0aDsKICAgICB1bnNpZ25lZCByZW1haW5pbmdCdWZmZXJTcGFjZSA9IG1fdG90YWxCeXRl
cyAtIG1fYnl0ZXNMb2FkZWQ7Ci0gICAgaWYgKGxlbmd0aCA+IHN0YXRpY19jYXN0PGxvbmcgbG9u
Zz4ocmVtYWluaW5nQnVmZmVyU3BhY2UpKQotICAgICAgICBsZW5ndGggPSBzdGF0aWNfY2FzdDxp
bnQ+KHJlbWFpbmluZ0J1ZmZlclNwYWNlKTsKKyAgICBpZiAobGVuZ3RoID4gc3RhdGljX2Nhc3Q8
bG9uZyBsb25nPihyZW1haW5pbmdCdWZmZXJTcGFjZSkpIHsKKyAgICAgICAgaWYgKG1fdmFyaWFi
bGVMZW5ndGgpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdMZW5ndGggPSBt
X3RvdGFsQnl0ZXMgKiAyOworICAgICAgICAgICAgaWYgKG5ld0xlbmd0aCA+IG51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCkpIHsKKyAgICAgICAgICAgICAgICBmYWlsZWQoRmlsZUVycm9y
OjpOT1RfUkVBREFCTEVfRVJSKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IG5ld0RhdGEgPQorICAgICAgICAg
ICAgICAgIEFycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG5ld0xlbmd0
aCksIDEpOworICAgICAgICAgICAgbWVtY3B5KHN0YXRpY19jYXN0PGNoYXIqPihuZXdEYXRhLT5k
YXRhKCkpLCBzdGF0aWNfY2FzdDxjaGFyKj4obV9yYXdEYXRhLT5kYXRhKCkpLCBtX2J5dGVzTG9h
ZGVkKTsKKworICAgICAgICAgICAgbV9yYXdEYXRhID0gbmV3RGF0YTsKKyAgICAgICAgICAgIG1f
dG90YWxCeXRlcyA9IG5ld0xlbmd0aDsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBsZW5n
dGggPSByZW1haW5pbmdCdWZmZXJTcGFjZTsKKyAgICB9CiAKICAgICBpZiAobGVuZ3RoIDw9IDAp
CiAgICAgICAgIHJldHVybjsKQEAgLTE4Myw2ICsyMzgsMTQgQEAgdm9pZCBGaWxlUmVhZGVyTG9h
ZGVyOjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCkKIAog
dm9pZCBGaWxlUmVhZGVyTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcsIGRv
dWJsZSkKIHsKKyAgICBpZiAobV92YXJpYWJsZUxlbmd0aCAmJiBtX3RvdGFsQnl0ZXMgPiBtX2J5
dGVzTG9hZGVkKSB7CisgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbmV3RGF0YSA9CisgICAg
ICAgICAgICBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2J5dGVz
TG9hZGVkKSwgMSk7CisgICAgICAgIG1lbWNweShzdGF0aWNfY2FzdDxjaGFyKj4obmV3RGF0YS0+
ZGF0YSgpKSwgc3RhdGljX2Nhc3Q8Y2hhcio+KG1fcmF3RGF0YS0+ZGF0YSgpKSwgbV9ieXRlc0xv
YWRlZCk7CisKKyAgICAgICAgbV9yYXdEYXRhID0gbmV3RGF0YTsKKyAgICAgICAgbV90b3RhbEJ5
dGVzID0gbV9ieXRlc0xvYWRlZDsKKyAgICB9CiAgICAgY2xlYW51cCgpOwogICAgIGlmIChtX2Ns
aWVudCkKICAgICAgICAgbV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmcoKTsKQEAgLTIzMyw5ICsy
OTYsMjcgQEAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gRmlsZVJlYWRlckxvYWRlcjo6YXJyYXlC
dWZmZXJSZXN1bHQoKSBjb25zdAogICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKG1fcmF3
RGF0YS5nZXQoKSk7CiB9CiAKK1Bhc3NSZWZQdHI8QmxvYj4gRmlsZVJlYWRlckxvYWRlcjo6Ymxv
YlJlc3VsdCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcmVhZFR5cGUgPT0gUmVhZEFzQmxvYik7
CisKKyAgICAvLyBJZiB0aGUgbG9hZGluZyBpcyBub3Qgc3RhcnRlZCBvciBhbiBlcnJvciBvY2N1
cnMsIHJldHVybiBhbiBlbXB0eSByZXN1bHQuCisgICAgaWYgKCFtX3Jhd0RhdGEgfHwgbV9lcnJv
ckNvZGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgT3duUHRyPEJsb2JEYXRhPiBibG9iRGF0
YSA9IEJsb2JEYXRhOjpjcmVhdGUoKTsKKyAgICBzaXplX3Qgc2l6ZSA9IDA7CisgICAgUmVmUHRy
PFJhd0RhdGE+IHJhd0RhdGEgPSBSYXdEYXRhOjpjcmVhdGUoKTsKKyAgICBzaXplID0gbV9yYXdE
YXRhLT5ieXRlTGVuZ3RoKCk7CisgICAgcmF3RGF0YS0+bXV0YWJsZURhdGEoKS0+YXBwZW5kKHN0
YXRpY19jYXN0PGNoYXIqPihtX3Jhd0RhdGEtPmRhdGEoKSksIHNpemUpOworICAgIGJsb2JEYXRh
LT5hcHBlbmREYXRhKHJhd0RhdGEsIDAsIEJsb2JEYXRhSXRlbTo6dG9FbmRPZkZpbGUpOworICAg
IGJsb2JEYXRhLT5zZXRDb250ZW50VHlwZShtX2RhdGFUeXBlKTsKKyAgICByZXR1cm4gQmxvYjo6
Y3JlYXRlKGJsb2JEYXRhLnJlbGVhc2UoKSwgc2l6ZSk7Cit9CisKIFN0cmluZyBGaWxlUmVhZGVy
TG9hZGVyOjpzdHJpbmdSZXN1bHQoKQogewotICAgIEFTU0VSVChtX3JlYWRUeXBlICE9IFJlYWRB
c0FycmF5QnVmZmVyKTsKKyAgICBBU1NFUlQobV9yZWFkVHlwZSAhPSBSZWFkQXNBcnJheUJ1ZmZl
ciAmJiBtX3JlYWRUeXBlICE9IFJlYWRBc0Jsb2IpOwogCiAgICAgLy8gSWYgdGhlIGxvYWRpbmcg
aXMgbm90IHN0YXJ0ZWQgb3IgYW4gZXJyb3Igb2NjdXJzLCByZXR1cm4gYW4gZW1wdHkgcmVzdWx0
LgogICAgIGlmICghbV9yYXdEYXRhIHx8IG1fZXJyb3JDb2RlKQpAQCAtMzIwLDYgKzQwMSwxNCBA
QCB2b2lkIEZpbGVSZWFkZXJMb2FkZXI6OnNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYgZW5jb2Rp
bmcpCiAgICAgICAgIG1fZW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoZW5jb2RpbmcpOwogfQogCit2
b2lkIEZpbGVSZWFkZXJMb2FkZXI6OnNldFJhbmdlKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBs
ZW5ndGgpCit7CisgICAgQVNTRVJUKGxlbmd0aCA+IDApOworICAgIG1faGFzUmFuZ2UgPSB0cnVl
OworICAgIG1fcmFuZ2VTdGFydCA9IHN0YXJ0OworICAgIG1fcmFuZ2VFbmQgPSBzdGFydCArIGxl
bmd0aCAtIDE7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKICAKICNlbmRpZiAvLyBFTkFC
TEUoQkxPQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxv
YWRlci5oIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmgKaW5kZXgg
MzRmNTQzODdiMmUzMDM0YTdlODMyNTlkMTI2MDc3ZTQzYzhiNzdkZC4uOGMzNzU1NWE3N2IzMTIx
NmM2ODIxODJkYTkzMWQyNmIzNGIzZWU2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxl
UmVhZGVyTG9hZGVyLmgKQEAgLTQ1LDYgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgQmxvYjsKIGNsYXNzIEZpbGVSZWFkZXJMb2FkZXJDbGllbnQ7CiBjbGFzcyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OworY2xhc3MgU3RyZWFtOwogY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsK
IGNsYXNzIFRocmVhZGFibGVMb2FkZXI7CiAKQEAgLTUzLDYgKzU0LDcgQEAgcHVibGljOgogICAg
IGVudW0gUmVhZFR5cGUgewogICAgICAgICBSZWFkQXNBcnJheUJ1ZmZlciwKICAgICAgICAgUmVh
ZEFzQmluYXJ5U3RyaW5nLAorICAgICAgICBSZWFkQXNCbG9iLAogICAgICAgICBSZWFkQXNUZXh0
LAogICAgICAgICBSZWFkQXNEYXRhVVJMCiAgICAgfTsKQEAgLTYyLDYgKzY0LDcgQEAgcHVibGlj
OgogICAgIH5GaWxlUmVhZGVyTG9hZGVyKCk7CiAKICAgICB2b2lkIHN0YXJ0KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBCbG9iKik7CisgICAgdm9pZCBzdGFydChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgU3RyZWFtKik7CiAgICAgdm9pZCBjYW5jZWwoKTsKIAogICAgIC8vIFRocmVhZGFibGVM
b2FkZXJDbGllbnQKQEAgLTcyLDEzICs3NSwxNSBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgc3Ry
aW5nUmVzdWx0KCk7CiAgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXJSZXN1
bHQoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEJsb2I+IGJsb2JSZXN1bHQoKSBjb25zdDsKICAg
ICB1bnNpZ25lZCBieXRlc0xvYWRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNMb2FkZWQ7IH0K
ICAgICB1bnNpZ25lZCB0b3RhbEJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV90b3RhbEJ5dGVzOyB9
CiAgICAgaW50IGVycm9yQ29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3JDb2RlOyB9CiAKICAg
ICB2b2lkIHNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0RGF0YVR5cGUo
Y29uc3QgU3RyaW5nJiBkYXRhVHlwZSkgeyBtX2RhdGFUeXBlID0gZGF0YVR5cGU7IH0KLSAgICAK
KyAgICB2b2lkIHNldFJhbmdlKHVuc2lnbmVkLCB1bnNpZ25lZCk7CisKIHByaXZhdGU6CiAgICAg
dm9pZCB0ZXJtaW5hdGUoKTsKICAgICB2b2lkIGNsZWFudXAoKTsKQEAgLTEwNiw4ICsxMTEsMTQg
QEAgcHJpdmF0ZToKICAgICAvLyBUaGUgZGVjb2RlciB1c2VkIHRvIGRlY29kZSB0aGUgdGV4dCBk
YXRhLgogICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBtX2RlY29kZXI7CiAKKyAgICBi
b29sIG1fdmFyaWFibGVMZW5ndGg7CiAgICAgdW5zaWduZWQgbV9ieXRlc0xvYWRlZDsKICAgICB1
bnNpZ25lZCBtX3RvdGFsQnl0ZXM7CisKKyAgICBib29sIG1faGFzUmFuZ2U7CisgICAgdW5zaWdu
ZWQgbV9yYW5nZVN0YXJ0OworICAgIHVuc2lnbmVkIG1fcmFuZ2VFbmQ7CisKICAgICBpbnQgbV9l
cnJvckNvZGU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1N0cmVh
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1N0cmVhbS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDE4
OWFmOGZiYThlNGEyZmIzMjk4ZjJmY2U4YjhiNTQxZjZkOTI4ZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvU3RyZWFtLmNwcApAQCAtMCwwICsxLDY4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0cmVhbS5oIgorCisjaW5jbHVkZSAiQmxvYkRhdGEu
aCIKKyNpbmNsdWRlICJCbG9iVVJMLmgiCisjaW5jbHVkZSAiVGhyZWFkYWJsZUJsb2JSZWdpc3Ry
eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1N0cmVhbTo6U3RyZWFtKCkKK3sKKyAgICAv
LyBDcmVhdGUgYSBuZXcgaW50ZXJuYWwgVVJMIGFuZCByZWdpc3RlciBpdC4KKyAgICBtX2ludGVy
bmFsVVJMID0gQmxvYlVSTDo6Y3JlYXRlSW50ZXJuYWxVUkwoKTsKKyAgICBUaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5OjpyZWdpc3RlclN0cmVhbVVSTChtX2ludGVybmFsVVJMKTsKK30KKworU3RyZWFt
Ojp+U3RyZWFtKCkKK3sKK30KKwordm9pZCBTdHJlYW06OmFkZERhdGEoY29uc3QgY2hhciogZGF0
YSwgaW50IGxlbikKK3sKKyAgICBSZWZQdHI8UmF3RGF0YT4gYnVmZmVyKFJhd0RhdGE6OmNyZWF0
ZSgpKTsKKyAgICBidWZmZXItPm11dGFibGVEYXRhKCktPnJlc2l6ZShsZW4pOworICAgIG1lbWNw
eShidWZmZXItPm11dGFibGVEYXRhKCktPmRhdGEoKSwgZGF0YSwgbGVuKTsKKyAgICBUaHJlYWRh
YmxlQmxvYlJlZ2lzdHJ5OjphZGREYXRhVG9TdHJlYW0obV9pbnRlcm5hbFVSTCwgYnVmZmVyKTsK
K30KKwordm9pZCBTdHJlYW06Om1hcmtDb21wbGV0ZSgpCit7CisgICAgVGhyZWFkYWJsZUJsb2JS
ZWdpc3RyeTo6Y2xvc2VTdHJlYW0obV9pbnRlcm5hbFVSTCk7Cit9CisKK3ZvaWQgU3RyZWFtOjpj
bG9zZSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvU3RyZWFtLmggYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1N0cmVh
bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjU4Y2UwMmNhMWViYWE5MGZjMzVjOGUzNGEyNDBjNjYwYTU1ZTBkZGIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1N0cmVhbS5oCkBAIC0w
LDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgU3RyZWFtX2gKKyNkZWZpbmUgU3RyZWFtX2gKKworI2luY2x1ZGUgIktVUkwu
aCIKKyNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2hhcmVkQnVmZmVyOworCitj
bGFzcyBTdHJlYW0gOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxT
dHJlYW0+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJlYW0+IGNyZWF0ZSgp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0cmVhbSk7CisgICAgfQorCisg
ICAgdmlydHVhbCB+U3RyZWFtKCk7CisKKyAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJl
dHVybiBtX2ludGVybmFsVVJMOyB9CisKKyAgICBjb25zdCBTdHJpbmcmIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGU7IH0KKworICAgIHZvaWQgYWRkRGF0YShjb25zdCBjaGFyKiBkYXRhLCBp
bnQgbGVuKTsKKyAgICB2b2lkIG1hcmtDb21wbGV0ZSgpOworCisgICAgdmlydHVhbCB2b2lkIGNs
b3NlKCk7CisKK3Byb3RlY3RlZDoKKyAgICBTdHJlYW0oKTsKKworICAgIC8vIFRoaXMgaXMgYW4g
aW50ZXJuYWwgVVJMIHJlZmVycmluZyB0byB0aGUgc3RyZWFtIGRhdGEgYXNzb2NpYXRlZCB3aXRo
IHRoaXMgb2JqZWN0LiBJdCBzZXJ2ZXMKKyAgICAvLyBhcyBhbiBpZGVudGlmaWVyIGZvciB0aGlz
IHN0cmVhbS4gVGhlIGludGVybmFsIFVSTCBpcyBuZXZlciB1c2VkIHRvIHNvdXJjZSB0aGUgc3Ry
ZWFtJ3MgY29udGVudAorICAgIC8vIGludG8gYW4gSFRNTCBvciBmb3IgRmlsZVJlYWQnaW5nLCBw
dWJsaWMgc3RyZWFtIFVSTHMgbXVzdCBiZSB1c2VkIGZvciB0aG9zZSBwdXJwb3Nlcy4KKyAgICBL
VVJMIG1faW50ZXJuYWxVUkw7CisKKyAgICBTdHJpbmcgbV90eXBlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU3RyZWFtX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9TdHJlYW0uaWRsIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9TdHJl
YW0uaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmNmYjFjMmU4M2U1ZmRmOThjOTllMTcwOWVkODA1NmM2MjRiYjM4
ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1N0cmVhbS5pZGwK
QEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKK1sKKyAgICBDb25kaXRpb25hbD1TVFJFQU0KK10gaW50ZXJmYWNlIFN0
cmVhbSB7CisgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB0eXBlOworCisgICAgdm9p
ZCBjbG9zZSgpOworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvU3RyZWFt
RXJyb3IuaCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvU3RyZWFtRXJyb3IuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41YWExYzI5MzE4ODg0OTg3MmI4ZDNjOTUyMjA2ZWMwOTVmZjUyNDcyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9TdHJlYW1FcnJvci5oCkBAIC0wLDAgKzEsNzcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBTdHJlYW1FcnJvcl9oCisjZGVmaW5lIFN0cmVhbUVycm9yX2gKKworI2lmIEVO
QUJMRShTVFJFQU0pCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU3RyZWFtRXJy
b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxTdHJlYW1FcnJvcj4geworcHVibGljOgorICAgIGVudW0g
RXJyb3JDb2RlIHsKKyAgICAgICAgT0sgPSAwLAorICAgICAgICBOT1RfRk9VTkRfRVJSID0gMSwK
KyAgICAgICAgU0VDVVJJVFlfRVJSID0gMiwKKyAgICAgICAgQUJPUlRfRVJSID0gMywKKyAgICAg
ICAgTk9UX1JFQURBQkxFX0VSUiA9IDQsCisgICAgICAgIEVOQ09ESU5HX0VSUiA9IDUsCisgICAg
ICAgIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiA9IDYsCisgICAgICAgIElOVkFMSURfU1RB
VEVfRVJSID0gNywKKyAgICAgICAgU1lOVEFYX0VSUiA9IDgsCisgICAgICAgIElOVkFMSURfTU9E
SUZJQ0FUSU9OX0VSUiA9IDksCisgICAgICAgIFFVT1RBX0VYQ0VFREVEX0VSUiA9IDEwLAorICAg
ICAgICBUWVBFX01JU01BVENIX0VSUiA9IDExLAorICAgICAgICBQQVRIX0VYSVNUU19FUlIgPSAx
MiwKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyZWFtRXJyb3I+IGNyZWF0ZShF
cnJvckNvZGUgY29kZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFN0cmVhbUVycm9yKGNvZGUpKTsg
fQorCisgICAgRXJyb3JDb2RlIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGU7IH0KKworcHJp
dmF0ZToKKyAgICBleHBsaWNpdCBTdHJlYW1FcnJvcihFcnJvckNvZGUgY29kZSkKKyAgICAgICAg
OiBtX2NvZGUoY29kZSkKKyAgICB7CisgICAgfQorCisgICAgRXJyb3JDb2RlIG1fY29kZTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU0pCisK
KyNlbmRpZiAvLyBTdHJlYW1FcnJvcl9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvU3RyZWFtRXJyb3IuaWRsIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9TdHJlYW1FcnJv
ci5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzg0OWQ1NWMyZjRmYmVhNmU1YThiYTUzZTY2MjQ2ZTFmMGZjOTZj
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvU3RyZWFtRXJyb3Iu
aWRsCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworWworICAgIENvbmRpdGlvbmFsPVNUUkVBTSwKKyAgICBJbXBs
ZW1lbnRhdGlvbkxhY2tzVlRhYmxlCitdIGludGVyZmFjZSBTdHJlYW1FcnJvciB7CisgICAgLy8g
RklYTUU6IFNvbWUgb2YgY29uc3RhbnQgbmFtZXMgYXJlIGFscmVhZHkgZGVmaW5lZCBpbiBET01F
eGNlcHRpb24uaCBmb3IgT2JqZWN0aXZlLUMgYmluZGluZyBhbmQgd2UgY2Fubm90IGhhdmUgdGhl
IHNhbWUgbmFtZXMgaGVyZSAodGhleSBhcmUgdHJhbnNsYXRlZCBpbnRvIGEgZW51bSBpbiB0aGUg
c2FtZSBuYW1lc3BhY2UpLgorICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5PVF9GT1VORF9FUlIg
PSAxOworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNFQ1VSSVRZX0VSUiA9IDI7CisgICAgY29u
c3QgdW5zaWduZWQgc2hvcnQgQUJPUlRfRVJSID0gMzsKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCBOT1RfUkVBREFCTEVfRVJSID0gNDsKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBFTkNPRElO
R19FUlIgPSA1OworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5PX01PRElGSUNBVElPTl9BTExP
V0VEX0VSUiA9IDY7CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgSU5WQUxJRF9TVEFURV9FUlIg
PSA3OworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNZTlRBWF9FUlIgPSA4OworICAgIGNvbnN0
IHVuc2lnbmVkIHNob3J0IElOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUiA9IDk7CisgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgUVVPVEFfRVhDRUVERURfRVJSID0gMTA7CisgICAgY29uc3QgdW5zaWdu
ZWQgc2hvcnQgVFlQRV9NSVNNQVRDSF9FUlIgPSAxMTsKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCBQQVRIX0VYSVNUU19FUlIgPSAxMjsKKyAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQg
c2hvcnQgY29kZTsKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1N0cmVh
bVJlYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1N0cmVhbVJlYWRlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMGE1NmY3MmUzYWUyNjY4MGQwMGI4ZTEzZWRiODQ4OGE3NGRhMjVjOQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvU3RyZWFtUmVhZGVyLmNwcApAQCAt
MCwwICsxLDMyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1RSRUFNKQor
CisjaW5jbHVkZSAiU3RyZWFtUmVhZGVyLmgiCisKKyNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2su
aCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiUHJvZ3Jlc3NFdmVudC5o
IgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTdHJlYW0u
aCIKKyNpbmNsdWRlIDx3dGYvQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgZG91YmxlIHByb2dy
ZXNzTm90aWZpY2F0aW9uSW50ZXJ2YWxNUyA9IDUwOworCitQYXNzUmVmUHRyPFN0cmVhbVJlYWRl
cj4gU3RyZWFtUmVhZGVyOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkK
K3sKKyAgICBSZWZQdHI8U3RyZWFtUmVhZGVyPiBzdHJlYW1SZWFkZXIoYWRvcHRSZWYobmV3IFN0
cmVhbVJlYWRlcihjb250ZXh0KSkpOworICAgIHN0cmVhbVJlYWRlci0+c3VzcGVuZElmTmVlZGVk
KCk7CisgICAgcmV0dXJuIHN0cmVhbVJlYWRlci5yZWxlYXNlKCk7Cit9CisKK1N0cmVhbVJlYWRl
cjo6U3RyZWFtUmVhZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgOiBB
Y3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykKKyAgICAsIG1fc3RhdGUoRU1QVFkpCisgICAg
LCBtX2Fib3J0aW5nKGZhbHNlKQorICAgICwgbV9yZWFkVHlwZShGaWxlUmVhZGVyTG9hZGVyOjpS
ZWFkQXNCaW5hcnlTdHJpbmcpCisgICAgLCBtX2xhc3RQcm9ncmVzc05vdGlmaWNhdGlvblRpbWVN
UygwKQoreworfQorCitTdHJlYW1SZWFkZXI6On5TdHJlYW1SZWFkZXIoKQoreworICAgIHRlcm1p
bmF0ZSgpOworfQorCitjb25zdCBBdG9taWNTdHJpbmcmIFN0cmVhbVJlYWRlcjo6aW50ZXJmYWNl
TmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JTdHJl
YW1SZWFkZXI7Cit9CisKK2Jvb2wgU3RyZWFtUmVhZGVyOjpjYW5TdXNwZW5kKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU3RyZWFtUmVhZGVyOjpzdG9wKCkKK3sKKyAg
ICB0ZXJtaW5hdGUoKTsKK30KKworCit2b2lkIFN0cmVhbVJlYWRlcjo6cmVhZEFzQmxvYihTdHJl
YW0qIHN0cmVhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFzdHJlYW0pCisgICAg
ICAgIHJldHVybjsKKworICAgIHJlYWRJbnRlcm5hbChzdHJlYW0sIEZpbGVSZWFkZXJMb2FkZXI6
OlJlYWRBc0Jsb2IsIDAsIGVjKTsKK30KKwordm9pZCBTdHJlYW1SZWFkZXI6OnJlYWRBc0Jsb2Io
U3RyZWFtKiBzdHJlYW0sIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhTaXplLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBpZiAoIXN0cmVhbSB8fCBtYXhTaXplIDw9IDApCisgICAgICAgIHJldHVy
bjsKKworICAgIHJlYWRJbnRlcm5hbChzdHJlYW0sIEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRBc0Js
b2IsIG1heFNpemUsIGVjKTsKK30KKwordm9pZCBTdHJlYW1SZWFkZXI6OnJlYWRBc0FycmF5QnVm
ZmVyKFN0cmVhbSogc3RyZWFtLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIXN0cmVh
bSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVhZEludGVybmFsKHN0cmVhbSwgRmlsZVJlYWRl
ckxvYWRlcjo6UmVhZEFzQXJyYXlCdWZmZXIsIDAsIGVjKTsKK30KKwordm9pZCBTdHJlYW1SZWFk
ZXI6OnJlYWRBc0FycmF5QnVmZmVyKFN0cmVhbSogc3RyZWFtLCB1bnNpZ25lZCBsb25nIGxvbmcg
bWF4U2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFzdHJlYW0gfHwgbWF4U2l6
ZSA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICByZWFkSW50ZXJuYWwoc3RyZWFtLCBGaWxl
UmVhZGVyTG9hZGVyOjpSZWFkQXNBcnJheUJ1ZmZlciwgbWF4U2l6ZSwgZWMpOworfQorCit2b2lk
IFN0cmVhbVJlYWRlcjo6cmVhZEFzQmluYXJ5U3RyaW5nKFN0cmVhbSogc3RyZWFtLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBpZiAoIXN0cmVhbSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
cmVhZEludGVybmFsKHN0cmVhbSwgRmlsZVJlYWRlckxvYWRlcjo6UmVhZEFzQmluYXJ5U3RyaW5n
LCAwLCBlYyk7Cit9CisKK3ZvaWQgU3RyZWFtUmVhZGVyOjpyZWFkQXNCaW5hcnlTdHJpbmcoU3Ry
ZWFtKiBzdHJlYW0sIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhTaXplLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBpZiAoIXN0cmVhbSB8fCBtYXhTaXplIDw9IDApCisgICAgICAgIHJldHVybjsK
KworICAgIHJlYWRJbnRlcm5hbChzdHJlYW0sIEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRBc0JpbmFy
eVN0cmluZywgbWF4U2l6ZSwgZWMpOworfQorCit2b2lkIFN0cmVhbVJlYWRlcjo6cmVhZEFzVGV4
dChTdHJlYW0qIHN0cmVhbSwgY29uc3QgU3RyaW5nJiBlbmNvZGluZywgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgaWYgKCFzdHJlYW0pCisgICAgICAgIHJldHVybjsKKworICAgIG1fZW5jb2Rp
bmcgPSBlbmNvZGluZzsKKyAgICByZWFkSW50ZXJuYWwoc3RyZWFtLCBGaWxlUmVhZGVyTG9hZGVy
OjpSZWFkQXNUZXh0LCAwLCBlYyk7Cit9CisKK3ZvaWQgU3RyZWFtUmVhZGVyOjpyZWFkQXNUZXh0
KFN0cmVhbSogc3RyZWFtLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCB1bnNpZ25lZCBsb25nIGxv
bmcgbWF4U2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFzdHJlYW0gfHwgbWF4
U2l6ZSA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2VuY29kaW5nID0gZW5jb2Rpbmc7
CisgICAgcmVhZEludGVybmFsKHN0cmVhbSwgRmlsZVJlYWRlckxvYWRlcjo6UmVhZEFzVGV4dCwg
bWF4U2l6ZSwgZWMpOworfQorCit2b2lkIFN0cmVhbVJlYWRlcjo6cmVhZEFzVGV4dChTdHJlYW0q
IHN0cmVhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFzdHJlYW0pCisgICAgICAg
IHJldHVybjsKKworICAgIHJlYWRJbnRlcm5hbChzdHJlYW0sIEZpbGVSZWFkZXJMb2FkZXI6OlJl
YWRBc1RleHQsIDAsIGVjKTsKK30KKwordm9pZCBTdHJlYW1SZWFkZXI6OnJlYWRBc1RleHQoU3Ry
ZWFtKiBzdHJlYW0sIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhTaXplLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBpZiAoIXN0cmVhbSB8fCBtYXhTaXplIDw9IDApCisgICAgICAgIHJldHVybjsK
KworICAgIHJlYWRJbnRlcm5hbChzdHJlYW0sIEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRBc1RleHQs
IG1heFNpemUsIGVjKTsKK30KKwordm9pZCBTdHJlYW1SZWFkZXI6OnJlYWRBc0RhdGFVUkwoU3Ry
ZWFtKiBzdHJlYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghc3RyZWFtKQorICAg
ICAgICByZXR1cm47CisKKyAgICByZWFkSW50ZXJuYWwoc3RyZWFtLCBGaWxlUmVhZGVyTG9hZGVy
OjpSZWFkQXNEYXRhVVJMLCAwLCBlYyk7Cit9CisKK3ZvaWQgU3RyZWFtUmVhZGVyOjpyZWFkQXNE
YXRhVVJMKFN0cmVhbSogc3RyZWFtLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4U2l6ZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFzdHJlYW0gfHwgbWF4U2l6ZSA8PSAwKQorICAgICAg
ICByZXR1cm47CisKKyAgICByZWFkSW50ZXJuYWwoc3RyZWFtLCBGaWxlUmVhZGVyTG9hZGVyOjpS
ZWFkQXNEYXRhVVJMLCBtYXhTaXplLCBlYyk7Cit9CisKK3N0YXRpYyB2b2lkIGRlbGF5ZWRBYm9y
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU3RyZWFtUmVhZGVyKiByZWFkZXIpCit7CisgICAg
cmVhZGVyLT5kb0Fib3J0KCk7Cit9CisKK3ZvaWQgU3RyZWFtUmVhZGVyOjphYm9ydCgpCit7Cisg
ICAgaWYgKG1fYWJvcnRpbmcgfHwgbV9zdGF0ZSAhPSBMT0FESU5HKQorICAgICAgICByZXR1cm47
CisgICAgbV9hYm9ydGluZyA9IHRydWU7CisKKyAgICAvLyBTY2hlZHVsZSB0byBoYXZlIHRoZSBh
Ym9ydCBkb25lIGxhdGVyIHNpbmNlIGFib3J0KCkgbWlnaHQgYmUgY2FsbGVkIGZyb20gdGhlIGV2
ZW50IGhhbmRsZXIgYW5kIHdlIGRvIG5vdCB3YW50IHRoZSByZXNvdXJjZSBsb2FkaW5nIGNvZGUg
dG8gYmUgaW4gdGhlIHN0YWNrLgorICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRh
c2soCisgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmZGVsYXllZEFib3J0LCBBbGxvd0FjY2Vz
c0xhdGVyKHRoaXMpKSk7Cit9CisKKwordm9pZCBTdHJlYW1SZWFkZXI6OmRvQWJvcnQoKQorewor
ICAgIEFTU0VSVChtX3N0YXRlICE9IERPTkUpOworCisgICAgdGVybWluYXRlKCk7CisgICAgbV9h
Ym9ydGluZyA9IGZhbHNlOworCisgICAgbV9lcnJvciA9IFN0cmVhbUVycm9yOjpjcmVhdGUoU3Ry
ZWFtRXJyb3I6OkFCT1JUX0VSUik7CisKKyAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLmVycm9y
RXZlbnQpOworICAgIGZpcmVFdmVudChldmVudE5hbWVzKCkuYWJvcnRFdmVudCk7CisgICAgZmly
ZUV2ZW50KGV2ZW50TmFtZXMoKS5sb2FkZW5kRXZlbnQpOworCisgICAgLy8gQWxsIHBvc3NpYmxl
IGV2ZW50cyBoYXZlIGZpcmVkIGFuZCB3ZSdyZSBkb25lLCBubyBtb3JlIHBlbmRpbmcgYWN0aXZp
dHkuCisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7Cit9CisKK3ZvaWQgU3RyZWFtUmVh
ZGVyOjp0ZXJtaW5hdGUoKQoreworICAgIGlmIChtX2xvYWRlcikgeworICAgICAgICBtX2xvYWRl
ci0+Y2FuY2VsKCk7CisgICAgICAgIG1fbG9hZGVyID0gbnVsbHB0cjsKKyAgICB9CisgICAgbV9z
dGF0ZSA9IERPTkU7Cit9CisKK3ZvaWQgU3RyZWFtUmVhZGVyOjpyZWFkSW50ZXJuYWwoU3RyZWFt
KiBzdHJlYW0sIEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRUeXBlIHR5cGUsIHVuc2lnbmVkIGxvbmcg
bG9uZyBtYXhTaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBJZiBtdWx0aXBsZSBj
b25jdXJyZW50IHJlYWQgbWV0aG9kcyBhcmUgY2FsbGVkIG9uIHRoZSBzYW1lIEZpbGVSZWFkZXIs
IElOVkFMSURfU1RBVEVfRVJSIHNob3VsZCBiZSB0aHJvd24gd2hlbiB0aGUgc3RhdGUgaXMgTE9B
RElORy4KKyAgICBpZiAobV9zdGF0ZSA9PSBMT0FESU5HKSB7CisgICAgICAgIGVjID0gSU5WQUxJ
RF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzZXRQZW5kaW5nQWN0
aXZpdHkodGhpcyk7CisKKyAgICBtX3N0cmVhbSA9IHN0cmVhbTsKKyAgICBtX3JlYWRUeXBlID0g
dHlwZTsKKyAgICBtX3N0YXRlID0gTE9BRElORzsKKyAgICBtX2Vycm9yID0gMDsKKworICAgIG1f
bG9hZGVyID0gYWRvcHRQdHIobmV3IEZpbGVSZWFkZXJMb2FkZXIobV9yZWFkVHlwZSwgdGhpcykp
OworICAgIG1fbG9hZGVyLT5zZXRFbmNvZGluZyhtX2VuY29kaW5nKTsKKyAgICBtX2xvYWRlci0+
c2V0RGF0YVR5cGUobV9zdHJlYW0tPnR5cGUoKSk7CisgICAgaWYgKG1heFNpemUpCisgICAgICAg
IG1fbG9hZGVyLT5zZXRSYW5nZSgwLCBtYXhTaXplKTsKKyAgICBtX2xvYWRlci0+c3RhcnQoc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLCBtX3N0cmVhbS5nZXQoKSk7Cit9CisKK3ZvaWQgU3RyZWFt
UmVhZGVyOjpkaWRTdGFydExvYWRpbmcoKQoreworICAgIGZpcmVFdmVudChldmVudE5hbWVzKCku
bG9hZHN0YXJ0RXZlbnQpOworfQorCit2b2lkIFN0cmVhbVJlYWRlcjo6ZGlkUmVjZWl2ZURhdGEo
KQoreworICAgIC8vIEZpcmUgdGhlIHByb2dyZXNzIGV2ZW50IGF0IGxlYXN0IGV2ZXJ5IDUwbXMu
CisgICAgZG91YmxlIG5vdyA9IGN1cnJlbnRUaW1lTVMoKTsKKyAgICBpZiAoIW1fbGFzdFByb2dy
ZXNzTm90aWZpY2F0aW9uVGltZU1TKQorICAgICAgICBtX2xhc3RQcm9ncmVzc05vdGlmaWNhdGlv
blRpbWVNUyA9IG5vdzsKKyAgICBlbHNlIGlmIChub3cgLSBtX2xhc3RQcm9ncmVzc05vdGlmaWNh
dGlvblRpbWVNUyA+IHByb2dyZXNzTm90aWZpY2F0aW9uSW50ZXJ2YWxNUykgeworICAgICAgICBm
aXJlRXZlbnQoZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQpOworICAgICAgICBtX2xhc3RQcm9n
cmVzc05vdGlmaWNhdGlvblRpbWVNUyA9IG5vdzsKKyAgICB9Cit9CisKK3ZvaWQgU3RyZWFtUmVh
ZGVyOjpkaWRGaW5pc2hMb2FkaW5nKCkKK3sKKyAgICBpZiAobV9hYm9ydGluZykKKyAgICAgICAg
cmV0dXJuOworCisgICAgQVNTRVJUKG1fc3RhdGUgIT0gRE9ORSk7CisgICAgbV9zdGF0ZSA9IERP
TkU7CisKKyAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQpOworICAgIGZp
cmVFdmVudChldmVudE5hbWVzKCkubG9hZEV2ZW50KTsKKyAgICBmaXJlRXZlbnQoZXZlbnROYW1l
cygpLmxvYWRlbmRFdmVudCk7CisKKyAgICAvLyBBbGwgcG9zc2libGUgZXZlbnRzIGhhdmUgZmly
ZWQgYW5kIHdlJ3JlIGRvbmUsIG5vIG1vcmUgcGVuZGluZyBhY3Rpdml0eS4KKyAgICB1bnNldFBl
bmRpbmdBY3Rpdml0eSh0aGlzKTsKK30KKwordm9pZCBTdHJlYW1SZWFkZXI6OmRpZEZhaWwoaW50
IGVycm9yQ29kZSkKK3sKKyAgICAvLyBJZiB3ZSdyZSBhYm9ydGluZywgZG8gbm90IHByb2NlZWQg
d2l0aCBub3JtYWwgZXJyb3IgaGFuZGxpbmcgc2luY2UgaXQgaXMgY292ZXJlZCBpbiBhYm9ydGlu
ZyBjb2RlLgorICAgIGlmIChtX2Fib3J0aW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NF
UlQobV9zdGF0ZSAhPSBET05FKTsKKyAgICBtX3N0YXRlID0gRE9ORTsKKworICAgIG1fZXJyb3Ig
PSBTdHJlYW1FcnJvcjo6Y3JlYXRlKHN0YXRpY19jYXN0PFN0cmVhbUVycm9yOjpFcnJvckNvZGU+
KGVycm9yQ29kZSkpOworICAgIGZpcmVFdmVudChldmVudE5hbWVzKCkuZXJyb3JFdmVudCk7Cisg
ICAgZmlyZUV2ZW50KGV2ZW50TmFtZXMoKS5sb2FkZW5kRXZlbnQpOworCisgICAgLy8gQWxsIHBv
c3NpYmxlIGV2ZW50cyBoYXZlIGZpcmVkIGFuZCB3ZSdyZSBkb25lLCBubyBtb3JlIHBlbmRpbmcg
YWN0aXZpdHkuCisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7Cit9CisKK3ZvaWQgU3Ry
ZWFtUmVhZGVyOjpmaXJlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKQoreworICAgIGRp
c3BhdGNoRXZlbnQoUHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKHR5cGUsIHRydWUsIG1fbG9hZGVyID8g
bV9sb2FkZXItPmJ5dGVzTG9hZGVkKCkgOiAwLCBtX2xvYWRlciA/IG1fbG9hZGVyLT50b3RhbEJ5
dGVzKCkgOiAwKSk7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IFN0cmVhbVJlYWRlcjo6
YXJyYXlCdWZmZXJSZXN1bHQoKSBjb25zdAoreworICAgIGlmICghbV9sb2FkZXIgfHwgbV9lcnJv
cikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fbG9hZGVyLT5hcnJheUJ1ZmZlclJl
c3VsdCgpOworfQorCitQYXNzUmVmUHRyPEJsb2I+IFN0cmVhbVJlYWRlcjo6YmxvYlJlc3VsdCgp
IGNvbnN0Cit7CisgICAgaWYgKCFtX2xvYWRlciB8fCBtX2Vycm9yKQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gbV9sb2FkZXItPmJsb2JSZXN1bHQoKTsKK30KKworU3RyaW5nIFN0cmVh
bVJlYWRlcjo6c3RyaW5nUmVzdWx0KCkKK3sKKyAgICBpZiAoIW1fbG9hZGVyIHx8IG1fZXJyb3Ip
CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gbV9sb2FkZXItPnN0cmluZ1Jl
c3VsdCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
U1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9TdHJlYW1SZWFkZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvU3RyZWFtUmVhZGVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzUw
MmI4ODcwNGE3YTJjYmRlYzJmYzJiNmY5ZjNmYWZjZjc5YzQwZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvU3RyZWFtUmVhZGVyLmgKQEAgLTAsMCArMSwxNDYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBTdHJlYW1SZWFkZXJfaAorI2RlZmluZSBTdHJlYW1SZWFkZXJfaAorCisjaWYgRU5B
QkxFKFNUUkVBTSkKKworI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkJs
b2IuaCIKKyNpbmNsdWRlICJFdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIkZpbGVSZWFkZXJMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJGaWxlUmVhZGVyTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiU3Ry
ZWFtRXJyb3IuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNzIFN0cmVhbTsK
KwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xhc3MgU3RyZWFtUmVhZGVyIDogcHVi
bGljIFJlZkNvdW50ZWQ8U3RyZWFtUmVhZGVyPiwgcHVibGljIEFjdGl2ZURPTU9iamVjdCwgcHVi
bGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgRmlsZVJlYWRlckxvYWRlckNsaWVudCB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyZWFtUmVhZGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCopOworCisgICAgdmlydHVhbCB+U3RyZWFtUmVhZGVyKCk7CisKKyAgICBlbnVt
IFJlYWR5U3RhdGUgeworICAgICAgICBFTVBUWSA9IDAsCisgICAgICAgIExPQURJTkcgPSAxLAor
ICAgICAgICBET05FID0gMgorICAgIH07CisKKyAgICB2b2lkIHJlYWRBc0Jsb2IoU3RyZWFtKiwg
RXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcmVhZEFzQmxvYihTdHJlYW0qLCB1bnNpZ25lZCBs
b25nIGxvbmcgbWF4U2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcmVhZEFzQXJyYXlC
dWZmZXIoU3RyZWFtKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcmVhZEFzQXJyYXlCdWZm
ZXIoU3RyZWFtKiwgdW5zaWduZWQgbG9uZyBsb25nIG1heFNpemUsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2b2lkIHJlYWRBc0JpbmFyeVN0cmluZyhTdHJlYW0qLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgdm9pZCByZWFkQXNCaW5hcnlTdHJpbmcoU3RyZWFtKiwgdW5zaWduZWQgbG9uZyBsb25nIG1h
eFNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlYWRBc1RleHQoU3RyZWFtKiwgY29u
c3QgU3RyaW5nJiBlbmNvZGluZywgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcmVhZEFzVGV4
dChTdHJlYW0qLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4
U2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcmVhZEFzVGV4dChTdHJlYW0qLCBFeGNl
cHRpb25Db2RlJik7CisgICAgdm9pZCByZWFkQXNUZXh0KFN0cmVhbSosIHVuc2lnbmVkIGxvbmcg
bG9uZyBtYXhTaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCByZWFkQXNEYXRhVVJMKFN0
cmVhbSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlYWRBc0RhdGFVUkwoU3RyZWFtKiwg
dW5zaWduZWQgbG9uZyBsb25nIG1heFNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGFi
b3J0KCk7CisKKyAgICB2b2lkIGRvQWJvcnQoKTsKKworICAgIFJlYWR5U3RhdGUgcmVhZHlTdGF0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICBQYXNzUmVmUHRyPFN0cmVhbUVycm9y
PiBlcnJvcigpIHsgcmV0dXJuIG1fZXJyb3I7IH0KKyAgICBGaWxlUmVhZGVyTG9hZGVyOjpSZWFk
VHlwZSByZWFkVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZFR5cGU7IH0KKyAgICBQYXNzUmVm
UHRyPEJsb2I+IGJsb2JSZXN1bHQoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBhcnJheUJ1ZmZlclJlc3VsdCgpIGNvbnN0OworICAgIFN0cmluZyBzdHJpbmdSZXN1bHQoKTsK
KworICAgIC8vIEFjdGl2ZURPTU9iamVjdAorICAgIHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKKworICAgIC8vIEV2ZW50VGFyZ2V0Cisg
ICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSBjb25zdCB7IHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsgfQorCisgICAgLy8gRmlsZVJlYWRlckxvYWRlckNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBk
aWRTdGFydExvYWRpbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZygpOworICAgIHZpcnR1YWwgdm9pZCBkaWRG
YWlsKGludCBlcnJvckNvZGUpOworCisgICAgdXNpbmcgUmVmQ291bnRlZDxTdHJlYW1SZWFkZXI+
OjpyZWY7CisgICAgdXNpbmcgUmVmQ291bnRlZDxTdHJlYW1SZWFkZXI+OjpkZXJlZjsKKworICAg
IERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIobG9hZHN0YXJ0KTsKKyAgICBERUZJTkVf
QVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHByb2dyZXNzKTsKKyAgICBERUZJTkVfQVRUUklCVVRF
X0VWRU5UX0xJU1RFTkVSKGxvYWQpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVO
RVIoYWJvcnQpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZXJyb3IpOwor
ICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIobG9hZGVuZCk7CisKK3ByaXZhdGU6
CisgICAgZXhwbGljaXQgU3RyZWFtUmVhZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKwor
ICAgIC8vIEV2ZW50VGFyZ2V0CisgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyBy
ZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9
CisgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpIHsgcmV0dXJu
ICZtX2V2ZW50VGFyZ2V0RGF0YTsgfQorICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1
cmVFdmVudFRhcmdldERhdGEoKSB7IHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7IH0KKworICAg
IHZvaWQgdGVybWluYXRlKCk7CisgICAgdm9pZCBmaXJlRXJyb3JFdmVudChpbnQgaHR0cFN0YXR1
c0NvZGUpOworICAgIHZvaWQgZmlyZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSk7CisK
KyAgICB2b2lkIHJlYWRJbnRlcm5hbChTdHJlYW0qLCBGaWxlUmVhZGVyTG9hZGVyOjpSZWFkVHlw
ZSwgdW5zaWduZWQgbG9uZyBsb25nLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICBSZWFkeVN0YXRl
IG1fc3RhdGU7CisgICAgYm9vbCBtX2Fib3J0aW5nOworICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2
ZW50VGFyZ2V0RGF0YTsKKworICAgIFJlZlB0cjxTdHJlYW0+IG1fc3RyZWFtOworICAgIEZpbGVS
ZWFkZXJMb2FkZXI6OlJlYWRUeXBlIG1fcmVhZFR5cGU7CisgICAgU3RyaW5nIG1fZW5jb2Rpbmc7
CisKKyAgICBPd25QdHI8RmlsZVJlYWRlckxvYWRlcj4gbV9sb2FkZXI7CisgICAgUmVmUHRyPFN0
cmVhbUVycm9yPiBtX2Vycm9yOworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbV9yYXdEYXRhOwor
ICAgIGRvdWJsZSBtX2xhc3RQcm9ncmVzc05vdGlmaWNhdGlvblRpbWVNUzsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU0pCisKKyNlbmRpZiAv
LyBTdHJlYW1SZWFkZXJfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1N0
cmVhbVJlYWRlci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1N0cmVhbVJlYWRlci5pZGwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZDhlNzI4YjJhNjE0YTllZTMxYmJiZjg5YTA0MjQ4YzYwMzcxNDE4OQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvU3RyZWFtUmVhZGVyLmlkbApA
QCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworWworICAgIENvbmRpdGlvbmFsPVNUUkVBTSwKKyAgICBBY3RpdmVET01P
YmplY3QsCisgICAgQ29uc3RydWN0b3IsCisgICAgQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCwKKyAgICBFdmVudFRhcmdldAorXSBpbnRlcmZhY2UgU3RyZWFtUmVhZGVyIHsKKyAgICAv
LyByZWFkeSBzdGF0ZXMKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBFTVBUWSA9IDA7CisgICAg
Y29uc3QgdW5zaWduZWQgc2hvcnQgTE9BRElORyA9IDE7CisgICAgY29uc3QgdW5zaWduZWQgc2hv
cnQgRE9ORSA9IDI7CisgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0IHJlYWR5
U3RhdGU7CisKKyAgICAvLyBhc3luYyByZWFkIG1ldGhvZHMKKyAgICB2b2lkIHJlYWRBc0Jsb2Io
aW4gU3RyZWFtIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsXSB1bnNp
Z25lZCBsb25nIGxvbmcgbWF4U2l6ZSkKKyAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7Cisg
ICAgdm9pZCByZWFkQXNBcnJheUJ1ZmZlcihpbiBTdHJlYW0gc3RyZWFtLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsXSB1bnNpZ25lZCBsb25nIGxvbmcgbWF4U2l6ZSkK
KyAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgdm9pZCByZWFkQXNUZXh0KGluIFN0
cmVhbSBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbF0gRE9NU3RyaW5n
IGVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWxdIHVuc2lnbmVkIGxv
bmcgbG9uZyBtYXhTaXplKQorICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICB2b2lk
IHJlYWRBc0RhdGFVUkwoaW4gU3RyZWFtIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAg
aW4gW09wdGlvbmFsXSB1bnNpZ25lZCBsb25nIGxvbmcgbWF4U2l6ZSkKKyAgICAgICAgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7CisKKyAgICB2b2lkIGFib3J0KCk7CisKKyAgICAvLyBmaWxlIGRhdGEK
KyAgICBbQ3VzdG9tXSByZWFkb25seSBhdHRyaWJ1dGUgYW55IHJlc3VsdDsKKworICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBTdHJlYW1FcnJvciBlcnJvcjsKKworICAgIC8vIEV2ZW50VGFyZ2V0IGlu
dGVyZmFjZQorICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsXSBib29sZWFuIHVzZUNhcHR1cmUpOwor
ICAgIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsXSBib29sZWFuIHVzZUNhcHR1cmUpOwor
ICAgIGJvb2xlYW4gZGlzcGF0Y2hFdmVudChpbiBFdmVudCBldnQpCisgICAgICAgIHJhaXNlcyhF
dmVudEV4Y2VwdGlvbik7CisKKyAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmxvYWRzdGFy
dDsKKyAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbnByb2dyZXNzOworICAgIGF0dHJpYnV0
ZSBFdmVudExpc3RlbmVyIG9ubG9hZDsKKyAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmFi
b3J0OworICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uZXJyb3I7CisgICAgYXR0cmlidXRl
IEV2ZW50TGlzdGVuZXIgb25sb2FkZW5kOworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxl
YXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwCmluZGV4IDEwYmZiMmVlMGVhYTcwNjRmYzdm
MzcxOTFhMzZiN2JlZTNlZWM2YmUuLjBlZDAzYjE3N2FmYjE1MDM2N2FkMWZkMmJlYTE5YjI4ZTIx
YzRmNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JS
ZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJl
Z2lzdHJ5LmNwcApAQCAtNTYsNiArNTYsMTMgQEAgcHVibGljOgogICAgICAgICB0aGlzLT5ibG9i
RGF0YS0+ZGV0YWNoRnJvbUN1cnJlbnRUaHJlYWQoKTsKICAgICB9CiAKKyAgICBCbG9iUmVnaXN0
cnlDb250ZXh0KGNvbnN0IEtVUkwmIHVybCwgUGFzc1JlZlB0cjxSYXdEYXRhPiBzdHJlYW1EYXRh
KQorICAgICAgICA6IHVybCh1cmwuY29weSgpKQorICAgICAgICAsIHN0cmVhbURhdGEoc3RyZWFt
RGF0YSkKKyAgICB7CisgICAgICAgIHRoaXMtPmJsb2JEYXRhLT5kZXRhY2hGcm9tQ3VycmVudFRo
cmVhZCgpOworICAgIH0KKwogICAgIEJsb2JSZWdpc3RyeUNvbnRleHQoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBLVVJMJiBzcmNVUkwpCiAgICAgICAgIDogdXJsKHVybC5jb3B5KCkpCiAgICAgICAg
ICwgc3JjVVJMKHNyY1VSTC5jb3B5KCkpCkBAIC03MCw2ICs3Nyw3IEBAIHB1YmxpYzoKICAgICBL
VVJMIHVybDsKICAgICBLVVJMIHNyY1VSTDsKICAgICBPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRh
OworICAgIFJlZlB0cjxSYXdEYXRhPiBzdHJlYW1EYXRhOwogfTsKIAogI2lmIEVOQUJMRShCTE9C
KQpAQCAtMTYyLDQgKzE3MCwxMTAgQEAgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gVGhyZWFk
YWJsZUJsb2JSZWdpc3RyeTo6Z2V0Q2FjaGVkT3JpZ2luKGNvbnN0IEtVUkwmKQogCiAjZW5kaWYg
Ly8gRU5BQkwoQkxPQikKIAorI2lmIEVOQUJMRShTVFJFQU0pCitzdGF0aWMgdm9pZCByZWdpc3Rl
clN0cmVhbVVSTFRhc2sodm9pZCogY29udGV4dCkKK3sKKyAgICBPd25QdHI8QmxvYlJlZ2lzdHJ5
Q29udGV4dD4gYmxvYlJlZ2lzdHJ5Q29udGV4dCA9IGFkb3B0UHRyKHN0YXRpY19jYXN0PEJsb2JS
ZWdpc3RyeUNvbnRleHQqPihjb250ZXh0KSk7CisgICAgYmxvYlJlZ2lzdHJ5KCkucmVnaXN0ZXJT
dHJlYW1VUkwoYmxvYlJlZ2lzdHJ5Q29udGV4dC0+dXJsKTsKK30KKwordm9pZCBUaHJlYWRhYmxl
QmxvYlJlZ2lzdHJ5OjpyZWdpc3RlclN0cmVhbVVSTChjb25zdCBLVVJMJiB1cmwpCit7CisgICAg
aWYgKGlzTWFpblRocmVhZCgpKQorICAgICAgICBibG9iUmVnaXN0cnkoKS5yZWdpc3RlclN0cmVh
bVVSTCh1cmwpOworICAgIGVsc2UgeworICAgICAgICBPd25QdHI8QmxvYlJlZ2lzdHJ5Q29udGV4
dD4gY29udGV4dCA9IGFkb3B0UHRyKG5ldyBCbG9iUmVnaXN0cnlDb250ZXh0KHVybCkpOworICAg
ICAgICBjYWxsT25NYWluVGhyZWFkKCZyZWdpc3RlclN0cmVhbVVSTFRhc2ssIGNvbnRleHQubGVh
a1B0cigpKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHJlZ2lzdGVyU3RyZWFtVVJMRnJvbVRh
c2sodm9pZCogY29udGV4dCkKK3sKKyAgICBPd25QdHI8QmxvYlJlZ2lzdHJ5Q29udGV4dD4gYmxv
YlJlZ2lzdHJ5Q29udGV4dCA9IGFkb3B0UHRyKHN0YXRpY19jYXN0PEJsb2JSZWdpc3RyeUNvbnRl
eHQqPihjb250ZXh0KSk7CisgICAgYmxvYlJlZ2lzdHJ5KCkucmVnaXN0ZXJTdHJlYW1VUkwoYmxv
YlJlZ2lzdHJ5Q29udGV4dC0+dXJsLCBibG9iUmVnaXN0cnlDb250ZXh0LT5zcmNVUkwpOworfQor
Cit2b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyU3RyZWFtVVJMKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4sIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgc3JjVVJMKQorewor
ICAgIC8vIElmIHRoZSBzdHJlYW0gVVJMIGNvbnRhaW5zIG51bGwgb3JpZ2luLCBhcyBpbiB0aGUg
Y29udGV4dCB3aXRoIHVuaXF1ZSBzZWN1cml0eSBvcmlnaW4sIHNhdmUgdGhlIG1hcHBpbmcgYmV0
d2VlbiB1cmwgYW5kIG9yaWdpbiBzbyB0aGF0IHRoZSBvcmlnaW4gY2FuIGJlIHJldHJpdmVkIHdo
ZW4gZG9pbmcgc2VjdXJpdHkgb3JpZ2luIGNoZWNrLgorICAgIGlmIChvcmlnaW4gJiYgQmxvYlVS
TDo6Z2V0T3JpZ2luKHVybCkgPT0gIm51bGwiKQorICAgICAgICBvcmlnaW5NYXAoKS0+YWRkKHVy
bC5zdHJpbmcoKSwgb3JpZ2luKTsKKworICAgIGlmIChpc01haW5UaHJlYWQoKSkKKyAgICAgICAg
YmxvYlJlZ2lzdHJ5KCkucmVnaXN0ZXJTdHJlYW1VUkwodXJsLCBzcmNVUkwpOworICAgIGVsc2Ug
eworICAgICAgICBPd25QdHI8QmxvYlJlZ2lzdHJ5Q29udGV4dD4gY29udGV4dCA9IGFkb3B0UHRy
KG5ldyBCbG9iUmVnaXN0cnlDb250ZXh0KHVybCwgc3JjVVJMKSk7CisgICAgICAgIGNhbGxPbk1h
aW5UaHJlYWQoJnJlZ2lzdGVyU3RyZWFtVVJMRnJvbVRhc2ssIGNvbnRleHQubGVha1B0cigpKTsK
KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGFkZFN0cmVhbURhdGFUYXNrKHZvaWQqIGNvbnRleHQp
Cit7CisgICAgT3duUHRyPEJsb2JSZWdpc3RyeUNvbnRleHQ+IGJsb2JSZWdpc3RyeUNvbnRleHQg
PSBhZG9wdFB0cihzdGF0aWNfY2FzdDxCbG9iUmVnaXN0cnlDb250ZXh0Kj4oY29udGV4dCkpOwor
ICAgIGJsb2JSZWdpc3RyeSgpLmFkZERhdGFUb1N0cmVhbShibG9iUmVnaXN0cnlDb250ZXh0LT51
cmwsIGJsb2JSZWdpc3RyeUNvbnRleHQtPnN0cmVhbURhdGEpOworfQorCit2b2lkIFRocmVhZGFi
bGVCbG9iUmVnaXN0cnk6OmFkZERhdGFUb1N0cmVhbShjb25zdCBLVVJMJiB1cmwsIFBhc3NSZWZQ
dHI8UmF3RGF0YT4gc3RyZWFtRGF0YSkKK3sKKyAgICBpZiAoaXNNYWluVGhyZWFkKCkpCisgICAg
ICAgIGJsb2JSZWdpc3RyeSgpLmFkZERhdGFUb1N0cmVhbSh1cmwsIHN0cmVhbURhdGEpOworICAg
IGVsc2UgeworICAgICAgICBPd25QdHI8QmxvYlJlZ2lzdHJ5Q29udGV4dD4gY29udGV4dCA9IGFk
b3B0UHRyKG5ldyBCbG9iUmVnaXN0cnlDb250ZXh0KHVybCwgc3RyZWFtRGF0YSkpOworICAgICAg
ICBjYWxsT25NYWluVGhyZWFkKCZhZGRTdHJlYW1EYXRhVGFzaywgY29udGV4dC5sZWFrUHRyKCkp
OworICAgIH0KK30KKworc3RhdGljIHZvaWQgY2xvc2VTdHJlYW1UYXNrKHZvaWQqIGNvbnRleHQp
Cit7CisgICAgT3duUHRyPEJsb2JSZWdpc3RyeUNvbnRleHQ+IGJsb2JSZWdpc3RyeUNvbnRleHQg
PSBhZG9wdFB0cihzdGF0aWNfY2FzdDxCbG9iUmVnaXN0cnlDb250ZXh0Kj4oY29udGV4dCkpOwor
ICAgIGJsb2JSZWdpc3RyeSgpLmNsb3NlU3RyZWFtKGJsb2JSZWdpc3RyeUNvbnRleHQtPnVybCk7
Cit9CisKK3ZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6Y2xvc2VTdHJlYW0oY29uc3QgS1VS
TCYgdXJsKQoreworICAgIGlmIChpc01haW5UaHJlYWQoKSkKKyAgICAgICAgYmxvYlJlZ2lzdHJ5
KCkuY2xvc2VTdHJlYW0odXJsKTsKKyAgICBlbHNlIHsKKyAgICAgICAgT3duUHRyPEJsb2JSZWdp
c3RyeUNvbnRleHQ+IGNvbnRleHQgPSBhZG9wdFB0cihuZXcgQmxvYlJlZ2lzdHJ5Q29udGV4dCh1
cmwpKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZCgmY2xvc2VTdHJlYW1UYXNrLCBjb250ZXh0
LmxlYWtQdHIoKSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyU3RyZWFtVVJM
VGFzayh2b2lkKiBjb250ZXh0KQoreworICAgIE93blB0cjxCbG9iUmVnaXN0cnlDb250ZXh0PiBi
bG9iUmVnaXN0cnlDb250ZXh0ID0gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8QmxvYlJlZ2lzdHJ5Q29u
dGV4dCo+KGNvbnRleHQpKTsKKyAgICBibG9iUmVnaXN0cnkoKS51bnJlZ2lzdGVyU3RyZWFtVVJM
KGJsb2JSZWdpc3RyeUNvbnRleHQtPnVybCk7Cit9CisKK3ZvaWQgVGhyZWFkYWJsZUJsb2JSZWdp
c3RyeTo6dW5yZWdpc3RlclN0cmVhbVVSTChjb25zdCBLVVJMJiB1cmwpCit7CisgICAgaWYgKGlz
TWFpblRocmVhZCgpKQorICAgICAgICBibG9iUmVnaXN0cnkoKS51bnJlZ2lzdGVyU3RyZWFtVVJM
KHVybCk7CisgICAgZWxzZSB7CisgICAgICAgIE93blB0cjxCbG9iUmVnaXN0cnlDb250ZXh0PiBj
b250ZXh0ID0gYWRvcHRQdHIobmV3IEJsb2JSZWdpc3RyeUNvbnRleHQodXJsKSk7CisgICAgICAg
IGNhbGxPbk1haW5UaHJlYWQoJnVucmVnaXN0ZXJTdHJlYW1VUkxUYXNrLCBjb250ZXh0LmxlYWtQ
dHIoKSk7CisgICAgfQorfQorI2Vsc2UKK3ZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVn
aXN0ZXJTdHJlYW1VUkwoY29uc3QgS1VSTCYgdXJsKQoreworfQorCit2b2lkIFRocmVhZGFibGVC
bG9iUmVnaXN0cnk6OnJlZ2lzdGVyU3RyZWFtVVJMKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgc3JjVVJMKQoreworfQorCit2b2lkIFRocmVhZGFi
bGVCbG9iUmVnaXN0cnk6OmFkZERhdGFUb1N0cmVhbShjb25zdCBLVVJMJiB1cmwsIFBhc3NSZWZQ
dHI8UmF3RGF0YT4gc3RyZWFtRGF0YSkKK3sKK30KKwordm9pZCBUaHJlYWRhYmxlQmxvYlJlZ2lz
dHJ5OjpjbG9zZVN0cmVhbShjb25zdCBLVVJMJiB1cmwpCit7Cit9CisKK3ZvaWQgVGhyZWFkYWJs
ZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlclN0cmVhbVVSTChjb25zdCBLVVJMJiB1cmwpCit7Cit9
CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTSkKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaAppbmRleCBm
NjZiZDEwYzRlYjdiMzU2MWFjM2Q1MzA3YWZhMDI2NGJmYjk1NTEyLi5lZjYxZGE2M2M4ODIyMWZm
MmFmYmFiMWI1NmI4OTQwODQ0MDJiNzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxl
YXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBp
L1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaApAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEJsb2JEYXRhOwogY2xhc3MgS1VSTDsKK2NsYXNzIFJhd0RhdGE7CiBj
bGFzcyBTZWN1cml0eU9yaWdpbjsKIAogY2xhc3MgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeSB7CkBA
IC00Niw2ICs0NywxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCbG9iVVJM
KFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmIHNyY1VSTCk7CiAgICAg
c3RhdGljIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYpOwogCisgICAgc3RhdGlj
IHZvaWQgcmVnaXN0ZXJTdHJlYW1VUkwoY29uc3QgS1VSTCYpOworICAgIHN0YXRpYyB2b2lkIHJl
Z2lzdGVyU3RyZWFtVVJMKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwm
IHNyY1VSTCk7CisgICAgc3RhdGljIHZvaWQgYWRkRGF0YVRvU3RyZWFtKGNvbnN0IEtVUkwmLCBQ
YXNzUmVmUHRyPFJhd0RhdGE+KTsKKyAgICBzdGF0aWMgdm9pZCBjbG9zZVN0cmVhbShjb25zdCBL
VVJMJik7CisgICAgc3RhdGljIHZvaWQgdW5yZWdpc3RlclN0cmVhbVVSTChjb25zdCBLVVJMJik7
CisKICAgICAvLyBSZXR1cm5zIHRoZSBvcmlnaW4gZm9yIHRoZSBnaXZlbiBibG9iIFVSTC4gVGhp
cyBpcyBiZWNhdXNlIHdlIGFyZSBub3QgYWJsZSB0byBlbWJlZCB0aGUgdW5pcXVlIHNlY3VyaXR5
IG9yaWdpbiBvciB0aGUgb3JpZ2luIG9mIGZpbGUgVVJMCiAgICAgLy8gaW4gdGhlIGJsb2IgVVJM
LgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBnZXRDYWNoZWRPcmlnaW4o
Y29uc3QgS1VSTCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cu
aWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCmluZGV4IDY3MWVjNWJmMWRl
NWJhYmQ5NWUxZWU2OTQxZTM0NDc5ZjcwYjRmYjYuLjZiZTYyNThmMDk5OWY2YzNhZjRhN2QwNjQ5
YWY5NDkxOWU3OTU4ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKQEAgLTU5Myw2ICs1
OTMsNyBAQAogICAgIGF0dHJpYnV0ZSBGaWxlQ29uc3RydWN0b3IgRmlsZTsKICAgICBhdHRyaWJ1
dGUgRmlsZUxpc3RDb25zdHJ1Y3RvciBGaWxlTGlzdDsKICAgICBhdHRyaWJ1dGUgQmxvYkNvbnN0
cnVjdG9yIEJsb2I7CisgICAgW0NvbmRpdGlvbmFsPVNUUkVBTV0gYXR0cmlidXRlIFN0cmVhbUNv
bnN0cnVjdG9yIFN0cmVhbTsKIAogICAgIGF0dHJpYnV0ZSBOb2RlRmlsdGVyQ29uc3RydWN0b3Ig
Tm9kZUZpbHRlcjsKICAgICBhdHRyaWJ1dGUgUmFuZ2VDb25zdHJ1Y3RvciBSYW5nZTsKQEAgLTc5
NCw2ICs3OTUsOSBAQAogICAgIFtDb25kaXRpb25hbD1CTE9CfEZJTEVfU1lTVEVNXSBhdHRyaWJ1
dGUgRmlsZUVycm9yQ29uc3RydWN0b3IgRmlsZUVycm9yOwogICAgIFtDb25kaXRpb25hbD1CTE9C
XSBhdHRyaWJ1dGUgRmlsZVJlYWRlckNvbnN0cnVjdG9yIEZpbGVSZWFkZXI7CiAKKyAgICBbQ29u
ZGl0aW9uYWw9U1RSRUFNXSBhdHRyaWJ1dGUgU3RyZWFtRXJyb3JDb25zdHJ1Y3RvciBTdHJlYW1F
cnJvcjsKKyAgICBbQ29uZGl0aW9uYWw9U1RSRUFNXSBhdHRyaWJ1dGUgU3RyZWFtUmVhZGVyQ29u
c3RydWN0b3IgU3RyZWFtUmVhZGVyOworCiAgICAgW0NvbmRpdGlvbmFsPUJMT0JdIGF0dHJpYnV0
ZSBET01VUkxDb25zdHJ1Y3RvciBVUkw7CiAgICAgW0NvbmRpdGlvbmFsPUJMT0JdIGF0dHJpYnV0
ZSBET01VUkxDb25zdHJ1Y3RvciB3ZWJraXRVUkw7IC8vIEZJWE1FOiBkZXByZWNhdGUgdGhpcy4K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0
cnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmgKaW5k
ZXggNTI4NGE5YjBkNjAwZWM0ODgwOWVmNmJlNjY3NWViZWRmYTBhYTY0ZC4uZTM2N2RmNThhMTc2
NTU3ODY2YmFjNDQ1NTI0OTY1NDgyMGEyMmE1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeS5oCkBAIC00MCw2ICs0MCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIEJsb2JEYXRhOwogY2xhc3MgQmxvYlJlZ2lzdHJ5OwogY2xhc3MgS1VS
TDsKK2NsYXNzIFJhd0RhdGE7CiBjbGFzcyBSZXNvdXJjZUVycm9yOwogY2xhc3MgUmVzb3VyY2VI
YW5kbGU7CiBjbGFzcyBSZXNvdXJjZUhhbmRsZUNsaWVudDsKQEAgLTQ3LDIwICs0OCwzNiBAQCBj
bGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogCiAvLyBSZXR1
cm5zIGEgc2luZ2xlIGluc3RhbmNlIG9mIEJsb2JSZWdpc3RyeS4KLUJsb2JSZWdpc3RyeSYgYmxv
YlJlZ2lzdHJ5KCk7IAorQmxvYlJlZ2lzdHJ5JiBibG9iUmVnaXN0cnkoKTsKIAogLy8gQmxvYlJl
Z2lzdHJ5IGlzIG5vdCB0aHJlYWQtc2FmZS4gSXQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20g
bWFpbiB0aHJlYWQuCiBjbGFzcyBCbG9iUmVnaXN0cnkgewogcHVibGljOgogICAgIC8vIFJlZ2lz
dGVycyBhIGJsb2IgVVJMIHJlZmVycmluZyB0byB0aGUgc3BlY2lmaWVkIGJsb2IgZGF0YS4KICAg
ICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmLCBQYXNzT3duUHRyPEJs
b2JEYXRhPikgPSAwOwotICAgIAorCiAgICAgLy8gUmVnaXN0ZXJzIGEgYmxvYiBVUkwgcmVmZXJy
aW5nIHRvIHRoZSBibG9iIGRhdGEgaWRlbnRpZmllZCBieSB0aGUgc3BlY2lmaWVkIHNyY1VSTC4K
ICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJM
JiBzcmNVUkwpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyQmxvYlVSTChjb25z
dCBLVVJMJikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNl
JiwgVmVjdG9yPGNoYXI+JiBkYXRhKSA9IDA7CiAKKyNpZiBFTkFCTEUoU1RSRUFNKQorICAgIC8v
IFJlZ2lzdGVycyBhIHN0cmVhbSBVUkwgcmVmZXJyaW5nIHRvIHRoZSBzcGVjaWZpZWQgc3RyZWFt
IGRhdGEuCisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyU3RyZWFtVVJMKGNvbnN0IEtVUkwmKSA9
IDA7CisKKyAgICAvLyBSZWdpc3RlcnMgYSBzdHJlYW0gVVJMIHJlZmVycmluZyB0byB0aGUgc3Ry
ZWFtIGlkZW50aWZpZWQgYnkgdGhlIHNwZWNpZmllZCBzcmNVUkwuCisgICAgdmlydHVhbCB2b2lk
IHJlZ2lzdGVyU3RyZWFtVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJiBzcmNVUkwpID0gMDsK
KworICAgIC8vIEFkZCBkYXRhIHRvIHRoZSBzcGVjaWZpZWQgc3RyZWFtIFVSTAorICAgIHZpcnR1
YWwgdm9pZCBhZGREYXRhVG9TdHJlYW0oY29uc3QgS1VSTCYsIFBhc3NSZWZQdHI8UmF3RGF0YT4p
ID0gMDsKKworICAgIC8vIFRlbGwgdGhlIHJlZ2lzdHJ5IHRoYXQgdGhpcyBzdHJlYW0gd29uJ3Qg
Z2V0IGFueSBtb3JlIGRhdGEuCisgICAgdmlydHVhbCB2b2lkIGNsb3NlU3RyZWFtKGNvbnN0IEtV
UkwmKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlclN0cmVhbVVSTChjb25zdCBL
VVJMJikgPSAwOworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU0pCisKIHByb3RlY3RlZDoKICAgICB2
aXJ0dWFsIH5CbG9iUmVnaXN0cnkoKSB7IH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Jsb2JSZWdpc3RyeVByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQmxvYlJlZ2lzdHJ5UHJveHkuY3Bw
CmluZGV4IDEwMjQ3NTc2NmQ2N2NkMmFiZWVjNjJjNDBmZDY4MWE0NTY5NWM3NDIuLjVjNGUzY2Zk
NGU4ZGM3NWZiZDdhYzY1Y2RlNWFjZWUzYWRjYjRiMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQmxvYlJlZ2lzdHJ5UHJveHkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQmxvYlJlZ2lzdHJ5UHJv
eHkuY3BwCkBAIC03OCw2ICs3OCw0MCBAQCB2b2lkIEJsb2JSZWdpc3RyeVByb3h5Ojp1bnJlZ2lz
dGVyQmxvYlVSTChjb25zdCBLVVJMJiB1cmwpCiAgICAgICAgIG1fd2ViQmxvYlJlZ2lzdHJ5LT51
bnJlZ2lzdGVyQmxvYlVSTCh1cmwpOwogfQogCisjaWYgRU5BQkxFKFNUUkVBTSkKK3ZvaWQgQmxv
YlJlZ2lzdHJ5UHJveHk6OnJlZ2lzdGVyU3RyZWFtVVJMKGNvbnN0IEtVUkwmIHVybCkKK3sKKyAg
ICBpZiAobV93ZWJCbG9iUmVnaXN0cnkpCisgICAgICAgIG1fd2ViQmxvYlJlZ2lzdHJ5LT5yZWdp
c3RlclN0cmVhbVVSTCh1cmwpOworfQorCit2b2lkIEJsb2JSZWdpc3RyeVByb3h5OjpyZWdpc3Rl
clN0cmVhbVVSTChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIHNyY1VSTCkKK3sKKyAgICBp
ZiAobV93ZWJCbG9iUmVnaXN0cnkpCisgICAgICAgIG1fd2ViQmxvYlJlZ2lzdHJ5LT5yZWdpc3Rl
clN0cmVhbVVSTCh1cmwsIHNyY1VSTCk7Cit9CisKK3ZvaWQgQmxvYlJlZ2lzdHJ5UHJveHk6OmFk
ZERhdGFUb1N0cmVhbShjb25zdCBLVVJMJiB1cmwsIFBhc3NSZWZQdHI8UmF3RGF0YT4gc3RyZWFt
RGF0YSkKK3sKKyAgICBpZiAobV93ZWJCbG9iUmVnaXN0cnkpIHsKKyAgICAgICAgV2ViS2l0OjpX
ZWJUaHJlYWRTYWZlRGF0YSB3ZWJTdHJlYW1EYXRhKHN0cmVhbURhdGEpOworICAgICAgICBtX3dl
YkJsb2JSZWdpc3RyeS0+YWRkRGF0YVRvU3RyZWFtKHVybCwgd2ViU3RyZWFtRGF0YSk7CisgICAg
fQorfQorCit2b2lkIEJsb2JSZWdpc3RyeVByb3h5OjpjbG9zZVN0cmVhbShjb25zdCBLVVJMJiB1
cmwpCit7CisgICAgaWYgKG1fd2ViQmxvYlJlZ2lzdHJ5KQorICAgICAgICBtX3dlYkJsb2JSZWdp
c3RyeS0+Y2xvc2VTdHJlYW0odXJsKTsKK30KKwordm9pZCBCbG9iUmVnaXN0cnlQcm94eTo6dW5y
ZWdpc3RlclN0cmVhbVVSTChjb25zdCBLVVJMJiB1cmwpCit7CisgICAgaWYgKG1fd2ViQmxvYlJl
Z2lzdHJ5KQorICAgICAgICBtX3dlYkJsb2JSZWdpc3RyeS0+dW5yZWdpc3RlclN0cmVhbVVSTCh1
cmwpOworfQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU0pCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2Nocm9taXVtL0Jsb2JSZWdpc3RyeVByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2Nocm9taXVtL0Jsb2JSZWdpc3RyeVByb3h5LmgKaW5kZXggMDVjODU0ZjViYzQxZjVm
YmQyNTNjZmQyY2M5NjU5YTE1MTg4ZWU1MS4uZTk5M2RkMzQzZTgxNzliNjliM2MwY2JlNTY0ZTBh
MDNiMTNmMzA4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
aHJvbWl1bS9CbG9iUmVnaXN0cnlQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY2hyb21pdW0vQmxvYlJlZ2lzdHJ5UHJveHkuaApAQCAtNDksNiArNDksMTQgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBW
ZWN0b3I8Y2hhcj4mIGRhdGEpIHsgcmV0dXJuIGZhbHNlOyB9CiAKKyNpZiBFTkFCTEUoU1RSRUFN
KQorICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclN0cmVhbVVSTChjb25zdCBLVVJMJik7CisgICAg
dmlydHVhbCB2b2lkIHJlZ2lzdGVyU3RyZWFtVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJiBz
cmNVUkwpOworICAgIHZpcnR1YWwgdm9pZCBhZGREYXRhVG9TdHJlYW0oY29uc3QgS1VSTCYsIFBh
c3NSZWZQdHI8UmF3RGF0YT4pOworICAgIHZpcnR1YWwgdm9pZCBjbG9zZVN0cmVhbShjb25zdCBL
VVJMJik7CisgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJTdHJlYW1VUkwoY29uc3QgS1VSTCYp
OworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU0pCisKIHByaXZhdGU6CiAgICAgdmlydHVhbCB+Qmxv
YlJlZ2lzdHJ5UHJveHkoKSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hN
TEh0dHBSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAK
aW5kZXggZWUwMjQwMGVmMTdhMjI5NjZiMTM5OGIxYTRmOTgxNzRhMTczYTg5ZS4uMWNiMGIzN2Q3
NGMyNjIxY2NlMTA3YTA2YzNhZjliNzM4YThhNjhkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3QuY3BwCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4u
aCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIlN0cmVhbS5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNpbmNs
dWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZU1lbW9yeUluc3RydW1l
bnRhdGlvbi5oIgpAQCAtMzM3LDYgKzMzOCwyMSBAQCBBcnJheUJ1ZmZlciogWE1MSHR0cFJlcXVl
c3Q6OnJlc3BvbnNlQXJyYXlCdWZmZXIoRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgcmV0dXJuIG1f
cmVzcG9uc2VBcnJheUJ1ZmZlci5nZXQoKTsKIH0KIAorI2lmIEVOQUJMRShTVFJFQU0pCitTdHJl
YW0qIFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZVN0cmVhbShFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBpZiAobV9yZXNwb25zZVR5cGVDb2RlICE9IFJlc3BvbnNlVHlwZVN0cmVhbSkgeworICAg
ICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cisg
ICAgLy8gV2UgYWx3YXlzIHJldHVybiBudWxsIGJlZm9yZSBMT0FESU5HLgorICAgIGlmIChtX3N0
YXRlIDwgTE9BRElORykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9yZXNwb25z
ZVN0cmVhbS5nZXQoKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNKQorCiAjaWYgRU5BQkxF
KFhIUl9USU1FT1VUKQogdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2V0VGltZW91dCh1bnNpZ25lZCBs
b25nIHRpbWVvdXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewpAQCAtMzc4LDYgKzM5NCwxMCBAQCB2
b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZXRSZXNwb25zZVR5cGUoY29uc3QgU3RyaW5nJiByZXNwb25z
ZVR5cGUsIEV4Y2VwdGlvbkNvZGUmCiAgICAgICAgIG1fcmVzcG9uc2VUeXBlQ29kZSA9IFJlc3Bv
bnNlVHlwZUJsb2I7CiAgICAgZWxzZSBpZiAocmVzcG9uc2VUeXBlID09ICJhcnJheWJ1ZmZlciIp
CiAgICAgICAgIG1fcmVzcG9uc2VUeXBlQ29kZSA9IFJlc3BvbnNlVHlwZUFycmF5QnVmZmVyOwor
I2lmIEVOQUJMRShTVFJFQU0pCisgICAgZWxzZSBpZiAocmVzcG9uc2VUeXBlID09ICJzdHJlYW0i
KQorICAgICAgICBtX3Jlc3BvbnNlVHlwZUNvZGUgPSBSZXNwb25zZVR5cGVTdHJlYW07CisjZW5k
aWYgLy8gRU5BQkxFKFNUUkVBTSkKICAgICBlbHNlCiAgICAgICAgIGxvZ0NvbnNvbGVFcnJvcihz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCksICJYTUxIdHRwUmVxdWVzdC5yZXNwb25zZVR5cGUgXCIi
ICsgcmVzcG9uc2VUeXBlICsgIlwiIGlzIG5vdCBzdXBwb3J0ZWQuIik7CiB9CkBAIC0zOTUsNiAr
NDE1LDEwIEBAIFN0cmluZyBYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VUeXBlKCkKICAgICAgICAg
cmV0dXJuICJibG9iIjsKICAgICBjYXNlIFJlc3BvbnNlVHlwZUFycmF5QnVmZmVyOgogICAgICAg
ICByZXR1cm4gImFycmF5YnVmZmVyIjsKKyNpZiBFTkFCTEUoU1RSRUFNKQorICAgIGNhc2UgUmVz
cG9uc2VUeXBlU3RyZWFtOgorICAgICAgICByZXR1cm4gInN0cmVhbSI7CisjZW5kaWYgLy8gRU5B
QkxFKFNUUkVBTSkKICAgICB9CiAgICAgcmV0dXJuICIiOwogfQpAQCAtMTE1MSw2ICsxMTc1LDkg
QEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIGRvdWJsZSkKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmlu
aXNoWEhSTG9hZGluZyhzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRoaXMsIGlkZW50aWZpZXIs
IG1fcmVzcG9uc2VCdWlsZGVyLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpLCBtX3VybCwgbV9s
YXN0U2VuZFVSTCwgbV9sYXN0U2VuZExpbmVOdW1iZXIpOwogCisgICAgaWYgKG1fcmVzcG9uc2VT
dHJlYW0pCisgICAgICAgIG1fcmVzcG9uc2VTdHJlYW0tPm1hcmtDb21wbGV0ZSgpOworCiAgICAg
Ym9vbCBoYWRMb2FkZXIgPSBtX2xvYWRlcjsKICAgICBtX2xvYWRlciA9IDA7CiAKQEAgLTEyMjcs
NiArMTI1NCwxMiBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRSZWNlaXZlRGF0YShjb25zdCBj
aGFyKiBkYXRhLCBpbnQgbGVuKQogICAgICAgICBpZiAoIW1fYmluYXJ5UmVzcG9uc2VCdWlsZGVy
KQogICAgICAgICAgICAgbV9iaW5hcnlSZXNwb25zZUJ1aWxkZXIgPSBTaGFyZWRCdWZmZXI6OmNy
ZWF0ZSgpOwogICAgICAgICBtX2JpbmFyeVJlc3BvbnNlQnVpbGRlci0+YXBwZW5kKGRhdGEsIGxl
bik7CisjaWYgRU5BQkxFKFNUUkVBTSkKKyAgICB9IGVsc2UgaWYgKG1fcmVzcG9uc2VUeXBlQ29k
ZSA9PSBSZXNwb25zZVR5cGVTdHJlYW0pIHsKKyAgICAgICAgaWYgKCFtX3Jlc3BvbnNlU3RyZWFt
KQorICAgICAgICAgICAgbV9yZXNwb25zZVN0cmVhbSA9IFN0cmVhbTo6Y3JlYXRlKCk7CisgICAg
ICAgIG1fcmVzcG9uc2VTdHJlYW0tPmFkZERhdGEoZGF0YSwgbGVuKTsKKyNlbmRpZiAvLyBFTkFC
TEUoU1RSRUFNKQogICAgIH0KIAogICAgIGlmICghbV9lcnJvcikgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuaAppbmRleCBmNzAxZjNhYTlhMzBkMzczMWFlMjA3MWJjNTNhOTdhNjQwNTZk
Nzk1Li5jZWQ2ZWI4ODI2YzZiZGNhMTFmMzU1OWU3NzQ2MDc4N2MxMWYzNzIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3QuaApAQCAtNDQsNiArNDQsNyBAQCBjbGFzcyBET01Gb3JtRGF0
YTsKIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogY2xhc3Mg
U2hhcmVkQnVmZmVyOworY2xhc3MgU3RyZWFtOwogY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsK
IGNsYXNzIFRocmVhZGFibGVMb2FkZXI7CiAKQEAgLTY3LDcgKzY4LDEwIEBAIHB1YmxpYzoKICAg
ICAgICAgUmVzcG9uc2VUeXBlVGV4dCwgCiAgICAgICAgIFJlc3BvbnNlVHlwZURvY3VtZW50LAog
ICAgICAgICBSZXNwb25zZVR5cGVCbG9iLAotICAgICAgICBSZXNwb25zZVR5cGVBcnJheUJ1ZmZl
cgorICAgICAgICBSZXNwb25zZVR5cGVBcnJheUJ1ZmZlciwKKyNpZiBFTkFCTEUoU1RSRUFNKQor
ICAgICAgICBSZXNwb25zZVR5cGVTdHJlYW0KKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNKQogICAg
IH07CiAKICAgICB2aXJ0dWFsIHZvaWQgY29udGV4dERlc3Ryb3llZCgpOwpAQCAtMTA5LDYgKzEx
Myw5IEBAIHB1YmxpYzoKICAgICBEb2N1bWVudCogb3B0aW9uYWxSZXNwb25zZVhNTCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVzcG9uc2VEb2N1bWVudC5nZXQoKTsgfQogICAgIEJsb2IqIHJlc3BvbnNl
QmxvYihFeGNlcHRpb25Db2RlJik7CiAgICAgQmxvYiogb3B0aW9uYWxSZXNwb25zZUJsb2IoKSBj
b25zdCB7IHJldHVybiBtX3Jlc3BvbnNlQmxvYi5nZXQoKTsgfQorI2lmIEVOQUJMRShTVFJFQU0p
CisgICAgU3RyZWFtKiByZXNwb25zZVN0cmVhbShFeGNlcHRpb25Db2RlJik7CisjZW5kaWYgLy8g
RU5BQkxFKFNUUkVBTSkKICNpZiBFTkFCTEUoWEhSX1RJTUVPVVQpCiAgICAgdW5zaWduZWQgbG9u
ZyB0aW1lb3V0KCkgY29uc3QgeyByZXR1cm4gbV90aW1lb3V0TWlsbGlzZWNvbmRzOyB9CiAgICAg
dm9pZCBzZXRUaW1lb3V0KHVuc2lnbmVkIGxvbmcgdGltZW91dCwgRXhjZXB0aW9uQ29kZSYpOwpA
QCAtMjA5LDYgKzIxNiw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbG9uZyBtX3RpbWVvdXRN
aWxsaXNlY29uZHM7CiAjZW5kaWYKICAgICBSZWZQdHI8QmxvYj4gbV9yZXNwb25zZUJsb2I7Cisg
ICAgUmVmUHRyPFN0cmVhbT4gbV9yZXNwb25zZVN0cmVhbTsKIAogICAgIFJlZlB0cjxUaHJlYWRh
YmxlTG9hZGVyPiBtX2xvYWRlcjsKICAgICBTdGF0ZSBtX3N0YXRlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9mZWF0dXJlcy5neXBpCmluZGV4IGYyZTBhNDEyNzgyNTQ0ZWQ3ZTUyZjJlYTQwMTc5ODA2OGIx
MTZkMDIuLmEzMjBjYzM4M2UyMGUzMGZhODM3ZDg0M2I0ZjI5MTc5YjQwYjZhYzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKQEAgLTExMyw2ICsxMTMsNyBAQAogICAgICAgJ0VO
QUJMRV9TTU9PVEhfU0NST0xMSU5HPTEnLAogICAgICAgJ0VOQUJMRV9TUEVFQ0hfU1lOVEhFU0lT
PTAnLAogICAgICAgJ0VOQUJMRV9TUUxfREFUQUJBU0U9MScsCisgICAgICAnRU5BQkxFX1NUUkVB
TT0xJywKICAgICAgICdFTkFCTEVfU1RZTEVfU0NPUEVEPTEnLAogICAgICAgJ0VOQUJMRV9TVUJQ
SVhFTF9MQVlPVVQ9MScsCiAgICAgICAnRU5BQkxFX1NWRz08KGVuYWJsZV9zdmcpJywK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190196</attachid>
            <date>2013-02-25 21:02:14 -0800</date>
            <delta_ts>2013-02-28 02:43:00 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-110194-20130226135829.patch</filename>
            <type>text/plain</type>
            <size>62898</size>
            <attacher name="Zachary Kuznia">zork</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzOTk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBmYTVlMzBjNDc4NTcy
MjY5N2I2YjRiZTkxMjEyZTBiNGE4MWFiODJmLi4yMjg0NzExZmU3MGViZjhjNmExNDQ1YjljOTc2
YmE4NjdjMTkyMzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMy0wMi0yNSAg
WmFjaCBLdXpuaWEgIDx6b3JrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbTWV0YV0gSW1wbGVt
ZW50IFN0cmVhbSBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExMDE5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYkJsb2JSZWdpc3RyeS5oOgorCiAyMDEzLTAyLTIy
ICBBbGkgSnVtYSAgPGFqdW1hQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFJl
Z2lzdGVyIG5ld2x5LWNyZWF0ZWQgbGF5ZXJzIGZvciBhbmltYXRpb24KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBi
YzI4N2EzYmQyYWViNmJmNTcwNjI1YWNmZWM5OTFhYWY2NzM2NmRjLi5iOWEyYWQ5OTA0NWZmY2E1
MzViYTQ1YjYwN2VhNmI2NzM0NWM3Yjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIw
MTMtMDItMjUgIFphY2ggS3V6bmlhICA8em9ya0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW01l
dGFdIEltcGxlbWVudCBTdHJlYW0gQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTAxOTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIERlcml2
ZWRTb3VyY2VzLmNwcDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAq
IERlcml2ZWRTb3VyY2VzLnByaToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNTdHJlYW1SZWFkZXJDdXN0b20uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Jsb2JSZWdpc3RyeVByb3h5LmguCisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3RyZWFtUmVhZGVyQ3VzdG9tLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9CbG9iUmVn
aXN0cnlQcm94eS5oLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1
ZXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXQuaDoKKyAgICAgICAgKiBk
b20vRXZlbnRUYXJnZXRGYWN0b3J5LmluOgorICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlckxv
YWRlci5jcHA6CisgICAgICAgICogZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmg6CisgICAgICAg
ICogZmlsZWFwaS9TdHJlYW0uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2Nocm9taXVtL0Jsb2JSZWdpc3RyeVByb3h5LmguCisgICAgICAgICogZmlsZWFw
aS9TdHJlYW0uaDogQWRkZWQuCisgICAgICAgICogZmlsZWFwaS9TdHJlYW0uaWRsOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Jsb2JSZWdpc3Ry
eVByb3h5LmguCisgICAgICAgICogZmlsZWFwaS9TdHJlYW1SZWFkZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKiBmaWxlYXBpL1N0cmVhbVJlYWRlci5oOiBBZGRlZC4KKyAgICAgICAgKiBmaWxlYXBp
L1N0cmVhbVJlYWRlci5pZGw6IEFkZGVkLgorICAgICAgICAqIGZpbGVhcGkvVGhyZWFkYWJsZUJs
b2JSZWdpc3RyeS5jcHA6CisgICAgICAgICogZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5
Lmg6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuaWRsOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvQmxvYlJlZ2lzdHJ5Lmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1
bS9CbG9iUmVnaXN0cnlQcm94eS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJv
bWl1bS9CbG9iUmVnaXN0cnlQcm94eS5oOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5j
cHA6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0Lmg6CisKIDIwMTMtMDItMjUgIEplc3Np
ZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgdGhlIGxvY2Fs
aXphYmxlIHN0cmluZ3MgZmlsZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYzUzNjQ3
NmIwZTZjYzEzYThhYjllNTM5NmE3NWVkZDhiMTUzYzZiNi4uMmM4Nzk2ZTUxZTFkZTMxNjA4MTNi
MjZiZWJhYmZkYzI3ZmI4ZTk5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMiBAQAorMjAxMy0wMi0yNSAgWmFjaCBLdXpuaWEgIDx6b3JrQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBbTWV0YV0gSW1wbGVtZW50IFN0cmVhbSBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDE5NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmVhdHVyZXMuZ3lwaToKKwogMjAxMy0wMi0y
NSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJv
bWl1bV0gV2ViVmlld0ltcGw6Om1fY2xpZW50IGNhbiBiZSBudWxsIGluIHNvbWUgdW5pdCB0ZXN0
cywgY2hlY2sgaXQgYmVmb3JlIGNhbGxpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9j
aHJvbWl1bS9wdWJsaWMvV2ViQmxvYlJlZ2lzdHJ5LmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21p
dW0vcHVibGljL1dlYkJsb2JSZWdpc3RyeS5oCmluZGV4IGQ4ODJhYmFkOTlkZDM4NzgxYmU4MzNi
MTgzMDk4ZjkwYzI3MTYxMzYuLjE2ZmJlODk5NTM0NDQ3NDk5OWQzZWY3MmViOTU5MmFjYjUzMzdm
NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYlJl
Z2lzdHJ5LmgKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iUmVn
aXN0cnkuaApAQCAtMzYsNiArMzYsNyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdl
YkJsb2JEYXRhOworY2xhc3MgV2ViVGhyZWFkU2FmZURhdGE7CiBjbGFzcyBXZWJVUkw7CiAKIGNs
YXNzIFdlYkJsb2JSZWdpc3RyeSB7CkBAIC00NiwxMSArNDcsMjUgQEAgcHVibGljOgogCiAgICAg
Ly8gUmVnaXN0ZXJzIGEgYmxvYiBVUkwgcmVmZXJyaW5nIHRvIHRoZSBzcGVjaWZpZWQgYmxvYiBk
YXRhLgogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJiwgV2Vi
QmxvYkRhdGEmKSA9IDA7Ci0gICAgCisKICAgICAvLyBSZWdpc3RlcnMgYSBibG9iIFVSTCByZWZl
cnJpbmcgdG8gdGhlIGJsb2IgZGF0YSBpZGVudGlmaWVkIGJ5IHRoZSBzcGVjaWZpZWQgc3JjVVJM
LgogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJiwgY29uc3Qg
V2ViVVJMJiBzcmNVUkwpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyQmxvYlVS
TChjb25zdCBXZWJVUkwmKSA9IDA7CisKKyAgICAvLyBSZWdpc3RlcnMgYSBzdHJlYW0gVVJMIHJl
ZmVycmluZyB0byB0aGUgc3BlY2lmaWVkIHN0cmVhbSBkYXRhLgorICAgIHZpcnR1YWwgdm9pZCBy
ZWdpc3RlclN0cmVhbVVSTChjb25zdCBXZWJVUkwmKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsgfQorCisgICAgLy8gUmVnaXN0ZXJzIGEgc3RyZWFtIFVSTCByZWZlcnJpbmcgdG8gdGhl
IHN0cmVhbSBpZGVudGlmaWVkIGJ5IHRoZSBzcGVjaWZpZWQgc3JjVVJMLgorICAgIHZpcnR1YWwg
dm9pZCByZWdpc3RlclN0cmVhbVVSTChjb25zdCBXZWJVUkwmLCBjb25zdCBXZWJVUkwmIHNyY1VS
TCkgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKworICAgIC8vIEFkZCBkYXRhIHRv
IHRoZSBzcGVjaWZpZWQgc3RyZWFtIFVSTAorICAgIHZpcnR1YWwgdm9pZCBhZGREYXRhVG9TdHJl
YW0oY29uc3QgV2ViVVJMJiwgV2ViVGhyZWFkU2FmZURhdGEmKSB7IFdFQktJVF9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQorCisgICAgLy8gVGVsbCB0aGUgcmVnaXN0cnkgdGhhdCB0aGlzIHN0cmVh
bSB3b24ndCByZWNpZXZlIGFueSBtb3JlIGRhdGEuCisgICAgdmlydHVhbCB2b2lkIGZpbmFsaXpl
U3RyZWFtKGNvbnN0IFdlYlVSTCYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlclN0cmVhbVVSTChjb25zdCBXZWJVUkwmKSB7IFdF
QktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9EZXJpdmVkU291cmNlcy5jcHAKaW5kZXggMTk1YmVhY2Q1YmZmYzMxNjJmMTE5YWE0
NTJhYmU0YTNhNDc3MzU5MS4uNTMzZjk3MGVhMjEyMDcxZWVhYjQ0NzM5M2NlMzY2YzAzZGJjOTBl
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLmNwcApAQCAtMzEzLDYgKzMxMyw4IEBACiAjaW5j
bHVkZSAiSlNTdG9yYWdlSW5mb0Vycm9yQ2FsbGJhY2suY3BwIgogI2luY2x1ZGUgIkpTU3RvcmFn
ZUluZm9RdW90YUNhbGxiYWNrLmNwcCIKICNpbmNsdWRlICJKU1N0b3JhZ2VJbmZvVXNhZ2VDYWxs
YmFjay5jcHAiCisjaW5jbHVkZSAiSlNTdHJlYW0uY3BwIgorI2luY2x1ZGUgIkpTU3RyZWFtUmVh
ZGVyLmNwcCIKICNpbmNsdWRlICJKU1N0cmluZ0NhbGxiYWNrLmNwcCIKICNpbmNsdWRlICJKU1N0
eWxlTWVkaWEuY3BwIgogI2luY2x1ZGUgIkpTU3R5bGVTaGVldC5jcHAiCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYkNvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZQppbmRleCA0NzZhZDhlYmVlYTg3NGQ1MTM1ZjFmMjEwZmRjZTY1MmEzMjE4
YjNiLi41MGE5MDVhZjk2MmUwMWE5YzM0NzZkN2M2ZDk3MTU1ZjhjODM0M2U5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTI5MCw2ICsyOTAsOCBAQCBCSU5ESU5HX0lETFMgPSBc
CiAgICAgJChXZWJDb3JlKS9maWxlYXBpL0ZpbGVMaXN0LmlkbCBcCiAgICAgJChXZWJDb3JlKS9m
aWxlYXBpL0ZpbGVSZWFkZXIuaWRsIFwKICAgICAkKFdlYkNvcmUpL2ZpbGVhcGkvRmlsZVJlYWRl
clN5bmMuaWRsIFwKKyAgICAkKFdlYkNvcmUpL2ZpbGVhcGkvU3RyZWFtLmlkbCBcCisgICAgJChX
ZWJDb3JlKS9maWxlYXBpL1N0cmVhbVJlYWRlci5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9E
T01Gb3JtRGF0YS5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9ET01TZXR0YWJsZVRva2VuTGlz
dC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9ET01Ub2tlbkxpc3QuaWRsIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnByaSBiL1NvdXJjZS9XZWJDb3JlL0Rl
cml2ZWRTb3VyY2VzLnByaQppbmRleCBkMTFiZTRkOWRiYTUzOTdlYjljNDFjZmFjMzllZmQ3MjEx
NGFmZmE4Li4zODNhOWM1M2RlZjIwM2NkMjIwNTViMTllNGRiMzMwNzAxZTdkYWMwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkKKysrIGIvU291cmNlL1dlYkNv
cmUvRGVyaXZlZFNvdXJjZXMucHJpCkBAIC0yOTYsNiArMjk2LDggQEAgSURMX0JJTkRJTkdTICs9
IFwKICAgICAkJFBXRC9maWxlYXBpL0ZpbGVMaXN0LmlkbCBcCiAgICAgJCRQV0QvZmlsZWFwaS9G
aWxlUmVhZGVyLmlkbCBcCiAgICAgJCRQV0QvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5pZGwgXAor
ICAgICQkUFdEL2ZpbGVhcGkvU3RyZWFtLmlkbCBcCisgICAgJCRQV0QvZmlsZWFwaS9TdHJlYW1S
ZWFkZXIuaWRsIFwKICAgICAkJFBXRC9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaWRsIFwK
ICAgICAkJFBXRC9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5pZGwgXAogICAgICQkUFdEL2h0bWwv
Y2FudmFzL0RhdGFWaWV3LmlkbCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNjQxNmY4M2YyYjMwODg5
MTlmM2UzMDM5NzEyNDMzMjc3ODgzNTllOC4uZTc3NmEyODlmMWM4NDllMTk5YmU4Njk4ZmZkMmZl
MjhkOGU3NjhhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjY5LDYgKzI2OSw4IEBACiAgICAgICAg
ICAgICAnZmlsZWFwaS9GaWxlTGlzdC5pZGwnLAogICAgICAgICAgICAgJ2ZpbGVhcGkvRmlsZVJl
YWRlci5pZGwnLAogICAgICAgICAgICAgJ2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuaWRsJywKKyAg
ICAgICAgICAgICdmaWxlYXBpL1N0cmVhbS5pZGwnLAorICAgICAgICAgICAgJ2ZpbGVhcGkvU3Ry
ZWFtUmVhZGVyLmlkbCcsCiAgICAgICAgICAgICAnaHRtbC9ET01Gb3JtRGF0YS5pZGwnLAogICAg
ICAgICAgICAgJ2h0bWwvRE9NU2V0dGFibGVUb2tlbkxpc3QuaWRsJywKICAgICAgICAgICAgICdo
dG1sL0RPTVRva2VuTGlzdC5pZGwnLApAQCAtMTQxOCw2ICsxNDIwLDcgQEAKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9jdXN0b20vVjhTVkdMZW5ndGhDdXN0b20uY3BwJywKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9jdXN0b20vVjhTVkdQYXRoU2VnQ3VzdG9tLmNwcCcsCiAgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3RvcmFnZUN1c3RvbS5jcHAnLAorICAgICAgICAgICAg
J2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0cmVhbVJlYWRlckN1c3RvbS5jcHAnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0eWxlU2hlZXRDdXN0b20uY3BwJywKICAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHAnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFRyYWNrRXZlbnRDdXN0b20uY3BwJywKQEAg
LTE3ODAsNiArMTc4MywxMCBAQAogICAgICAgICAgICAgJ2ZpbGVhcGkvRmlsZVRocmVhZC5jcHAn
LAogICAgICAgICAgICAgJ2ZpbGVhcGkvRmlsZVRocmVhZC5oJywKICAgICAgICAgICAgICdmaWxl
YXBpL0ZpbGVUaHJlYWRUYXNrLmgnLAorICAgICAgICAgICAgJ2ZpbGVhcGkvU3RyZWFtLmNwcCcs
CisgICAgICAgICAgICAnZmlsZWFwaS9TdHJlYW0uaCcsCisgICAgICAgICAgICAnZmlsZWFwaS9T
dHJlYW1SZWFkZXIuY3BwJywKKyAgICAgICAgICAgICdmaWxlYXBpL1N0cmVhbVJlYWRlci5oJywK
ICAgICAgICAgICAgICdmaWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwJywKICAgICAg
ICAgICAgICdmaWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaCcsCiAgICAgICAgICAgICAn
ZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5jcHAnLApAQCAtNTg4Niw2ICs1ODkzLDcgQEAKICAg
ICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0RPTVJhbmdl
Lm1tJywKICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0RPTVJlY3QubW0nLAogICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvRE9NUmVjdEludGVybmFsLmgnLAorICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvRE9NU3RyZWFtLm1tJywKICAgICAgICAgICAgICc8KFBS
T0RVQ1RfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0RPTVNWR0FFbGVtZW50LmRlcCcsCiAg
ICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9ET01TVkdB
RWxlbWVudC5tbScsCiAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9ET01TVkdBbHRHbHlwaEVsZW1lbnQuZGVwJywKQEAgLTcxMTQsNiArNzEyMiwxMCBA
QAogICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNT
dG9yYWdlSW5mb1F1b3RhQ2FsbGJhY2suaCcsCiAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikv
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1N0b3JhZ2VJbmZvVXNhZ2VDYWxsYmFjay5jcHAnLAog
ICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTdG9y
YWdlSW5mb1VzYWdlQ2FsbGJhY2suaCcsCisgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU1N0cmVhbS5jcHAnLAorICAgICAgICAgICAgJzwoUFJPRFVD
VF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTdHJlYW0uaCcsCisgICAgICAgICAgICAn
PChQUk9EVUNUX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1N0cmVhbVJlYWRlci5jcHAn
LAorICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNT
dHJlYW1SZWFkZXIuaCcsCiAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9KU1N0eWxlTWVkaWEuY3BwJywKICAgICAgICAgICAgICc8KFBST0RVQ1RfRElS
KS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU3R5bGVNZWRpYS5oJywKICAgICAgICAgICAgICc8
KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU3R5bGVTaGVldC5jcHAnLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHJlYW1SZWFkZXJDdXN0
b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHJlYW1SZWFkZXJDdXN0b20u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmFlZWRkOWNkOWIzYzM4MzJkODRmOGMxNzAyM2E4NWM2ZTY5YTk1N2MK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0cmVhbVJl
YWRlckN1c3RvbS5jcHAKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IEVOQUJMRShTVFJFQU0pCisKKyNpbmNsdWRlICJTdHJlYW1SZWFkZXIuaCIKKworI2luY2x1ZGUg
IkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU1NyZWFtUmVhZGVyLmgiCisjaW5jbHVkZSA8
d3RmL0FycmF5QnVmZmVyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworSlNWYWx1ZSBKU1N0cmVhbVJlYWRlcjo6cmVzdWx0KEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKK3sKKyAgICBTdHJlYW1SZWFkZXIqIGltcCA9IGltcGwoKTsKKyAgICBpZiAoaW1w
LT5yZWFkVHlwZSgpID09IEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRBc0FycmF5QnVmZmVyKQorICAg
ICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wLT5h
cnJheUJ1ZmZlclJlc3VsdCgpKSk7CisgICAgaWYgKGltcC0+cmVhZFR5cGUoKSA9PSBGaWxlUmVh
ZGVyTG9hZGVyOjpSZWFkQXNCbG9iKQorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wLT5ibG9iUmVzdWx0KCkpKTsKKyAgICByZXR1cm4ganNP
d25lZFN0cmluZ09yTnVsbChleGVjLCBpbXAtPnN0cmluZ1Jlc3VsdCgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0cmVhbVJlYWRlckN1c3RvbS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTdHJlYW1SZWFkZXJDdXN0
b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjMxMzE3NTcwMGQ5ZTg2MzBiMWNjZTgwNmQyZGVmMWI0OTc4NTE4
NDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhTdHJlYW1SZWFkZXJDdXN0b20uY3BwCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoU1RSRUFNKQorCisjaW5jbHVkZSAiVjhTdHJlYW1SZWFkZXIuaCIK
KworI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJWOEFycmF5
QnVmZmVyLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhCbG9iLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4U3RyZWFtUmVh
ZGVyOjpyZXN1bHRBdHRyR2V0dGVyQ3VzdG9tKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBj
b25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gaG9sZGVyID0gaW5mby5Ib2xkZXIoKTsKKyAgICBTdHJlYW1SZWFkZXIqIGltcCA9IFY4U3Ry
ZWFtUmVhZGVyOjp0b05hdGl2ZShob2xkZXIpOworICAgIGlmIChpbXAtPnJlYWRUeXBlKCkgPT0g
RmlsZVJlYWRlckxvYWRlcjo6UmVhZEFzQXJyYXlCdWZmZXIpCisgICAgICAgIHJldHVybiB0b1Y4
KGltcC0+YXJyYXlCdWZmZXJSZXN1bHQoKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRl
KCkpOworICAgIGlmIChpbXAtPnJlYWRUeXBlKCkgPT0gRmlsZVJlYWRlckxvYWRlcjo6UmVhZEFz
QmxvYikKKyAgICAgICAgcmV0dXJuIHRvVjgoaW1wLT5ibG9iUmVzdWx0KCksIGluZm8uSG9sZGVy
KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdjhTdHJpbmdPck51bGwoaW1wLT5z
dHJpbmdSZXN1bHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDdXN0b20uY3Bw
CmluZGV4IDYyMTkxNmNmNDc4ODQzODZmY2E4ZGFlNjIyNTZiNTZmOTE4NGYxZTcuLjFiYjcxOGI2
OTA5MzdjM2VhMmIyOWI0NjJlZGZmZTJlM2VjODkzYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdEN1c3RvbS5j
cHAKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJWOERPTUZvcm1EYXRhLmgiCiAjaW5jbHVk
ZSAiVjhEb2N1bWVudC5oIgogI2luY2x1ZGUgIlY4SFRNTERvY3VtZW50LmgiCisjaW5jbHVkZSAi
VjhTdHJlYW0uaCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIldvcmtlckNv
bnRleHQuaCIKICNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdC5oIgpAQCAtMTEwLDYgKzExMSwxNyBA
QCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VBdHRyR2V0
dGVyQ3VzdG9tKHY4OjpMb2NhbDx2ODo6UwogICAgICAgICAgICAgICAgIHJldHVybiBzZXRET01F
eGNlcHRpb24oZWMsIGluZm8uR2V0SXNvbGF0ZSgpKTsKICAgICAgICAgICAgIHJldHVybiB0b1Y4
RmFzdChhcnJheUJ1ZmZlciwgaW5mbywgeG1sSHR0cFJlcXVlc3QpOwogICAgICAgICB9CisKKyNp
ZiBFTkFCTEUoU1RSRUFNKQorICAgIGNhc2UgWE1MSHR0cFJlcXVlc3Q6OlJlc3BvbnNlVHlwZVN0
cmVhbToKKyAgICAgICAgeworICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
ICAgICAgICBTdHJlYW0qIHN0cmVhbSA9IHhtbEh0dHBSZXF1ZXN0LT5yZXNwb25zZVN0cmVhbShl
Yyk7CisgICAgICAgICAgICBpZiAoZWMpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNldERPTUV4
Y2VwdGlvbihlYywgaW5mby5HZXRJc29sYXRlKCkpOworICAgICAgICAgICAgcmV0dXJuIHRvVjgo
c3RyZWFtLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgICAgIH0KKyNl
bmRpZiAvLyBFTkFCTEUoU1RSRUFNKQogICAgIH0KIAogICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCmluZGV4IDdhMmUxMDBhMDU1MDUzYjBkNTViNGQx
Yzk3NmE1MGNlODIxNTg5MTkuLjYzYzFjYTBhNWJmZjlmNWJiNTAwMDliYzQ4MmVlOTgzOGFmNDY5
ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCkBAIC02NSw2ICs2NSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTaGFyZWRXb3JrZXI7CiAgICAgY2xhc3MgU2hhcmVkV29y
a2VyQ29udGV4dDsKICAgICBjbGFzcyBTb3VyY2VCdWZmZXJMaXN0OworICAgIGNsYXNzIFN0cmVh
bVJlYWRlcjsKICAgICBjbGFzcyBUZXh0VHJhY2s7CiAgICAgY2xhc3MgVGV4dFRyYWNrQ3VlOwog
ICAgIGNsYXNzIFdlYlNvY2tldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dFRhcmdldEZhY3RvcnkuaW4gYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXRGYWN0b3J5
LmluCmluZGV4IGNmNWFjZjc1YzNiZTQ5MDMwZDM4NzEyMzkzMDM4NGUxODAwNGY0YzguLmY1MWJh
ZDcxMGNlOTQzZWJmMmI4OThhZTVmMzEzMTcyMDlhNjU3MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudFRhcmdldEZhY3RvcnkuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50VGFyZ2V0RmFjdG9yeS5pbgpAQCAtMzIsNiArMzIsNyBAQCBTaGFyZWRXb3JrZXJDb250
ZXh0IGNvbmRpdGlvbmFsPVNIQVJFRF9XT1JLRVJTCiBTb3VyY2VCdWZmZXJMaXN0IGNvbmRpdGlv
bmFsPU1FRElBX1NPVVJDRQogU3BlZWNoUmVjb2duaXRpb24gY29uZGl0aW9uYWw9U0NSSVBURURf
U1BFRUNICiBTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UgY29uZGl0aW9uYWw9U1BFRUNIX1NZTlRI
RVNJUworU3RyZWFtUmVhZGVyIGNvbmRpdGlvbmFsPVNUUkVBTQogU1ZHRWxlbWVudEluc3RhbmNl
IGNvbmRpdGlvbmFsPVNWRwogVGV4dFRyYWNrIGNvbmRpdGlvbmFsPVZJREVPX1RSQUNLCiBUZXh0
VHJhY2tDdWUgY29uZGl0aW9uYWw9VklERU9fVFJBQ0sKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0ZpbGVSZWFkZXJMb2FkZXIuY3BwCmluZGV4IGFhZTUwMWU0ZTQ5N2FmY2NkNDQ4ZTBiMTRjODc3
MGFkZDU3MWM2MDYuLmZiZTVjNDQwZDYxY2U2NmU2NDQ0NzdhNzczOTA5NmRmZDdlMWVhMGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcApAQCAtNDAsNiAr
NDAsNyBAQAogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlJlc291cmNl
UmVzcG9uc2UuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVk
ZSAiU3RyZWFtLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1ZGUg
IlRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgi
CkBAIC0xMDcsNiArMTA4LDM1IEBAIHZvaWQgRmlsZVJlYWRlckxvYWRlcjo6c3RhcnQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgQmxvCiAgICAgICAgIFRo
cmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCwgcmVxdWVzdCwgKnRoaXMsIG9wdGlvbnMpOwogfQogCit2b2lkIEZpbGVSZWFkZXJM
b2FkZXI6OnN0YXJ0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQsIFN0cmVhbSogc3RyZWFtKQoreworICAgIC8vIFRoZSBibG9iIGlzIHJlYWQgYnkgcm91dGlu
ZyB0aHJvdWdoIHRoZSByZXF1ZXN0IGhhbmRsaW5nIGxheWVyIGdpdmVuIGEgdGVtcG9yYXJ5IHB1
YmxpYyB1cmwuCisgICAgbV91cmxGb3JSZWFkaW5nID0gQmxvYlVSTDo6Y3JlYXRlUHVibGljVVJM
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCkpOworICAgIGlmIChtX3Vy
bEZvclJlYWRpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgIGZhaWxlZChGaWxlRXJyb3I6OlNFQ1VS
SVRZX0VSUik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgVGhyZWFkYWJsZUJsb2JSZWdp
c3RyeTo6cmVnaXN0ZXJTdHJlYW1VUkwoc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+c2VjdXJpdHlP
cmlnaW4oKSwgbV91cmxGb3JSZWFkaW5nLCBzdHJlYW0tPnVybCgpKTsKKworICAgIC8vIENvbnN0
cnVjdCBhbmQgbG9hZCB0aGUgcmVxdWVzdC4KKyAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCht
X3VybEZvclJlYWRpbmcpOworICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7CisgICAg
aWYgKG1faGFzUmFuZ2UpCisgICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKCJSYW5n
ZSIsIFN0cmluZzo6Zm9ybWF0KCJieXRlcz0lZC0lZCIsIG1fcmFuZ2VTdGFydCwgbV9yYW5nZUVu
ZCkpOworCisgICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9uczsKKyAgICBvcHRpb25z
LnNlbmRMb2FkQ2FsbGJhY2tzID0gU2VuZENhbGxiYWNrczsKKyAgICBvcHRpb25zLnNuaWZmQ29u
dGVudCA9IERvTm90U25pZmZDb250ZW50OworICAgIG9wdGlvbnMucHJlZmxpZ2h0UG9saWN5ID0g
Q29uc2lkZXJQcmVmbGlnaHQ7CisgICAgb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzID0gQWxsb3dT
dG9yZWRDcmVkZW50aWFsczsKKyAgICBvcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9
IERlbnlDcm9zc09yaWdpblJlcXVlc3RzOworCisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBt
X2xvYWRlciA9IFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0
LCB0aGlzLCByZXF1ZXN0LCBvcHRpb25zKTsKKyAgICBlbHNlCisgICAgICAgIFRocmVhZGFibGVM
b2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwg
cmVxdWVzdCwgKnRoaXMsIG9wdGlvbnMpOworfQorCiB2b2lkIEZpbGVSZWFkZXJMb2FkZXI6OmNh
bmNlbCgpCiB7CiAgICAgbV9lcnJvckNvZGUgPSBGaWxlRXJyb3I6OkFCT1JUX0VSUjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5oIGIvU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmgKaW5kZXggZDQ4YjZiOGQ4NGQ0ZGZk
ZTU4OGVkOGM0Yzk0NjgwYjgzODk3ZmNiYi4uNjQwYzQyZjE1MTJlMTJhZGVjZDJhN2VmM2RhMTI3
N2ZmNjE5NWQyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVy
TG9hZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmgK
QEAgLTQ1LDYgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQmxvYjsKIGNsYXNz
IEZpbGVSZWFkZXJMb2FkZXJDbGllbnQ7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0Owor
Y2xhc3MgU3RyZWFtOwogY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsKIGNsYXNzIFRocmVhZGFi
bGVMb2FkZXI7CiAKQEAgLTYzLDYgKzY0LDcgQEAgcHVibGljOgogICAgIH5GaWxlUmVhZGVyTG9h
ZGVyKCk7CiAKICAgICB2b2lkIHN0YXJ0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBCbG9iKik7
CisgICAgdm9pZCBzdGFydChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU3RyZWFtKik7CiAgICAg
dm9pZCBjYW5jZWwoKTsKIAogICAgIC8vIFRocmVhZGFibGVMb2FkZXJDbGllbnQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvU3RyZWFtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZTM1YmI0ODNlYTMzZjFkNzM5MGZlNjRlN2Vh
NmE3ZWE2YWVmMTgzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9T
dHJlYW0uY3BwCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U3RyZWFtLmgiCisKKyNpbmNsdWRlICJCbG9iRGF0YS5oIgorI2luY2x1ZGUgIkJsb2JVUkwuaCIK
KyNpbmNsdWRlICJUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworU3RyZWFtOjpTdHJlYW0oKQoreworICAgIC8vIENyZWF0ZSBhIG5ldyBpbnRlcm5hbCBV
UkwgYW5kIHJlZ2lzdGVyIGl0LgorICAgIG1faW50ZXJuYWxVUkwgPSBCbG9iVVJMOjpjcmVhdGVJ
bnRlcm5hbFVSTCgpOworICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyU3RyZWFt
VVJMKG1faW50ZXJuYWxVUkwpOworfQorCitTdHJlYW06On5TdHJlYW0oKQoreworfQorCit2b2lk
IFN0cmVhbTo6YWRkRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuKQoreworICAgIFJlZlB0
cjxSYXdEYXRhPiBidWZmZXIoUmF3RGF0YTo6Y3JlYXRlKCkpOworICAgIGJ1ZmZlci0+bXV0YWJs
ZURhdGEoKS0+cmVzaXplKGxlbik7CisgICAgbWVtY3B5KGJ1ZmZlci0+bXV0YWJsZURhdGEoKS0+
ZGF0YSgpLCBkYXRhLCBsZW4pOworICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OmFkZERhdGFU
b1N0cmVhbShtX2ludGVybmFsVVJMLCBidWZmZXIpOworfQorCit2b2lkIFN0cmVhbTo6ZmluYWxp
emUoKQoreworICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OmZpbmFsaXplU3RyZWFtKG1faW50
ZXJuYWxVUkwpOworfQorCit2b2lkIFN0cmVhbTo6Y2xvc2UoKQoreworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1N0cmVhbS5o
IGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9TdHJlYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDFmMjdmZDAy
YTVlMTRiNzVhZjVhNWRlZTY5OTMxOTgwOWE3MzY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9TdHJlYW0uaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFN0cmVhbV9oCisjZGVm
aW5lIFN0cmVhbV9oCisKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiU2NyaXB0V3JhcHBh
YmxlLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworY2xhc3MgU3RyZWFtIDogcHVibGljIFNjcmlw
dFdyYXBwYWJsZSwgcHVibGljIFJlZkNvdW50ZWQ8U3RyZWFtPiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3RyZWFtPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTdHJlYW0pOworICAgIH0KKworICAgIHZpcnR1YWwgflN0cmVhbSgpOworCisg
ICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcm5hbFVSTDsgfQorICAg
IGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAgdm9p
ZCBhZGREYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW4pOworICAgIHZvaWQgZmluYWxpemUo
KTsKKworICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOworCitwcm90ZWN0ZWQ6CisgICAgU3RyZWFt
KCk7CisKKyAgICAvLyBUaGlzIGlzIGFuIGludGVybmFsIFVSTCByZWZlcnJpbmcgdG8gdGhlIHN0
cmVhbSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9iamVjdC4gSXQgc2VydmVzCisgICAgLy8g
YXMgYW4gaWRlbnRpZmllciBmb3IgdGhpcyBzdHJlYW0uIFRoZSBpbnRlcm5hbCBVUkwgaXMgbmV2
ZXIgdXNlZCB0byBzb3VyY2UgdGhlIHN0cmVhbSdzIGNvbnRlbnQKKyAgICAvLyBpbnRvIGFuIEhU
TUwgb3IgZm9yIEZpbGVSZWFkJ2luZywgcHVibGljIHN0cmVhbSBVUkxzIG11c3QgYmUgdXNlZCBm
b3IgdGhvc2UgcHVycG9zZXMuCisgICAgS1VSTCBtX2ludGVybmFsVVJMOworCisgICAgU3RyaW5n
IG1fdHlwZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFN0cmVh
bV9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvU3RyZWFtLmlkbCBiL1Nv
dXJjZS9XZWJDb3JlL2ZpbGVhcGkvU3RyZWFtLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZmIxYzJlODNlNWZk
Zjk4Yzk5ZTE3MDllZDgwNTZjNjI0YmIzOGUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9TdHJlYW0uaWRsCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitbCisgICAgQ29uZGl0aW9u
YWw9U1RSRUFNCitdIGludGVyZmFjZSBTdHJlYW0geworICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBE
T01TdHJpbmcgdHlwZTsKKworICAgIHZvaWQgY2xvc2UoKTsKK307CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL1N0cmVhbVJlYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxl
YXBpL1N0cmVhbVJlYWRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjQ0MWZiZDViOGYxYTI1ODNkNzYwYTk2
YWE0OTU4ZGVmMmE3M2E1MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvU3RyZWFtUmVhZGVyLmNwcApAQCAtMCwwICsxLDM2MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoU1RSRUFNKQorCisjaW5jbHVkZSAiU3RyZWFtUmVhZGVyLmgiCisKKyNp
bmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisj
aW5jbHVkZSAiRmlsZUVycm9yLmgiCisjaW5jbHVkZSAiUHJvZ3Jlc3NFdmVudC5oIgorI2luY2x1
ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTdHJlYW0uaCIKKyNpbmNs
dWRlIDx3dGYvQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgZG91YmxlIHByb2dyZXNzTm90aWZp
Y2F0aW9uSW50ZXJ2YWxNUyA9IDUwOworCitQYXNzUmVmUHRyPFN0cmVhbVJlYWRlcj4gU3RyZWFt
UmVhZGVyOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBS
ZWZQdHI8U3RyZWFtUmVhZGVyPiBzdHJlYW1SZWFkZXIoYWRvcHRSZWYobmV3IFN0cmVhbVJlYWRl
cihjb250ZXh0KSkpOworICAgIHN0cmVhbVJlYWRlci0+c3VzcGVuZElmTmVlZGVkKCk7CisgICAg
cmV0dXJuIHN0cmVhbVJlYWRlci5yZWxlYXNlKCk7Cit9CisKK1N0cmVhbVJlYWRlcjo6U3RyZWFt
UmVhZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgOiBBY3RpdmVET01P
YmplY3QoY29udGV4dCwgdGhpcykKKyAgICAsIG1fc3RhdGUoRU1QVFkpCisgICAgLCBtX2Fib3J0
aW5nKGZhbHNlKQorICAgICwgbV9yZWFkVHlwZShGaWxlUmVhZGVyTG9hZGVyOjpSZWFkQXNCaW5h
cnlTdHJpbmcpCisgICAgLCBtX2xhc3RQcm9ncmVzc05vdGlmaWNhdGlvblRpbWVNUygwKQorewor
fQorCitTdHJlYW1SZWFkZXI6On5TdHJlYW1SZWFkZXIoKQoreworICAgIHRlcm1pbmF0ZSgpOwor
fQorCitjb25zdCBBdG9taWNTdHJpbmcmIFN0cmVhbVJlYWRlcjo6aW50ZXJmYWNlTmFtZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JTdHJlYW1SZWFkZXI7
Cit9CisKK2Jvb2wgU3RyZWFtUmVhZGVyOjpjYW5TdXNwZW5kKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgU3RyZWFtUmVhZGVyOjpzdG9wKCkKK3sKKyAgICB0ZXJtaW5h
dGUoKTsKK30KKworCit2b2lkIFN0cmVhbVJlYWRlcjo6cmVhZEFzQmxvYihTdHJlYW0qIHN0cmVh
bSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFzdHJlYW0pCisgICAgICAgIHJldHVy
bjsKKworICAgIHJlYWRJbnRlcm5hbChzdHJlYW0sIEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRBc0Js
b2IsIDAsIGVjKTsKK30KKwordm9pZCBTdHJlYW1SZWFkZXI6OnJlYWRBc0Jsb2IoU3RyZWFtKiBz
dHJlYW0sIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhTaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBpZiAoIXN0cmVhbSB8fCBtYXhTaXplIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAg
IHJlYWRJbnRlcm5hbChzdHJlYW0sIEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRBc0Jsb2IsIG1heFNp
emUsIGVjKTsKK30KKwordm9pZCBTdHJlYW1SZWFkZXI6OnJlYWRBc0FycmF5QnVmZmVyKFN0cmVh
bSogc3RyZWFtLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIXN0cmVhbSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgcmVhZEludGVybmFsKHN0cmVhbSwgRmlsZVJlYWRlckxvYWRlcjo6
UmVhZEFzQXJyYXlCdWZmZXIsIDAsIGVjKTsKK30KKwordm9pZCBTdHJlYW1SZWFkZXI6OnJlYWRB
c0FycmF5QnVmZmVyKFN0cmVhbSogc3RyZWFtLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4U2l6ZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFzdHJlYW0gfHwgbWF4U2l6ZSA8PSAwKQor
ICAgICAgICByZXR1cm47CisKKyAgICByZWFkSW50ZXJuYWwoc3RyZWFtLCBGaWxlUmVhZGVyTG9h
ZGVyOjpSZWFkQXNBcnJheUJ1ZmZlciwgbWF4U2l6ZSwgZWMpOworfQorCit2b2lkIFN0cmVhbVJl
YWRlcjo6cmVhZEFzQmluYXJ5U3RyaW5nKFN0cmVhbSogc3RyZWFtLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBpZiAoIXN0cmVhbSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVhZEludGVy
bmFsKHN0cmVhbSwgRmlsZVJlYWRlckxvYWRlcjo6UmVhZEFzQmluYXJ5U3RyaW5nLCAwLCBlYyk7
Cit9CisKK3ZvaWQgU3RyZWFtUmVhZGVyOjpyZWFkQXNCaW5hcnlTdHJpbmcoU3RyZWFtKiBzdHJl
YW0sIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhTaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBpZiAoIXN0cmVhbSB8fCBtYXhTaXplIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIHJl
YWRJbnRlcm5hbChzdHJlYW0sIEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRBc0JpbmFyeVN0cmluZywg
bWF4U2l6ZSwgZWMpOworfQorCit2b2lkIFN0cmVhbVJlYWRlcjo6cmVhZEFzVGV4dChTdHJlYW0q
IHN0cmVhbSwgY29uc3QgU3RyaW5nJiBlbmNvZGluZywgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgaWYgKCFzdHJlYW0pCisgICAgICAgIHJldHVybjsKKworICAgIG1fZW5jb2RpbmcgPSBlbmNv
ZGluZzsKKyAgICByZWFkSW50ZXJuYWwoc3RyZWFtLCBGaWxlUmVhZGVyTG9hZGVyOjpSZWFkQXNU
ZXh0LCAwLCBlYyk7Cit9CisKK3ZvaWQgU3RyZWFtUmVhZGVyOjpyZWFkQXNUZXh0KFN0cmVhbSog
c3RyZWFtLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4U2l6
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFzdHJlYW0gfHwgbWF4U2l6ZSA8PSAw
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2VuY29kaW5nID0gZW5jb2Rpbmc7CisgICAgcmVh
ZEludGVybmFsKHN0cmVhbSwgRmlsZVJlYWRlckxvYWRlcjo6UmVhZEFzVGV4dCwgbWF4U2l6ZSwg
ZWMpOworfQorCit2b2lkIFN0cmVhbVJlYWRlcjo6cmVhZEFzVGV4dChTdHJlYW0qIHN0cmVhbSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFzdHJlYW0pCisgICAgICAgIHJldHVybjsK
KworICAgIHJlYWRJbnRlcm5hbChzdHJlYW0sIEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRBc1RleHQs
IDAsIGVjKTsKK30KKwordm9pZCBTdHJlYW1SZWFkZXI6OnJlYWRBc1RleHQoU3RyZWFtKiBzdHJl
YW0sIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhTaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBpZiAoIXN0cmVhbSB8fCBtYXhTaXplIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIHJl
YWRJbnRlcm5hbChzdHJlYW0sIEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRBc1RleHQsIG1heFNpemUs
IGVjKTsKK30KKwordm9pZCBTdHJlYW1SZWFkZXI6OnJlYWRBc0RhdGFVUkwoU3RyZWFtKiBzdHJl
YW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghc3RyZWFtKQorICAgICAgICByZXR1
cm47CisKKyAgICByZWFkSW50ZXJuYWwoc3RyZWFtLCBGaWxlUmVhZGVyTG9hZGVyOjpSZWFkQXNE
YXRhVVJMLCAwLCBlYyk7Cit9CisKK3ZvaWQgU3RyZWFtUmVhZGVyOjpyZWFkQXNEYXRhVVJMKFN0
cmVhbSogc3RyZWFtLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4U2l6ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgaWYgKCFzdHJlYW0gfHwgbWF4U2l6ZSA8PSAwKQorICAgICAgICByZXR1cm47
CisKKyAgICByZWFkSW50ZXJuYWwoc3RyZWFtLCBGaWxlUmVhZGVyTG9hZGVyOjpSZWFkQXNEYXRh
VVJMLCBtYXhTaXplLCBlYyk7Cit9CisKK3N0YXRpYyB2b2lkIGRlbGF5ZWRBYm9ydChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgU3RyZWFtUmVhZGVyKiByZWFkZXIpCit7CisgICAgcmVhZGVyLT5k
b0Fib3J0KCk7Cit9CisKK3ZvaWQgU3RyZWFtUmVhZGVyOjphYm9ydCgpCit7CisgICAgaWYgKG1f
YWJvcnRpbmcgfHwgbV9zdGF0ZSAhPSBMT0FESU5HKQorICAgICAgICByZXR1cm47CisgICAgbV9h
Ym9ydGluZyA9IHRydWU7CisKKyAgICAvLyBTY2hlZHVsZSB0byBoYXZlIHRoZSBhYm9ydCBkb25l
IGxhdGVyIHNpbmNlIGFib3J0KCkgbWlnaHQgYmUgY2FsbGVkIGZyb20gdGhlIGV2ZW50IGhhbmRs
ZXIgYW5kIHdlIGRvIG5vdCB3YW50IHRoZSByZXNvdXJjZSBsb2FkaW5nIGNvZGUgdG8gYmUgaW4g
dGhlIHN0YWNrLgorICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soCisgICAg
ICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmZGVsYXllZEFib3J0LCBBbGxvd0FjY2Vzc0xhdGVyKHRo
aXMpKSk7Cit9CisKKwordm9pZCBTdHJlYW1SZWFkZXI6OmRvQWJvcnQoKQoreworICAgIEFTU0VS
VChtX3N0YXRlICE9IERPTkUpOworCisgICAgdGVybWluYXRlKCk7CisgICAgbV9hYm9ydGluZyA9
IGZhbHNlOworCisgICAgbV9lcnJvciA9IERPTUVycm9yOjpjcmVhdGUoZ2V0RXJyb3JOYW1lKEZp
bGVFcnJvcjo6QUJPUlRfRVJSKSk7CisKKyAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLmVycm9y
RXZlbnQpOworICAgIGZpcmVFdmVudChldmVudE5hbWVzKCkuYWJvcnRFdmVudCk7CisgICAgZmly
ZUV2ZW50KGV2ZW50TmFtZXMoKS5sb2FkZW5kRXZlbnQpOworCisgICAgLy8gQWxsIHBvc3NpYmxl
IGV2ZW50cyBoYXZlIGZpcmVkIGFuZCB3ZSdyZSBkb25lLCBubyBtb3JlIHBlbmRpbmcgYWN0aXZp
dHkuCisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7Cit9CisKK3ZvaWQgU3RyZWFtUmVh
ZGVyOjp0ZXJtaW5hdGUoKQoreworICAgIGlmIChtX2xvYWRlcikgeworICAgICAgICBtX2xvYWRl
ci0+Y2FuY2VsKCk7CisgICAgICAgIG1fbG9hZGVyID0gbnVsbHB0cjsKKyAgICB9CisgICAgbV9z
dGF0ZSA9IERPTkU7Cit9CisKK3ZvaWQgU3RyZWFtUmVhZGVyOjpyZWFkSW50ZXJuYWwoU3RyZWFt
KiBzdHJlYW0sIEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRUeXBlIHR5cGUsIHVuc2lnbmVkIGxvbmcg
bG9uZyBtYXhTaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBJZiBtdWx0aXBsZSBj
b25jdXJyZW50IHJlYWQgbWV0aG9kcyBhcmUgY2FsbGVkIG9uIHRoZSBzYW1lIEZpbGVSZWFkZXIs
IElOVkFMSURfU1RBVEVfRVJSIHNob3VsZCBiZSB0aHJvd24gd2hlbiB0aGUgc3RhdGUgaXMgTE9B
RElORy4KKyAgICBpZiAobV9zdGF0ZSA9PSBMT0FESU5HKSB7CisgICAgICAgIGVjID0gSU5WQUxJ
RF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzZXRQZW5kaW5nQWN0
aXZpdHkodGhpcyk7CisKKyAgICBtX3N0cmVhbSA9IHN0cmVhbTsKKyAgICBtX3JlYWRUeXBlID0g
dHlwZTsKKyAgICBtX3N0YXRlID0gTE9BRElORzsKKyAgICBtX2Vycm9yID0gMDsKKworICAgIG1f
bG9hZGVyID0gYWRvcHRQdHIobmV3IEZpbGVSZWFkZXJMb2FkZXIobV9yZWFkVHlwZSwgdGhpcykp
OworICAgIG1fbG9hZGVyLT5zZXRFbmNvZGluZyhtX2VuY29kaW5nKTsKKyAgICBtX2xvYWRlci0+
c2V0RGF0YVR5cGUobV9zdHJlYW0tPnR5cGUoKSk7CisgICAgaWYgKG1heFNpemUpCisgICAgICAg
IG1fbG9hZGVyLT5zZXRSYW5nZSgwLCBtYXhTaXplKTsKKyAgICBtX2xvYWRlci0+c3RhcnQoc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLCBtX3N0cmVhbS5nZXQoKSk7Cit9CisKK3ZvaWQgU3RyZWFt
UmVhZGVyOjpkaWRTdGFydExvYWRpbmcoKQoreworICAgIGZpcmVFdmVudChldmVudE5hbWVzKCku
bG9hZHN0YXJ0RXZlbnQpOworfQorCit2b2lkIFN0cmVhbVJlYWRlcjo6ZGlkUmVjZWl2ZURhdGEo
KQoreworICAgIC8vIEZpcmUgdGhlIHByb2dyZXNzIGV2ZW50IGF0IGxlYXN0IGV2ZXJ5IDUwbXMu
CisgICAgZG91YmxlIG5vdyA9IGN1cnJlbnRUaW1lTVMoKTsKKyAgICBpZiAoIW1fbGFzdFByb2dy
ZXNzTm90aWZpY2F0aW9uVGltZU1TKQorICAgICAgICBtX2xhc3RQcm9ncmVzc05vdGlmaWNhdGlv
blRpbWVNUyA9IG5vdzsKKyAgICBlbHNlIGlmIChub3cgLSBtX2xhc3RQcm9ncmVzc05vdGlmaWNh
dGlvblRpbWVNUyA+IHByb2dyZXNzTm90aWZpY2F0aW9uSW50ZXJ2YWxNUykgeworICAgICAgICBm
aXJlRXZlbnQoZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQpOworICAgICAgICBtX2xhc3RQcm9n
cmVzc05vdGlmaWNhdGlvblRpbWVNUyA9IG5vdzsKKyAgICB9Cit9CisKK3ZvaWQgU3RyZWFtUmVh
ZGVyOjpkaWRGaW5pc2hMb2FkaW5nKCkKK3sKKyAgICBpZiAobV9hYm9ydGluZykKKyAgICAgICAg
cmV0dXJuOworCisgICAgQVNTRVJUKG1fc3RhdGUgIT0gRE9ORSk7CisgICAgbV9zdGF0ZSA9IERP
TkU7CisKKyAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQpOworICAgIGZp
cmVFdmVudChldmVudE5hbWVzKCkubG9hZEV2ZW50KTsKKyAgICBmaXJlRXZlbnQoZXZlbnROYW1l
cygpLmxvYWRlbmRFdmVudCk7CisKKyAgICAvLyBBbGwgcG9zc2libGUgZXZlbnRzIGhhdmUgZmly
ZWQgYW5kIHdlJ3JlIGRvbmUsIG5vIG1vcmUgcGVuZGluZyBhY3Rpdml0eS4KKyAgICB1bnNldFBl
bmRpbmdBY3Rpdml0eSh0aGlzKTsKK30KKwordm9pZCBTdHJlYW1SZWFkZXI6OmRpZEZhaWwoaW50
IGVycm9yQ29kZSkKK3sKKyAgICAvLyBJZiB3ZSdyZSBhYm9ydGluZywgZG8gbm90IHByb2NlZWQg
d2l0aCBub3JtYWwgZXJyb3IgaGFuZGxpbmcgc2luY2UgaXQgaXMgY292ZXJlZCBpbiBhYm9ydGlu
ZyBjb2RlLgorICAgIGlmIChtX2Fib3J0aW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NF
UlQobV9zdGF0ZSAhPSBET05FKTsKKyAgICBtX3N0YXRlID0gRE9ORTsKKworICAgIG1fZXJyb3Ig
PSBET01FcnJvcjo6Y3JlYXRlKGdldEVycm9yTmFtZShlcnJvckNvZGUpKTsKKyAgICBmaXJlRXZl
bnQoZXZlbnROYW1lcygpLmVycm9yRXZlbnQpOworICAgIGZpcmVFdmVudChldmVudE5hbWVzKCku
bG9hZGVuZEV2ZW50KTsKKworICAgIC8vIEFsbCBwb3NzaWJsZSBldmVudHMgaGF2ZSBmaXJlZCBh
bmQgd2UncmUgZG9uZSwgbm8gbW9yZSBwZW5kaW5nIGFjdGl2aXR5LgorICAgIHVuc2V0UGVuZGlu
Z0FjdGl2aXR5KHRoaXMpOworfQorCit2b2lkIFN0cmVhbVJlYWRlcjo6ZmlyZUV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyYgdHlwZSkKK3sKKyAgICBkaXNwYXRjaEV2ZW50KFByb2dyZXNzRXZlbnQ6
OmNyZWF0ZSh0eXBlLCB0cnVlLCBtX2xvYWRlciA/IG1fbG9hZGVyLT5ieXRlc0xvYWRlZCgpIDog
MCwgbV9sb2FkZXIgPyBtX2xvYWRlci0+dG90YWxCeXRlcygpIDogMCkpOworfQorCitQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBTdHJlYW1SZWFkZXI6OmFycmF5QnVmZmVyUmVzdWx0KCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fbG9hZGVyIHx8IG1fZXJyb3IpCisgICAgICAgIHJldHVybiAwOworICAg
IHJldHVybiBtX2xvYWRlci0+YXJyYXlCdWZmZXJSZXN1bHQoKTsKK30KKworUGFzc1JlZlB0cjxC
bG9iPiBTdHJlYW1SZWFkZXI6OmJsb2JSZXN1bHQoKSBjb25zdAoreworICAgIGlmICghbV9sb2Fk
ZXIgfHwgbV9lcnJvcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fbG9hZGVyLT5i
bG9iUmVzdWx0KCk7Cit9CisKK1N0cmluZyBTdHJlYW1SZWFkZXI6OnN0cmluZ1Jlc3VsdCgpCit7
CisgICAgaWYgKCFtX2xvYWRlciB8fCBtX2Vycm9yKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgcmV0dXJuIG1fbG9hZGVyLT5zdHJpbmdSZXN1bHQoKTsKK30KKworU3RyaW5nIFN0cmVh
bVJlYWRlcjo6Z2V0RXJyb3JOYW1lKGludCBlcnJvckNvZGUpCit7CisgICAgc3dpdGNoIChlcnJv
ckNvZGUpIHsKKyAgICBjYXNlIEZpbGVFcnJvcjo6T0s6CisgICAgICAgIHJldHVybiAiT2siOwor
ICAgIGNhc2UgRmlsZUVycm9yOjpOT1RfRk9VTkRfRVJSOgorICAgICAgICByZXR1cm4gIk5vdEZv
dW5kIjsKKyAgICBjYXNlIEZpbGVFcnJvcjo6U0VDVVJJVFlfRVJSOgorICAgICAgICByZXR1cm4g
IlNlY3VyaXR5RXJyb3IiOworICAgIGNhc2UgRmlsZUVycm9yOjpBQk9SVF9FUlI6CisgICAgICAg
IHJldHVybiAiQWJvcnRFcnJvciI7CisgICAgY2FzZSBGaWxlRXJyb3I6Ok5PVF9SRUFEQUJMRV9F
UlI6CisgICAgICAgIHJldHVybiAiTm90UmVhZGFibGVFcnJvciI7CisgICAgY2FzZSBGaWxlRXJy
b3I6OkVOQ09ESU5HX0VSUjoKKyAgICAgICAgcmV0dXJuICJFbmNvZGluZ0Vycm9yIjsKKyAgICBj
YXNlIEZpbGVFcnJvcjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOgorICAgICAgICByZXR1
cm4gIk5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIjsKKyAgICBjYXNlIEZpbGVFcnJvcjo6SU5W
QUxJRF9TVEFURV9FUlI6CisgICAgICAgIHJldHVybiAiSW52YWxpZFN0YXRlRXJyb3IiOworICAg
IGNhc2UgRmlsZUVycm9yOjpTWU5UQVhfRVJSOgorICAgICAgICByZXR1cm4gIlN5bnRheEVycm9y
IjsKKyAgICBjYXNlIEZpbGVFcnJvcjo6SU5WQUxJRF9NT0RJRklDQVRJT05fRVJSOgorICAgICAg
ICByZXR1cm4gIkludmFsaWRNb2RpZmljYXRpb25FcnJvciI7CisgICAgY2FzZSBGaWxlRXJyb3I6
OlFVT1RBX0VYQ0VFREVEX0VSUjoKKyAgICAgICAgcmV0dXJuICJRdW90YUV4Y2VlZGVkRXJyb3Ii
OworICAgIGNhc2UgRmlsZUVycm9yOjpUWVBFX01JU01BVENIX0VSUjoKKyAgICAgICAgcmV0dXJu
ICJUeXBlTWlzbWF0Y2hFcnJvciI7CisgICAgY2FzZSBGaWxlRXJyb3I6OlBBVEhfRVhJU1RTX0VS
UjoKKyAgICAgICAgcmV0dXJuICJQYXRoRXhpc3RzRXJyb3IiOworICAgIH0KKyAgICByZXR1cm4g
IlVua25vd25FcnJvciI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShTVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1N0cmVh
bVJlYWRlci5oIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9TdHJlYW1SZWFkZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wZmZlZTFmNTE2NTFjYzJiMTRjMDVhYTMzM2QyNjhmMDFkZjFhOGUxCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9TdHJlYW1SZWFkZXIuaApAQCAtMCwwICsx
LDE0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFN0cmVhbVJlYWRlcl9oCisjZGVmaW5lIFN0cmVhbVJlYWRlcl9oCisK
KyNpZiBFTkFCTEUoU1RSRUFNKQorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5j
bHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgIkRPTUVycm9yLmgiCisjaW5jbHVkZSAiRXZlbnRUYXJn
ZXQuaCIKKyNpbmNsdWRlICJGaWxlUmVhZGVyTG9hZGVyLmgiCisjaW5jbHVkZSAiRmlsZVJlYWRl
ckxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworY2xhc3MgU3Ry
ZWFtOworCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCitjbGFzcyBTdHJlYW1SZWFkZXIg
OiBwdWJsaWMgUmVmQ291bnRlZDxTdHJlYW1SZWFkZXI+LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0
LCBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1YmxpYyBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJlYW1SZWFkZXI+IGNyZWF0ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0Kik7CisKKyAgICB2aXJ0dWFsIH5TdHJlYW1SZWFkZXIoKTsKKworICAg
IGVudW0gUmVhZHlTdGF0ZSB7CisgICAgICAgIEVNUFRZID0gMCwKKyAgICAgICAgTE9BRElORyA9
IDEsCisgICAgICAgIERPTkUgPSAyCisgICAgfTsKKworICAgIHZvaWQgcmVhZEFzQmxvYihTdHJl
YW0qLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCByZWFkQXNCbG9iKFN0cmVhbSosIHVuc2ln
bmVkIGxvbmcgbG9uZyBtYXhTaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCByZWFkQXNB
cnJheUJ1ZmZlcihTdHJlYW0qLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCByZWFkQXNBcnJh
eUJ1ZmZlcihTdHJlYW0qLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4U2l6ZSwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZvaWQgcmVhZEFzQmluYXJ5U3RyaW5nKFN0cmVhbSosIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICB2b2lkIHJlYWRBc0JpbmFyeVN0cmluZyhTdHJlYW0qLCB1bnNpZ25lZCBsb25nIGxv
bmcgbWF4U2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcmVhZEFzVGV4dChTdHJlYW0q
LCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCByZWFk
QXNUZXh0KFN0cmVhbSosIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcsIHVuc2lnbmVkIGxvbmcgbG9u
ZyBtYXhTaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCByZWFkQXNUZXh0KFN0cmVhbSos
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlYWRBc1RleHQoU3RyZWFtKiwgdW5zaWduZWQg
bG9uZyBsb25nIG1heFNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlYWRBc0RhdGFV
UkwoU3RyZWFtKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcmVhZEFzRGF0YVVSTChTdHJl
YW0qLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4U2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZv
aWQgYWJvcnQoKTsKKworICAgIHZvaWQgZG9BYm9ydCgpOworCisgICAgUmVhZHlTdGF0ZSByZWFk
eVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIFBhc3NSZWZQdHI8RE9NRXJy
b3I+IGVycm9yKCkgeyByZXR1cm4gbV9lcnJvcjsgfQorICAgIEZpbGVSZWFkZXJMb2FkZXI6OlJl
YWRUeXBlIHJlYWRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9yZWFkVHlwZTsgfQorICAgIFBhc3NS
ZWZQdHI8QmxvYj4gYmxvYlJlc3VsdCgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IGFycmF5QnVmZmVyUmVzdWx0KCkgY29uc3Q7CisgICAgU3RyaW5nIHN0cmluZ1Jlc3VsdCgp
OworCisgICAgLy8gQWN0aXZlRE9NT2JqZWN0CisgICAgdmlydHVhbCBib29sIGNhblN1c3BlbmQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOworCisgICAgLy8gRXZlbnRUYXJnZXQK
KyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOyB9CisKKyAgICAvLyBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50CisgICAgdmlydHVhbCB2b2lk
IGRpZFN0YXJ0TG9hZGluZygpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YSgpOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCk7CisgICAgdmlydHVhbCB2b2lkIGRp
ZEZhaWwoaW50IGVycm9yQ29kZSk7CisKKyAgICB1c2luZyBSZWZDb3VudGVkPFN0cmVhbVJlYWRl
cj46OnJlZjsKKyAgICB1c2luZyBSZWZDb3VudGVkPFN0cmVhbVJlYWRlcj46OmRlcmVmOworCisg
ICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihsb2Fkc3RhcnQpOworICAgIERFRklO
RV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIocHJvZ3Jlc3MpOworICAgIERFRklORV9BVFRSSUJV
VEVfRVZFTlRfTElTVEVORVIobG9hZCk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNU
RU5FUihhYm9ydCk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihlcnJvcik7
CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihsb2FkZW5kKTsKKworcHJpdmF0
ZToKKyAgICBleHBsaWNpdCBTdHJlYW1SZWFkZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwor
CisgICAgLy8gRXZlbnRUYXJnZXQKKyAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7
IHJlZigpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7
IH0KKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgeyByZXR1
cm4gJm1fZXZlbnRUYXJnZXREYXRhOyB9CisgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVu
c3VyZUV2ZW50VGFyZ2V0RGF0YSgpIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsgfQorCisg
ICAgdm9pZCB0ZXJtaW5hdGUoKTsKKyAgICB2b2lkIGZpcmVFcnJvckV2ZW50KGludCBodHRwU3Rh
dHVzQ29kZSk7CisgICAgdm9pZCBmaXJlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKTsK
KworICAgIHZvaWQgcmVhZEludGVybmFsKFN0cmVhbSosIEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRU
eXBlLCB1bnNpZ25lZCBsb25nIGxvbmcsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBTdHJpbmcgZ2V0
RXJyb3JOYW1lKGludCBlcnJvckNvZGUpOworCisgICAgUmVhZHlTdGF0ZSBtX3N0YXRlOworICAg
IGJvb2wgbV9hYm9ydGluZzsKKyAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7
CisKKyAgICBSZWZQdHI8U3RyZWFtPiBtX3N0cmVhbTsKKyAgICBGaWxlUmVhZGVyTG9hZGVyOjpS
ZWFkVHlwZSBtX3JlYWRUeXBlOworICAgIFN0cmluZyBtX2VuY29kaW5nOworCisgICAgT3duUHRy
PEZpbGVSZWFkZXJMb2FkZXI+IG1fbG9hZGVyOworICAgIFJlZlB0cjxET01FcnJvcj4gbV9lcnJv
cjsKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IG1fcmF3RGF0YTsKKyAgICBkb3VibGUgbV9sYXN0
UHJvZ3Jlc3NOb3RpZmljYXRpb25UaW1lTVM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNKQorCisjZW5kaWYgLy8gU3RyZWFtUmVhZGVyX2gK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9TdHJlYW1SZWFkZXIuaWRsIGIv
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9TdHJlYW1SZWFkZXIuaWRsCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3NzA2
ZDEzYzc5MjUxODZjYjgwMTk3YzlkZmFhZWI4MDE1NDE2YmIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL1N0cmVhbVJlYWRlci5pZGwKQEAgLTAsMCArMSw4MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1sK
KyAgICBDb25kaXRpb25hbD1TVFJFQU0sCisgICAgQWN0aXZlRE9NT2JqZWN0LAorICAgIENvbnN0
cnVjdG9yLAorICAgIENhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsCisgICAgRXZlbnRU
YXJnZXQKK10gaW50ZXJmYWNlIFN0cmVhbVJlYWRlciB7CisgICAgLy8gcmVhZHkgc3RhdGVzCisg
ICAgY29uc3QgdW5zaWduZWQgc2hvcnQgRU1QVFkgPSAwOworICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IExPQURJTkcgPSAxOworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IERPTkUgPSAyOworICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCByZWFkeVN0YXRlOworCisgICAgLy8g
YXN5bmMgcmVhZCBtZXRob2RzCisgICAgdm9pZCByZWFkQXNCbG9iKGluIFN0cmVhbSBzdHJlYW0s
CisgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbF0gdW5zaWduZWQgbG9uZyBsb25nIG1h
eFNpemUpCisgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgIHZvaWQgcmVhZEFzQXJy
YXlCdWZmZXIoaW4gU3RyZWFtIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IFtPcHRpb25hbF0gdW5zaWduZWQgbG9uZyBsb25nIG1heFNpemUpCisgICAgICAgIHJhaXNlcyhE
T01FeGNlcHRpb24pOworICAgIHZvaWQgcmVhZEFzVGV4dChpbiBTdHJlYW0gc3RyZWFtLAorICAg
ICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWxdIERPTVN0cmluZyBlbmNvZGluZywKKyAgICAg
ICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsXSB1bnNpZ25lZCBsb25nIGxvbmcgbWF4U2l6ZSkK
KyAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgdm9pZCByZWFkQXNEYXRhVVJMKGlu
IFN0cmVhbSBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbF0gdW5z
aWduZWQgbG9uZyBsb25nIG1heFNpemUpCisgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwor
CisgICAgdm9pZCBhYm9ydCgpOworCisgICAgLy8gZmlsZSBkYXRhCisgICAgW0N1c3RvbV0gcmVh
ZG9ubHkgYXR0cmlidXRlIGFueSByZXN1bHQ7CisKKyAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9N
RXJyb3IgZXJyb3I7CisKKyAgICAvLyBFdmVudFRhcmdldCBpbnRlcmZhY2UKKyAgICB2b2lkIGFk
ZEV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IGluIFtPcHRpb25hbF0gYm9vbGVhbiB1c2VDYXB0dXJlKTsKKyAgICB2b2lkIHJlbW92ZUV2ZW50
TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluIFtPcHRpb25hbF0gYm9vbGVhbiB1c2VDYXB0dXJlKTsKKyAgICBib29sZWFuIGRpc3BhdGNo
RXZlbnQoaW4gRXZlbnQgZXZ0KQorICAgICAgICByYWlzZXMoRXZlbnRFeGNlcHRpb24pOworCisg
ICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25sb2Fkc3RhcnQ7CisgICAgYXR0cmlidXRlIEV2
ZW50TGlzdGVuZXIgb25wcm9ncmVzczsKKyAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmxv
YWQ7CisgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25hYm9ydDsKKyAgICBhdHRyaWJ1dGUg
RXZlbnRMaXN0ZW5lciBvbmVycm9yOworICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ubG9h
ZGVuZDsKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVC
bG9iUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJl
Z2lzdHJ5LmNwcAppbmRleCAxMGJmYjJlZTBlYWE3MDY0ZmM3ZjM3MTkxYTM2YjdiZWUzZWVjNmJl
Li42MjdmN2ZhOTczZjFmNTM4ODMyOWQ2M2Y1ZTg5NzFjZGNiYTk4MjNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAKQEAgLTU2LDYg
KzU2LDEzIEBAIHB1YmxpYzoKICAgICAgICAgdGhpcy0+YmxvYkRhdGEtPmRldGFjaEZyb21DdXJy
ZW50VGhyZWFkKCk7CiAgICAgfQogCisgICAgQmxvYlJlZ2lzdHJ5Q29udGV4dChjb25zdCBLVVJM
JiB1cmwsIFBhc3NSZWZQdHI8UmF3RGF0YT4gc3RyZWFtRGF0YSkKKyAgICAgICAgOiB1cmwodXJs
LmNvcHkoKSkKKyAgICAgICAgLCBzdHJlYW1EYXRhKHN0cmVhbURhdGEpCisgICAgeworICAgICAg
ICB0aGlzLT5ibG9iRGF0YS0+ZGV0YWNoRnJvbUN1cnJlbnRUaHJlYWQoKTsKKyAgICB9CisKICAg
ICBCbG9iUmVnaXN0cnlDb250ZXh0KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgc3JjVVJM
KQogICAgICAgICA6IHVybCh1cmwuY29weSgpKQogICAgICAgICAsIHNyY1VSTChzcmNVUkwuY29w
eSgpKQpAQCAtNzAsNiArNzcsNyBAQCBwdWJsaWM6CiAgICAgS1VSTCB1cmw7CiAgICAgS1VSTCBz
cmNVUkw7CiAgICAgT3duUHRyPEJsb2JEYXRhPiBibG9iRGF0YTsKKyAgICBSZWZQdHI8UmF3RGF0
YT4gc3RyZWFtRGF0YTsKIH07CiAKICNpZiBFTkFCTEUoQkxPQikKQEAgLTE2Miw0ICsxNzAsMTEw
IEBAIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IFRocmVhZGFibGVCbG9iUmVnaXN0cnk6Omdl
dENhY2hlZE9yaWdpbihjb25zdCBLVVJMJikKIAogI2VuZGlmIC8vIEVOQUJMKEJMT0IpCiAKKyNp
ZiBFTkFCTEUoU1RSRUFNKQorc3RhdGljIHZvaWQgcmVnaXN0ZXJTdHJlYW1VUkxUYXNrKHZvaWQq
IGNvbnRleHQpCit7CisgICAgT3duUHRyPEJsb2JSZWdpc3RyeUNvbnRleHQ+IGJsb2JSZWdpc3Ry
eUNvbnRleHQgPSBhZG9wdFB0cihzdGF0aWNfY2FzdDxCbG9iUmVnaXN0cnlDb250ZXh0Kj4oY29u
dGV4dCkpOworICAgIGJsb2JSZWdpc3RyeSgpLnJlZ2lzdGVyU3RyZWFtVVJMKGJsb2JSZWdpc3Ry
eUNvbnRleHQtPnVybCk7Cit9CisKK3ZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0
ZXJTdHJlYW1VUkwoY29uc3QgS1VSTCYgdXJsKQoreworICAgIGlmIChpc01haW5UaHJlYWQoKSkK
KyAgICAgICAgYmxvYlJlZ2lzdHJ5KCkucmVnaXN0ZXJTdHJlYW1VUkwodXJsKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgT3duUHRyPEJsb2JSZWdpc3RyeUNvbnRleHQ+IGNvbnRleHQgPSBhZG9wdFB0
cihuZXcgQmxvYlJlZ2lzdHJ5Q29udGV4dCh1cmwpKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVh
ZCgmcmVnaXN0ZXJTdHJlYW1VUkxUYXNrLCBjb250ZXh0LmxlYWtQdHIoKSk7CisgICAgfQorfQor
CitzdGF0aWMgdm9pZCByZWdpc3RlclN0cmVhbVVSTEZyb21UYXNrKHZvaWQqIGNvbnRleHQpCit7
CisgICAgT3duUHRyPEJsb2JSZWdpc3RyeUNvbnRleHQ+IGJsb2JSZWdpc3RyeUNvbnRleHQgPSBh
ZG9wdFB0cihzdGF0aWNfY2FzdDxCbG9iUmVnaXN0cnlDb250ZXh0Kj4oY29udGV4dCkpOworICAg
IGJsb2JSZWdpc3RyeSgpLnJlZ2lzdGVyU3RyZWFtVVJMKGJsb2JSZWdpc3RyeUNvbnRleHQtPnVy
bCwgYmxvYlJlZ2lzdHJ5Q29udGV4dC0+c3JjVVJMKTsKK30KKwordm9pZCBUaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5OjpyZWdpc3RlclN0cmVhbVVSTChTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIHNyY1VSTCkKK3sKKyAgICAvLyBJZiB0aGUgc3RyZWFt
IFVSTCBjb250YWlucyBudWxsIG9yaWdpbiwgYXMgaW4gdGhlIGNvbnRleHQgd2l0aCB1bmlxdWUg
c2VjdXJpdHkgb3JpZ2luLCBzYXZlIHRoZSBtYXBwaW5nIGJldHdlZW4gdXJsIGFuZCBvcmlnaW4g
c28gdGhhdCB0aGUgb3JpZ2luIGNhbiBiZSByZXRyaXZlZCB3aGVuIGRvaW5nIHNlY3VyaXR5IG9y
aWdpbiBjaGVjay4KKyAgICBpZiAob3JpZ2luICYmIEJsb2JVUkw6OmdldE9yaWdpbih1cmwpID09
ICJudWxsIikKKyAgICAgICAgb3JpZ2luTWFwKCktPmFkZCh1cmwuc3RyaW5nKCksIG9yaWdpbik7
CisKKyAgICBpZiAoaXNNYWluVGhyZWFkKCkpCisgICAgICAgIGJsb2JSZWdpc3RyeSgpLnJlZ2lz
dGVyU3RyZWFtVVJMKHVybCwgc3JjVVJMKTsKKyAgICBlbHNlIHsKKyAgICAgICAgT3duUHRyPEJs
b2JSZWdpc3RyeUNvbnRleHQ+IGNvbnRleHQgPSBhZG9wdFB0cihuZXcgQmxvYlJlZ2lzdHJ5Q29u
dGV4dCh1cmwsIHNyY1VSTCkpOworICAgICAgICBjYWxsT25NYWluVGhyZWFkKCZyZWdpc3RlclN0
cmVhbVVSTEZyb21UYXNrLCBjb250ZXh0LmxlYWtQdHIoKSk7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCBhZGRTdHJlYW1EYXRhVGFzayh2b2lkKiBjb250ZXh0KQoreworICAgIE93blB0cjxCbG9i
UmVnaXN0cnlDb250ZXh0PiBibG9iUmVnaXN0cnlDb250ZXh0ID0gYWRvcHRQdHIoc3RhdGljX2Nh
c3Q8QmxvYlJlZ2lzdHJ5Q29udGV4dCo+KGNvbnRleHQpKTsKKyAgICBibG9iUmVnaXN0cnkoKS5h
ZGREYXRhVG9TdHJlYW0oYmxvYlJlZ2lzdHJ5Q29udGV4dC0+dXJsLCBibG9iUmVnaXN0cnlDb250
ZXh0LT5zdHJlYW1EYXRhKTsKK30KKwordm9pZCBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjphZGRE
YXRhVG9TdHJlYW0oY29uc3QgS1VSTCYgdXJsLCBQYXNzUmVmUHRyPFJhd0RhdGE+IHN0cmVhbURh
dGEpCit7CisgICAgaWYgKGlzTWFpblRocmVhZCgpKQorICAgICAgICBibG9iUmVnaXN0cnkoKS5h
ZGREYXRhVG9TdHJlYW0odXJsLCBzdHJlYW1EYXRhKTsKKyAgICBlbHNlIHsKKyAgICAgICAgT3du
UHRyPEJsb2JSZWdpc3RyeUNvbnRleHQ+IGNvbnRleHQgPSBhZG9wdFB0cihuZXcgQmxvYlJlZ2lz
dHJ5Q29udGV4dCh1cmwsIHN0cmVhbURhdGEpKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZCgm
YWRkU3RyZWFtRGF0YVRhc2ssIGNvbnRleHQubGVha1B0cigpKTsKKyAgICB9Cit9CisKK3N0YXRp
YyB2b2lkIGZpbmFsaXplU3RyZWFtVGFzayh2b2lkKiBjb250ZXh0KQoreworICAgIE93blB0cjxC
bG9iUmVnaXN0cnlDb250ZXh0PiBibG9iUmVnaXN0cnlDb250ZXh0ID0gYWRvcHRQdHIoc3RhdGlj
X2Nhc3Q8QmxvYlJlZ2lzdHJ5Q29udGV4dCo+KGNvbnRleHQpKTsKKyAgICBibG9iUmVnaXN0cnko
KS5maW5hbGl6ZVN0cmVhbShibG9iUmVnaXN0cnlDb250ZXh0LT51cmwpOworfQorCit2b2lkIFRo
cmVhZGFibGVCbG9iUmVnaXN0cnk6OmZpbmFsaXplU3RyZWFtKGNvbnN0IEtVUkwmIHVybCkKK3sK
KyAgICBpZiAoaXNNYWluVGhyZWFkKCkpCisgICAgICAgIGJsb2JSZWdpc3RyeSgpLmZpbmFsaXpl
U3RyZWFtKHVybCk7CisgICAgZWxzZSB7CisgICAgICAgIE93blB0cjxCbG9iUmVnaXN0cnlDb250
ZXh0PiBjb250ZXh0ID0gYWRvcHRQdHIobmV3IEJsb2JSZWdpc3RyeUNvbnRleHQodXJsKSk7Cisg
ICAgICAgIGNhbGxPbk1haW5UaHJlYWQoJmZpbmFsaXplU3RyZWFtVGFzaywgY29udGV4dC5sZWFr
UHRyKCkpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdW5yZWdpc3RlclN0cmVhbVVSTFRhc2so
dm9pZCogY29udGV4dCkKK3sKKyAgICBPd25QdHI8QmxvYlJlZ2lzdHJ5Q29udGV4dD4gYmxvYlJl
Z2lzdHJ5Q29udGV4dCA9IGFkb3B0UHRyKHN0YXRpY19jYXN0PEJsb2JSZWdpc3RyeUNvbnRleHQq
Pihjb250ZXh0KSk7CisgICAgYmxvYlJlZ2lzdHJ5KCkudW5yZWdpc3RlclN0cmVhbVVSTChibG9i
UmVnaXN0cnlDb250ZXh0LT51cmwpOworfQorCit2b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6
OnVucmVnaXN0ZXJTdHJlYW1VUkwoY29uc3QgS1VSTCYgdXJsKQoreworICAgIGlmIChpc01haW5U
aHJlYWQoKSkKKyAgICAgICAgYmxvYlJlZ2lzdHJ5KCkudW5yZWdpc3RlclN0cmVhbVVSTCh1cmwp
OworICAgIGVsc2UgeworICAgICAgICBPd25QdHI8QmxvYlJlZ2lzdHJ5Q29udGV4dD4gY29udGV4
dCA9IGFkb3B0UHRyKG5ldyBCbG9iUmVnaXN0cnlDb250ZXh0KHVybCkpOworICAgICAgICBjYWxs
T25NYWluVGhyZWFkKCZ1bnJlZ2lzdGVyU3RyZWFtVVJMVGFzaywgY29udGV4dC5sZWFrUHRyKCkp
OworICAgIH0KK30KKyNlbHNlCit2b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVy
U3RyZWFtVVJMKGNvbnN0IEtVUkwmIHVybCkKK3sKK30KKwordm9pZCBUaHJlYWRhYmxlQmxvYlJl
Z2lzdHJ5OjpyZWdpc3RlclN0cmVhbVVSTChTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IEtVUkwmIHNyY1VSTCkKK3sKK30KKwordm9pZCBUaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5OjphZGREYXRhVG9TdHJlYW0oY29uc3QgS1VSTCYgdXJsLCBQYXNzUmVmUHRyPFJh
d0RhdGE+IHN0cmVhbURhdGEpCit7Cit9CisKK3ZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6
ZmluYWxpemVTdHJlYW0oY29uc3QgS1VSTCYgdXJsKQoreworfQorCit2b2lkIFRocmVhZGFibGVC
bG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJTdHJlYW1VUkwoY29uc3QgS1VSTCYgdXJsKQoreworfQor
I2VuZGlmIC8vIEVOQUJMRShTVFJFQU0pCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oIGIv
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmgKaW5kZXggZjY2
YmQxMGM0ZWI3YjM1NjFhYzNkNTMwN2FmYTAyNjRiZmI5NTUxMi4uMDM5ZjhmYzczNjhmN2YwNjIy
ZTA2MWMwNjAyYjM3MmMwZDBiNzY4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9U
aHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmgKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBCbG9iRGF0YTsKIGNsYXNzIEtVUkw7CitjbGFzcyBSYXdEYXRhOwogY2xh
c3MgU2VjdXJpdHlPcmlnaW47CiAKIGNsYXNzIFRocmVhZGFibGVCbG9iUmVnaXN0cnkgewpAQCAt
NDYsNiArNDcsMTIgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmxvYlVSTChT
ZWN1cml0eU9yaWdpbiosIGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJiBzcmNVUkwpOwogICAgIHN0
YXRpYyB2b2lkIHVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmKTsKIAorICAgIHN0YXRpYyB2
b2lkIHJlZ2lzdGVyU3RyZWFtVVJMKGNvbnN0IEtVUkwmKTsKKyAgICBzdGF0aWMgdm9pZCByZWdp
c3RlclN0cmVhbVVSTChTZWN1cml0eU9yaWdpbiosIGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJiBz
cmNVUkwpOworICAgIHN0YXRpYyB2b2lkIGFkZERhdGFUb1N0cmVhbShjb25zdCBLVVJMJiwgUGFz
c1JlZlB0cjxSYXdEYXRhPik7CisgICAgc3RhdGljIHZvaWQgZmluYWxpemVTdHJlYW0oY29uc3Qg
S1VSTCYpOworICAgIHN0YXRpYyB2b2lkIHVucmVnaXN0ZXJTdHJlYW1VUkwoY29uc3QgS1VSTCYp
OworCiAgICAgLy8gUmV0dXJucyB0aGUgb3JpZ2luIGZvciB0aGUgZ2l2ZW4gYmxvYiBVUkwuIFRo
aXMgaXMgYmVjYXVzZSB3ZSBhcmUgbm90IGFibGUgdG8gZW1iZWQgdGhlIHVuaXF1ZSBzZWN1cml0
eSBvcmlnaW4gb3IgdGhlIG9yaWdpbiBvZiBmaWxlIFVSTAogICAgIC8vIGluIHRoZSBibG9iIFVS
TC4KICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gZ2V0Q2FjaGVkT3JpZ2lu
KGNvbnN0IEtVUkwmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAppbmRleCA3ZTJiZWQwMWNi
NDVhMmEyYTNmNDNjMDk4MDczZWIxNDUyNmQ4MjY1Li5lMjU5MGM1YTFmMjI3NDIxZGJiNzFmMzUy
MDM5MDFiZDFjYTFhOGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCkBAIC01OTIsNiAr
NTkyLDcgQEAKICAgICBhdHRyaWJ1dGUgRmlsZUNvbnN0cnVjdG9yIEZpbGU7CiAgICAgYXR0cmli
dXRlIEZpbGVMaXN0Q29uc3RydWN0b3IgRmlsZUxpc3Q7CiAgICAgYXR0cmlidXRlIEJsb2JDb25z
dHJ1Y3RvciBCbG9iOworICAgIFtDb25kaXRpb25hbD1TVFJFQU1dIGF0dHJpYnV0ZSBTdHJlYW1D
b25zdHJ1Y3RvciBTdHJlYW07CiAKICAgICBhdHRyaWJ1dGUgTm9kZUZpbHRlckNvbnN0cnVjdG9y
IE5vZGVGaWx0ZXI7CiAgICAgYXR0cmlidXRlIFJhbmdlQ29uc3RydWN0b3IgUmFuZ2U7CkBAIC03
OTMsNiArNzk0LDggQEAKICAgICBbQ29uZGl0aW9uYWw9QkxPQnxGSUxFX1NZU1RFTV0gYXR0cmli
dXRlIEZpbGVFcnJvckNvbnN0cnVjdG9yIEZpbGVFcnJvcjsKICAgICBbQ29uZGl0aW9uYWw9QkxP
Ql0gYXR0cmlidXRlIEZpbGVSZWFkZXJDb25zdHJ1Y3RvciBGaWxlUmVhZGVyOwogCisgICAgW0Nv
bmRpdGlvbmFsPVNUUkVBTV0gYXR0cmlidXRlIFN0cmVhbVJlYWRlckNvbnN0cnVjdG9yIFN0cmVh
bVJlYWRlcjsKKwogICAgIFtDb25kaXRpb25hbD1CTE9CXSBhdHRyaWJ1dGUgRE9NVVJMQ29uc3Ry
dWN0b3IgVVJMOwogICAgIFtDb25kaXRpb25hbD1CTE9CXSBhdHRyaWJ1dGUgRE9NVVJMQ29uc3Ry
dWN0b3Igd2Via2l0VVJMOyAvLyBGSVhNRTogZGVwcmVjYXRlIHRoaXMuCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeS5oCmluZGV4IDgzYjE1N2U0Y2Mw
Y2I1YTFhNGZiZGQ5NWJlYmM1ODkzMWMzMTEwNWQuLmE4MjdjMmE5MTkwOTc4MmE3NDZhNmQ0OGRi
Yjk4ZTUwMjcxMzk1NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvQmxvYlJlZ2lzdHJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9C
bG9iUmVnaXN0cnkuaApAQCAtNDAsNiArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBCbG9iRGF0YTsKIGNsYXNzIEJsb2JSZWdpc3RyeTsKIGNsYXNzIEtVUkw7CitjbGFzcyBSYXdE
YXRhOwogY2xhc3MgUmVzb3VyY2VFcnJvcjsKIGNsYXNzIFJlc291cmNlSGFuZGxlOwogY2xhc3Mg
UmVzb3VyY2VIYW5kbGVDbGllbnQ7CkBAIC00NywxOSArNDgsMzUgQEAgY2xhc3MgUmVzb3VyY2VS
ZXF1ZXN0OwogY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKIAogLy8gUmV0dXJucyBhIHNpbmdsZSBp
bnN0YW5jZSBvZiBCbG9iUmVnaXN0cnkuCi1CbG9iUmVnaXN0cnkmIGJsb2JSZWdpc3RyeSgpOyAK
K0Jsb2JSZWdpc3RyeSYgYmxvYlJlZ2lzdHJ5KCk7CiAKIC8vIEJsb2JSZWdpc3RyeSBpcyBub3Qg
dGhyZWFkLXNhZmUuIEl0IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIG1haW4gdGhyZWFkLgog
Y2xhc3MgQmxvYlJlZ2lzdHJ5IHsKIHB1YmxpYzoKICAgICAvLyBSZWdpc3RlcnMgYSBibG9iIFVS
TCByZWZlcnJpbmcgdG8gdGhlIHNwZWNpZmllZCBibG9iIGRhdGEuCiAgICAgdmlydHVhbCB2b2lk
IHJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiwgUGFzc093blB0cjxCbG9iRGF0YT4pID0gMDsK
LSAgICAKKwogICAgIC8vIFJlZ2lzdGVycyBhIGJsb2IgVVJMIHJlZmVycmluZyB0byB0aGUgYmxv
YiBkYXRhIGlkZW50aWZpZWQgYnkgdGhlIHNwZWNpZmllZCBzcmNVUkwuCiAgICAgdmlydHVhbCB2
b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYgc3JjVVJMKSA9IDA7
CiAKICAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYpID0gMDsK
IAorI2lmIEVOQUJMRShTVFJFQU0pCisgICAgLy8gUmVnaXN0ZXJzIGEgc3RyZWFtIFVSTCByZWZl
cnJpbmcgdG8gdGhlIHNwZWNpZmllZCBzdHJlYW0gZGF0YS4KKyAgICB2aXJ0dWFsIHZvaWQgcmVn
aXN0ZXJTdHJlYW1VUkwoY29uc3QgS1VSTCYpID0gMDsKKworICAgIC8vIFJlZ2lzdGVycyBhIHN0
cmVhbSBVUkwgcmVmZXJyaW5nIHRvIHRoZSBzdHJlYW0gaWRlbnRpZmllZCBieSB0aGUgc3BlY2lm
aWVkIHNyY1VSTC4KKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJTdHJlYW1VUkwoY29uc3QgS1VS
TCYsIGNvbnN0IEtVUkwmIHNyY1VSTCkgPSAwOworCisgICAgLy8gQWRkIGRhdGEgdG8gdGhlIHNw
ZWNpZmllZCBzdHJlYW0gVVJMCisgICAgdmlydHVhbCB2b2lkIGFkZERhdGFUb1N0cmVhbShjb25z
dCBLVVJMJiwgUGFzc1JlZlB0cjxSYXdEYXRhPikgPSAwOworCisgICAgLy8gVGVsbCB0aGUgcmVn
aXN0cnkgdGhhdCB0aGlzIHN0cmVhbSB3b24ndCBnZXQgYW55IG1vcmUgZGF0YS4KKyAgICB2aXJ0
dWFsIHZvaWQgZmluYWxpemVTdHJlYW0oY29uc3QgS1VSTCYpID0gMDsKKworICAgIHZpcnR1YWwg
dm9pZCB1bnJlZ2lzdGVyU3RyZWFtVVJMKGNvbnN0IEtVUkwmKSA9IDA7CisjZW5kaWYgLy8gRU5B
QkxFKFNUUkVBTSkKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkJsb2JSZWdpc3RyeSgpIHsg
fQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21p
dW0vQmxvYlJlZ2lzdHJ5UHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jaHJvbWl1bS9CbG9iUmVnaXN0cnlQcm94eS5jcHAKaW5kZXggMTAyNDc1NzY2ZDY3Y2QyYWJl
ZWM2MmM0MGZkNjgxYTQ1Njk1Yzc0Mi4uZmM1MjYzNzQ2OTBiOGY1Mzg4MTU3ZWY5ODVmN2Q2MjRm
NDU4ZmU2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJv
bWl1bS9CbG9iUmVnaXN0cnlQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jaHJvbWl1bS9CbG9iUmVnaXN0cnlQcm94eS5jcHAKQEAgLTc4LDYgKzc4LDQwIEBA
IHZvaWQgQmxvYlJlZ2lzdHJ5UHJveHk6OnVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmIHVy
bCkKICAgICAgICAgbV93ZWJCbG9iUmVnaXN0cnktPnVucmVnaXN0ZXJCbG9iVVJMKHVybCk7CiB9
CiAKKyNpZiBFTkFCTEUoU1RSRUFNKQordm9pZCBCbG9iUmVnaXN0cnlQcm94eTo6cmVnaXN0ZXJT
dHJlYW1VUkwoY29uc3QgS1VSTCYgdXJsKQoreworICAgIGlmIChtX3dlYkJsb2JSZWdpc3RyeSkK
KyAgICAgICAgbV93ZWJCbG9iUmVnaXN0cnktPnJlZ2lzdGVyU3RyZWFtVVJMKHVybCk7Cit9CisK
K3ZvaWQgQmxvYlJlZ2lzdHJ5UHJveHk6OnJlZ2lzdGVyU3RyZWFtVVJMKGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgS1VSTCYgc3JjVVJMKQoreworICAgIGlmIChtX3dlYkJsb2JSZWdpc3RyeSkKKyAg
ICAgICAgbV93ZWJCbG9iUmVnaXN0cnktPnJlZ2lzdGVyU3RyZWFtVVJMKHVybCwgc3JjVVJMKTsK
K30KKwordm9pZCBCbG9iUmVnaXN0cnlQcm94eTo6YWRkRGF0YVRvU3RyZWFtKGNvbnN0IEtVUkwm
IHVybCwgUGFzc1JlZlB0cjxSYXdEYXRhPiBzdHJlYW1EYXRhKQoreworICAgIGlmIChtX3dlYkJs
b2JSZWdpc3RyeSkgeworICAgICAgICBXZWJLaXQ6OldlYlRocmVhZFNhZmVEYXRhIHdlYlN0cmVh
bURhdGEoc3RyZWFtRGF0YSk7CisgICAgICAgIG1fd2ViQmxvYlJlZ2lzdHJ5LT5hZGREYXRhVG9T
dHJlYW0odXJsLCB3ZWJTdHJlYW1EYXRhKTsKKyAgICB9Cit9CisKK3ZvaWQgQmxvYlJlZ2lzdHJ5
UHJveHk6OmZpbmFsaXplU3RyZWFtKGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBpZiAobV93ZWJC
bG9iUmVnaXN0cnkpCisgICAgICAgIG1fd2ViQmxvYlJlZ2lzdHJ5LT5maW5hbGl6ZVN0cmVhbSh1
cmwpOworfQorCit2b2lkIEJsb2JSZWdpc3RyeVByb3h5Ojp1bnJlZ2lzdGVyU3RyZWFtVVJMKGNv
bnN0IEtVUkwmIHVybCkKK3sKKyAgICBpZiAobV93ZWJCbG9iUmVnaXN0cnkpCisgICAgICAgIG1f
d2ViQmxvYlJlZ2lzdHJ5LT51bnJlZ2lzdGVyU3RyZWFtVVJMKHVybCk7Cit9CisjZW5kaWYgLy8g
RU5BQkxFKFNUUkVBTSkKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQmxvYlJlZ2lz
dHJ5UHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQmxv
YlJlZ2lzdHJ5UHJveHkuaAppbmRleCA5ZjRhNGMzNTEyMTM2MWE2ODBiZGZkNDQxMTE4NDcxODAz
MTNkNDA0Li45M2ZmYzA1NWQ4YjA2YWNmYzAyMDRkZWI1ZmZmOTk3MjJhYTkyZTczIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Jsb2JSZWdpc3Ry
eVByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9C
bG9iUmVnaXN0cnlQcm94eS5oCkBAIC00Nyw2ICs0NywxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYgc3JjVVJMKTsK
ICAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYpOwogCisjaWYg
RU5BQkxFKFNUUkVBTSkKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJTdHJlYW1VUkwoY29uc3Qg
S1VSTCYpOworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclN0cmVhbVVSTChjb25zdCBLVVJMJiwg
Y29uc3QgS1VSTCYgc3JjVVJMKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRGF0YVRvU3RyZWFtKGNv
bnN0IEtVUkwmLCBQYXNzUmVmUHRyPFJhd0RhdGE+KTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxp
emVTdHJlYW0oY29uc3QgS1VSTCYpOworICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyU3RyZWFt
VVJMKGNvbnN0IEtVUkwmKTsKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNKQorCiBwcml2YXRlOgog
ICAgIHZpcnR1YWwgfkJsb2JSZWdpc3RyeVByb3h5KCkgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwCmluZGV4IGVlMDI0MDBlZjE3YTIyOTY2YjEzOThiMWE0Zjk4MTc0YTE3
M2E4OWUuLjhmMmMxZGE4MmY2OThhNzY3ZTg3ODBmYmU0NTRlZTQyM2JkNTRlNDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJTdHJlYW0uaCIKICNpbmNsdWRlICJUZXh0UmVzb3VyY2VE
ZWNvZGVyLmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIgogI2luY2x1ZGUgIldlYkNv
cmVNZW1vcnlJbnN0cnVtZW50YXRpb24uaCIKQEAgLTMzNyw2ICszMzgsMjEgQEAgQXJyYXlCdWZm
ZXIqIFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZUFycmF5QnVmZmVyKEV4Y2VwdGlvbkNvZGUmIGVj
KQogICAgIHJldHVybiBtX3Jlc3BvbnNlQXJyYXlCdWZmZXIuZ2V0KCk7CiB9CiAKKyNpZiBFTkFC
TEUoU1RSRUFNKQorU3RyZWFtKiBYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VTdHJlYW0oRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKG1fcmVzcG9uc2VUeXBlQ29kZSAhPSBSZXNwb25zZVR5
cGVTdHJlYW0pIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorICAgIC8vIFdlIGFsd2F5cyByZXR1cm4gbnVsbCBiZWZvcmUgTE9BRElO
Ry4KKyAgICBpZiAobV9zdGF0ZSA8IExPQURJTkcpCisgICAgICAgIHJldHVybiAwOworCisgICAg
cmV0dXJuIG1fcmVzcG9uc2VTdHJlYW0uZ2V0KCk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVB
TSkKKwogI2lmIEVOQUJMRShYSFJfVElNRU9VVCkKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNldFRp
bWVvdXQodW5zaWduZWQgbG9uZyB0aW1lb3V0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKQEAgLTM3
OCw2ICszOTQsMTAgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2V0UmVzcG9uc2VUeXBlKGNvbnN0
IFN0cmluZyYgcmVzcG9uc2VUeXBlLCBFeGNlcHRpb25Db2RlJgogICAgICAgICBtX3Jlc3BvbnNl
VHlwZUNvZGUgPSBSZXNwb25zZVR5cGVCbG9iOwogICAgIGVsc2UgaWYgKHJlc3BvbnNlVHlwZSA9
PSAiYXJyYXlidWZmZXIiKQogICAgICAgICBtX3Jlc3BvbnNlVHlwZUNvZGUgPSBSZXNwb25zZVR5
cGVBcnJheUJ1ZmZlcjsKKyNpZiBFTkFCTEUoU1RSRUFNKQorICAgIGVsc2UgaWYgKHJlc3BvbnNl
VHlwZSA9PSAic3RyZWFtIikKKyAgICAgICAgbV9yZXNwb25zZVR5cGVDb2RlID0gUmVzcG9uc2VU
eXBlU3RyZWFtOworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU0pCiAgICAgZWxzZQogICAgICAgICBs
b2dDb25zb2xlRXJyb3Ioc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAiWE1MSHR0cFJlcXVlc3Qu
cmVzcG9uc2VUeXBlIFwiIiArIHJlc3BvbnNlVHlwZSArICJcIiBpcyBub3Qgc3VwcG9ydGVkLiIp
OwogfQpAQCAtMzk1LDYgKzQxNSwxMCBAQCBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNl
VHlwZSgpCiAgICAgICAgIHJldHVybiAiYmxvYiI7CiAgICAgY2FzZSBSZXNwb25zZVR5cGVBcnJh
eUJ1ZmZlcjoKICAgICAgICAgcmV0dXJuICJhcnJheWJ1ZmZlciI7CisjaWYgRU5BQkxFKFNUUkVB
TSkKKyAgICBjYXNlIFJlc3BvbnNlVHlwZVN0cmVhbToKKyAgICAgICAgcmV0dXJuICJzdHJlYW0i
OworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU0pCiAgICAgfQogICAgIHJldHVybiAiIjsKIH0KQEAg
LTExNTEsNiArMTE3NSw5IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZEZpbmlzaExvYWRpbmco
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBkb3VibGUpCiAKICAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZEZpbmlzaFhIUkxvYWRpbmcoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0
aGlzLCBpZGVudGlmaWVyLCBtX3Jlc3BvbnNlQnVpbGRlci50b1N0cmluZ1ByZXNlcnZlQ2FwYWNp
dHkoKSwgbV91cmwsIG1fbGFzdFNlbmRVUkwsIG1fbGFzdFNlbmRMaW5lTnVtYmVyKTsKIAorICAg
IGlmIChtX3Jlc3BvbnNlU3RyZWFtKQorICAgICAgICBtX3Jlc3BvbnNlU3RyZWFtLT5maW5hbGl6
ZSgpOworCiAgICAgYm9vbCBoYWRMb2FkZXIgPSBtX2xvYWRlcjsKICAgICBtX2xvYWRlciA9IDA7
CiAKQEAgLTEyMjcsNiArMTI1NCwxMiBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRSZWNlaXZl
RGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuKQogICAgICAgICBpZiAoIW1fYmluYXJ5UmVz
cG9uc2VCdWlsZGVyKQogICAgICAgICAgICAgbV9iaW5hcnlSZXNwb25zZUJ1aWxkZXIgPSBTaGFy
ZWRCdWZmZXI6OmNyZWF0ZSgpOwogICAgICAgICBtX2JpbmFyeVJlc3BvbnNlQnVpbGRlci0+YXBw
ZW5kKGRhdGEsIGxlbik7CisjaWYgRU5BQkxFKFNUUkVBTSkKKyAgICB9IGVsc2UgaWYgKG1fcmVz
cG9uc2VUeXBlQ29kZSA9PSBSZXNwb25zZVR5cGVTdHJlYW0pIHsKKyAgICAgICAgaWYgKCFtX3Jl
c3BvbnNlU3RyZWFtKQorICAgICAgICAgICAgbV9yZXNwb25zZVN0cmVhbSA9IFN0cmVhbTo6Y3Jl
YXRlKCk7CisgICAgICAgIG1fcmVzcG9uc2VTdHJlYW0tPmFkZERhdGEoZGF0YSwgbGVuKTsKKyNl
bmRpZiAvLyBFTkFCTEUoU1RSRUFNKQogICAgIH0KIAogICAgIGlmICghbV9lcnJvcikgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAppbmRleCBmNzAxZjNhYTlhMzBkMzczMWFlMjA3MWJj
NTNhOTdhNjQwNTZkNzk1Li5jZWQ2ZWI4ODI2YzZiZGNhMTFmMzU1OWU3NzQ2MDc4N2MxMWYzNzIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaApAQCAtNDQsNiArNDQsNyBAQCBjbGFz
cyBET01Gb3JtRGF0YTsKIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKIGNsYXNzIFNlY3VyaXR5T3Jp
Z2luOwogY2xhc3MgU2hhcmVkQnVmZmVyOworY2xhc3MgU3RyZWFtOwogY2xhc3MgVGV4dFJlc291
cmNlRGVjb2RlcjsKIGNsYXNzIFRocmVhZGFibGVMb2FkZXI7CiAKQEAgLTY3LDcgKzY4LDEwIEBA
IHB1YmxpYzoKICAgICAgICAgUmVzcG9uc2VUeXBlVGV4dCwgCiAgICAgICAgIFJlc3BvbnNlVHlw
ZURvY3VtZW50LAogICAgICAgICBSZXNwb25zZVR5cGVCbG9iLAotICAgICAgICBSZXNwb25zZVR5
cGVBcnJheUJ1ZmZlcgorICAgICAgICBSZXNwb25zZVR5cGVBcnJheUJ1ZmZlciwKKyNpZiBFTkFC
TEUoU1RSRUFNKQorICAgICAgICBSZXNwb25zZVR5cGVTdHJlYW0KKyNlbmRpZiAvLyBFTkFCTEUo
U1RSRUFNKQogICAgIH07CiAKICAgICB2aXJ0dWFsIHZvaWQgY29udGV4dERlc3Ryb3llZCgpOwpA
QCAtMTA5LDYgKzExMyw5IEBAIHB1YmxpYzoKICAgICBEb2N1bWVudCogb3B0aW9uYWxSZXNwb25z
ZVhNTCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2VEb2N1bWVudC5nZXQoKTsgfQogICAgIEJs
b2IqIHJlc3BvbnNlQmxvYihFeGNlcHRpb25Db2RlJik7CiAgICAgQmxvYiogb3B0aW9uYWxSZXNw
b25zZUJsb2IoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlQmxvYi5nZXQoKTsgfQorI2lmIEVO
QUJMRShTVFJFQU0pCisgICAgU3RyZWFtKiByZXNwb25zZVN0cmVhbShFeGNlcHRpb25Db2RlJik7
CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTSkKICNpZiBFTkFCTEUoWEhSX1RJTUVPVVQpCiAgICAg
dW5zaWduZWQgbG9uZyB0aW1lb3V0KCkgY29uc3QgeyByZXR1cm4gbV90aW1lb3V0TWlsbGlzZWNv
bmRzOyB9CiAgICAgdm9pZCBzZXRUaW1lb3V0KHVuc2lnbmVkIGxvbmcgdGltZW91dCwgRXhjZXB0
aW9uQ29kZSYpOwpAQCAtMjA5LDYgKzIxNiw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbG9u
ZyBtX3RpbWVvdXRNaWxsaXNlY29uZHM7CiAjZW5kaWYKICAgICBSZWZQdHI8QmxvYj4gbV9yZXNw
b25zZUJsb2I7CisgICAgUmVmUHRyPFN0cmVhbT4gbV9yZXNwb25zZVN0cmVhbTsKIAogICAgIFJl
ZlB0cjxUaHJlYWRhYmxlTG9hZGVyPiBtX2xvYWRlcjsKICAgICBTdGF0ZSBtX3N0YXRlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCmluZGV4IGZmNTdkNjI4ZGJmMDlkZjNiOTkxM2Vi
ZDg3ZjI2ODU0NWViYmYzMWMuLjgxNmZmMTBhODY3NDBjZjllZWEyNGQ0ZjRmZDRmMGRiYWMwMzRj
ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKQEAgLTExMyw2ICsxMTMsNyBA
QAogICAgICAgJ0VOQUJMRV9TTU9PVEhfU0NST0xMSU5HPTEnLAogICAgICAgJ0VOQUJMRV9TUEVF
Q0hfU1lOVEhFU0lTPTAnLAogICAgICAgJ0VOQUJMRV9TUUxfREFUQUJBU0U9PChlbmFibGVfc3Fs
X2RhdGFiYXNlKScsCisgICAgICAnRU5BQkxFX1NUUkVBTT0xJywKICAgICAgICdFTkFCTEVfU1RZ
TEVfU0NPUEVEPTEnLAogICAgICAgJ0VOQUJMRV9TVUJQSVhFTF9MQVlPVVQ9MScsCiAgICAgICAn
RU5BQkxFX1NWRz08KGVuYWJsZV9zdmcpJywK
</data>
<flag name="commit-queue"
          id="210823"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
      

    </bug>

</bugzilla>