<?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>148373</bug_id>
          
          <creation_ts>2015-08-23 21:26:06 -0700</creation_ts>
          <short_desc>Create WebAssembly functions</short_desc>
          <delta_ts>2015-08-28 14:07:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>148555</dependson>
          <blocked>146064</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sukolsak Sakshuwong">sukolsak</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>basile_clement</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>jberlin</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>sukolsak</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1120219</commentid>
    <comment_count>0</comment_count>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-08-23 21:26:06 -0700</bug_when>
    <thetext>Create functions from WebAssembly files generated by pack-asmjs &lt;https://github.com/WebAssembly/polyfill-prototype-1&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120226</commentid>
    <comment_count>1</comment_count>
      <attachid>259748</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-08-23 22:06:36 -0700</bug_when>
    <thetext>Created attachment 259748
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120300</commentid>
    <comment_count>2</comment_count>
      <attachid>259748</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-24 10:51:08 -0700</bug_when>
    <thetext>Comment on attachment 259748
Patch

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

&gt; Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp:68
&gt; +        Vector&lt;UnlinkedInstruction, 0, UnsafeVectorOverflow&gt; instructions;
&gt; +        instructions.append(op_enter);
&gt; +        result-&gt;setInstructions(std::make_unique&lt;UnlinkedInstructionStream&gt;(instructions));

This seems wrong. What does op_enter mean in the web assembly context? What does it mean to have bytecode at all, when we don&apos;t have web assembly bytecodes?

&gt; Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.h:185
&gt; +#if ENABLE(WEBASSEMBLY)
&gt; +    unsigned m_isWebAssemblyFunction : 1;
&gt; +    WriteBarrier&lt;JSWASMModule&gt; m_webAssemblyModule;
&gt; +    unsigned m_webAssemblyFunctionIndex;
&gt; +#endif

I think it would be clearer -- and better for memory use -- to add a webassembly subclass rather than building this into all function executables.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120377</commentid>
    <comment_count>3</comment_count>
      <attachid>259748</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-24 14:29:24 -0700</bug_when>
    <thetext>Comment on attachment 259748
Patch

I think WASMExecutable should be a subclass of ExecutableBase, just like NativeExecutable. JSFunction already knows, a little bit, how to multiplex between JavaScript code and foreign code at the executable level, so this should be a natural fit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120378</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-24 14:29:57 -0700</bug_when>
    <thetext>Also, there&apos;s no need for an unlinked WASM executable. We use unlinked for caching the result of parsing, but WASM is already in that short-hand format, and not in a text format.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121127</commentid>
    <comment_count>5</comment_count>
      <attachid>260007</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-08-26 17:33:01 -0700</bug_when>
    <thetext>Created attachment 260007
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121163</commentid>
    <comment_count>6</comment_count>
      <attachid>260021</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-08-26 19:25:54 -0700</bug_when>
    <thetext>Created attachment 260021
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121172</commentid>
    <comment_count>7</comment_count>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-08-26 20:02:15 -0700</bug_when>
    <thetext>Thanks for the review.

(In reply to comment #2)
&gt; Comment on attachment 259748 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=259748&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp:68
&gt; &gt; +        Vector&lt;UnlinkedInstruction, 0, UnsafeVectorOverflow&gt; instructions;
&gt; &gt; +        instructions.append(op_enter);
&gt; &gt; +        result-&gt;setInstructions(std::make_unique&lt;UnlinkedInstructionStream&gt;(instructions));
&gt; 
&gt; This seems wrong. What does op_enter mean in the web assembly context? What
&gt; does it mean to have bytecode at all, when we don&apos;t have web assembly
&gt; bytecodes?

It is a hacky way to circumvent assertions that assert that instructions.size() &gt; 0. Those assertions shouldn&apos;t have been called in the first place. I have removed it.

(In reply to comment #3)
&gt; Comment on attachment 259748 [details]
&gt; Patch
&gt; 
&gt; I think WASMExecutable should be a subclass of ExecutableBase, just like
&gt; NativeExecutable. JSFunction already knows, a little bit, how to multiplex
&gt; between JavaScript code and foreign code at the executable level, so this
&gt; should be a natural fit.

Done. I create WebAssemblyExecutable as a subclass of ExecutableBase.

(In reply to comment #4)
&gt; Also, there&apos;s no need for an unlinked WASM executable. We use unlinked for
&gt; caching the result of parsing, but WASM is already in that short-hand
&gt; format, and not in a text format.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121449</commentid>
    <comment_count>8</comment_count>
      <attachid>260021</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-27 15:04:22 -0700</bug_when>
    <thetext>Comment on attachment 260021
Patch

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

r=me

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:110
&gt; +        m_hash = CodeBlockHash(ownerScriptExecutable()-&gt;source(), specializationKind());

In future, it is best to separate a renaming change like this from the functionality change in the rest of this patch, and put the two in two separate patches.

&gt; Source/JavaScriptCore/runtime/Executable.cpp:614
&gt; +    m_jitCodeForCallWithArityCheck = MacroAssemblerCodePtr();
&gt; +    m_jitCodeForCallWithArityCheckAndPreserveRegs = MacroAssemblerCodePtr();

Are you going to fill these in in a separate patch? We&apos;re going to need them, I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121451</commentid>
    <comment_count>9</comment_count>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-08-27 15:32:04 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:110
&gt; &gt; +        m_hash = CodeBlockHash(ownerScriptExecutable()-&gt;source(), specializationKind());
&gt; 
&gt; In future, it is best to separate a renaming change like this from the
&gt; functionality change in the rest of this patch, and put the two in two
&gt; separate patches.

Thanks. Will do.

&gt; &gt; Source/JavaScriptCore/runtime/Executable.cpp:614
&gt; &gt; +    m_jitCodeForCallWithArityCheck = MacroAssemblerCodePtr();
&gt; &gt; +    m_jitCodeForCallWithArityCheckAndPreserveRegs = MacroAssemblerCodePtr();
&gt; 
&gt; Are you going to fill these in in a separate patch? We&apos;re going to need
&gt; them, I think.

I am going to implement the arity check in a separate patch. But these two lines will stay the same, just like what we currently have in ScriptExecutable::installCode(). These two variables are just cached results, I think. ExecutableBase::entrypointFor() will fill them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121518</commentid>
    <comment_count>10</comment_count>
      <attachid>260021</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-27 18:13:56 -0700</bug_when>
    <thetext>Comment on attachment 260021
Patch

Clearing flags on attachment: 260021

Committed r189079: &lt;http://trac.webkit.org/changeset/189079&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121519</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-27 18:14:01 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121538</commentid>
    <comment_count>12</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2015-08-27 19:15:00 -0700</bug_when>
    <thetext>This broke the build:

https://build.webkit.org/builders/Apple%20Yosemite%20Debug%20%28Build%29/builds/8266/steps/compile-webkit/logs/stdio

Ld /Volumes/Data/slave/yosemite-debug/build/WebKitBuild/Debug/libWebCoreTestSupport.dylib normal x86_64
    cd /Volumes/Data/slave/yosemite-debug/build/Source/WebCore
    export MACOSX_DEPLOYMENT_TARGET=10.10
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch x86_64 -dynamiclib -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -L/Volumes/Data/slave/yosemite-debug/build/WebKitBuild/Debug -F/Volumes/Data/slave/yosemite-debug/build/WebKitBuild/Debug -F/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/PrivateFrameworks -filelist /Volumes/Data/slave/yosemite-debug/build/WebKitBuild/WebCore.build/Debug/WebCoreTestSupport.build/Objects-normal/x86_64/WebCoreTestSupport.LinkFileList -Xlinker --no-demangle -unexported_symbols_list Configurations/WebCore.unexp -install_name @rpath/libWebCoreTestSupport.dylib -mmacosx-version-min=10.10 -stdlib=libc++ -framework CoreFoundation -framework JavaScriptCore -framework WebCore -single_module -compatibility_version 1 -current_version 602.1.1 -Xlinker -dependency_info -Xlinker /Volumes/Data/slave/yosemite-debug/build/WebKitBuild/WebCore.build/Debug/WebCoreTestSupport.build/Objects-normal/x86_64/WebCoreTestSupport_dependency_info.dat -o /Volumes/Data/slave/yosemite-debug/build/WebKitBuild/Debug/libWebCoreTestSupport.dylib
Undefined symbols for architecture x86_64:
  &quot;__ZN3JSC16ScriptExecutable6s_infoE&quot;, referenced from:
      __ZN3JSC16ScriptExecutable4infoEv in Internals.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121540</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-27 19:17:54 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 148555</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121549</commentid>
    <comment_count>14</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-27 20:20:30 -0700</bug_when>
    <thetext>I&apos;m not sure why Internals ends up referencing this value, but the easy fix is to use DECLARE_EXPORT_INFO instead of DECLARE_INFO.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121560</commentid>
    <comment_count>15</comment_count>
      <attachid>260117</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-08-27 21:03:20 -0700</bug_when>
    <thetext>Created attachment 260117
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121561</commentid>
    <comment_count>16</comment_count>
      <attachid>260117</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-08-27 21:04:02 -0700</bug_when>
    <thetext>Comment on attachment 260117
Patch

Change DECLARE_INFO in the header of ScriptExecutable to DECLARE_EXPORT_INFO and add these two paragraphs to ChangeLog:

&quot;This patch introduces WebAssemblyExecutable, a new subclass of
ExecutableBase for WebAssembly functions. CodeBlocks can now have
an owner that is not a ScriptExecutable. This patch changes the
return type of CodeBlock::ownerExecutable() from ScriptExecutable*
to ExecutableBase*. It also changes code that calls ScriptExecutable&apos;s
methods on CodeBlock::ownerExecutable() to use
CodeBlock::ownerScriptExecutable(), which does jsCast&lt;ScriptExecutable*&gt;.

Since ownerScriptExecutable() is called from WebCore and it uses
jsCast&lt;ScriptExecutable*&gt;, this patch needs to export
ScriptExecutable::info(). This should fix the build error in
https://bugs.webkit.org/show_bug.cgi?id=148555&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121591</commentid>
    <comment_count>17</comment_count>
      <attachid>260117</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-27 22:28:18 -0700</bug_when>
    <thetext>Comment on attachment 260117
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121609</commentid>
    <comment_count>18</comment_count>
      <attachid>260117</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-27 23:15:31 -0700</bug_when>
    <thetext>Comment on attachment 260117
Patch

Rejecting attachment 260117 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, &apos;--parent-command=commit-queue&apos;, 260117, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
    -&gt; origin/master
Partial-rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc ...
Currently at 189085 = e420ab2048e32c262d778affbb12442fa5bb8588
r189086 = 49e71b9cccf4025b44563d4a6384c2bb5ec86c73
r189087 = f73c3a458395e3820429806fc4696689947aaae7
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/origin/master.

Full output: http://webkit-queues.webkit.org/results/115468</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121616</commentid>
    <comment_count>19</comment_count>
      <attachid>260130</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-08-27 23:39:32 -0700</bug_when>
    <thetext>Created attachment 260130
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121617</commentid>
    <comment_count>20</comment_count>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-08-27 23:48:29 -0700</bug_when>
    <thetext>svn-apply failed because this patch &lt;https://bugs.webkit.org/show_bug.cgi?id=148559&gt;, which landed about an hour ago, introduced 5 new uses of CodeBlock::ownerExecutable(). I have fixed them accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121770</commentid>
    <comment_count>21</comment_count>
      <attachid>260130</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-28 11:36:35 -0700</bug_when>
    <thetext>Comment on attachment 260130
Patch

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

&gt; Source/WebCore/testing/Internals.cpp:1469
&gt;          executable = funcObj-&gt;jsExecutable();

FYI, during implementing ModuleProgramExecutable in my module patch, I found the following code in WebCore Internals.cpp

if (executable-&gt;isFunctionExecutable()) {
    ...
} else if (executable-&gt;isEvalExecutable())
    result.appendLiteral(&quot;eval&quot;);
else {
    ASSERT(executable-&gt;isProgramExecutable());
    ...
}

So we need to insert executable-&gt;isWebAssemblyExecutable() case here (of course, Internals is just used for the tests. So this assertion never occurs in the production I think.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121803</commentid>
    <comment_count>22</comment_count>
      <attachid>260171</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-08-28 13:14:42 -0700</bug_when>
    <thetext>Created attachment 260171
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121804</commentid>
    <comment_count>23</comment_count>
      <attachid>260171</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-28 13:19:14 -0700</bug_when>
    <thetext>Comment on attachment 260171
Patch

R=me based on ggaren&apos;s earlier review and my review of what I think is the new parts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121808</commentid>
    <comment_count>24</comment_count>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-08-28 13:24:10 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; Comment on attachment 260130 [details]
&gt;
&gt; So we need to insert executable-&gt;isWebAssemblyExecutable() case here (of
&gt; course, Internals is just used for the tests. So this assertion never occurs
&gt; in the production I think.)

Thanks. I have added the following diff to WebCore/testing/Internals.cpp

@@ -1485,10 +1485,14 @@ String Internals::parserMetaData(Deprecated::ScriptValue value)
         result.append(&apos;&quot;&apos;);
     } else if (executable-&gt;isEvalExecutable())
         result.appendLiteral(&quot;eval&quot;);
-    else {
-        ASSERT(executable-&gt;isProgramExecutable());
+    else if (executable-&gt;isProgramExecutable())
         result.appendLiteral(&quot;program&quot;);
-    }
+#if ENABLE(WEBASSEMBLY)
+    else if (executable-&gt;isWebAssemblyExecutable())
+        result.appendLiteral(&quot;WebAssembly&quot;);
+#endif
+    else
+        ASSERT_NOT_REACHED();
 
     result.appendLiteral(&quot; { &quot;);
     result.appendNumber(startLine);

As you wrote, Internals is just used for the tests. The code that I added (&apos;result.appendLiteral(&quot;WebAssembly&quot;);&apos;) will never be executed, because we are currently not testing WebAssembly. But even if we test it, I&apos;m wondering whether this code will ever be reached, given how WebAssembly is loaded.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121823</commentid>
    <comment_count>25</comment_count>
      <attachid>260171</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-28 14:07:41 -0700</bug_when>
    <thetext>Comment on attachment 260171
Patch

Clearing flags on attachment: 260171

Committed r189123: &lt;http://trac.webkit.org/changeset/189123&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121824</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-28 14:07:49 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259748</attachid>
            <date>2015-08-23 22:06:36 -0700</date>
            <delta_ts>2015-08-26 17:32:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148373-20150823220629.patch</filename>
            <type>text/plain</type>
            <size>22468</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4ODEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
MTViNGViMGEzZGI1NDJkMmE2NDExMTdmZTIxMzJiZjJkNmU3NjgwLi4zYzQ5ZmUzNmIxZmQ5ODYw
NjRkNGFhODE1N2Q3ZWFiOTdjMGZlMTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAxNS0wOC0yMyAgU3Vrb2xzYWsgU2Frc2h1d29uZyAgPHN1a29sc2FrQGdt
YWlsLmNvbT4KKworICAgICAgICBDcmVhdGUgV2ViQXNzZW1ibHkgZnVuY3Rpb25zCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDgzNzMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDcmVhdGUgZnVuY3Rpb25z
IGZyb20gV2ViQXNzZW1ibHkgZmlsZXMgZ2VuZXJhdGVkIGJ5IHBhY2stYXNtanMKKyAgICAgICAg
PGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJBc3NlbWJseS9wb2x5ZmlsbC1wcm90b3R5cGUtMT4uCisg
ICAgICAgIFdlYkFzc2VtYmx5IGZ1bmN0aW9ucyBjcmVhdGVkIGJ5IHRoaXMgcGF0Y2ggY2FuIG9u
bHkgcmV0dXJuIDAuCisgICAgICAgIEFjdHVhbCBjb2RlIGdlbmVyYXRpb24gd2lsbCBiZSBpbXBs
ZW1lbnRlZCBpbiBzdWJzZXF1ZW50IHBhdGNoZXMuCisKKyAgICAgICAgKiBieXRlY29kZS9Vbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyYXRlRnVuY3Rp
b25Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphdHRlbXB0VG9JbmxpbmVD
YWxsKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpF
eGVjdXRhYmxlQmFzZTo6aXNXZWJBc3NlbWJseUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6c2V0
dXBXZWJBc3NlbWJseSk6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVG
b3JFeGVjdXRpb25JbXBsKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAg
ICAgKEpTQzo6RXhlY3V0YWJsZUJhc2U6OmlzRXZhbEV4ZWN1dGFibGUpOgorICAgICAgICAoSlND
OjpFeGVjdXRhYmxlQmFzZTo6aXNGdW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpF
eGVjdXRhYmxlQmFzZTo6aXNQcm9ncmFtRXhlY3V0YWJsZSk6CisgICAgICAgICogd2FzbS9KU1dB
U01Nb2R1bGUuaDoKKyAgICAgICAgKEpTQzo6SlNXQVNNTW9kdWxlOjpmdW5jdGlvbnMpOgorICAg
ICAgICAqIHdhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6V0FTTUZ1
bmN0aW9uUGFyc2VyOjpjb21waWxlKToKKyAgICAgICAgKiB3YXNtL1dBU01GdW5jdGlvblBhcnNl
ci5oOgorICAgICAgICAqIHdhc20vV0FTTU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6
OldBU01Nb2R1bGVQYXJzZXI6OldBU01Nb2R1bGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpXQVNN
TW9kdWxlUGFyc2VyOjpwYXJzZSk6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBh
cnNlRnVuY3Rpb25EZWNsYXJhdGlvblNlY3Rpb24pOgorICAgICAgICAoSlNDOjpXQVNNTW9kdWxl
UGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChKU0M6OldBU01Nb2R1
bGVQYXJzZXI6OnBhcnNlRXhwb3J0U2VjdGlvbik6CisgICAgICAgIChKU0M6OnBhcnNlV2ViQXNz
ZW1ibHkpOgorICAgICAgICAqIHdhc20vV0FTTU1vZHVsZVBhcnNlci5oOgorCiAyMDE1LTA4LTIx
ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByMTg4NzkyIGFuZCByMTg4ODAzLgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZS5jcHAKaW5kZXggZTkzNWVkODkzYzJjMDk1NmZkMWM2OWYzM2JkMTY4NmVlNTFhMWU3ZS4u
OTFmMzM5OTQ1NmE4ZmRkNTFjN2ZhNzc1ZTNiMWMyYjRmNGQ0ZmJmNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRnVuY3Rpb25PdmVycmlk
ZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNp
bmNsdWRlICJKU1dBU01Nb2R1bGUuaCIKICNpbmNsdWRlICJQYXJzZXIuaCIKICNpbmNsdWRlICJT
b3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgpAQCAtNTIsNiArNTMsMjMg
QEAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGdlbmVyYXRlRnVuY3Rpb25Db2Rl
QmxvY2soCiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBEZWJ1Z2dlck1vZGUgZGVi
dWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLAogICAgIFVubGlua2VkRnVuY3Rp
b25LaW5kIGZ1bmN0aW9uS2luZCwgUGFyc2VyRXJyb3ImIGVycm9yLCBib29sIGlzQXJyb3dGdW5j
dGlvbikKIHsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgaWYgKGV4ZWN1dGFibGUtPmlz
V2ViQXNzZW1ibHlGdW5jdGlvbigpKSB7CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2sqIHJlc3VsdCA9IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSgmdm0sIEZ1bmN0
aW9uQ29kZSwgRXhlY3V0YWJsZUluZm8oZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNl
LCBleGVjdXRhYmxlLT5jb25zdHJ1Y3RvcktpbmQoKSwgZmFsc2UpKTsKKworICAgICAgICBKU1dB
U01Nb2R1bGUqIG1vZHVsZSA9IGV4ZWN1dGFibGUtPndlYkFzc2VtYmx5TW9kdWxlKCk7CisgICAg
ICAgIHVpbnQzMl90IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5mdW5jdGlvbkRlY2xhcmF0aW9u
cygpW2V4ZWN1dGFibGUtPndlYkFzc2VtYmx5RnVuY3Rpb25JbmRleCgpXS5zaWduYXR1cmVJbmRl
eDsKKyAgICAgICAgY29uc3QgV0FTTVNpZ25hdHVyZSYgc2lnbmF0dXJlID0gbW9kdWxlLT5zaWdu
YXR1cmVzKClbc2lnbmF0dXJlSW5kZXhdOworICAgICAgICByZXN1bHQtPnNldE51bVBhcmFtZXRl
cnMoMSArIHNpZ25hdHVyZS5hcmd1bWVudHMuc2l6ZSgpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRT
Y29wZVJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKDApKTsKKworICAgICAgICBWZWN0
b3I8VW5saW5rZWRJbnN0cnVjdGlvbiwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IGluc3RydWN0
aW9uczsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zLmFwcGVuZChvcF9lbnRlcik7CisgICAgICAgIHJl
c3VsdC0+c2V0SW5zdHJ1Y3Rpb25zKHN0ZDo6bWFrZV91bmlxdWU8VW5saW5rZWRJbnN0cnVjdGlv
blN0cmVhbT4oaW5zdHJ1Y3Rpb25zKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
I2VuZGlmCisKICAgICBKU1BhcnNlckJ1aWx0aW5Nb2RlIGJ1aWx0aW5Nb2RlID0gZXhlY3V0YWJs
ZS0+aXNCdWlsdGluRnVuY3Rpb24oKSA/IEpTUGFyc2VyQnVpbHRpbk1vZGU6OkJ1aWx0aW4gOiBK
U1BhcnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWlsdGluOwogICAgIEpTUGFyc2VyU3RyaWN0TW9kZSBz
dHJpY3RNb2RlID0gZXhlY3V0YWJsZS0+aXNJblN0cmljdENvbnRleHQoKSA/IEpTUGFyc2VyU3Ry
aWN0TW9kZTo6U3RyaWN0IDogSlNQYXJzZXJTdHJpY3RNb2RlOjpOb3RTdHJpY3Q7CiAgICAgQVNT
RVJUKGlzRnVuY3Rpb25QYXJzZU1vZGUoZXhlY3V0YWJsZS0+cGFyc2VNb2RlKCkpKTsKQEAgLTEw
MCwxMSArMTE4LDQ1IEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZShWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0CiAgICAgLCBtX2NvbnN0cnVj
dG9yS2luZChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obm9kZS0+Y29uc3RydWN0b3JLaW5kKCkpKQog
ICAgICwgbV9mdW5jdGlvbk1vZGUobm9kZS0+ZnVuY3Rpb25Nb2RlKCkpCiAgICAgLCBtX2lzQXJy
b3dGdW5jdGlvbihub2RlLT5pc0Fycm93RnVuY3Rpb24oKSkKKyNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCisgICAgLCBtX2lzV2ViQXNzZW1ibHlGdW5jdGlvbihmYWxzZSkKKyNlbmRpZgogewogICAg
IEFTU0VSVChtX2NvbnN0cnVjdG9yS2luZCA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obm9kZS0+
Y29uc3RydWN0b3JLaW5kKCkpKTsKICAgICBtX3BhcmVudFNjb3BlVERaVmFyaWFibGVzLnN3YXAo
cGFyZW50U2NvcGVURFpWYXJpYWJsZXMpOwogfQogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNX
QVNNTW9kdWxlKiBtb2R1bGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgpCisgICAgOiBCYXNlKCp2
bSwgc3RydWN0dXJlKQorICAgICwgbV9uYW1lKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJb
V2ViQXNzZW1ibHldIikpCisgICAgLCBtX2luZmVycmVkTmFtZShJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiW1dlYkFzc2VtYmx5XSIpKQorICAgICwgbV9maXJzdExpbmVPZmZzZXQoMCkKKyAg
ICAsIG1fbGluZUNvdW50KDEpCisgICAgLCBtX3VubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQoMCkK
KyAgICAsIG1fdW5saW5rZWRCb2R5U3RhcnRDb2x1bW4oMCkKKyAgICAsIG1fdW5saW5rZWRCb2R5
RW5kQ29sdW1uKDApCisgICAgLCBtX3N0YXJ0T2Zmc2V0KDApCisgICAgLCBtX3NvdXJjZUxlbmd0
aChzb3VyY2UubGVuZ3RoKCkpCisgICAgLCBtX3BhcmFtZXRlcnNTdGFydE9mZnNldCgwKQorICAg
ICwgbV90eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoMCkKKyAgICAsIG1fdHlwZVByb2ZpbGluZ0Vu
ZE9mZnNldCgwKQorICAgICwgbV9wYXJhbWV0ZXJDb3VudChtb2R1bGUtPnNpZ25hdHVyZXMoKVtt
b2R1bGUtPmZ1bmN0aW9uRGVjbGFyYXRpb25zKClbZnVuY3Rpb25JbmRleF0uc2lnbmF0dXJlSW5k
ZXhdLmFyZ3VtZW50cy5zaXplKCkpCisgICAgLCBtX2ZlYXR1cmVzKDApCisgICAgLCBtX2lzSW5T
dHJpY3RDb250ZXh0KGZhbHNlKQorICAgICwgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyhmYWxzZSkK
KyAgICAsIG1faXNCdWlsdGluRnVuY3Rpb24oZmFsc2UpCisgICAgLCBtX2NvbnN0cnVjdEFiaWxp
dHkoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVj
dCkpCisgICAgLCBtX2NvbnN0cnVjdG9yS2luZChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQ29uc3Ry
dWN0b3JLaW5kOjpOb25lKSkKKyAgICAsIG1fZnVuY3Rpb25Nb2RlKEZ1bmN0aW9uTW9kZTo6RnVu
Y3Rpb25FeHByZXNzaW9uKQorICAgICwgbV9pc0Fycm93RnVuY3Rpb24oZmFsc2UpCisgICAgLCBt
X2lzV2ViQXNzZW1ibHlGdW5jdGlvbih0cnVlKQorICAgICwgbV93ZWJBc3NlbWJseU1vZHVsZSgq
dm0sIHRoaXMsIG1vZHVsZSkKKyAgICAsIG1fd2ViQXNzZW1ibHlGdW5jdGlvbkluZGV4KGZ1bmN0
aW9uSW5kZXgpCit7Cit9CisjZW5kaWYKKwogdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CkBAIC0xMTMsNiArMTY1LDEwIEBAIHZvaWQg
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY29k
ZUJsb2NrRm9yQ2FsbCk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY29kZUJs
b2NrRm9yQ29uc3RydWN0KTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9uYW1l
VmFsdWUpOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBpZiAodGhpc09iamVjdC0+bV9p
c1dlYkFzc2VtYmx5RnVuY3Rpb24pCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0
LT5tX3dlYkFzc2VtYmx5TW9kdWxlKTsKKyNlbmRpZgogfQogCiBGdW5jdGlvbkV4ZWN1dGFibGUq
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpsaW5rKFZNJiB2bSwgY29uc3QgU291cmNlQ29k
ZSYgb3duZXJTb3VyY2UsIGludCBvdmVycmlkZUxpbmVOdW1iZXIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZS5oCmluZGV4IDRlMDU0YjIwMjU3MzJhZTZkOGU5YzcxNTgxZTIyM2EyM2Q5ODhhOTYuLjRkMDY4
YWI3YTcwZjNmY2JlNWMyM2E2ZDNiMGI4ZTMxZGFkNGRlNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZS5oCkBAIC00Nyw2ICs0Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBGdW5jdGlvbk1l
dGFkYXRhTm9kZTsKIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKK2NsYXNzIEpTV0FTTU1vZHVs
ZTsKIGNsYXNzIFBhcnNlckVycm9yOwogY2xhc3MgU291cmNlQ29kZTsKIGNsYXNzIFNvdXJjZVBy
b3ZpZGVyOwpAQCAtNzQsNiArNzUsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaW5zdGFu
Y2U7CiAgICAgfQogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIHN0YXRpYyBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlKFZNKiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291
cmNlLCBKU1dBU01Nb2R1bGUqIG1vZHVsZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCkKKyAgICB7
CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBpbnN0YW5jZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPih2bS0+aGVhcCkp
CisgICAgICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSh2bSwgdm0tPnVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBzb3VyY2UsIG1vZHVsZSwgZnVuY3Rp
b25JbmRleCk7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOworICAgICAg
ICByZXR1cm4gaW5zdGFuY2U7CisgICAgfQorI2VuZGlmCisKICAgICBjb25zdCBJZGVudGlmaWVy
JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgY29uc3QgSWRlbnRpZmllciYg
aW5mZXJyZWROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9pbmZlcnJlZE5hbWU7IH0KICAgICBKU1N0
cmluZyogbmFtZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lVmFsdWUuZ2V0KCk7IH0KQEAg
LTEyNiw4ICsxMzcsMTcgQEAgcHVibGljOgogICAgIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQq
IHBhcmVudFNjb3BlVERaVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gJm1fcGFyZW50U2NvcGVU
RFpWYXJpYWJsZXM7IH0KICAgICBib29sIGlzQXJyb3dGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1faXNBcnJvd0Z1bmN0aW9uOyB9CiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgYm9v
bCBpc1dlYkFzc2VtYmx5RnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2lzV2ViQXNzZW1ibHlG
dW5jdGlvbjsgfQorICAgIEpTV0FTTU1vZHVsZSogd2ViQXNzZW1ibHlNb2R1bGUoKSBjb25zdCB7
IHJldHVybiBtX3dlYkFzc2VtYmx5TW9kdWxlLmdldCgpOyB9CisgICAgdW5zaWduZWQgd2ViQXNz
ZW1ibHlGdW5jdGlvbkluZGV4KCkgY29uc3QgeyByZXR1cm4gbV93ZWJBc3NlbWJseUZ1bmN0aW9u
SW5kZXg7IH0KKyNlbmRpZgorCiBwcml2YXRlOgogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKFZNKiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYsIFJlZlB0cjxTb3VyY2VQcm92
aWRlcj4mJiBzb3VyY2VPdmVycmlkZSwgRnVuY3Rpb25NZXRhZGF0YU5vZGUqLCBVbmxpbmtlZEZ1
bmN0aW9uS2luZCwgQ29uc3RydWN0QWJpbGl0eSwgVmFyaWFibGVFbnZpcm9ubWVudCYpOworI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShWTSos
IFN0cnVjdHVyZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1dBU01Nb2R1bGUqLCB1bnNpZ25lZCBm
dW5jdGlvbkluZGV4KTsKKyNlbmRpZgogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNhbGw7CiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0OwogCkBAIC0xNTgsNiAr
MTc4LDExIEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9jb25zdHJ1Y3RvcktpbmQgOiAyOwog
ICAgIHVuc2lnbmVkIG1fZnVuY3Rpb25Nb2RlIDogMTsgLy8gRnVuY3Rpb25Nb2RlCiAgICAgdW5z
aWduZWQgbV9pc0Fycm93RnVuY3Rpb24gOiAxOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAg
ICB1bnNpZ25lZCBtX2lzV2ViQXNzZW1ibHlGdW5jdGlvbiA6IDE7CisgICAgV3JpdGVCYXJyaWVy
PEpTV0FTTU1vZHVsZT4gbV93ZWJBc3NlbWJseU1vZHVsZTsKKyAgICB1bnNpZ25lZCBtX3dlYkFz
c2VtYmx5RnVuY3Rpb25JbmRleDsKKyNlbmRpZgogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYgdm0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDI1ZDBhYmQ0YWY5N2M5ZjYxNDU3MWIyNmE3YzZmMGI2NWQw
MjhlMTYuLmEzMDcxMjEyNzIzYTc0NWZkMmFhZjViYTYyZDA4OWNhYjNlZGY0OTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0xNDY1
LDYgKzE0NjUsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6YXR0ZW1wdFRvSW5saW5lQ2FsbChO
b2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQKICAgICBpZiAoIWlubGluaW5n
QmFsYW5jZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAorI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKKyAgICBpZiAoRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBjYWxsZWUuZXhlY3V0
YWJsZSgpKSB7CisgICAgICAgIGlmIChleGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5RnVuY3Rpb24o
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisjZW5kaWYKKwogICAgIGJvb2wg
ZGlkSW5zZXJ0Q2hlY2tzID0gZmFsc2U7CiAgICAgYXV0byBpbnNlcnRDaGVja3NXaXRoQWNjb3Vu
dGluZyA9IFsmXSAoKSB7CiAgICAgICAgIGluc2VydENoZWNrcyhudWxscHRyKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKaW5kZXggOWRjNjk0ZjI3YTQ1
ODczYjJhMjE2N2EzNjk2MzVkM2U1OTQ1YWJhZi4uYTY5MGQ2MWIyMWFmOTg3ZjYzZDgyM2I0NTQ4
MzdiODRiOWFkOTllZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0
YWJsZS5jcHAKQEAgLTMxLDEwICszMSwxMiBAQAogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2lu
Y2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU1dBU01N
b2R1bGUuaCIKICNpbmNsdWRlICJMTEludEVudHJ5cG9pbnQuaCIKICNpbmNsdWRlICJQYXJzZXIu
aCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVy
LmgiCisjaW5jbHVkZSAiV0FTTUZ1bmN0aW9uUGFyc2VyLmgiCiAjaW5jbHVkZSA8d3RmL0NvbW1h
UHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CkBAIC02Miw2ICs2NCwxMyBAQCB2b2lkIEV4ZWN1dGFibGVCYXNlOjpj
bGVhckNvZGUoKQogICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCA9IE5VTV9QQVJBTUVU
RVJTX05PVF9DT01QSUxFRDsKIH0KIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKK2Jvb2wgRXhl
Y3V0YWJsZUJhc2U6OmlzV2ViQXNzZW1ibHlGdW5jdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGlzRnVuY3Rpb25FeGVjdXRhYmxlKCkgJiYganNDYXN0PGNvbnN0IEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KHRoaXMpLT5pc1dlYkFzc2VtYmx5RnVuY3Rpb24oKTsKK30KKyNlbmRpZgorCiAjaWYgRU5B
QkxFKERGR19KSVQpCiBJbnRyaW5zaWMgRXhlY3V0YWJsZUJhc2U6OmludHJpbnNpYygpIGNvbnN0
CiB7CkBAIC0zMDUsNiArMzE0LDE0IEBAIHN0YXRpYyB2b2lkIHNldHVwSklUKFZNJiB2bSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCiAjZW5kaWYKIH0KIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
K3N0YXRpYyB2b2lkIHNldHVwV2ViQXNzZW1ibHkoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU2NyaXB0RXhlY3V0YWJsZSogc2NyaXB0RXhlY3V0YWJsZSkKK3sKKyAgICBGdW5jdGlvbkV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oc2NyaXB0
RXhlY3V0YWJsZSk7CisgICAgV0FTTUZ1bmN0aW9uUGFyc2VyOjpjb21waWxlKHZtLCBjb2RlQmxv
Y2ssIGV4ZWN1dGFibGUtPnVubGlua2VkRXhlY3V0YWJsZSgpLT53ZWJBc3NlbWJseU1vZHVsZSgp
LCBleGVjdXRhYmxlLT5zb3VyY2UoKSwgZXhlY3V0YWJsZS0+dW5saW5rZWRFeGVjdXRhYmxlKCkt
PndlYkFzc2VtYmx5RnVuY3Rpb25JbmRleCgpKTsKK30KKyNlbmRpZgorCiBKU09iamVjdCogU2Ny
aXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGlvbkltcGwoCiAgICAgRXhlY1N0YXRlKiBl
eGVjLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbiwgSlNTY29wZSogc2NvcGUsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQga2luZCkKIHsKQEAgLTMxOCwxMyArMzM1LDIwIEBAIEpTT2JqZWN0KiBTY3JpcHRF
eGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aW9uSW1wbCgKICAgICAgICAgcmV0dXJuIGV4Y2Vw
dGlvbjsKICAgICB9CiAgICAgCi0gICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlQnl0ZWNvZGUoKSkK
LSAgICAgICAgY29kZUJsb2NrLT52YWxpZGF0ZSgpOwotICAgIAotICAgIGlmIChPcHRpb25zOjp1
c2VMTEludCgpKQotICAgICAgICBzZXR1cExMSW50KHZtLCBjb2RlQmxvY2suZ2V0KCkpOwotICAg
IGVsc2UKLSAgICAgICAgc2V0dXBKSVQodm0sIGNvZGVCbG9jay5nZXQoKSk7CisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorICAgIGlmICghaXNXZWJBc3NlbWJseUZ1bmN0aW9uKCkpIHsKKyNlbmRp
ZgorICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVCeXRlY29kZSgpKQorICAgICAgICAgICAg
Y29kZUJsb2NrLT52YWxpZGF0ZSgpOworCisgICAgICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgp
KQorICAgICAgICAgICAgc2V0dXBMTEludCh2bSwgY29kZUJsb2NrLmdldCgpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgc2V0dXBKSVQodm0sIGNvZGVCbG9jay5nZXQoKSk7CisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQorICAgIH0gZWxzZQorICAgICAgICBzZXR1cFdlYkFzc2VtYmx5KHZt
LCBjb2RlQmxvY2suZ2V0KCksIHRoaXMpOworI2VuZGlmCiAgICAgCiAgICAgaW5zdGFsbENvZGUo
Y29kZUJsb2NrLmdldCgpKTsKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGUuaAppbmRleCBjZjJiZGU4OGM1YTZlOTE2NzYwMzZlZTI3ZDc0NGY3
NjQ1MzljYzRjLi5lYTVkYjljMDVmZTIzNDRjMGI1NzYyZGM3ZjYzYWIwMjQ4OGY5NmYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCkBAIC05MiwxNSArOTIs
MTUgQEAgcHVibGljOgogICAgICAgICAKICAgICBDb2RlQmxvY2tIYXNoIGhhc2hGb3IoQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCkgY29uc3Q7CiAKLSAgICBib29sIGlzRXZhbEV4ZWN1dGFibGUoKQor
ICAgIGJvb2wgaXNFdmFsRXhlY3V0YWJsZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4g
dHlwZSgpID09IEV2YWxFeGVjdXRhYmxlVHlwZTsKICAgICB9Ci0gICAgYm9vbCBpc0Z1bmN0aW9u
RXhlY3V0YWJsZSgpCisgICAgYm9vbCBpc0Z1bmN0aW9uRXhlY3V0YWJsZSgpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4gdHlwZSgpID09IEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGU7CiAgICAg
fQotICAgIGJvb2wgaXNQcm9ncmFtRXhlY3V0YWJsZSgpCisgICAgYm9vbCBpc1Byb2dyYW1FeGVj
dXRhYmxlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiB0eXBlKCkgPT0gUHJvZ3JhbUV4
ZWN1dGFibGVUeXBlOwogICAgIH0KQEAgLTExMSw2ICsxMTEsMTAgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCA9PSBOVU1fUEFSQU1FVEVSU19JU19IT1NU
OwogICAgIH0KIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBib29sIGlzV2ViQXNzZW1i
bHlGdW5jdGlvbigpIGNvbnN0OworI2VuZGlmCisKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvKSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
bywgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsgfQogICAgICAg
ICAKICAgICB2b2lkIGNsZWFyQ29kZSgpOwpAQCAtNTY0LDcgKzU2OCw3IEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgICAgIAotICAgIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUoKQorICAgIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUoKSBjb25zdAogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLmdldCgpOwogICAgIH0KQEAgLTYzNSw2ICs2
MzksOSBAQCBwdWJsaWM6CiAgICAgQ29uc3RydWN0QWJpbGl0eSBjb25zdHJ1Y3RBYmlsaXR5KCkg
Y29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKTsg
fQogICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4
ZWN1dGFibGUtPmlzQXJyb3dGdW5jdGlvbigpOyB9CiAgICAgYm9vbCBpc0NsYXNzQ29uc3RydWN0
b3JGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5pc0NsYXNz
Q29uc3RydWN0b3JGdW5jdGlvbigpOyB9CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGJv
b2wgaXNXZWJBc3NlbWJseUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1
dGFibGUtPmlzV2ViQXNzZW1ibHlGdW5jdGlvbigpOyB9CisjZW5kaWYKICAgICBjb25zdCBJZGVu
dGlmaWVyJiBuYW1lKCkgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPm5hbWUoKTsgfQog
ICAgIGNvbnN0IElkZW50aWZpZXImIGluZmVycmVkTmFtZSgpIHsgcmV0dXJuIG1fdW5saW5rZWRF
eGVjdXRhYmxlLT5pbmZlcnJlZE5hbWUoKTsgfQogICAgIEpTU3RyaW5nKiBuYW1lVmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+bmFtZVZhbHVlKCk7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV0FTTU1vZHVsZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmgKaW5kZXggYTcyNjZiNTdkYThkMzdl
NzA2ZWFjZjA3ODBjMmJkN2MwYmUxZjhkMy4uNDY3YjNlNmExMWY2NTg0YWNlOGFkN2M0NDIwNzM4
MGQxMzc4MjU4ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNN
TW9kdWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmgK
QEAgLTY0LDYgKzY0LDggQEAgcHVibGljOgogICAgIFZlY3RvcjxXQVNNRnVuY3Rpb25EZWNsYXJh
dGlvbj4mIGZ1bmN0aW9uRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xhcmF0
aW9uczsgfQogICAgIFZlY3RvcjxXQVNNRnVuY3Rpb25Qb2ludGVyVGFibGU+JiBmdW5jdGlvblBv
aW50ZXJUYWJsZXMoKSB7IHJldHVybiBtX2Z1bmN0aW9uUG9pbnRlclRhYmxlczsgfQogCisgICAg
VmVjdG9yPFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPj4mIGZ1bmN0aW9ucygpIHsgcmV0dXJuIG1f
ZnVuY3Rpb25zOyB9CisKIHByaXZhdGU6CiAgICAgSlNXQVNNTW9kdWxlKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5jcHAKaW5kZXggZDY4
OWY1NmIxY2I4MGZjNzE5MGJiNDk3YzA1Y2RlZDZiN2M0MzgzMi4uMDIxNTgwZWYyNjM3MmY0YjNm
Njk2ZTNjNGI2ZmJkYTRkYzQ0MmNkZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuY3BwCkBAIC0yOCw3ICsyOCw5IEBACiAKICNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCiAKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJK
U1dBU01Nb2R1bGUuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiV0FTTUZ1
bmN0aW9uU3ludGF4Q2hlY2tlci5oIgogCiAjZGVmaW5lIFBST1BBR0FURV9FUlJPUigpIGRvIHsg
aWYgKCFtX2Vycm9yTWVzc2FnZS5pc051bGwoKSkgcmV0dXJuIDA7IH0gd2hpbGUgKDApCkBAIC01
OSw2ICs2MSwyMyBAQCBib29sIFdBU01GdW5jdGlvblBhcnNlcjo6Y2hlY2tTeW50YXgoSlNXQVNN
TW9kdWxlKiBtb2R1bGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdQogICAgIHJldHVybiB0cnVlOwog
fQogCit2b2lkIFdBU01GdW5jdGlvblBhcnNlcjo6Y29tcGlsZShWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKU1dBU01Nb2R1bGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgc2l6ZV90KQorewor
ICAgIC8vIEZJWE1FOiBBY3R1YWxseSBjb21waWxlIHRoZSBjb2RlLgorICAgIENDYWxsSGVscGVy
cyBqaXQoJnZtLCBjb2RlQmxvY2spOworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBiZWdpbkxh
YmVsID0gaml0LmxhYmVsKCk7CisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOworICAgIGppdC5yZXQoKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgYXJpdHlDaGVj
ayA9IGppdC5sYWJlbCgpOworICAgIGppdC5qdW1wKGJlZ2luTGFiZWwpOworCisgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcih2bSwgaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1
Y2NlZWQpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3aXRoQXJpdHlDaGVjayA9IHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2YoYXJpdHlDaGVjayk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNvZGVS
ZWYgcmVzdWx0ID0gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJCYXNlbGluZSBKSVQgY29k
ZSBmb3IgV2ViQXNzZW1ibHkiKSk7CisgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKGFkb3B0UmVm
KG5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVENvZGU6OkJhc2Vs
aW5lSklUKSkpOworICAgIGNvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7Cit9CisKIHRlbXBs
YXRlIDxjbGFzcyBDb250ZXh0PgogYm9vbCBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlRnVuY3Rp
b24oQ29udGV4dCYgY29udGV4dCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V0FTTUZ1bmN0aW9uUGFyc2VyLmgKaW5kZXggNGQ2MzEzYWZkNzhjODBjNTc0MmVkMmY3MWFiNjVh
NWZlNzVjNWI5My4uNzA0YzQ2YzlkOTRkNDA2NGFjZTdiNGY3Y2MxY2M4ZjM2MzgxYzU0MiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmgKQEAg
LTM2LDExICszNiwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQ29kZUJsb2NrOwog
Y2xhc3MgSlNXQVNNTW9kdWxlOworY2xhc3MgVk07CiAKIGNsYXNzIFdBU01GdW5jdGlvblBhcnNl
ciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgY2hlY2tTeW50YXgoSlNXQVNNTW9kdWxlKiwg
Y29uc3QgU291cmNlQ29kZSYsIHNpemVfdCBmdW5jdGlvbkluZGV4LCB1bnNpZ25lZCBzdGFydE9m
ZnNldEluU291cmNlLCB1bnNpZ25lZCYgZW5kT2Zmc2V0SW5Tb3VyY2UsIFN0cmluZyYgZXJyb3JN
ZXNzYWdlKTsKKyAgICBzdGF0aWMgdm9pZCBjb21waWxlKFZNJiwgQ29kZUJsb2NrKiwgSlNXQVNN
TW9kdWxlKiwgY29uc3QgU291cmNlQ29kZSYsIHNpemVfdCBmdW5jdGlvbkluZGV4KTsKIAogcHJp
dmF0ZToKICAgICBXQVNNRnVuY3Rpb25QYXJzZXIoSlNXQVNNTW9kdWxlKiBtb2R1bGUsIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgc2l6ZV90IGZ1bmN0aW9uSW5kZXgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuY3BwCmluZGV4IDUwZGJiOGU1MDli
NmM3ZjQ1N2QxZDc2ZDYxNmNhODA0NTc1Y2E4YWYuLmVjYzY5ZTZlOTA0ZjcyZTViMjEzNjZjYWM5
MGQ3ZDBjNTUyZTQ3ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dB
U01Nb2R1bGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01N
b2R1bGVQYXJzZXIuY3BwCkBAIC00OSwxNSArNDksMTcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LVdBU01Nb2R1bGVQYXJzZXI6OldBU01Nb2R1bGVQYXJzZXIoY29uc3QgU291cmNlQ29kZSYgc291
cmNlKQotICAgIDogbV9zb3VyY2Uoc291cmNlKQorV0FTTU1vZHVsZVBhcnNlcjo6V0FTTU1vZHVs
ZVBhcnNlcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSkKKyAgICA6IG1fdm0odm0pCisgICAgLCBtX2dsb2JhbE9iamVjdCh2bSwg
Z2xvYmFsT2JqZWN0KQorICAgICwgbV9zb3VyY2Uoc291cmNlKQogICAgICwgbV9yZWFkZXIoc3Rh
dGljX2Nhc3Q8V2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcio+KHNvdXJjZS5wcm92aWRlcigpKS0+
ZGF0YSgpKQogewogfQogCi1KU1dBU01Nb2R1bGUqIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RyaW5nJiBlcnJvck1lc3NhZ2Up
CitKU1dBU01Nb2R1bGUqIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlKFN0cmluZyYgZXJyb3JNZXNz
YWdlKQogewotICAgIG1fbW9kdWxlLnNldCh2bSwgSlNXQVNNTW9kdWxlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdC0+d2FzbU1vZHVsZVN0cnVjdHVyZSgpKSk7CisgICAgbV9tb2R1bGUuc2V0KG1f
dm0sIEpTV0FTTU1vZHVsZTo6Y3JlYXRlKG1fdm0sIG1fZ2xvYmFsT2JqZWN0LT53YXNtTW9kdWxl
U3RydWN0dXJlKCkpKTsKICAgICBwYXJzZU1vZHVsZSgpOwogICAgIGlmICghbV9lcnJvck1lc3Nh
Z2UuaXNOdWxsKCkpIHsKICAgICAgICAgZXJyb3JNZXNzYWdlID0gbV9lcnJvck1lc3NhZ2U7CkBA
IC0yMTcsNiArMjE5LDcgQEAgdm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVj
bGFyYXRpb25TZWN0aW9uKCkKICAgICB1aW50MzJfdCBudW1iZXJPZkZ1bmN0aW9uRGVjbGFyYXRp
b25zOwogICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkZ1bmN0aW9uRGVj
bGFyYXRpb25zLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBmdW5jdGlvbiBkZWNsYXJhdGlv
bnMuIik7CiAgICAgbV9tb2R1bGUtPmZ1bmN0aW9uRGVjbGFyYXRpb25zKCkucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShudW1iZXJPZkZ1bmN0aW9uRGVjbGFyYXRpb25zKTsKKyAgICBtX21vZHVsZS0+
ZnVuY3Rpb25zKCkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkZ1bmN0aW9uRGVjbGFy
YXRpb25zKTsKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGdW5jdGlvbkRl
Y2xhcmF0aW9uczsgKytpKSB7CiAgICAgICAgIFdBU01GdW5jdGlvbkRlY2xhcmF0aW9uIGZ1bmN0
aW9uRGVjbGFyYXRpb247CiAgICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChmdW5j
dGlvbkRlY2xhcmF0aW9uLnNpZ25hdHVyZUluZGV4LCAiQ2Fubm90IHJlYWQgdGhlIHNpZ25hdHVy
ZSBpbmRleC4iKTsKQEAgLTI2NSw2ICsyNjgsMTEgQEAgdm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpw
YXJzZUZ1bmN0aW9uRGVmaW5pdGlvbihzaXplX3QgZnVuY3Rpb25JbmRleCkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBtX3JlYWRlci5zZXRPZmZzZXQoZW5kT2Zmc2V0SW5Tb3VyY2UpOwor
CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlID0gVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgmbV92bSwgbV9zb3VyY2Us
IG1fbW9kdWxlLmdldCgpLCBmdW5jdGlvbkluZGV4KTsKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLT5saW5rKG1f
dm0sIG1fc291cmNlKTsKKyAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNy
ZWF0ZShtX3ZtLCBmdW5jdGlvbkV4ZWN1dGFibGUsIG1fZ2xvYmFsT2JqZWN0LmdldCgpKTsKKyAg
ICBtX21vZHVsZS0+ZnVuY3Rpb25zKCkudW5jaGVja2VkQXBwZW5kKFdyaXRlQmFycmllcjxKU0Z1
bmN0aW9uPihtX3ZtLCBtX21vZHVsZS5nZXQoKSwgZnVuY3Rpb24pKTsKIH0KIAogdm9pZCBXQVNN
TW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydFNlY3Rpb24oKQpAQCAtMjg1LDExICsyOTMsMTEgQEAg
dm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydFNlY3Rpb24oKQogICAgICAgICBmb3Ig
KHVpbnQzMl90IGV4cG9ydEluZGV4ID0gMDsgZXhwb3J0SW5kZXggPCBudW1iZXJPZkV4cG9ydHM7
ICsrZXhwb3J0SW5kZXgpIHsKICAgICAgICAgICAgIFN0cmluZyBleHBvcnROYW1lOwogICAgICAg
ICAgICAgUkVBRF9TVFJJTkdfT1JfRkFJTChleHBvcnROYW1lLCAiQ2Fubm90IHJlYWQgdGhlIGZ1
bmN0aW9uIGV4cG9ydCBuYW1lLiIpOwotICAgICAgICAgICAgLy8gRklYTUU6IENoZWNrIHRoYXQg
ZXhwb3J0TmFtZSBpcyBsZWdhbC4KICAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7
CiAgICAgICAgICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwoZnVuY3Rpb25JbmRleCwg
IkNhbm5vdCByZWFkIHRoZSBmdW5jdGlvbiBpbmRleC4iKTsKICAgICAgICAgICAgIEZBSUxfSUZf
RkFMU0UoZnVuY3Rpb25JbmRleCA8IG1fbW9kdWxlLT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpLnNp
emUoKSwgIlRoZSBmdW5jdGlvbiBpbmRleCBpcyBpbmNvcnJlY3QuIik7Ci0gICAgICAgICAgICAv
LyBGSVhNRTogRXhwb3J0IHRoZSBmdW5jdGlvbi4KKyAgICAgICAgICAgIElkZW50aWZpZXIgaWRl
bnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJm1fdm0sIGV4cG9ydE5hbWUpOworICAg
ICAgICAgICAgbV9tb2R1bGUtPnB1dERpcmVjdChtX3ZtLCBpZGVudGlmaWVyLCBtX21vZHVsZS0+
ZnVuY3Rpb25zKClbZnVuY3Rpb25JbmRleF0uZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KQEAgLTMwMCw4ICszMDgsOCBAQCB2b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBh
cnNlRXhwb3J0U2VjdGlvbigpCiAKIEpTV0FTTU1vZHVsZSogcGFyc2VXZWJBc3NlbWJseShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UpCiB7Ci0gICAgV0FTTU1vZHVsZVBhcnNlciBXQVNNTW9kdWxlUGFyc2VyKHNvdXJjZSk7Ci0g
ICAgcmV0dXJuIFdBU01Nb2R1bGVQYXJzZXIucGFyc2UoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCBlcnJvck1lc3NhZ2UpOworICAgIFdBU01Nb2R1bGVQYXJzZXIgbW9k
dWxlUGFyc2VyKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc291cmNl
KTsKKyAgICByZXR1cm4gbW9kdWxlUGFyc2VyLnBhcnNlKGVycm9yTWVzc2FnZSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V0FTTU1vZHVsZVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVs
ZVBhcnNlci5oCmluZGV4IDMwZjFhNTY1OTg4YzYwMTRiNTQ1ZmMxYzZjMjZjMDkzZDhmYjU0MGYu
LmUyZjRmYjc1OGM5NTEzNTNmODYwODdkNTkwNGM1ZjM2MjYzZWVmYWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmgKQEAgLTQyLDggKzQyLDggQEAg
Y2xhc3MgVk07CiAKIGNsYXNzIFdBU01Nb2R1bGVQYXJzZXIgewogcHVibGljOgotICAgIFdBU01N
b2R1bGVQYXJzZXIoY29uc3QgU291cmNlQ29kZSYpOwotICAgIEpTV0FTTU1vZHVsZSogcGFyc2Uo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKKyAgICBXQVNNTW9k
dWxlUGFyc2VyKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTb3VyY2VDb2RlJik7CisgICAg
SlNXQVNNTW9kdWxlKiBwYXJzZShTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiAKIHByaXZhdGU6CiAg
ICAgdm9pZCBwYXJzZU1vZHVsZSgpOwpAQCAtNTcsNiArNTcsOCBAQCBwcml2YXRlOgogICAgIHZv
aWQgcGFyc2VGdW5jdGlvbkRlZmluaXRpb24oc2l6ZV90IGZ1bmN0aW9uSW5kZXgpOwogICAgIHZv
aWQgcGFyc2VFeHBvcnRTZWN0aW9uKCk7CiAKKyAgICBWTSYgbV92bTsKKyAgICBTdHJvbmc8SlNH
bG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwogICAgIGNvbnN0IFNvdXJjZUNvZGUmIG1fc291
cmNlOwogICAgIFdBU01SZWFkZXIgbV9yZWFkZXI7CiAgICAgU3Ryb25nPEpTV0FTTU1vZHVsZT4g
bV9tb2R1bGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260007</attachid>
            <date>2015-08-26 17:33:01 -0700</date>
            <delta_ts>2015-08-26 19:25:50 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-148373-20150826173249.patch</filename>
            <type>text/plain</type>
            <size>63296</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4OTk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
ZTBjOGFmOTg2YWJmMDJhMmJhOTkwN2EyNDgwNDdjNzZiY2Q3YjI0Li5hMWNiNmY4NGY0MjA1MzUx
NTY2MzI3YzEyZGUyYzYwMTBmMGM0NTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDIgQEAKKzIwMTUtMDgtMjYgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0Bn
bWFpbC5jb20+CisKKyAgICAgICAgQ3JlYXRlIFdlYkFzc2VtYmx5IGZ1bmN0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4MzczCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2Rl
QmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omhhc2gpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OnNvdXJjZUNvZGVGb3JUb29scyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6ZHVtcEFzc3VtaW5nSklUVHlwZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcFNv
dXJjZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6aW5zdGFsbCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bmV3UmVwbGFj
ZW1lbnQpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUNvZGVCbG9jazo6cmVwbGFjZW1lbnQp
OgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUNvZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsSW50
ZXJuYWwpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmllc0ZvckNv
bnRyb2xGbG93UHJvZmlsZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6Om93bmVyRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6b3duZXJTY3JpcHRFeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
Ojpjb2RlVHlwZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5Q29kZUJsb2NrOjpXZWJBc3Nl
bWJseUNvZGVCbG9jayk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuY3BwOgorICAgICAg
ICAoSlNDOjpEZWJ1Z2dlcjo6dG9nZ2xlQnJlYWtwb2ludCk6CisgICAgICAgICogZGVidWdnZXIv
RGVidWdnZXJDYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6
c291cmNlSURGb3JDYWxsRnJhbWUpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6
OmV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjppbmxpbmlu
Z0Nvc3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0Vu
dHJ5OjpJbmxpbmVTdGFja0VudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cGFyc2VDb2RlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OmlzU3VwcG9ydGVkRm9ySW5saW5pbmcpOgorICAgICAgICAqIGRm
Zy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpleGVjdXRhYmxlRm9yKToK
KyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBh
cmVPU1JFbnRyeSk6CisgICAgICAgICogaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3Rvcnku
Y3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpDcmVhdGVTY3JpcHRDYWxsU3RhY2tGdW5jdG9yOjpv
cGVyYXRvcigpKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAg
ICAgIChKU0M6OmV2YWwpOgorICAgICAgICAoSlNDOjppc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSk6
CisgICAgICAgIChKU0M6OkdldFN0YWNrVHJhY2VGdW5jdG9yOjpvcGVyYXRvcigpKToKKyAgICAg
ICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgICogaW50ZXJwcmV0
ZXIvU3RhY2tWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6
c291cmNlVVJMKToKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6Y29tcHV0ZUxp
bmVBbmRDb2x1bW4pOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OmlzV2ViQXNzZW1ibHlFeGVjdXRhYmxl
KToKKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGljQ2FsbCk6CisgICAgICAgICogbGxpbnQv
TExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkRhdGE6OnBlcmZvcm1Bc3NlcnRp
b25zKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6
OkxMSW50OjpzZXRVcENhbGwpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpT
Qzo6U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHA6Cisg
ICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6V2ViQXNzZW1ibHlFeGVjdXRhYmxl
KToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpkZXN0cm95KToKKyAgICAg
ICAgKEpTQzo6V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAg
KEpTQzo6V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpjbGVhckNvZGUpOgorICAgICAgICAoSlNDOjpX
ZWJBc3NlbWJseUV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb24pOgorICAgICAgICAqIHJ1
bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6aXNFdmFs
RXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjppc0Z1bmN0aW9uRXhl
Y3V0YWJsZSk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjppc1Byb2dyYW1FeGVjdXRh
YmxlKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUJhc2U6OmlzV2ViQXNzZW1ibHlFeGVjdXRh
YmxlKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZVZpcnR1YWwpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rp
b246OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAgICog
cnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpK
U0Z1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6aXNCdWlsdGluRnVuY3Rpb24p
OgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlLmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6
CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAg
ICAqIHdhc20vSlNXQVNNTW9kdWxlLmg6CisgICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6ZnVu
Y3Rpb25zKToKKyAgICAgICAgKiB3YXNtL1dBU01GdW5jdGlvblBhcnNlci5jcHA6CisgICAgICAg
IChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6Y29tcGlsZSk6CisgICAgICAgICogd2FzbS9XQVNN
RnVuY3Rpb25QYXJzZXIuaDoKKyAgICAgICAgKiB3YXNtL1dBU01Nb2R1bGVQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpXQVNNTW9kdWxlUGFyc2VyOjpXQVNNTW9kdWxlUGFyc2VyKToKKyAgICAg
ICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpXQVNNTW9k
dWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKToKKyAgICAgICAgKEpT
Qzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb24pOgorICAgICAgICAo
SlNDOjpXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydFNlY3Rpb24pOgorICAgICAgICAoSlND
OjpwYXJzZVdlYkFzc2VtYmx5KToKKyAgICAgICAgKiB3YXNtL1dBU01Nb2R1bGVQYXJzZXIuaDoK
KwogMjAxNS0wOC0yNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IERpc3Rpbmd1aXNoIFdlYiBJREwgY2FsbGJhY2sgaW50ZXJmYWNlcyBmcm9tIFdlYiBJREwgY2Fs
bGJhY2sgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWM0NzJmNmU4YmIyZTZjYWU3MjhlYTZjYTk2
ZmU1ZDM0OGQ3MmNiMy4uZmU4NzQ0MzliNTc0OWZiZmRjYTE2ZWNmYWI0OWVmZTQ2ZjI2OWRjNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE1LTA4LTI2ICBTdWtvbHNhayBTYWtzaHV3
b25nICA8c3Vrb2xzYWtAZ21haWwuY29tPgorCisgICAgICAgIENyZWF0ZSBXZWJBc3NlbWJseSBm
dW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0ODM3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpwYXJzZXJNZXRhRGF0YSk6CisKIDIwMTUt
MDgtMjYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBEaXN0aW5n
dWlzaCBXZWIgSURMIGNhbGxiYWNrIGludGVyZmFjZXMgZnJvbSBXZWIgSURMIGNhbGxiYWNrIGZ1
bmN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApp
bmRleCAyMGMxNDdhMDE1ZDJjNDNkZWMzODNmN2JhYTgxMGE2NmE5MTkxNDYyLi5jMzI0MGEwN2M0
MTRlMTk1NWUwYWFjMDRjYzUwZmRiMmNhYTIyZTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBAIENvZGVCbG9ja0hh
c2ggQ29kZUJsb2NrOjpoYXNoKCkgY29uc3QKIHsKICAgICBpZiAoIW1faGFzaCkgewogICAgICAg
ICBSRUxFQVNFX0FTU0VSVChpc1NhZmVUb0NvbXB1dGVIYXNoKCkpOwotICAgICAgICBtX2hhc2gg
PSBDb2RlQmxvY2tIYXNoKG93bmVyRXhlY3V0YWJsZSgpLT5zb3VyY2UoKSwgc3BlY2lhbGl6YXRp
b25LaW5kKCkpOworICAgICAgICBtX2hhc2ggPSBDb2RlQmxvY2tIYXNoKG93bmVyU2NyaXB0RXhl
Y3V0YWJsZSgpLT5zb3VyY2UoKSwgc3BlY2lhbGl6YXRpb25LaW5kKCkpOwogICAgIH0KICAgICBy
ZXR1cm4gbV9oYXNoOwogfQpAQCAtMTE1LDcgKzExNSw3IEBAIENvZGVCbG9ja0hhc2ggQ29kZUJs
b2NrOjpoYXNoKCkgY29uc3QKIENTdHJpbmcgQ29kZUJsb2NrOjpzb3VyY2VDb2RlRm9yVG9vbHMo
KSBjb25zdAogewogICAgIGlmIChjb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29kZSkKLSAgICAgICAg
cmV0dXJuIG93bmVyRXhlY3V0YWJsZSgpLT5zb3VyY2UoKS50b1VURjgoKTsKKyAgICAgICAgcmV0
dXJuIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5zb3VyY2UoKS50b1VURjgoKTsKICAgICAKICAg
ICBTb3VyY2VQcm92aWRlciogcHJvdmlkZXIgPSBzb3VyY2UoKTsKICAgICBGdW5jdGlvbkV4ZWN1
dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVj
dXRhYmxlKCkpOwpAQCAtMTU1LDExICsxNTUsMTEgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBBc3N1
bWluZ0pJVFR5cGUoUHJpbnRTdHJlYW0mIG91dCwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQog
ICAgIG91dC5wcmludCgiLCAiLCBpbnN0cnVjdGlvbkNvdW50KCkpOwogICAgIGlmICh0aGlzLT5q
aXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQgJiYgbV9zaG91bGRBbHdheXNCZUlubGlu
ZWQpCiAgICAgICAgIG91dC5wcmludCgiIChTaG91bGRBbHdheXNCZUlubGluZWQpIik7Ci0gICAg
aWYgKG93bmVyRXhlY3V0YWJsZSgpLT5uZXZlcklubGluZSgpKQorICAgIGlmIChvd25lclNjcmlw
dEV4ZWN1dGFibGUoKS0+bmV2ZXJJbmxpbmUoKSkKICAgICAgICAgb3V0LnByaW50KCIgKE5ldmVy
SW5saW5lKSIpOwotICAgIGlmIChvd25lckV4ZWN1dGFibGUoKS0+ZGlkVHJ5VG9FbnRlckluTG9v
cCgpKQorICAgIGlmIChvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+ZGlkVHJ5VG9FbnRlckluTG9v
cCgpKQogICAgICAgICBvdXQucHJpbnQoIiAoRGlkVHJ5VG9FbnRlckluTG9vcCkiKTsKLSAgICBp
ZiAob3duZXJFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpKQorICAgIGlmIChvd25lclNjcmlw
dEV4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpCiAgICAgICAgIG91dC5wcmludCgiIChTdHJp
Y3RNb2RlKSIpOwogICAgIGlmICh0aGlzLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVK
SVQgJiYgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24pCiAgICAgICAgIG91dC5wcmludCgiIChGVExG
YWlsKSIpOwpAQCAtNTUyLDcgKzU1Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wU291cmNlKCkK
IAogdm9pZCBDb2RlQmxvY2s6OmR1bXBTb3VyY2UoUHJpbnRTdHJlYW0mIG91dCkKIHsKLSAgICBT
Y3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gb3duZXJFeGVjdXRhYmxlKCk7CisgICAgU2Ny
aXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOwogICAg
IGlmIChleGVjdXRhYmxlLT5pc0Z1bmN0aW9uRXhlY3V0YWJsZSgpKSB7CiAgICAgICAgIEZ1bmN0
aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gcmVpbnRlcnByZXRfY2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKICAgICAgICAgU3RyaW5nIHNvdXJjZSA9IGZ1
bmN0aW9uRXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKS0+Z2V0UmFuZ2UoCkBAIC0xNzUx
LDcgKzE3NTEsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25l
ckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbgogICAgIHNldE51bVBhcmFtZXRl
cnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CiAKICAgICBpZiAodm0oKS0+
dHlwZVByb2ZpbGVyKCkgfHwgdm0oKS0+Y29udHJvbEZsb3dQcm9maWxlcigpKQotICAgICAgICB2
bSgpLT5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+cmVtb3ZlVW5leGVjdXRlZFJhbmdlKG1f
b3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBtX293bmVyRXhlY3V0YWJsZS0+dHlwZVByb2Zp
bGluZ1N0YXJ0T2Zmc2V0KCksIG1fb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zm
c2V0KCkpOworICAgICAgICB2bSgpLT5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+cmVtb3Zl
VW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgb3duZXJFeGVjdXRh
YmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgb3duZXJFeGVjdXRhYmxlLT50eXBlUHJv
ZmlsaW5nRW5kT2Zmc2V0KCkpOwogCiAgICAgc2V0Q29uc3RhbnRSZWdpc3RlcnModW5saW5rZWRD
b2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXJzKCksIHVubGlua2VkQ29kZUJsb2NrLT5jb25zdGFu
dHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSk7CiAgICAgaWYgKHVubGlua2VkQ29kZUJsb2Nr
LT51c2VzR2xvYmFsT2JqZWN0KCkpCkBAIC0xNzg1LDcgKzE3ODUsNyBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJs
b2NrKiB1bmxpbgogICAgIGZvciAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2stPm51
bWJlck9mRnVuY3Rpb25EZWNscygpLCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAg
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSA9IHVubGlua2Vk
Q29kZUJsb2NrLT5mdW5jdGlvbkRlY2woaSk7CiAgICAgICAgIGlmICh2bSgpLT50eXBlUHJvZmls
ZXIoKSB8fCB2bSgpLT5jb250cm9sRmxvd1Byb2ZpbGVyKCkpCi0gICAgICAgICAgICB2bSgpLT5m
dW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+aW5zZXJ0VW5leGVjdXRlZFJhbmdlKG1fb3duZXJF
eGVjdXRhYmxlLT5zb3VyY2VJRCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdT
dGFydE9mZnNldCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdFbmRPZmZzZXQo
KSk7CisgICAgICAgICAgICB2bSgpLT5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+aW5zZXJ0
VW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgdW5saW5rZWRFeGVj
dXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT50
eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwogICAgICAgICBtX2Z1bmN0aW9uRGVjbHNbaV0uc2V0
KCptX3ZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkRXhlY3V0YWJsZS0+bGluaygqbV92bSwg
b3duZXJFeGVjdXRhYmxlLT5zb3VyY2UoKSkpOwogICAgIH0KIApAQCAtMTc5Myw3ICsxNzkzLDcg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
LCBVbmxpbmtlZENvZGVCbG9jayogdW5saW4KICAgICBmb3IgKHNpemVfdCBjb3VudCA9IHVubGlu
a2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRXhwcnMoKSwgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7CiAgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1
dGFibGUgPSB1bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGkpOwogICAgICAgICBpZiAo
dm0oKS0+dHlwZVByb2ZpbGVyKCkgfHwgdm0oKS0+Y29udHJvbEZsb3dQcm9maWxlcigpKQotICAg
ICAgICAgICAgdm0oKS0+ZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKCktPmluc2VydFVuZXhlY3V0
ZWRSYW5nZShtX293bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgdW5saW5rZWRFeGVjdXRhYmxl
LT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJv
ZmlsaW5nRW5kT2Zmc2V0KCkpOworICAgICAgICAgICAgdm0oKS0+ZnVuY3Rpb25IYXNFeGVjdXRl
ZENhY2hlKCktPmluc2VydFVuZXhlY3V0ZWRSYW5nZShvd25lckV4ZWN1dGFibGUtPnNvdXJjZUlE
KCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCksIHVubGlu
a2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpKTsKICAgICAgICAgbV9mdW5j
dGlvbkV4cHJzW2ldLnNldCgqbV92bSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZEV4ZWN1dGFi
bGUtPmxpbmsoKm1fdm0sIG93bmVyRXhlY3V0YWJsZS0+c291cmNlKCkpKTsKICAgICB9CiAKQEAg
LTE5MjUsNyArMTkyNSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUq
IG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGluCiAKICAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAxXSA9IG9iamVjdEFsbG9jYXRpb25Qcm9maWxl
OwogICAgICAgICAgICAgb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUtPmluaXRpYWxpemUoKnZtKCks
Ci0gICAgICAgICAgICAgICAgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIG1fZ2xvYmFsT2JqZWN0
LT5vYmplY3RQcm90b3R5cGUoKSwgaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSk7CisgICAgICAgICAg
ICAgICAgb3duZXJFeGVjdXRhYmxlLCBtX2dsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCks
IGluZmVycmVkSW5saW5lQ2FwYWNpdHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
IApAQCAtMjEwNiw3ICsyMTA2LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0
YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW4KICAgICAgICAg
ICAgICAgICAgICAgLy8gdGhlIHVzZXIncyBwcm9ncmFtLCBnaXZlIHRoZSB0eXBlIHByb2ZpbGVy
IHNvbWUgcmFuZ2UgdG8gaWRlbnRpZnkgdGhlc2UgcmV0dXJuIHN0YXRlbWVudHMuCiAgICAgICAg
ICAgICAgICAgICAgIC8vIEN1cnJlbnRseSwgdGhlIHRleHQgb2Zmc2V0IHRoYXQgaXMgdXNlZCBh
cyBpZGVudGlmaWNhdGlvbiBpcyAiZiIgaW4gdGhlIGZ1bmN0aW9uIGtleXdvcmQKICAgICAgICAg
ICAgICAgICAgICAgLy8gYW5kIGlzIHN0b3JlZCBvbiBUeXBlTG9jYXRpb24ncyBtX2Rpdm90Rm9y
RnVuY3Rpb25PZmZzZXRJZlJldHVyblN0YXRlbWVudCBtZW1iZXIgdmFyaWFibGUuCi0gICAgICAg
ICAgICAgICAgICAgIGRpdm90U3RhcnQgPSBkaXZvdEVuZCA9IG1fb3duZXJFeGVjdXRhYmxlLT50
eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgZGl2b3RTdGFy
dCA9IGRpdm90RW5kID0gb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQo
KTsKICAgICAgICAgICAgICAgICAgICAgc2hvdWxkQW5hbHl6ZSA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjExNCwxMiArMjExNCwxMiBAQCBD
b2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVu
bGlua2VkQ29kZUJsb2NrKiB1bmxpbgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzdGQ6
OnBhaXI8VHlwZUxvY2F0aW9uKiwgYm9vbD4gbG9jYXRpb25QYWlyID0gdm0oKS0+dHlwZVByb2Zp
bGVyKCktPnR5cGVMb2NhdGlvbkNhY2hlKCktPmdldFR5cGVMb2NhdGlvbihnbG9iYWxWYXJpYWJs
ZUlELAotICAgICAgICAgICAgICAgIG1fb3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBkaXZv
dFN0YXJ0LCBkaXZvdEVuZCwgZ2xvYmFsVHlwZVNldCwgdm0oKSk7CisgICAgICAgICAgICAgICAg
b3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCwgZ2xvYmFs
VHlwZVNldCwgdm0oKSk7CiAgICAgICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gbG9j
YXRpb25QYWlyLmZpcnN0OwogICAgICAgICAgICAgYm9vbCBpc05ld0xvY2F0aW9uID0gbG9jYXRp
b25QYWlyLnNlY29uZDsKIAogICAgICAgICAgICAgaWYgKGZsYWcgPT0gUHJvZmlsZVR5cGVCeXRl
Y29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50KQotICAgICAgICAgICAgICAgIGxvY2F0aW9uLT5t
X2Rpdm90Rm9yRnVuY3Rpb25PZmZzZXRJZlJldHVyblN0YXRlbWVudCA9IG1fb3duZXJFeGVjdXRh
YmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICBsb2NhdGlv
bi0+bV9kaXZvdEZvckZ1bmN0aW9uT2Zmc2V0SWZSZXR1cm5TdGF0ZW1lbnQgPSBvd25lckV4ZWN1
dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpOwogCiAgICAgICAgICAgICBpZiAoc2hv
dWxkQW5hbHl6ZSAmJiBpc05ld0xvY2F0aW9uKQogICAgICAgICAgICAgICAgIHZtKCktPnR5cGVQ
cm9maWxlcigpLT5pbnNlcnROZXdMb2NhdGlvbihsb2NhdGlvbik7CkBAIC0yMTYzLDYgKzIxNjMs
MzkgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRh
YmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW4KICAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVt
b3J5QWxsb2NhdGVkKHNpemVvZihDb2RlQmxvY2spICsgbV9pbnN0cnVjdGlvbnMuc2l6ZSgpICog
c2l6ZW9mKEluc3RydWN0aW9uKSk7CiB9CiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitDb2Rl
QmxvY2s6OkNvZGVCbG9jayhXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwg
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIDogbV9nbG9iYWxPYmpl
Y3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCkKKyAg
ICAsIG1faGVhcCgmbV9nbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkKKyAgICAsIG1fbnVtQ2FsbGVl
UmVnaXN0ZXJzKDApCisgICAgLCBtX251bVZhcnMoMCkKKyAgICAsIG1faXNDb25zdHJ1Y3Rvcihm
YWxzZSkKKyAgICAsIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKGZhbHNlKQorICAgICwgbV9kaWRG
YWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCisgICAgLCBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwo
ZmFsc2UpCisgICAgLCBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50KGZhbHNlKQorICAgICwgbV9zdGVw
cGluZ01vZGUoU3RlcHBpbmdNb2RlRGlzYWJsZWQpCisgICAgLCBtX251bUJyZWFrcG9pbnRzKDAp
CisgICAgLCBtX293bmVyRXhlY3V0YWJsZShtX2dsb2JhbE9iamVjdC0+dm0oKSwgb3duZXJFeGVj
dXRhYmxlLCBvd25lckV4ZWN1dGFibGUpCisgICAgLCBtX3ZtKCZ2bSkKKyAgICAsIG1faXNTdHJp
Y3RNb2RlKGZhbHNlKQorICAgICwgbV9uZWVkc0FjdGl2YXRpb24oZmFsc2UpCisgICAgLCBtX21h
eUJlRXhlY3V0aW5nKGZhbHNlKQorICAgICwgbV9jb2RlVHlwZShGdW5jdGlvbkNvZGUpCisgICAg
LCBtX29zckV4aXRDb3VudGVyKDApCisgICAgLCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcigw
KQorICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigwKQorI2lmIEVOQUJMRShKSVQp
CisgICAgLCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlKERGRzo6Q2Fubm90Q29tcGlsZSkKKyNlbmRp
ZgoreworICAgIEFTU0VSVChtX2hlYXAtPmlzRGVmZXJyZWQoKSk7CisKKyAgICBtX2hlYXAtPm1f
Y29kZUJsb2Nrcy5hZGQodGhpcyk7CisgICAgbV9oZWFwLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9j
YXRlZChzaXplb2YoQ29kZUJsb2NrKSk7Cit9CisjZW5kaWYKKwogQ29kZUJsb2NrOjp+Q29kZUJs
b2NrKCkKIHsKICAgICBpZiAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKQpAQCAtMjUwOCw3
ICsyNTQxLDExIEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkK
IHsKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX3ZtLT5pbnRlcnByZXRlcjsKLSAg
ICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkpIHsKKyAgICBib29s
IG93bmVkQnlXZWJBc3NlbWJseUV4ZWN1dGFibGUgPSBmYWxzZTsKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisgICAgb3duZWRCeVdlYkFzc2VtYmx5RXhlY3V0YWJsZSA9IG1fb3duZXJFeGVjdXRh
YmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpOworI2VuZGlmCisgICAgaWYgKEpJVENvZGU6
OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkpICYmICFvd25lZEJ5V2ViQXNzZW1ibHlFeGVj
dXRhYmxlKSB7CiAgICAgICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHByb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGUtPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25z
KCk7CiAgICAgICAgIGZvciAoc2l6ZV90IHNpemUgPSBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9u
cy5zaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBJbnN0cnVjdGlv
biogY3VySW5zdHJ1Y3Rpb24gPSAmaW5zdHJ1Y3Rpb25zKClbcHJvcGVydHlBY2Nlc3NJbnN0cnVj
dGlvbnNbaV1dOwpAQCAtMjkxMyw3ICsyOTUwLDcgQEAgSGFuZGxlckluZm8qIENvZGVCbG9jazo6
aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBSZXF1aXIK
IHVuc2lnbmVkIENvZGVCbG9jazo6bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0KQogewogICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwg
aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLSAgICByZXR1cm4gbV9vd25lckV4ZWN1dGFibGUtPmZp
cnN0TGluZSgpICsgbV91bmxpbmtlZENvZGUtPmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldChi
eXRlY29kZU9mZnNldCk7CisgICAgcmV0dXJuIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5maXJz
dExpbmUoKSArIG1fdW5saW5rZWRDb2RlLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0
ZWNvZGVPZmZzZXQpOwogfQogCiB1bnNpZ25lZCBDb2RlQmxvY2s6OmNvbHVtbk51bWJlckZvckJ5
dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQpAQCAtMjkzMiw3ICsyOTY5LDcg
QEAgdm9pZCBDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGQKICAgICBtX3VubGlua2VkQ29kZS0+ZXhwcmVzc2lv
blJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIGRpdm90LCBzdGFydE9mZnNl
dCwgZW5kT2Zmc2V0LCBsaW5lLCBjb2x1bW4pOwogICAgIGRpdm90ICs9IG1fc291cmNlT2Zmc2V0
OwogICAgIGNvbHVtbiArPSBsaW5lID8gMSA6IGZpcnN0TGluZUNvbHVtbk9mZnNldCgpOwotICAg
IGxpbmUgKz0gbV9vd25lckV4ZWN1dGFibGUtPmZpcnN0TGluZSgpOworICAgIGxpbmUgKz0gb3du
ZXJTY3JpcHRFeGVjdXRhYmxlKCktPmZpcnN0TGluZSgpOwogfQogCiBib29sIENvZGVCbG9jazo6
aGFzT3BEZWJ1Z0ZvckxpbmVBbmRDb2x1bW4odW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1u
KQpAQCAtMzAwOSwxMiArMzA0NiwxMiBAQCB2b2lkIENvZGVCbG9jazo6bGlua0luY29taW5nQ2Fs
bChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBMTEludENhbGxMaW5rSW5mbyogaW5jbwogCiB2b2lk
IENvZGVCbG9jazo6aW5zdGFsbCgpCiB7Ci0gICAgb3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxD
b2RlKHRoaXMpOworICAgIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZSh0aGlz
KTsKIH0KIAogUGFzc1JlZlB0cjxDb2RlQmxvY2s+IENvZGVCbG9jazo6bmV3UmVwbGFjZW1lbnQo
KQogewotICAgIHJldHVybiBvd25lckV4ZWN1dGFibGUoKS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxv
Y2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKCkpOworICAgIHJldHVybiBvd25lclNjcmlwdEV4ZWN1
dGFibGUoKS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKCkp
OwogfQogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTMwNDksNiArMzA4NiwxOCBAQCBERkc6OkNhcGFi
aWxpdHlMZXZlbCBGdW5jdGlvbkNvZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKQog
ICAgICAgICByZXR1cm4gREZHOjpmdW5jdGlvbkZvckNvbnN0cnVjdENhcGFiaWxpdHlMZXZlbCh0
aGlzKTsKICAgICByZXR1cm4gREZHOjpmdW5jdGlvbkZvckNhbGxDYXBhYmlsaXR5TGV2ZWwodGhp
cyk7CiB9CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitDb2RlQmxvY2sqIFdlYkFzc2VtYmx5
Q29kZUJsb2NrOjpyZXBsYWNlbWVudCgpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0RG
Rzo6Q2FwYWJpbGl0eUxldmVsIFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpjYXBhYmlsaXR5TGV2ZWxJ
bnRlcm5hbCgpCit7CisgICAgcmV0dXJuIERGRzo6Q2Fubm90Q29tcGlsZTsKK30KKyNlbmRpZgog
I2VuZGlmCiAKIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25SZWFz
b24gcmVhc29uLCBSZW9wdGltaXphdGlvbk1vZGUgbW9kZSwgY29uc3QgRmlyZURldGFpbCogZGV0
YWlsKQpAQCAtMzYwMSw2ICszNjUwLDEwIEBAIHZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxBcnJh
eVByZWRpY3Rpb25zKCkKIAogdm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zKCkK
IHsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgaWYgKG1fb3duZXJFeGVjdXRhYmxlLT5p
c1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKQorICAgICAgICByZXR1cm47CisjZW5kaWYKICAgICB1
cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9ucygpOwogICAgIHVwZGF0ZUFsbEFycmF5UHJl
ZGljdGlvbnMoKTsKIH0KQEAgLTM5MTgsNyArMzk3MSw3IEBAIHZvaWQgQ29kZUJsb2NrOjppbnNl
cnRCYXNpY0Jsb2NrQm91bmRhcmllc0ZvckNvbnRyb2xGbG93UHJvZmlsZXIoVmVjdG9yPEluc3Ry
dWN0CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bj
b2RlSUQoaW5zdHJ1Y3Rpb25zW2VuZElkeF0udS5vcGNvZGUpID09IG9wX3Byb2ZpbGVfY29udHJv
bF9mbG93KTsKICAgICAgICAgICAgIGJhc2ljQmxvY2tFbmRPZmZzZXQgPSBpbnN0cnVjdGlvbnNb
ZW5kSWR4ICsgMV0udS5vcGVyYW5kIC0gMTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGJhc2ljQmxvY2tFbmRPZmZzZXQgPSBtX3NvdXJjZU9mZnNldCArIG1fb3duZXJFeGVjdXRhYmxl
LT5zb3VyY2UoKS5sZW5ndGgoKSAtIDE7IC8vIE9mZnNldCBiZWZvcmUgdGhlIGNsb3NpbmcgYnJh
Y2UuCisgICAgICAgICAgICBiYXNpY0Jsb2NrRW5kT2Zmc2V0ID0gbV9zb3VyY2VPZmZzZXQgKyBv
d25lclNjcmlwdEV4ZWN1dGFibGUoKS0+c291cmNlKCkubGVuZ3RoKCkgLSAxOyAvLyBPZmZzZXQg
YmVmb3JlIHRoZSBjbG9zaW5nIGJyYWNlLgogICAgICAgICAgICAgYmFzaWNCbG9ja1N0YXJ0T2Zm
c2V0ID0gc3RkOjptaW4oYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0LCBiYXNpY0Jsb2NrRW5kT2Zmc2V0
KTsgLy8gU29tZSBzdGFydCBvZmZzZXRzIG1heSBiZSBhdCB0aGUgY2xvc2luZyBicmFjZSwgZW5z
dXJlIGl0IGlzIHRoZSBvZmZzZXQgYmVmb3JlLgogICAgICAgICB9CiAKQEAgLTM5NDYsNyArMzk5
OSw3IEBAIHZvaWQgQ29kZUJsb2NrOjppbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmllc0ZvckNvbnRy
b2xGbG93UHJvZmlsZXIoVmVjdG9yPEluc3RydWN0CiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQogCi0gICAgICAgIEJhc2ljQmxvY2tMb2NhdGlvbiogYmFzaWNCbG9ja0xvY2F0aW9u
ID0gdm0oKS0+Y29udHJvbEZsb3dQcm9maWxlcigpLT5nZXRCYXNpY0Jsb2NrTG9jYXRpb24obV9v
d25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIGJhc2ljQmxvY2tTdGFydE9mZnNldCwgYmFzaWNC
bG9ja0VuZE9mZnNldCk7CisgICAgICAgIEJhc2ljQmxvY2tMb2NhdGlvbiogYmFzaWNCbG9ja0xv
Y2F0aW9uID0gdm0oKS0+Y29udHJvbEZsb3dQcm9maWxlcigpLT5nZXRCYXNpY0Jsb2NrTG9jYXRp
b24ob3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPnNvdXJjZUlEKCksIGJhc2ljQmxvY2tTdGFydE9m
ZnNldCwgYmFzaWNCbG9ja0VuZE9mZnNldCk7CiAKICAgICAgICAgLy8gRmluZCBhbGwgZnVuY3Rp
b25zIHRoYXQgYXJlIGVuY2xvc2VkIHdpdGhpbiB0aGUgcmFuZ2U6IFtiYXNpY0Jsb2NrU3RhcnRP
ZmZzZXQsIGJhc2ljQmxvY2tFbmRPZmZzZXRdCiAgICAgICAgIC8vIGFuZCBpbnNlcnQgdGhlc2Ug
ZnVuY3Rpb25zJyBzdGFydC9lbmQgb2Zmc2V0cyBhcyBnYXBzIGluIHRoZSBjdXJyZW50IEJhc2lj
QmxvY2tMb2NhdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAppbmRleCA5NDk5NDA1NjQzYWE5MTNkYzc4ZTc5OWFhMGNjNTY3MmViMzZlZjNjLi5jYjllYmQ2
MWI1ZGRmZTBjYjNmNjdmMzEwZGY4ODE3N2RkNjM1NDliIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC05Niw2ICs5Niw5IEBAIHByb3RlY3RlZDoKICAg
ICBDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90aGVyKTsKICAgICAg
ICAgCiAgICAgQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5s
aW5rZWRDb2RlQmxvY2sqLCBKU1Njb3BlKiwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4sIHVu
c2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KTsKKyNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgQ29kZUJsb2NrKFdlYkFzc2VtYmx5RXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlLCBWTSYsIEpTR2xvYmFsT2JqZWN0Kik7CisjZW5kaWYKIAogICAg
IFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CiAgICAgSGVhcCog
bV9oZWFwOwpAQCAtMzAzLDcgKzMwNiw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgamV0dGlzb24o
UHJvZmlsZXI6OkpldHRpc29uUmVhc29uLCBSZW9wdGltaXphdGlvbk1vZGUgPSBEb250Q291bnRS
ZW9wdGltaXphdGlvbiwgY29uc3QgRmlyZURldGFpbCogPSBudWxscHRyKTsKICAgICAKLSAgICBT
Y3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBtX293bmVy
RXhlY3V0YWJsZS5nZXQoKTsgfQorICAgIEV4ZWN1dGFibGVCYXNlKiBvd25lckV4ZWN1dGFibGUo
KSBjb25zdCB7IHJldHVybiBtX293bmVyRXhlY3V0YWJsZS5nZXQoKTsgfQorICAgIFNjcmlwdEV4
ZWN1dGFibGUqIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGpzQ2FzdDxT
Y3JpcHRFeGVjdXRhYmxlKj4obV9vd25lckV4ZWN1dGFibGUuZ2V0KCkpOyB9CiAKICAgICB2b2lk
IHNldFZNKFZNKiB2bSkgeyBtX3ZtID0gdm07IH0KICAgICBWTSogdm0oKSB7IHJldHVybiBtX3Zt
OyB9CkBAIC0zNDYsNyArMzUwLDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbmVlZHNB
Y3RpdmF0aW9uOwogICAgIH0KICAgICAKLSAgICBDb2RlVHlwZSBjb2RlVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb2RlVHlwZSgpOyB9CisgICAgQ29kZVR5cGUgY29kZVR5
cGUoKSBjb25zdAorICAgIHsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAgIGlmICht
X293bmVyRXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKSkKKyAgICAgICAgICAg
IHJldHVybiBGdW5jdGlvbkNvZGU7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIG1fdW5saW5rZWRD
b2RlLT5jb2RlVHlwZSgpOworICAgIH0KKwogICAgIFB1dFByb3BlcnR5U2xvdDo6Q29udGV4dCBw
dXRCeUlkQ29udGV4dCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoY29kZVR5cGUoKSA9PSBF
dmFsQ29kZSkKQEAgLTk4Myw3ICs5OTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgdW5zaWdu
ZWQgbV9udW1CcmVha3BvaW50cyA6IDMwOwogICAgICAgICB9OwogICAgIH07Ci0gICAgV3JpdGVC
YXJyaWVyPFNjcmlwdEV4ZWN1dGFibGU+IG1fb3duZXJFeGVjdXRhYmxlOworICAgIFdyaXRlQmFy
cmllcjxFeGVjdXRhYmxlQmFzZT4gbV9vd25lckV4ZWN1dGFibGU7CiAgICAgVk0qIG1fdm07CiAK
ICAgICBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rpb25zOwpAQCAtMTEz
NCw2ICsxMTQ2LDI3IEBAIHByb3RlY3RlZDoKICNlbmRpZgogfTsKIAorI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKK2NsYXNzIFdlYkFzc2VtYmx5Q29kZUJsb2NrIDogcHVibGljIENvZGVCbG9jayB7
CitwdWJsaWM6CisgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBX
ZWJBc3NlbWJseUNvZGVCbG9jayYgb3RoZXIpCisgICAgICAgIDogQ29kZUJsb2NrKENvcHlQYXJz
ZWRCbG9jaywgb3RoZXIpCisgICAgeworICAgIH0KKworICAgIFdlYkFzc2VtYmx5Q29kZUJsb2Nr
KFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJs
ZSwgdm0sIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgfQorCisjaWYgRU5BQkxFKEpJVCkKK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbEludGVybmFs
KCkgb3ZlcnJpZGU7CisjZW5kaWYKK307CisjZW5kaWYKKwogaW5saW5lIFJlZ2lzdGVyJiBFeGVj
U3RhdGU6OnIoaW50IGluZGV4KQogewogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+
Y29kZUJsb2NrKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNw
cAppbmRleCAzNTM4MzcyNzMwMzYwYzkzMGExZTZmN2Y2ODdlNWE5MzQwZGIxYjQwLi5jNmYxNGE5
NDE1ODBiYjRiZmM1MzU3OWFiNTM4NjA1OGYzOWNiODIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIERlYnVn
Z2VyOjpyZWdpc3RlckNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIAogdm9pZCBEZWJ1
Z2dlcjo6dG9nZ2xlQnJlYWtwb2ludChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnJlYWtwb2ludCYg
YnJlYWtwb2ludCwgQnJlYWtwb2ludFN0YXRlIGVuYWJsZWRPck5vdCkKIHsKLSAgICBTY3JpcHRF
eGVjdXRhYmxlKiBleGVjdXRhYmxlID0gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsKKyAg
ICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gY29kZUJsb2NrLT5vd25lclNjcmlwdEV4
ZWN1dGFibGUoKTsKIAogICAgIFNvdXJjZUlEIHNvdXJjZUlEID0gc3RhdGljX2Nhc3Q8U291cmNl
SUQ+KGV4ZWN1dGFibGUtPnNvdXJjZUlEKCkpOwogICAgIGlmIChicmVha3BvaW50LnNvdXJjZUlE
ICE9IHNvdXJjZUlEKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2Vy
L0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlckNhbGxGcmFtZS5jcHAKaW5kZXggYmYwOTNlODliNDRiYWYzNTU2MTE1MTE3NDYyNzdh
MTAxYzdhNzI2Yi4uZDM4M2MzZmZkMDgyMGY4YTJiNzFlODdjNDU1MmRmNzdkMDY1NGY3YiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1l
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJh
bWUuY3BwCkBAIC0yNDIsNyArMjQyLDcgQEAgU291cmNlSUQgRGVidWdnZXJDYWxsRnJhbWU6OnNv
dXJjZUlERm9yQ2FsbEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBpZiAoIWNvZGVCbG9jaykK
ICAgICAgICAgcmV0dXJuIG5vU291cmNlSUQ7Ci0gICAgcmV0dXJuIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCktPnNvdXJjZUlEKCk7CisgICAgcmV0dXJuIGNvZGVCbG9jay0+b3duZXJTY3Jp
cHRFeGVjdXRhYmxlKCktPnNvdXJjZUlEKCk7CiB9CiAKIEpTVmFsdWUgRGVidWdnZXJDYWxsRnJh
bWU6OnRoaXNWYWx1ZUZvckNhbGxGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5kZXggY2JiYTlj
ODUwMjY1ODY3MjQ4YTEzOGI4NjcwMDJhNDJmZGY3OTIzYS4uZDlhOTYyYWUxZmFmNDljYjcyZTM4
NDU1ZTM2ZTdlMjhhOTRiNTU3MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTkzOSw3ICs5MzksNyBAQCBwcml2YXRlOgogICAgICAg
ICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBt
X2lubGluZUNhbGxGcmFtZTsKICAgICAgICAgCi0gICAgICAgIFNjcmlwdEV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCk7IH0KKyAg
ICAgICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZSgpIHsgcmV0dXJuIG1fY29kZUJsb2Nr
LT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKTsgfQogICAgICAgICAKICAgICAgICAgUXVlcnlhYmxl
RXhpdFByb2ZpbGUgbV9leGl0UHJvZmlsZTsKICAgICAgICAgCkBAIC0xMjUyLDggKzEyNTIsOCBA
QCB1bnNpZ25lZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5pbmdDb3N0KENhbGxWYXJpYW50IGNhbGxl
ZSwgaW50IGFyZ3VtZW50Q291bnRJbmNsdQogICAgICAgICBkYXRhTG9nKCIgICAgTWlnaHQgaW5s
aW5lIGZ1bmN0aW9uOiAiLCBtaWdodElubGluZUZ1bmN0aW9uRm9yKGNvZGVCbG9jaywga2luZCks
ICJcbiIpOwogICAgICAgICBkYXRhTG9nKCIgICAgTWlnaHQgY29tcGlsZSBmdW5jdGlvbjogIiwg
bWlnaHRDb21waWxlRnVuY3Rpb25Gb3IoY29kZUJsb2NrLCBraW5kKSwgIlxuIik7CiAgICAgICAg
IGRhdGFMb2coIiAgICBJcyBzdXBwb3J0ZWQgZm9yIGlubGluaW5nOiAiLCBpc1N1cHBvcnRlZEZv
cklubGluaW5nKGNvZGVCbG9jayksICJcbiIpOwotICAgICAgICBkYXRhTG9nKCIgICAgTmVlZHMg
YWN0aXZhdGlvbjogIiwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+bmVlZHNBY3RpdmF0
aW9uKCksICJcbiIpOwotICAgICAgICBkYXRhTG9nKCIgICAgSXMgaW5saW5pbmcgY2FuZGlkYXRl
OiAiLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pc0lubGluaW5nQ2FuZGlkYXRlKCks
ICJcbiIpOworICAgICAgICBkYXRhTG9nKCIgICAgTmVlZHMgYWN0aXZhdGlvbjogIiwgY29kZUJs
b2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+bmVlZHNBY3RpdmF0aW9uKCksICJcbiIpOwor
ICAgICAgICBkYXRhTG9nKCIgICAgSXMgaW5saW5pbmcgY2FuZGlkYXRlOiAiLCBjb2RlQmxvY2st
Pm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5pc0lubGluaW5nQ2FuZGlkYXRlKCksICJcbiIpOwog
ICAgIH0KICAgICBpZiAoIWNhbklubGluZShjYXBhYmlsaXR5TGV2ZWwpKSB7CiAgICAgICAgIGlm
ICh2ZXJib3NlKQpAQCAtNDQzNiw3ICs0NDM2LDcgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0
YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkoCiAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2dy
YXBoLmZyZWV6ZShjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKTsKICAgICAgICAgLy8gVGhl
IG93bmVyIGlzIHRoZSBtYWNoaW5lIGNvZGUgYmxvY2ssIGFuZCB3ZSBhbHJlYWR5IGhhdmUgYSBi
YXJyaWVyIG9uIHRoYXQgd2hlbiB0aGUKICAgICAgICAgLy8gcGxhbiBmaW5pc2hlcy4KLSAgICAg
ICAgbV9pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuc2V0V2l0aG91dFdyaXRlQmFycmllcihj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKTsKKyAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUt
PmV4ZWN1dGFibGUuc2V0V2l0aG91dFdyaXRlQmFycmllcihjb2RlQmxvY2stPm93bmVyU2NyaXB0
RXhlY3V0YWJsZSgpKTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPnNldFN0YWNrT2Zmc2V0
KGlubGluZUNhbGxGcmFtZVN0YXJ0Lm9mZnNldCgpIC0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZSk7CiAgICAgICAgIGlmIChjYWxsZWUpIHsKICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZy
YW1lLT5jYWxsZWVSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGNhbGxlZSk7CkBA
IC00NTI5LDcgKzQ1MjksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygp
CiAgICAgICAgIH0KICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICI6IG5lZWRzQWN0aXZh
dGlvbiA9ICIsIGNvZGVCbG9jay0+bmVlZHNBY3RpdmF0aW9uKCksCi0gICAgICAgICAgICAiLCBp
c1N0cmljdE1vZGUgPSAiLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1v
ZGUoKSwgIlxuIik7CisgICAgICAgICAgICAiLCBpc1N0cmljdE1vZGUgPSAiLCBjb2RlQmxvY2st
Pm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSwgIlxuIik7CiAgICAgICAg
IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCktPmR1bXBCeXRlY29kZSgpOwogICAgIH0KICAg
ICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAppbmRl
eCA3ZjU0MzA4NDg1MjkxNTkzZmI3NWY2YmJjMDY5YmFhM2I2Y2QxMzI1Li4xZjI3YzU1NjU3NjJj
MjgyM2NkNzhlYzkxNzhhM2MxMTVhOTYwYTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCkBAIC00NCw3ICs0NCwxMSBAQCBib29sIGlzU3VwcG9y
dGVkKCkKIAogYm9vbCBpc1N1cHBvcnRlZEZvcklubGluaW5nKENvZGVCbG9jayogY29kZUJsb2Nr
KQogewotICAgIHJldHVybiBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pc0lubGluaW5n
Q2FuZGlkYXRlKCk7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGlmIChjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICByZXR1cm4gY29kZUJsb2NrLT5vd25lclNjcmlwdEV4
ZWN1dGFibGUoKS0+aXNJbmxpbmluZ0NhbmRpZGF0ZSgpOwogfQogCiBib29sIG1pZ2h0Q29tcGls
ZUV2YWwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgKaW5kZXggNGRiNDcxYjFmZGE5NWU4M2Q5Njk5OThiZjc2MWNkMjBmNDczZjkxNS4uNDY0NzZk
NDc4YjNkZjEwZDc1ZGZmNDliYTMxMGM1OWVhOTg3ZTA0NyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaApAQCAtMzQ1LDcgKzM0NSw3IEBAIHB1YmxpYzoKICAgICBTY3JpcHRFeGVj
dXRhYmxlKiBleGVjdXRhYmxlRm9yKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQog
ICAgIHsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICByZXR1cm4g
bV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOworICAgICAgICAgICAgcmV0dXJuIG1fY29k
ZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKTsKICAgICAgICAgCiAgICAgICAgIHJldHVy
biBpbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAppbmRleCAwMmRiZTRmYTVkZDM0MjRlZWQzYzUx
MmU4OWI2MTRhZWQyYjgwMjgwLi5kODU3NjVmMGY2MGY5NTQ5YWMwZjIyNzcwMzkzM2JiNjdiNjVj
YjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcApAQCAtMTEy
LDcgKzExMiw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIENvZGVC
bG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluCiAgICAgc2FuaXRpemVTdGFja0Zv
clZNKHZtKTsKICAgICAKICAgICBpZiAoYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKS0+c2V0RGlkVHJ5VG9FbnRlckluTG9vcCh0cnVlKTsKKyAgICAg
ICAgY29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+c2V0RGlkVHJ5VG9FbnRlcklu
TG9vcCh0cnVlKTsKICAgICAKICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUQ29k
ZTo6REZHSklUKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgp
ID09IEpJVENvZGU6OkZUTEpJVCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcAppbmRleCBmMzNkNDA1Y2Jh
Y2Q2NjMxY2IyOTQ2ZjA1ZWQ5YmYzMzFhMjNmYTQ5Li5mZDcxMjc0YTM1NjE0YjJmMDc1ZjU3NWFh
MTViMTliMWIyN2ZjYjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAKQEAgLTY2LDYgKzY2LDEwIEBA
IHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX3JlbWFpbmluZ0NhcGFjaXR5Rm9y
RnJhbWVDYXB0dXJlKSB7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAgICAgICAgaWYg
KHZpc2l0b3ItPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKS0+aXNXZWJBc3NlbWJseUV4
ZWN1dGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51
ZTsKKyNlbmRpZgogICAgICAgICAgICAgdW5zaWduZWQgbGluZTsKICAgICAgICAgICAgIHVuc2ln
bmVkIGNvbHVtbjsKICAgICAgICAgICAgIHZpc2l0b3ItPmNvbXB1dGVMaW5lQW5kQ29sdW1uKGxp
bmUsIGNvbHVtbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcAppbmRleCBjYzM0YTY2NWJlMzBkYjI5ZTBkYWRlM2M3ZDhhNTNhNDdhMGY1
ZjcyLi5mMDRkMGIzNTBmOTE1ZWMyZTRhMmU2MzdlN2I1NmM2OTQ4OWUwMDcyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTE2
OCw3ICsxNjgsNyBAQCBKU1ZhbHVlIGV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgICAg
IEFTU0VSVCghY2FsbEZyYW1lLT52bSgpLmV4Y2VwdGlvbigpKTsKIAogICAgICAgICBUaGlzVERa
TW9kZSB0aGlzVERaTW9kZSA9IGNhbGxlckNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+
Y29uc3RydWN0b3JLaW5kKCkgPT0gQ29uc3RydWN0b3JLaW5kOjpEZXJpdmVkID8gVGhpc1REWk1v
ZGU6OkFsd2F5c0NoZWNrIDogVGhpc1REWk1vZGU6OkNoZWNrSWZOZWVkZWQ7Ci0gICAgICAgIGV2
YWwgPSBjYWxsZXJDb2RlQmxvY2stPmV2YWxDb2RlQ2FjaGUoKS5nZXRTbG93KGNhbGxGcmFtZSwg
Y2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVyQ29kZUJsb2NrLT5pc1N0
cmljdE1vZGUoKSwgdGhpc1REWk1vZGUsIHByb2dyYW1Tb3VyY2UsIGNhbGxlclNjb3BlQ2hhaW4p
OworICAgICAgICBldmFsID0gY2FsbGVyQ29kZUJsb2NrLT5ldmFsQ29kZUNhY2hlKCkuZ2V0U2xv
dyhjYWxsRnJhbWUsIGNhbGxlckNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRhYmxlKCksIGNh
bGxlckNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCksIHRoaXNURFpNb2RlLCBwcm9ncmFtU291cmNl
LCBjYWxsZXJTY29wZUNoYWluKTsKICAgICAgICAgaWYgKCFldmFsKQogICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQpAQCAtNTE1LDYgKzUxNSwxNiBAQCBTdHJpbmcgU3Rh
Y2tGcmFtZTo6dG9TdHJpbmcoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgcmV0dXJuIHRyYWNl
QnVpbGQudG9TdHJpbmcoKS5pbXBsKCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1dlYkFz
c2VtYmx5RXhlY3V0YWJsZShFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSkKK3sKKyNpZiAhRU5B
QkxFKFdFQkFTU0VNQkxZKQorICAgIFVOVVNFRF9QQVJBTShleGVjdXRhYmxlKTsKKyAgICByZXR1
cm4gZmFsc2U7CisjZWxzZQorICAgIHJldHVybiBleGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhl
Y3V0YWJsZSgpOworI2VuZGlmCit9CisKIGNsYXNzIEdldFN0YWNrVHJhY2VGdW5jdG9yIHsKIHB1
YmxpYzoKICAgICBHZXRTdGFja1RyYWNlRnVuY3RvcihWTSYgdm0sIFZlY3RvcjxTdGFja0ZyYW1l
PiYgcmVzdWx0cywgc2l6ZV90IHJlbWFpbmluZ0NhcGFjaXR5KQpAQCAtNTI4LDE1ICs1MzgsMTcg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgVk0mIHZtID0gbV92bTsKICAgICAgICAgaWYgKG1f
cmVtYWluaW5nQ2FwYWNpdHlGb3JGcmFtZUNhcHR1cmUpIHsKLSAgICAgICAgICAgIGlmICh2aXNp
dG9yLT5pc0pTRnJhbWUoKSAmJiAhdmlzaXRvci0+Y29kZUJsb2NrKCktPnVubGlua2VkQ29kZUJs
b2NrKCktPmlzQnVpbHRpbkZ1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgIGlmICh2aXNpdG9yLT5p
c0pTRnJhbWUoKQorICAgICAgICAgICAgICAgICYmICFpc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSh2
aXNpdG9yLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCkpCisgICAgICAgICAgICAgICAg
JiYgIXZpc2l0b3ItPmNvZGVCbG9jaygpLT51bmxpbmtlZENvZGVCbG9jaygpLT5pc0J1aWx0aW5G
dW5jdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB2aXNp
dG9yLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBTdGFja0ZyYW1lIHMgPSB7CiAgICAg
ICAgICAgICAgICAgICAgIFN0cm9uZzxKU09iamVjdD4odm0sIHZpc2l0b3ItPmNhbGxlZSgpKSwK
ICAgICAgICAgICAgICAgICAgICAgZ2V0U3RhY2tGcmFtZUNvZGVUeXBlKHZpc2l0b3IpLAotICAg
ICAgICAgICAgICAgICAgICBTdHJvbmc8U2NyaXB0RXhlY3V0YWJsZT4odm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCkpLAorICAgICAgICAgICAgICAgICAgICBTdHJvbmc8U2NyaXB0RXhl
Y3V0YWJsZT4odm0sIGNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRhYmxlKCkpLAogICAgICAg
ICAgICAgICAgICAgICBTdHJvbmc8VW5saW5rZWRDb2RlQmxvY2s+KHZtLCBjb2RlQmxvY2stPnVu
bGlua2VkQ29kZUJsb2NrKCkpLAogICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2stPnNvdXJj
ZSgpLAotICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5m
aXJzdExpbmUoKSwKKyAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5vd25lclNjcmlwdEV4
ZWN1dGFibGUoKS0+Zmlyc3RMaW5lKCksCiAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jay0+
Zmlyc3RMaW5lQ29sdW1uT2Zmc2V0KCksCiAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jay0+
c291cmNlT2Zmc2V0KCksCiAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3ItPmJ5dGVjb2RlT2Zm
c2V0KCksCkBAIC02MjksNyArNjQxLDcgQEAgcHVibGljOgogICAgICAgICBtX2NvZGVCbG9jayA9
IHZpc2l0b3ItPmNvZGVCbG9jaygpOwogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9
IHZpc2l0b3ItPmJ5dGVjb2RlT2Zmc2V0KCk7CiAKLSAgICAgICAgaWYgKG1faXNUZXJtaW5hdGlv
biB8fCAhKG1faGFuZGxlciA9IG1fY29kZUJsb2NrID8gbV9jb2RlQmxvY2stPmhhbmRsZXJGb3JC
eXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkgOiBudWxscHRyKSkgeworICAgICAgICBpZiAo
bV9pc1Rlcm1pbmF0aW9uIHx8ICEobV9oYW5kbGVyID0gKG1fY29kZUJsb2NrICYmICFpc1dlYkFz
c2VtYmx5RXhlY3V0YWJsZShtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpKSA/IG1fY29k
ZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpIDogbnVsbHB0
cikpIHsKICAgICAgICAgICAgIGlmICghdW53aW5kQ2FsbEZyYW1lKHZpc2l0b3IpKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IHZtLmVuYWJsZWRQcm9m
aWxlcigpKQogICAgICAgICAgICAgICAgICAgICBwcm9maWxlci0+ZXhjZXB0aW9uVW53aW5kKG1f
Y2FsbEZyYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9TdGFja1Zpc2l0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0
YWNrVmlzaXRvci5jcHAKaW5kZXggZDM3NmRiNDIxN2ZhNjFlNmMzMmVhOWRhMjdhNzViZmIwMzMw
YjNiNy4uM2YyYjkxNDA0NTFkNDg4MzRhOWY3MTAzMzQ2NGEyMTQ3ZDFiZGI3MCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKQEAg
LTIyMSw3ICsyMjEsNyBAQCBTdHJpbmcgU3RhY2tWaXNpdG9yOjpGcmFtZTo6c291cmNlVVJMKCkK
ICAgICBjYXNlIENvZGVUeXBlOjpFdmFsOgogICAgIGNhc2UgQ29kZVR5cGU6OkZ1bmN0aW9uOgog
ICAgIGNhc2UgQ29kZVR5cGU6Okdsb2JhbDogewotICAgICAgICBTdHJpbmcgc291cmNlVVJMID0g
Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLT5zb3VyY2VVUkwoKTsKKyAgICAgICAgU3Ry
aW5nIHNvdXJjZVVSTCA9IGNvZGVCbG9jaygpLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+c291
cmNlVVJMKCk7CiAgICAgICAgIGlmICghc291cmNlVVJMLmlzRW1wdHkoKSkKICAgICAgICAgICAg
IHRyYWNlTGluZSA9IHNvdXJjZVVSTC5pbXBsKCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjkyLDEx
ICsyOTIsMTEgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OkZyYW1lOjpjb21wdXRlTGluZUFuZENvbHVt
bih1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikKICAgICB1bnNpZ25lZCBkaXZvdENv
bHVtbiA9IDA7CiAgICAgcmV0cmlldmVFeHByZXNzaW9uSW5mbyhkaXZvdCwgdW51c2VkU3RhcnRP
ZmZzZXQsIHVudXNlZEVuZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdENvbHVtbik7CiAKLSAgICBs
aW5lID0gZGl2b3RMaW5lICsgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+Zmlyc3RMaW5l
KCk7CisgICAgbGluZSA9IGRpdm90TGluZSArIGNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRh
YmxlKCktPmZpcnN0TGluZSgpOwogICAgIGNvbHVtbiA9IGRpdm90Q29sdW1uICsgKGRpdm90TGlu
ZSA/IDEgOiBjb2RlQmxvY2stPmZpcnN0TGluZUNvbHVtbk9mZnNldCgpKTsKIAotICAgIGlmIChj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5oYXNPdmVycmlkZUxpbmVOdW1iZXIoKSkKLSAg
ICAgICAgbGluZSA9IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPm92ZXJyaWRlTGluZU51
bWJlcigpOworICAgIGlmIChjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5oYXNP
dmVycmlkZUxpbmVOdW1iZXIoKSkKKyAgICAgICAgbGluZSA9IGNvZGVCbG9jay0+b3duZXJTY3Jp
cHRFeGVjdXRhYmxlKCktPm92ZXJyaWRlTGluZU51bWJlcigpOwogfQogCiB2b2lkIFN0YWNrVmlz
aXRvcjo6RnJhbWU6OnJldHJpZXZlRXhwcmVzc2lvbkluZm8oaW50JiBkaXZvdCwgaW50JiBzdGFy
dE9mZnNldCwgaW50JiBlbmRPZmZzZXQsIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1u
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggYjdh
Mzg2ODlmOGU1MmQzYTRlOTZjMTA5MzRhZDlkNWVmODkzYzY2My4uMTYzNzg2NmEyNDVhZmQyZWYz
ZGVkMmUyMTBjNThmNzFiNjZkYzMxZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCkBAIC04NDgsOSArODQ4LDIyIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8qIGNh
bGxMCiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cjsKICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IDA7Ci0gICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCisg
ICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpIHsKICAgICAgICAgY29kZVB0ciA9
IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3IoKnZtLCBraW5kLCBNdXN0Q2hlY2tBcml0eSwgY2Fs
bExpbmtJbmZvLT5yZWdpc3RlclByZXNlcnZhdGlvbk1vZGUoKSk7Ci0gICAgZWxzZSB7CisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIH0gZWxzZSBpZiAoZXhlY3V0YWJsZS0+aXNXZWJBc3Nl
bWJseUV4ZWN1dGFibGUoKSkgeworICAgICAgICBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIHdlYkFz
c2VtYmx5RXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PFdlYkFzc2VtYmx5RXhlY3V0YWJsZSo+KGV4
ZWN1dGFibGUpOworICAgICAgICB3ZWJBc3NlbWJseUV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVj
dXRpb24oZXhlY0NhbGxlZSk7CisgICAgICAgIGNvZGVCbG9jayA9IHdlYkFzc2VtYmx5RXhlY3V0
YWJsZS0+Y29kZUJsb2NrRm9yQ2FsbCgpOworICAgICAgICBBU1NFUlQoY29kZUJsb2NrKTsKKyAg
ICAgICAgQXJpdHlDaGVja01vZGUgYXJpdHk7CisgICAgICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSkpCisgICAgICAgICAgICBhcml0eSA9IE11c3RDaGVja0FyaXR5Owor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBhcml0eSA9IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDsK
KyAgICAgICAgY29kZVB0ciA9IHdlYkFzc2VtYmx5RXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcigq
dm0sIGtpbmQsIGFyaXR5LCBjYWxsTGlua0luZm8tPnJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSgp
KTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVu
Y3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0
YWJsZSk7CiAKICAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxl
LT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0
KSB7CkBAIC04OTYsMTcgKzkwOSwzMyBAQCBpbmxpbmUgY2hhciogdmlydHVhbEZvcldpdGhGdW5j
dGlvbigKICAgICBKU1Njb3BlKiBzY29wZSA9IGZ1bmN0aW9uLT5zY29wZVVuY2hlY2tlZCgpOwog
ICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWV4ZWN1dGFibGUtPmhhc0pJVENvZGVGb3Ioa2luZCkpKSB7Ci0g
ICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nh
c3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CisgICAgICAgIGJvb2wgaXNXZWJB
c3NlbWJseUV4ZWN1dGFibGUgPSBmYWxzZTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAg
ICAgIGlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlID0gZXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseUV4
ZWN1dGFibGUoKTsKKyNlbmRpZgorICAgICAgICBpZiAoIWlzV2ViQXNzZW1ibHlFeGVjdXRhYmxl
KSB7CisgICAgICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9
IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogCi0gICAgICAg
IGlmICghaXNDYWxsKGtpbmQpICYmIGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29uc3RydWN0QWJpbGl0
eSgpID09IENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdCkgewotICAgICAgICAgICAg
ZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJv
cihleGVjLCBmdW5jdGlvbikpOwotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVy
YXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoIWlzQ2FsbChraW5kKSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxp
dHkoKSA9PSBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsKKyAgICAgICAgICAg
ICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEFDb25zdHJ1Y3Rv
ckVycm9yKGV4ZWMsIGZ1bmN0aW9uKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93
UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAg
fQogCi0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFy
ZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBmdW5jdGlvbiwgc2NvcGUsIGtpbmQpOwotICAgICAg
ICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhl
YywgZXJyb3IpOwotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZt
LT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgSlNPYmplY3QqIGVycm9yID0g
ZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWNDYWxsZWUsIGZ1bmN0
aW9uLCBzY29wZSwga2luZCk7CisgICAgICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAg
ICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGVycm9yKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmdldENUSVN0dWIodGhyb3dF
eGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQorICAgICAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkpIHsKKyAgICAgICAgICAgICAg
ICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVy
cm9yKGV4ZWMsIGZ1bmN0aW9uKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0
aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIHdlYkFzc2VtYmx5RXhlY3V0YWJs
ZSA9IHN0YXRpY19jYXN0PFdlYkFzc2VtYmx5RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOworICAg
ICAgICAgICAgd2ViQXNzZW1ibHlFeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWND
YWxsZWUpOworI2VuZGlmCiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3IoCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmNwcAppbmRleCA3Y2Y2NzA4YTRiMzZiNjUyZmQyMjBlMDc0YzBhY2IwZmE0
OWI1OTM0Li44ZDQzZDM3ZTkxMWM4ODQ5ZDUyNTE2YTI5YzRhYzA3MjQ1ZjU3MDcyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKQEAgLTE2OTgsNiArMTY5OCwxNiBAQCBzdHJ1
Y3QgQ2FsbFRvQ29kZVB0ciB7CiB9OwogfSAvLyBhbm5vbnltb3VzIG5hbWVzcGFjZQogCitzdGF0
aWMgaW5saW5lIGJvb2wgaXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoRXhlY3V0YWJsZUJhc2UqIGV4
ZWN1dGFibGUpCit7CisjaWYgIUVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBVTlVTRURfUEFSQU0o
ZXhlY3V0YWJsZSk7CisgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKKyAgICByZXR1cm4gZXhlY3V0
YWJsZS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKTsKKyNlbmRpZgorfQorCiB2b2lkIGxpbmtQ
b2x5bW9ycGhpY0NhbGwoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbywgQ2FsbFZhcmlhbnQgbmV3VmFyaWFudCkKIHsKQEAgLTE3NDIsNyArMTc1MiwxMSBA
QCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgICAgIGlmICh2YXJpYW50LmV4ZWN1dGFi
bGUoKS0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAgICAgIGNvZGVCbG9jayA9IG51bGxwdHI7
CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KHZhcmlhbnQuZXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrRm9yQ2FsbCgpOwor
ICAgICAgICAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSB2YXJpYW50LmV4ZWN1dGFi
bGUoKTsKKyAgICAgICAgICAgIGlmICghaXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoZXhlY3V0YWJs
ZSkpCisgICAgICAgICAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KGV4ZWN1dGFibGUpLT5jb2RlQmxvY2tGb3JDYWxsKCk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PFdlYkFzc2VtYmx5RXhlY3V0YWJsZSo+
KGV4ZWN1dGFibGUpLT5jb2RlQmxvY2tGb3JDYWxsKCk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIC8vIElmIHdlIGNhbm5vdCBoYW5kbGUgYSBjYWxsZWUsIGFzc3VtZSB0aGF0IGl0J3MgYmV0
dGVyIGZvciB0aGlzIHdob2xlIHRoaW5nIHRvIGJlIGEKICAgICAgICAgICAgIC8vIHZpcnR1YWwg
Y2FsbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKaW5kZXggZTky
NmY1MmRjNzZkOWVkZTJmMGUzYTViM2RjMjZiMzM2YTkyZjg1ZC4uNzMxM2ZjZTI0MjAwY2M5MTYx
NjllODE0YTBhMDU5MzBhYWJhYTUzZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50RGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50RGF0YS5jcHAKQEAgLTEzMiw4ICsxMzIsOCBAQCB2b2lkIERhdGE6OnBlcmZvcm1Bc3NlcnRp
b25zKFZNJiB2bSkKICAgICBBU1NFUlQobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwgPT0g
NjQpOwogI2VuZGlmCiAgICAgQVNTRVJUKFN0cmluZ1R5cGUgPT0gNik7Ci0gICAgQVNTRVJUKE9i
amVjdFR5cGUgPT0gMTgpOwotICAgIEFTU0VSVChGaW5hbE9iamVjdFR5cGUgPT0gMTkpOworICAg
IEFTU0VSVChPYmplY3RUeXBlID09IDE5KTsKKyAgICBBU1NFUlQoRmluYWxPYmplY3RUeXBlID09
IDIwKTsKICAgICBBU1NFUlQoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9PSAxKTsKICAgICBBU1NF
UlQoSW1wbGVtZW50c0hhc0luc3RhbmNlID09IDIpOwogICAgIEFTU0VSVChJbXBsZW1lbnRzRGVm
YXVsdEhhc0luc3RhbmNlID09IDgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5jcHAKaW5kZXggNjYzNDg5YmJjZGRiOTk3MDNkMThjNDE0ZGY5Y2ZiNDQ0
MmJhMTFjZS4uNjAyZTYzMzAxNzI4MjNlOTgxZDIxOTkxZDg5ODE1ZjVjYWM1ZGM3OCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCkBAIC0xMTE2
LDkgKzExMTYsMTQgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlY1N0
YXRlKiBleGVjQ2FsbGVlLCBJbnN0cnVjdGlvbiogcGMsIENvZGUKIAogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gMDsKLSAgICBp
ZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICBib29sIGlzV2ViQXNzZW1ibHlF
eGVjdXRhYmxlID0gZmFsc2U7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGlzV2ViQXNz
ZW1ibHlFeGVjdXRhYmxlID0gZXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKTsK
KyNlbmRpZgorCisgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpIHsKICAgICAg
ICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Iodm0sIGtpbmQsIE11c3RDaGVj
a0FyaXR5LCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKLSAgICBlbHNlIHsKKyAg
ICB9IGVsc2UgaWYgKCFpc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSkgewogICAgICAgICBGdW5jdGlv
bkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogCiAgICAgICAgIGlmICghaXNDYWxsKGtpbmQpICYmIGZ1
bmN0aW9uRXhlY3V0YWJsZS0+Y29uc3RydWN0QWJpbGl0eSgpID09IENvbnN0cnVjdEFiaWxpdHk6
OkNhbm5vdENvbnN0cnVjdCkKQEAgLTExMzUsNiArMTE0MCwxOSBAQCBpbmxpbmUgU2xvd1BhdGhS
ZXR1cm5UeXBlIHNldFVwQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEluc3RydWN0aW9uKiBw
YywgQ29kZQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhcml0eSA9IEFyaXR5Q2hlY2tOb3RS
ZXF1aXJlZDsKICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2lu
dEZvcih2bSwga2luZCwgYXJpdHksIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOwor
ICAgIH0gZWxzZSB7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAgICBXZWJBc3NlbWJs
eUV4ZWN1dGFibGUqIHdlYkFzc2VtYmx5RXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PFdlYkFzc2Vt
Ymx5RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOworICAgICAgICB3ZWJBc3NlbWJseUV4ZWN1dGFi
bGUtPnByZXBhcmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSk7CisgICAgICAgIGNvZGVCbG9jayA9
IHdlYkFzc2VtYmx5RXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yQ2FsbCgpOworICAgICAgICBBU1NF
UlQoY29kZUJsb2NrKTsKKyAgICAgICAgQXJpdHlDaGVja01vZGUgYXJpdHk7CisgICAgICAgIGlm
IChleGVjQ2FsbGVlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8
c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpCisgICAgICAgICAgICBhcml0eSA9
IE11c3RDaGVja0FyaXR5OworICAgICAgICBlbHNlCisgICAgICAgICAgICBhcml0eSA9IEFyaXR5
Q2hlY2tOb3RSZXF1aXJlZDsKKyAgICAgICAgY29kZVB0ciA9IHdlYkFzc2VtYmx5RXhlY3V0YWJs
ZS0+ZW50cnlwb2ludEZvcih2bSwga2luZCwgYXJpdHksIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90
UmVxdWlyZWQpOworI2VuZGlmCiAgICAgfQogICAgIAogICAgIEFTU0VSVCghIWNvZGVQdHIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtCmluZGV4IDVhZDgzNDY1Y2QxYTRlOGY0ZTk2NGE2N2VkMDhhMTU3ZTdmYTM3NWEuLjEzNmM5
MTY2MWYyMmQyZDgwOTNjMTk4YzljNWJkNjY0NDM4ZjU0OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KQEAgLTE2MSw4ICsx
NjEsOCBAQCBjb25zdCBTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgPSAzMAogCiAjIFR5cGUgY29u
c3RhbnRzLgogY29uc3QgU3RyaW5nVHlwZSA9IDYKLWNvbnN0IE9iamVjdFR5cGUgPSAxOAotY29u
c3QgRmluYWxPYmplY3RUeXBlID0gMTkKK2NvbnN0IE9iamVjdFR5cGUgPSAxOQorY29uc3QgRmlu
YWxPYmplY3RUeXBlID0gMjAKIAogIyBUeXBlIGZsYWdzIGNvbnN0YW50cy4KIGNvbnN0IE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uU2xvd1BhdGhzLmNwcAppbmRleCBhY2JlMTQ2MjlkMjg0ZWU4MjUxMWY3M2M1Njgw
OTFkZWRmM2I0NDRmLi43NTgwODMzMmU0ZGQ0MDg0NDJhMDM0MzdkNTVjMTA1YWNjMjk1YWIxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHAKQEAgLTUyNSw3ICs1MjUsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdG9fcHJpbWl0
aXZlKQogU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2VudGVyKQogewogICAgIEJFR0lOKCk7Ci0g
ICAgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlID0gZXhlYy0+Y29kZUJsb2NrKCkt
Pm93bmVyRXhlY3V0YWJsZSgpOworICAgIEV4ZWN1dGFibGVCYXNlKiBvd25lckV4ZWN1dGFibGUg
PSBleGVjLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCk7CiAgICAgSGVhcDo6aGVhcChv
d25lckV4ZWN1dGFibGUpLT53cml0ZUJhcnJpZXIob3duZXJFeGVjdXRhYmxlKTsKICAgICBFTkQo
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKaW5k
ZXggMWI5YTczZDc5MzM4YWEzOTE0ZjNlNDU0NTFiYjZmOWEwMGNjOTA5Ny4uZTQ4NTQ3OTc1Njdk
ZThjZGJlOTY2MTU3MDJmYjZlNzUxYjYzYzVmZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKQEAgLTMxLDEwICszMSwxMiBAQAogI2luY2x1ZGUgIkRG
R0RyaXZlci5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNp
bmNsdWRlICJKU1dBU01Nb2R1bGUuaCIKICNpbmNsdWRlICJMTEludEVudHJ5cG9pbnQuaCIKICNp
bmNsdWRlICJQYXJzZXIuaCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCiAjaW5jbHVk
ZSAiVHlwZVByb2ZpbGVyLmgiCisjaW5jbHVkZSAiV0FTTUZ1bmN0aW9uUGFyc2VyLmgiCiAjaW5j
bHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CkBAIC01NjIsNiArNTY0LDYyIEBAIEZ1bmN0
aW9uRXhlY3V0YWJsZSogRnVuY3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZSgKICAgICBy
ZXR1cm4gdW5saW5rZWRFeGVjdXRhYmxlLT5saW5rKGV4ZWMudm0oKSwgc291cmNlLCBvdmVycmlk
ZUxpbmVOdW1iZXIpOwogfQogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorY29uc3QgQ2xhc3NJ
bmZvIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHlFeGVjdXRh
YmxlIiwgJkV4ZWN1dGFibGVCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoV2Vi
QXNzZW1ibHlFeGVjdXRhYmxlKSB9OworCitXZWJBc3NlbWJseUV4ZWN1dGFibGU6OldlYkFzc2Vt
Ymx5RXhlY3V0YWJsZShWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNXQVNNTW9k
dWxlKiBtb2R1bGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgpCisgICAgOiBFeGVjdXRhYmxlQmFz
ZSh2bSwgdm0ud2ViQXNzZW1ibHlFeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBOVU1fUEFSQU1F
VEVSU19OT1RfQ09NUElMRUQpCisgICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAgLCBtX21vZHVs
ZSh2bSwgdGhpcywgbW9kdWxlKQorICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgp
Cit7Cit9CisKK3ZvaWQgV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2Vs
bCkKK3sKKyAgICBzdGF0aWNfY2FzdDxXZWJBc3NlbWJseUV4ZWN1dGFibGUqPihjZWxsKS0+V2Vi
QXNzZW1ibHlFeGVjdXRhYmxlOjp+V2ViQXNzZW1ibHlFeGVjdXRhYmxlKCk7Cit9CisKK3ZvaWQg
V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit7CisgICAgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiB0aGlzT2JqZWN0
ID0ganNDYXN0PFdlYkFzc2VtYmx5RXhlY3V0YWJsZSo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBFeGVjdXRhYmxlQmFzZTo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICBpZiAodGhpc09iamVjdC0+
bV9jb2RlQmxvY2tGb3JDYWxsKQorICAgICAgICB0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja0ZvckNh
bGwtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX21vZHVsZSk7Cit9CisKK3ZvaWQgV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpjbGVhckNv
ZGUoKQoreworICAgIG1fY29kZUJsb2NrRm9yQ2FsbCA9IG51bGxwdHI7CisgICAgQmFzZTo6Y2xl
YXJDb2RlKCk7Cit9CisKK3ZvaWQgV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhl
Y3V0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoaGFzSklUQ29kZUZvckNhbGwoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBEZWZlckdD
IGRlZmVyR0Modm0uaGVhcCk7CisKKyAgICBSZWZQdHI8V2ViQXNzZW1ibHlDb2RlQmxvY2s+IGNv
ZGVCbG9jayA9IGFkb3B0UmVmKG5ldyBXZWJBc3NlbWJseUNvZGVCbG9jaygKKyAgICAgICAgdGhp
cywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSkpOworCisgICAgV0FTTUZ1bmN0aW9u
UGFyc2VyOjpjb21waWxlKHZtLCBjb2RlQmxvY2suZ2V0KCksIG1fbW9kdWxlLmdldCgpLCBtX3Nv
dXJjZSwgbV9mdW5jdGlvbkluZGV4KTsKKworICAgIG1faml0Q29kZUZvckNhbGwgPSBjb2RlQmxv
Y2stPmppdENvZGUoKTsKKyAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2tB
bmRQcmVzZXJ2ZVJlZ3MgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICBtX251bVBhcmFt
ZXRlcnNGb3JDYWxsID0gY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CisKKyAgICBtX2NvZGVC
bG9ja0ZvckNhbGwgPSBjb2RlQmxvY2s7CisKKyAgICBIZWFwOjpoZWFwKHRoaXMpLT53cml0ZUJh
cnJpZXIodGhpcyk7Cit9CisjZW5kaWYKKwogdm9pZCBFeGVjdXRhYmxlQmFzZTo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIEV4ZWN1dGFibGVCYXNlKiByZWFsVGhpcyA9IGNv
bnN0X2Nhc3Q8RXhlY3V0YWJsZUJhc2UqPih0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGUuaAppbmRleCBiNTEzNTQ3ZDA4MzFjYTk1MTQwOTAzZmMwMDI2MTEz
MGEzYzY1ZjliLi5iOGE5M2RiODk2YWFlZmI2YmFlMGNkMGI4NjFmZTNlNDU5MzgzZWIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCkBAIC01MCw5ICs1MCwx
MSBAQCBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBEZWJ1Z2dlcjsKIGNsYXNzIEV2YWxDb2RlQmxv
Y2s7CiBjbGFzcyBGdW5jdGlvbkNvZGVCbG9jazsKK2NsYXNzIEpTU2NvcGU7CitjbGFzcyBKU1dB
U01Nb2R1bGU7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBQcm9ncmFtQ29k
ZUJsb2NrOwotY2xhc3MgSlNTY29wZTsKK2NsYXNzIFdlYkFzc2VtYmx5Q29kZUJsb2NrOwogICAg
IAogZW51bSBDb21waWxhdGlvbktpbmQgeyBGaXJzdENvbXBpbGF0aW9uLCBPcHRpbWl6aW5nQ29t
cGlsYXRpb24gfTsKIApAQCAtOTIsMTUgKzk0LDE1IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAg
Q29kZUJsb2NrSGFzaCBoYXNoRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpIGNvbnN0OwogCi0g
ICAgYm9vbCBpc0V2YWxFeGVjdXRhYmxlKCkKKyAgICBib29sIGlzRXZhbEV4ZWN1dGFibGUoKSBj
b25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGUoKSA9PSBFdmFsRXhlY3V0YWJsZVR5cGU7
CiAgICAgfQotICAgIGJvb2wgaXNGdW5jdGlvbkV4ZWN1dGFibGUoKQorICAgIGJvb2wgaXNGdW5j
dGlvbkV4ZWN1dGFibGUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGUoKSA9PSBG
dW5jdGlvbkV4ZWN1dGFibGVUeXBlOwogICAgIH0KLSAgICBib29sIGlzUHJvZ3JhbUV4ZWN1dGFi
bGUoKQorICAgIGJvb2wgaXNQcm9ncmFtRXhlY3V0YWJsZSgpIGNvbnN0CiAgICAgewogICAgICAg
ICByZXR1cm4gdHlwZSgpID09IFByb2dyYW1FeGVjdXRhYmxlVHlwZTsKICAgICB9CkBAIC0xMTEs
NiArMTEzLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbnVtUGFyYW1ldGVyc0ZvckNh
bGwgPT0gTlVNX1BBUkFNRVRFUlNfSVNfSE9TVDsKICAgICB9CiAKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisgICAgYm9vbCBpc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gdHlwZSgpID09IFdlYkFzc2VtYmx5RXhlY3V0YWJsZVR5cGU7CisgICAg
fQorI2VuZGlmCisKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKSB7IHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oQ2VsbFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsgfQogICAgICAgICAKICAgICB2b2lkIGNsZWFy
Q29kZSgpOwpAQCAtNTU4LDcgKzU2Nyw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7CiAgICAgICAgIAotICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KiB1bmxpbmtlZEV4ZWN1dGFibGUoKQorICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1
bmxpbmtlZEV4ZWN1dGFibGUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdW5saW5r
ZWRFeGVjdXRhYmxlLmdldCgpOwogICAgIH0KQEAgLTY3Miw2ICs2ODEsNTAgQEAgcHJpdmF0ZToK
ICAgICBXcml0ZUJhcnJpZXI8SW5mZXJyZWRWYWx1ZT4gbV9zaW5nbGV0b25GdW5jdGlvbjsKIH07
CiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitjbGFzcyBXZWJBc3NlbWJseUV4ZWN1dGFibGUg
ZmluYWwgOiBwdWJsaWMgRXhlY3V0YWJsZUJhc2UgeworcHVibGljOgorICAgIHR5cGVkZWYgRXhl
Y3V0YWJsZUJhc2UgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CisKKyAgICBz
dGF0aWMgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBjcmVhdGUoVk0mIHZtLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UsIEpTV0FTTU1vZHVsZSogbW9kdWxlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4
KQorICAgIHsKKyAgICAgICAgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlFeGVjdXRhYmxlPih2bS5oZWFwKSkg
V2ViQXNzZW1ibHlFeGVjdXRhYmxlKHZtLCBzb3VyY2UsIG1vZHVsZSwgZnVuY3Rpb25JbmRleCk7
CisgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJu
IGV4ZWN1dGFibGU7CisgICAgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykK
KyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90bywgVHlwZUluZm8oV2ViQXNzZW1ibHlFeGVjdXRhYmxlVHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7
CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICB2b2lkIGNsZWFyQ29kZSgpOworCisgICAgdm9p
ZCBwcmVwYXJlRm9yRXhlY3V0aW9uKEV4ZWNTdGF0ZSopOworCisgICAgV2ViQXNzZW1ibHlDb2Rl
QmxvY2sqIGNvZGVCbG9ja0ZvckNhbGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29kZUJs
b2NrRm9yQ2FsbC5nZXQoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgV2ViQXNzZW1ibHlFeGVj
dXRhYmxlKFZNJiwgY29uc3QgU291cmNlQ29kZSYsIEpTV0FTTU1vZHVsZSosIHVuc2lnbmVkIGZ1
bmN0aW9uSW5kZXgpOworCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworCisgICAgU291cmNlQ29kZSBtX3NvdXJjZTsKKyAgICBXcml0ZUJhcnJp
ZXI8SlNXQVNNTW9kdWxlPiBtX21vZHVsZTsKKyAgICB1bnNpZ25lZCBtX2Z1bmN0aW9uSW5kZXg7
CisKKyAgICBSZWZQdHI8V2ViQXNzZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsK
K307CisjZW5kaWYKKwogaW5saW5lIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZVZpcnR1
YWwoRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUpCiB7CiAgICAgc3dpdGNoIChleGVjdXRhYmxl
LT50eXBlKCkpIHsKQEAgLTY4MSw2ICs3MzQsOCBAQCBpbmxpbmUgdm9pZCBFeGVjdXRhYmxlQmFz
ZTo6Y2xlYXJDb2RlVmlydHVhbChFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSkKICAgICAgICAg
cmV0dXJuIGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5jbGVhckNvZGUo
KTsKICAgICBjYXNlIEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGU6CiAgICAgICAgIHJldHVybiBqc0Nh
c3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNsZWFyQ29kZSgpOworICAgIGNh
c2UgV2ViQXNzZW1ibHlFeGVjdXRhYmxlVHlwZToKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxXZWJB
c3NlbWJseUV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Y2xlYXJDb2RlKCk7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgcmV0dXJuIGpzQ2FzdDxOYXRpdmVFeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSkt
PmNsZWFyQ29kZSgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
dW5jdGlvbi5jcHAKaW5kZXggMGY3MzU0ZWQ3YTZiZDFlM2U2NGIxODU4NTljMTRmMTUwMzI2ZDQ1
OC4uZjgzYWRmODVkMWFlN2VlMzFjZGIzNDJmNzE1MTQxNzkzZGY3ZWE1ZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKQEAgLTY3LDYgKzY3LDE2IEBA
IEpTRnVuY3Rpb24qIEpTRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSwgSlNTY29wZSoKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQorSlNGdW5jdGlvbiogSlNGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwg
V2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSkKK3sKKyAg
ICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRnVu
Y3Rpb24+KHZtLmhlYXApKSBKU0Z1bmN0aW9uKHZtLCBleGVjdXRhYmxlLCBzY29wZSk7CisgICAg
QVNTRVJUKGZ1bmN0aW9uLT5zdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCkpOworICAgIGZ1bmN0
aW9uLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIGZ1bmN0aW9uOworfQorI2VuZGlm
CisKIHN0YXRpYyBpbmxpbmUgTmF0aXZlRXhlY3V0YWJsZSogZ2V0TmF0aXZlRXhlY3V0YWJsZShW
TSYgdm0sIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uLCBJbnRyaW5zaWMgaW50cmluc2lj
LCBOYXRpdmVGdW5jdGlvbiBuYXRpdmVDb25zdHJ1Y3RvcikKIHsKICNpZiAhRU5BQkxFKEpJVCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAppbmRleCA5MjgzNTBl
MjQ3OGM0NWY3YmY3ZThhYTg0YzllYzNhNGUyNTJhODZlLi4wMWNlMzZhNWUyN2U0ZjI0ZWVmOGYz
OTEwODQ4MWFjY2VlYWQ4MzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Z1bmN0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
dW5jdGlvbi5oCkBAIC00MCw2ICs0MCw3IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTmF0aXZlRXhlY3V0YWJsZTsKIGNsYXNzIFNv
dXJjZUNvZGU7CitjbGFzcyBXZWJBc3NlbWJseUV4ZWN1dGFibGU7CiBuYW1lc3BhY2UgREZHIHsK
IGNsYXNzIFNwZWN1bGF0aXZlSklUOwogY2xhc3MgSklUQ29tcGlsZXI7CkBAIC03Myw2ICs3NCw5
IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNGdW5jdGlvbiogY3Jl
YXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBpbnQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUs
IE5hdGl2ZVN0ZEZ1bmN0aW9uJiYsIEludHJpbnNpYyA9IE5vSW50cmluc2ljLCBOYXRpdmVGdW5j
dGlvbiBuYXRpdmVDb25zdHJ1Y3RvciA9IGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKTsK
IAogICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUoVk0mLCBGdW5jdGlvbkV4ZWN1dGFibGUq
LCBKU1Njb3BlKik7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIHN0YXRpYyBKU0Z1bmN0
aW9uKiBjcmVhdGUoVk0mLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqLCBKU1Njb3BlKik7CisjZW5k
aWYKIAogICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVCdWlsdGluRnVuY3Rpb24oVk0mLCBG
dW5jdGlvbkV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyBKU0Z1bmN0
aW9uKiBjcmVhdGVCdWlsdGluRnVuY3Rpb24oVk0mLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU0ds
b2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSk7CkBAIC0xNDMsNiArMTQ3LDEwIEBAIHBy
b3RlY3RlZDoKICAgICBKU0Z1bmN0aW9uKFZNJiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwgSlNTY29w
ZSopOwogICAgIEpTRnVuY3Rpb24oVk0mLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU1Njb3BlKiwg
U3RydWN0dXJlKik7CiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgSlNGdW5jdGlvbihW
TSYsIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSosIEpTU2NvcGUqKTsKKyNlbmRpZgorCiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBpbnQgbGVuZ3RoLCBjb25z
dCBTdHJpbmcmIG5hbWUpOwogICAgIHVzaW5nIEJhc2U6OmZpbmlzaENyZWF0aW9uOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaAppbmRl
eCBmMDU5NTg0Y2YwN2Q3ZmQ2OWVhMmRjZmUyN2I2M2I2NDRhODg0NDEzLi40Zjc1YWI5NzAzNTg2
ZmI0ZmJmMzY0MzgxYjY1ZjVlZDhlZjU3MWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmgKQEAgLTUyLDYgKzUyLDE1IEBAIGlubGlu
ZSBKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVj
dXRhYmxlLCBKU1Njb3BlKiBzCiB7CiB9CiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitpbmxp
bmUgSlNGdW5jdGlvbjo6SlNGdW5jdGlvbihWTSYgdm0sIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUpCisgICAgOiBCYXNlKHZtLCBzY29wZSwgc2NvcGUt
Pmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpKQorICAgICwgbV9leGVjdXRhYmxl
KHZtLCB0aGlzLCBleGVjdXRhYmxlKQorICAgICwgbV9yYXJlRGF0YSgpCit7Cit9CisjZW5kaWYK
KwogaW5saW5lIEZ1bmN0aW9uRXhlY3V0YWJsZSogSlNGdW5jdGlvbjo6anNFeGVjdXRhYmxlKCkg
Y29uc3QKIHsKICAgICBBU1NFUlQoIWlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lKCkpOwpAQCAtNjYs
NiArNzUsMTAgQEAgaW5saW5lIGJvb2wgSlNGdW5jdGlvbjo6aXNIb3N0RnVuY3Rpb24oKSBjb25z
dAogCiBpbmxpbmUgYm9vbCBKU0Z1bmN0aW9uOjppc0J1aWx0aW5GdW5jdGlvbigpIGNvbnN0CiB7
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGlmIChtX2V4ZWN1dGFibGUtPmlzV2ViQXNz
ZW1ibHlFeGVjdXRhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogICAgIHJl
dHVybiAhaXNIb3N0RnVuY3Rpb24oKSAmJiBqc0V4ZWN1dGFibGUoKS0+aXNCdWlsdGluRnVuY3Rp
b24oKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNU
eXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAppbmRleCA0MDMy
NmNlMGYzMjlmYTdjN2JiYzk5ZjQ0NjQyOGZlOTZjOTEyNGIzLi4xNTk2ZTY1ODRjOGFlYjhiN2Mw
Y2NiNGRhMzAzMDIwMDk4ZTY5NWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1R5cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5
cGUuaApAQCAtNDIsNiArNDIsNyBAQCBlbnVtIEpTVHlwZSA6IHVpbnQ4X3QgewogICAgIEV2YWxF
eGVjdXRhYmxlVHlwZSwKICAgICBQcm9ncmFtRXhlY3V0YWJsZVR5cGUsCiAgICAgRnVuY3Rpb25F
eGVjdXRhYmxlVHlwZSwKKyAgICBXZWJBc3NlbWJseUV4ZWN1dGFibGVUeXBlLAogCiAgICAgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVUeXBlLAogICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
a1R5cGUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggOTNjOTZmYmVjMDQ0
ZjdmNzRlOTc4NDczYjZiZjk4YzA3MjFiOGVkMy4uYjA5ZTQxYmE1MTA3M2FhN2UxOTVjZTM2OTNm
OTY5NzAxMDVhYzMzZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMjIx
LDYgKzIyMSw5IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAg
ICBldmFsRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEV2YWxFeGVjdXRhYmxlOjpjcmVh
dGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgcHJvZ3JhbUV4ZWN1dGFibGVT
dHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQo
KnRoaXMsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051
bGwoKSkpOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICB3ZWJBc3NlbWJseUV4ZWN1dGFi
bGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWJBc3NlbWJseUV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVj
dHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyNlbmRpZgogICAgIHJlZ0V4cFN0cnVjdHVyZS5z
ZXQoKnRoaXMsIFJlZ0V4cDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwog
ICAgIHN5bWJvbFN0cnVjdHVyZS5zZXQoKnRoaXMsIFN5bWJvbDo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHN5bWJvbFRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywg
U3ltYm9sVGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDlhZmU5YTVhMmZmNDFkOWMxZmM2NTFmZGMwNmJi
NmE1MGY3NDlmNjEuLjFiYjM1NDczOWUzY2RjZDhmNTNhZDZjYjlmNjQ3N2JiMTQ3MWEyZTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtMjc5LDYgKzI3OSw5IEBAIHB1YmxpYzoK
ICAgICBTdHJvbmc8U3RydWN0dXJlPiBldmFsRXhlY3V0YWJsZVN0cnVjdHVyZTsKICAgICBTdHJv
bmc8U3RydWN0dXJlPiBwcm9ncmFtRXhlY3V0YWJsZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3Ry
dWN0dXJlPiBmdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmU7CisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5RXhlY3V0YWJsZVN0cnVjdHVy
ZTsKKyNlbmRpZgogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHJlZ0V4cFN0cnVjdHVyZTsKICAgICBT
dHJvbmc8U3RydWN0dXJlPiBzeW1ib2xTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4g
c3ltYm9sVGFibGVTdHJ1Y3R1cmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9KU1dBU01Nb2R1bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV0FTTU1v
ZHVsZS5oCmluZGV4IGE3MjY2YjU3ZGE4ZDM3ZTcwNmVhY2YwNzgwYzJiZDdjMGJlMWY4ZDMuLjQ2
N2IzZTZhMTFmNjU4NGFjZThhZDdjNDQyMDczODBkMTM3ODI1OGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV0FTTU1vZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL0pTV0FTTU1vZHVsZS5oCkBAIC02NCw2ICs2NCw4IEBAIHB1YmxpYzoKICAg
ICBWZWN0b3I8V0FTTUZ1bmN0aW9uRGVjbGFyYXRpb24+JiBmdW5jdGlvbkRlY2xhcmF0aW9ucygp
IHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsYXJhdGlvbnM7IH0KICAgICBWZWN0b3I8V0FTTUZ1bmN0
aW9uUG9pbnRlclRhYmxlPiYgZnVuY3Rpb25Qb2ludGVyVGFibGVzKCkgeyByZXR1cm4gbV9mdW5j
dGlvblBvaW50ZXJUYWJsZXM7IH0KIAorICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNGdW5jdGlv
bj4+JiBmdW5jdGlvbnMoKSB7IHJldHVybiBtX2Z1bmN0aW9uczsgfQorCiBwcml2YXRlOgogICAg
IEpTV0FTTU1vZHVsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJh
c2Uodm0sIHN0cnVjdHVyZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dBU01GdW5jdGlvblBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNN
RnVuY3Rpb25QYXJzZXIuY3BwCmluZGV4IGQ2ODlmNTZiMWNiODBmYzcxOTBiYjQ5N2MwNWNkZWQ2
YjdjNDM4MzIuLjc4YTFhMTkyY2VjODg0N2FkMTEwMzg4ODAyYmEzMGNmYzk1N2NmYTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcApA
QCAtMjgsNyArMjgsOSBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSAi
Q0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiSlNXQVNNTW9kdWxlLmgiCisjaW5jbHVkZSAiTGlu
a0J1ZmZlci5oIgogI2luY2x1ZGUgIldBU01GdW5jdGlvblN5bnRheENoZWNrZXIuaCIKIAogI2Rl
ZmluZSBQUk9QQUdBVEVfRVJST1IoKSBkbyB7IGlmICghbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkp
IHJldHVybiAwOyB9IHdoaWxlICgwKQpAQCAtNTksNiArNjEsMjcgQEAgYm9vbCBXQVNNRnVuY3Rp
b25QYXJzZXI6OmNoZWNrU3ludGF4KEpTV0FTTU1vZHVsZSogbW9kdWxlLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3UKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBXQVNNRnVuY3Rpb25QYXJzZXI6
OmNvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNXQVNNTW9kdWxlKiBtb2R1
bGUsIGNvbnN0IFNvdXJjZUNvZGUmLCBzaXplX3QgZnVuY3Rpb25JbmRleCkKK3sKKyAgICAvLyBG
SVhNRTogQWN0dWFsbHkgY29tcGlsZSB0aGUgY29kZS4KKyAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2
bSwgY29kZUJsb2NrKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgYmVnaW5MYWJlbCA9IGpp
dC5sYWJlbCgpOworICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAg
ICBqaXQucmV0KCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGFyaXR5Q2hlY2sgPSBqaXQu
bGFiZWwoKTsKKyAgICBqaXQuanVtcChiZWdpbkxhYmVsKTsKKworICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIodm0sIGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0aEFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mKGFyaXR5Q2hlY2spOworICAgIE1hY3JvQXNzZW1ibGVyOjpDb2RlUmVmIHJlc3Vs
dCA9IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiQmFzZWxpbmUgSklUIGNvZGUgZm9yIFdl
YkFzc2VtYmx5IikpOworICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZShhZG9wdFJlZihuZXcgRGly
ZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCBKSVRDb2RlOjpCYXNlbGluZUpJVCkp
KTsKKyAgICBjb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOworCisgICAgdWludDMyX3Qgc2ln
bmF0dXJlSW5kZXggPSBtb2R1bGUtPmZ1bmN0aW9uRGVjbGFyYXRpb25zKClbZnVuY3Rpb25JbmRl
eF0uc2lnbmF0dXJlSW5kZXg7CisgICAgY29uc3QgV0FTTVNpZ25hdHVyZSYgc2lnbmF0dXJlID0g
bW9kdWxlLT5zaWduYXR1cmVzKClbc2lnbmF0dXJlSW5kZXhdOworICAgIGNvZGVCbG9jay0+c2V0
TnVtUGFyYW1ldGVycygxICsgc2lnbmF0dXJlLmFyZ3VtZW50cy5zaXplKCkpOworfQorCiB0ZW1w
bGF0ZSA8Y2xhc3MgQ29udGV4dD4KIGJvb2wgV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUZ1bmN0
aW9uKENvbnRleHQmIGNvbnRleHQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dBU01GdW5jdGlvblBhcnNlci5oCmluZGV4IDRkNjMxM2FmZDc4YzgwYzU3NDJlZDJmNzFhYjY1
YTVmZTc1YzViOTMuLjcwNGM0NmM5ZDk0ZDQwNjRhY2U3YjRmN2NjMWNjOGYzNjM4MWM1NDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5oCkBA
IC0zNiwxMSArMzYsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIENvZGVCbG9jazsK
IGNsYXNzIEpTV0FTTU1vZHVsZTsKK2NsYXNzIFZNOwogCiBjbGFzcyBXQVNNRnVuY3Rpb25QYXJz
ZXIgewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGNoZWNrU3ludGF4KEpTV0FTTU1vZHVsZSos
IGNvbnN0IFNvdXJjZUNvZGUmLCBzaXplX3QgZnVuY3Rpb25JbmRleCwgdW5zaWduZWQgc3RhcnRP
ZmZzZXRJblNvdXJjZSwgdW5zaWduZWQmIGVuZE9mZnNldEluU291cmNlLCBTdHJpbmcmIGVycm9y
TWVzc2FnZSk7CisgICAgc3RhdGljIHZvaWQgY29tcGlsZShWTSYsIENvZGVCbG9jayosIEpTV0FT
TU1vZHVsZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBzaXplX3QgZnVuY3Rpb25JbmRleCk7CiAKIHBy
aXZhdGU6CiAgICAgV0FTTUZ1bmN0aW9uUGFyc2VyKEpTV0FTTU1vZHVsZSogbW9kdWxlLCBjb25z
dCBTb3VyY2VDb2RlJiBzb3VyY2UsIHNpemVfdCBmdW5jdGlvbkluZGV4KQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcAppbmRleCA1MGRiYjhlNTA5
YjZjN2Y0NTdkMWQ3NmQ2MTZjYTgwNDU3NWNhOGFmLi42N2UzYWE2NDZjZTZmZDk0N2ZlOThmNGM2
NWVlZDFkYzdmZDUxOTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
QVNNTW9kdWxlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNN
TW9kdWxlUGFyc2VyLmNwcApAQCAtNDksMTUgKzQ5LDE3IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1XQVNNTW9kdWxlUGFyc2VyOjpXQVNNTW9kdWxlUGFyc2VyKGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZSkKLSAgICA6IG1fc291cmNlKHNvdXJjZSkKK1dBU01Nb2R1bGVQYXJzZXI6OldBU01Nb2R1
bGVQYXJzZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTb3Vy
Y2VDb2RlJiBzb3VyY2UpCisgICAgOiBtX3ZtKHZtKQorICAgICwgbV9nbG9iYWxPYmplY3Qodm0s
IGdsb2JhbE9iamVjdCkKKyAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAsIG1fcmVhZGVyKHN0
YXRpY19jYXN0PFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXIqPihzb3VyY2UucHJvdmlkZXIoKSkt
PmRhdGEoKSkKIHsKIH0KIAotSlNXQVNNTW9kdWxlKiBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cmluZyYgZXJyb3JNZXNzYWdl
KQorSlNXQVNNTW9kdWxlKiBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZShTdHJpbmcmIGVycm9yTWVz
c2FnZSkKIHsKLSAgICBtX21vZHVsZS5zZXQodm0sIEpTV0FTTU1vZHVsZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QtPndhc21Nb2R1bGVTdHJ1Y3R1cmUoKSkpOworICAgIG1fbW9kdWxlLnNldCht
X3ZtLCBKU1dBU01Nb2R1bGU6OmNyZWF0ZShtX3ZtLCBtX2dsb2JhbE9iamVjdC0+d2FzbU1vZHVs
ZVN0cnVjdHVyZSgpKSk7CiAgICAgcGFyc2VNb2R1bGUoKTsKICAgICBpZiAoIW1fZXJyb3JNZXNz
YWdlLmlzTnVsbCgpKSB7CiAgICAgICAgIGVycm9yTWVzc2FnZSA9IG1fZXJyb3JNZXNzYWdlOwpA
QCAtMjE3LDYgKzIxOSw3IEBAIHZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRl
Y2xhcmF0aW9uU2VjdGlvbigpCiAgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jdGlvbkRlY2xhcmF0
aW9uczsKICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZGdW5jdGlvbkRl
Y2xhcmF0aW9ucywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgZnVuY3Rpb24gZGVjbGFyYXRp
b25zLiIpOwogICAgIG1fbW9kdWxlLT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobnVtYmVyT2ZGdW5jdGlvbkRlY2xhcmF0aW9ucyk7CisgICAgbV9tb2R1bGUt
PmZ1bmN0aW9ucygpLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZGdW5jdGlvbkRlY2xh
cmF0aW9ucyk7CiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mRnVuY3Rpb25E
ZWNsYXJhdGlvbnM7ICsraSkgewogICAgICAgICBXQVNNRnVuY3Rpb25EZWNsYXJhdGlvbiBmdW5j
dGlvbkRlY2xhcmF0aW9uOwogICAgICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwoZnVu
Y3Rpb25EZWNsYXJhdGlvbi5zaWduYXR1cmVJbmRleCwgIkNhbm5vdCByZWFkIHRoZSBzaWduYXR1
cmUgaW5kZXguIik7CkBAIC0yNjUsNiArMjY4LDEwIEBAIHZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6
cGFyc2VGdW5jdGlvbkRlZmluaXRpb24oc2l6ZV90IGZ1bmN0aW9uSW5kZXgpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgbV9yZWFkZXIuc2V0T2Zmc2V0KGVuZE9mZnNldEluU291cmNlKTsK
KworICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogd2ViQXNzZW1ibHlFeGVjdXRhYmxlID0gV2Vi
QXNzZW1ibHlFeGVjdXRhYmxlOjpjcmVhdGUobV92bSwgbV9zb3VyY2UsIG1fbW9kdWxlLmdldCgp
LCBmdW5jdGlvbkluZGV4KTsKKyAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IEpTRnVuY3Rpb246
OmNyZWF0ZShtX3ZtLCB3ZWJBc3NlbWJseUV4ZWN1dGFibGUsIG1fZ2xvYmFsT2JqZWN0LmdldCgp
KTsKKyAgICBtX21vZHVsZS0+ZnVuY3Rpb25zKCkudW5jaGVja2VkQXBwZW5kKFdyaXRlQmFycmll
cjxKU0Z1bmN0aW9uPihtX3ZtLCBtX21vZHVsZS5nZXQoKSwgZnVuY3Rpb24pKTsKIH0KIAogdm9p
ZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydFNlY3Rpb24oKQpAQCAtMjg1LDExICsyOTIs
MTEgQEAgdm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydFNlY3Rpb24oKQogICAgICAg
ICBmb3IgKHVpbnQzMl90IGV4cG9ydEluZGV4ID0gMDsgZXhwb3J0SW5kZXggPCBudW1iZXJPZkV4
cG9ydHM7ICsrZXhwb3J0SW5kZXgpIHsKICAgICAgICAgICAgIFN0cmluZyBleHBvcnROYW1lOwog
ICAgICAgICAgICAgUkVBRF9TVFJJTkdfT1JfRkFJTChleHBvcnROYW1lLCAiQ2Fubm90IHJlYWQg
dGhlIGZ1bmN0aW9uIGV4cG9ydCBuYW1lLiIpOwotICAgICAgICAgICAgLy8gRklYTUU6IENoZWNr
IHRoYXQgZXhwb3J0TmFtZSBpcyBsZWdhbC4KICAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXg7CiAgICAgICAgICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwoZnVuY3Rpb25J
bmRleCwgIkNhbm5vdCByZWFkIHRoZSBmdW5jdGlvbiBpbmRleC4iKTsKICAgICAgICAgICAgIEZB
SUxfSUZfRkFMU0UoZnVuY3Rpb25JbmRleCA8IG1fbW9kdWxlLT5mdW5jdGlvbkRlY2xhcmF0aW9u
cygpLnNpemUoKSwgIlRoZSBmdW5jdGlvbiBpbmRleCBpcyBpbmNvcnJlY3QuIik7Ci0gICAgICAg
ICAgICAvLyBGSVhNRTogRXhwb3J0IHRoZSBmdW5jdGlvbi4KKyAgICAgICAgICAgIElkZW50aWZp
ZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJm1fdm0sIGV4cG9ydE5hbWUp
OworICAgICAgICAgICAgbV9tb2R1bGUtPnB1dERpcmVjdChtX3ZtLCBpZGVudGlmaWVyLCBtX21v
ZHVsZS0+ZnVuY3Rpb25zKClbZnVuY3Rpb25JbmRleF0uZ2V0KCkpOwogICAgICAgICB9CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KQEAgLTMwMCw4ICszMDcsOCBAQCB2b2lkIFdBU01Nb2R1bGVQYXJz
ZXI6OnBhcnNlRXhwb3J0U2VjdGlvbigpCiAKIEpTV0FTTU1vZHVsZSogcGFyc2VXZWJBc3NlbWJs
eShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UpCiB7Ci0gICAgV0FTTU1vZHVsZVBhcnNlciBXQVNNTW9kdWxlUGFyc2VyKHNvdXJj
ZSk7Ci0gICAgcmV0dXJuIFdBU01Nb2R1bGVQYXJzZXIucGFyc2UoZXhlYy0+dm0oKSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBlcnJvck1lc3NhZ2UpOworICAgIFdBU01Nb2R1bGVQYXJz
ZXIgbW9kdWxlUGFyc2VyKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
c291cmNlKTsKKyAgICByZXR1cm4gbW9kdWxlUGFyc2VyLnBhcnNlKGVycm9yTWVzc2FnZSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV0FTTU1vZHVsZVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FT
TU1vZHVsZVBhcnNlci5oCmluZGV4IDMwZjFhNTY1OTg4YzYwMTRiNTQ1ZmMxYzZjMjZjMDkzZDhm
YjU0MGYuLmUyZjRmYjc1OGM5NTEzNTNmODYwODdkNTkwNGM1ZjM2MjYzZWVmYWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmgKQEAgLTQyLDggKzQy
LDggQEAgY2xhc3MgVk07CiAKIGNsYXNzIFdBU01Nb2R1bGVQYXJzZXIgewogcHVibGljOgotICAg
IFdBU01Nb2R1bGVQYXJzZXIoY29uc3QgU291cmNlQ29kZSYpOwotICAgIEpTV0FTTU1vZHVsZSog
cGFyc2UoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKKyAgICBX
QVNNTW9kdWxlUGFyc2VyKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTb3VyY2VDb2RlJik7
CisgICAgSlNXQVNNTW9kdWxlKiBwYXJzZShTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiAKIHByaXZh
dGU6CiAgICAgdm9pZCBwYXJzZU1vZHVsZSgpOwpAQCAtNTcsNiArNTcsOCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgcGFyc2VGdW5jdGlvbkRlZmluaXRpb24oc2l6ZV90IGZ1bmN0aW9uSW5kZXgpOwog
ICAgIHZvaWQgcGFyc2VFeHBvcnRTZWN0aW9uKCk7CiAKKyAgICBWTSYgbV92bTsKKyAgICBTdHJv
bmc8SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwogICAgIGNvbnN0IFNvdXJjZUNvZGUm
IG1fc291cmNlOwogICAgIFdBU01SZWFkZXIgbV9yZWFkZXI7CiAgICAgU3Ryb25nPEpTV0FTTU1v
ZHVsZT4gbV9tb2R1bGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggNGJh
Y2Q1NWZlZTNiZTE5NWZhMzA3NGY0YjM3MDM0MmUxN2I0Y2Y5OS4uYTlkNGNiMTA2M2E3YTc1ZTVl
OWRlNmNiYzJmZDM1YWVjOWZiMGVjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cApAQCAtMTQ2Miw3ICsxNDYyLDcgQEAgU3RyaW5nIEludGVybmFsczo6cGFyc2VyTWV0YURhdGEo
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgdmFsdWUpCiAgICAgICAgIEdldENhbGxlckNvZGVCbG9j
a0Z1bmN0b3IgaXRlcjsKICAgICAgICAgZXhlYy0+aXRlcmF0ZShpdGVyKTsKICAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBpdGVyLmNvZGVCbG9jaygpOwotICAgICAgICBleGVjdXRhYmxl
ID0gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsgCisgICAgICAgIGV4ZWN1dGFibGUgPSBj
b2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOwogICAgIH0gZWxzZSBpZiAoY29kZS5p
c0Z1bmN0aW9uKCkpIHsKICAgICAgICAgSlNGdW5jdGlvbiogZnVuY09iaiA9IEpTQzo6anNDYXN0
PEpTRnVuY3Rpb24qPihjb2RlLnRvT2JqZWN0KGV4ZWMpKTsKICAgICAgICAgZXhlY3V0YWJsZSA9
IGZ1bmNPYmotPmpzRXhlY3V0YWJsZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260021</attachid>
            <date>2015-08-26 19:25:54 -0700</date>
            <delta_ts>2015-08-27 21:03:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148373-20150826192543.patch</filename>
            <type>text/plain</type>
            <size>63490</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4OTk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
ZTBjOGFmOTg2YWJmMDJhMmJhOTkwN2EyNDgwNDdjNzZiY2Q3YjI0Li5iM2YyYjA0YTBlZTM1MTBm
OTkzMjYzZTJhNGJkNzU0NTc2NDMxYWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDcgQEAKKzIwMTUtMDgtMjYgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0Bn
bWFpbC5jb20+CisKKyAgICAgICAgQ3JlYXRlIFdlYkFzc2VtYmx5IGZ1bmN0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4MzczCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3JlYXRlIGZ1bmN0aW9u
cyBmcm9tIFdlYkFzc2VtYmx5IGZpbGVzIGdlbmVyYXRlZCBieSBwYWNrLWFzbWpzCisgICAgICAg
IDxodHRwczovL2dpdGh1Yi5jb20vV2ViQXNzZW1ibHkvcG9seWZpbGwtcHJvdG90eXBlLTE+Lgor
ICAgICAgICBXZWJBc3NlbWJseSBmdW5jdGlvbnMgY3JlYXRlZCBieSB0aGlzIHBhdGNoIGNhbiBv
bmx5IHJldHVybiAwLgorICAgICAgICBBY3R1YWwgY29kZSBnZW5lcmF0aW9uIHdpbGwgYmUgaW1w
bGVtZW50ZWQgaW4gc3Vic2VxdWVudCBwYXRjaGVzLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYXNoKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpzb3VyY2VDb2RlRm9yVG9vbHMpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmR1bXBBc3N1bWluZ0pJVFR5cGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBT
b3VyY2UpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6Omluc3RhbGwpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om5ld1JlcGxh
Y2VtZW50KToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlDb2RlQmxvY2s6OnJlcGxhY2VtZW50
KToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNhcGFiaWxpdHlMZXZlbElu
dGVybmFsKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxQcmVkaWN0aW9ucyk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpZXNGb3JD
b250cm9sRmxvd1Byb2ZpbGVyKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvd25lckV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6Om93bmVyU2NyaXB0RXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Y29kZVR5cGUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUNvZGVCbG9jazo6V2ViQXNz
ZW1ibHlDb2RlQmxvY2spOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNwcDoKKyAgICAg
ICAgKEpTQzo6RGVidWdnZXI6OnRvZ2dsZUJyZWFrcG9pbnQpOgorICAgICAgICAqIGRlYnVnZ2Vy
L0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6
OnNvdXJjZUlERm9yQ2FsbEZyYW1lKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5
OjpleGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5saW5p
bmdDb3N0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tF
bnRyeTo6SW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQ29kZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjppc1N1cHBvcnRlZEZvcklubGluaW5nKToKKyAgICAgICAgKiBk
ZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZXhlY3V0YWJsZUZvcik6
CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVw
YXJlT1NSRW50cnkpOgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5
LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6Q3JlYXRlU2NyaXB0Q2FsbFN0YWNrRnVuY3Rvcjo6
b3BlcmF0b3IoKSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAg
ICAgICAoSlNDOjpldmFsKToKKyAgICAgICAgKEpTQzo6aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUp
OgorICAgICAgICAoSlNDOjpHZXRTdGFja1RyYWNlRnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAg
ICAgIChKU0M6OlVud2luZEZ1bmN0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIGludGVycHJl
dGVyL1N0YWNrVmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6
OnNvdXJjZVVSTCk6CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmNvbXB1dGVM
aW5lQW5kQ29sdW1uKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAg
ICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjppc1dlYkFzc2VtYmx5RXhlY3V0YWJs
ZSk6CisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGwpOgorICAgICAgICAqIGxsaW50
L0xMSW50RGF0YS5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpEYXRhOjpwZXJmb3JtQXNzZXJ0
aW9ucyk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlND
OjpMTEludDo6c2V0VXBDYWxsKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6CisgICAgICAgIChK
U0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4ZWN1dGFibGU6OldlYkFzc2VtYmx5RXhlY3V0YWJs
ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6ZGVzdHJveSk6CisgICAg
ICAgIChKU0M6OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAg
IChKU0M6OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6Y2xlYXJDb2RlKToKKyAgICAgICAgKEpTQzo6
V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aW9uKToKKyAgICAgICAgKiBy
dW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUJhc2U6OmlzRXZh
bEV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6aXNGdW5jdGlvbkV4
ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6aXNQcm9ncmFtRXhlY3V0
YWJsZSk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjppc1dlYkFzc2VtYmx5RXhlY3V0
YWJsZSk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGVWaXJ0dWFsKToK
KyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0
aW9uOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAq
IHJ1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6
SlNGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmlzQnVpbHRpbkZ1bmN0aW9u
KToKKyAgICAgICAgKiBydW50aW1lL0pTVHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3Bw
OgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAg
ICAgKiB3YXNtL0pTV0FTTU1vZHVsZS5oOgorICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OmZ1
bmN0aW9ucyk6CisgICAgICAgICogd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuY3BwOgorICAgICAg
ICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OmNvbXBpbGUpOgorICAgICAgICAqIHdhc20vV0FT
TUZ1bmN0aW9uUGFyc2VyLmg6CisgICAgICAgICogd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcDoK
KyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6V0FTTU1vZHVsZVBhcnNlcik6CisgICAg
ICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKEpTQzo6V0FTTU1v
ZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uU2VjdGlvbik6CisgICAgICAgIChK
U0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKToKKyAgICAgICAg
KEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VFeHBvcnRTZWN0aW9uKToKKyAgICAgICAgKEpT
Qzo6cGFyc2VXZWJBc3NlbWJseSk6CisgICAgICAgICogd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmg6
CisKIDIwMTUtMDgtMjYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBEaXN0aW5ndWlzaCBXZWIgSURMIGNhbGxiYWNrIGludGVyZmFjZXMgZnJvbSBXZWIgSURMIGNh
bGxiYWNrIGZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGFjNDcyZjZlOGJiMmU2Y2FlNzI4ZWE2Y2E5
NmZlNWQzNDhkNzJjYjMuLjJmY2U5NmM3NjgzZDFkOGU4ZWI1NGIxOTE2MmY1N2EwMzYyNWI5OTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxNS0wOC0yNiAgU3Vrb2xzYWsgU2Frc2h1
d29uZyAgPHN1a29sc2FrQGdtYWlsLmNvbT4KKworICAgICAgICBDcmVhdGUgV2ViQXNzZW1ibHkg
ZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDgzNzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMgYmVjYXVzZSBpdCdzIGEgZnVuY3Rpb24gcmVuYW1lLgorCisgICAgICAg
ICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpw
YXJzZXJNZXRhRGF0YSk6CisKIDIwMTUtMDgtMjYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KIAogICAgICAgICBEaXN0aW5ndWlzaCBXZWIgSURMIGNhbGxiYWNrIGludGVyZmFjZXMg
ZnJvbSBXZWIgSURMIGNhbGxiYWNrIGZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCAyMGMxNDdhMDE1ZDJjNDNkZWMzODNmN2JhYTgx
MGE2NmE5MTkxNDYyLi5jMzI0MGEwN2M0MTRlMTk1NWUwYWFjMDRjYzUwZmRiMmNhYTIyZTZlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtMTA3
LDcgKzEwNyw3IEBAIENvZGVCbG9ja0hhc2ggQ29kZUJsb2NrOjpoYXNoKCkgY29uc3QKIHsKICAg
ICBpZiAoIW1faGFzaCkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1NhZmVUb0NvbXB1dGVI
YXNoKCkpOwotICAgICAgICBtX2hhc2ggPSBDb2RlQmxvY2tIYXNoKG93bmVyRXhlY3V0YWJsZSgp
LT5zb3VyY2UoKSwgc3BlY2lhbGl6YXRpb25LaW5kKCkpOworICAgICAgICBtX2hhc2ggPSBDb2Rl
QmxvY2tIYXNoKG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5zb3VyY2UoKSwgc3BlY2lhbGl6YXRp
b25LaW5kKCkpOwogICAgIH0KICAgICByZXR1cm4gbV9oYXNoOwogfQpAQCAtMTE1LDcgKzExNSw3
IEBAIENvZGVCbG9ja0hhc2ggQ29kZUJsb2NrOjpoYXNoKCkgY29uc3QKIENTdHJpbmcgQ29kZUJs
b2NrOjpzb3VyY2VDb2RlRm9yVG9vbHMoKSBjb25zdAogewogICAgIGlmIChjb2RlVHlwZSgpICE9
IEZ1bmN0aW9uQ29kZSkKLSAgICAgICAgcmV0dXJuIG93bmVyRXhlY3V0YWJsZSgpLT5zb3VyY2Uo
KS50b1VURjgoKTsKKyAgICAgICAgcmV0dXJuIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5zb3Vy
Y2UoKS50b1VURjgoKTsKICAgICAKICAgICBTb3VyY2VQcm92aWRlciogcHJvdmlkZXIgPSBzb3Vy
Y2UoKTsKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpOwpAQCAtMTU1LDExICsxNTUsMTEgQEAg
dm9pZCBDb2RlQmxvY2s6OmR1bXBBc3N1bWluZ0pJVFR5cGUoUHJpbnRTdHJlYW0mIG91dCwgSklU
Q29kZTo6SklUVHlwZSBqaXRUeXBlKQogICAgIG91dC5wcmludCgiLCAiLCBpbnN0cnVjdGlvbkNv
dW50KCkpOwogICAgIGlmICh0aGlzLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQg
JiYgbV9zaG91bGRBbHdheXNCZUlubGluZWQpCiAgICAgICAgIG91dC5wcmludCgiIChTaG91bGRB
bHdheXNCZUlubGluZWQpIik7Ci0gICAgaWYgKG93bmVyRXhlY3V0YWJsZSgpLT5uZXZlcklubGlu
ZSgpKQorICAgIGlmIChvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+bmV2ZXJJbmxpbmUoKSkKICAg
ICAgICAgb3V0LnByaW50KCIgKE5ldmVySW5saW5lKSIpOwotICAgIGlmIChvd25lckV4ZWN1dGFi
bGUoKS0+ZGlkVHJ5VG9FbnRlckluTG9vcCgpKQorICAgIGlmIChvd25lclNjcmlwdEV4ZWN1dGFi
bGUoKS0+ZGlkVHJ5VG9FbnRlckluTG9vcCgpKQogICAgICAgICBvdXQucHJpbnQoIiAoRGlkVHJ5
VG9FbnRlckluTG9vcCkiKTsKLSAgICBpZiAob3duZXJFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9k
ZSgpKQorICAgIGlmIChvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpCiAg
ICAgICAgIG91dC5wcmludCgiIChTdHJpY3RNb2RlKSIpOwogICAgIGlmICh0aGlzLT5qaXRUeXBl
KCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQgJiYgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24pCiAg
ICAgICAgIG91dC5wcmludCgiIChGVExGYWlsKSIpOwpAQCAtNTUyLDcgKzU1Miw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpkdW1wU291cmNlKCkKIAogdm9pZCBDb2RlQmxvY2s6OmR1bXBTb3VyY2UoUHJp
bnRTdHJlYW0mIG91dCkKIHsKLSAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gb3du
ZXJFeGVjdXRhYmxlKCk7CisgICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG93bmVy
U2NyaXB0RXhlY3V0YWJsZSgpOwogICAgIGlmIChleGVjdXRhYmxlLT5pc0Z1bmN0aW9uRXhlY3V0
YWJsZSgpKSB7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxl
ID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKICAg
ICAgICAgU3RyaW5nIHNvdXJjZSA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlk
ZXIoKS0+Z2V0UmFuZ2UoCkBAIC0xNzUxLDcgKzE3NTEsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9j
ayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1
bmxpbgogICAgIHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSk7CiAKICAgICBpZiAodm0oKS0+dHlwZVByb2ZpbGVyKCkgfHwgdm0oKS0+Y29udHJvbEZs
b3dQcm9maWxlcigpKQotICAgICAgICB2bSgpLT5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+
cmVtb3ZlVW5leGVjdXRlZFJhbmdlKG1fb3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBtX293
bmVyRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCksIG1fb3duZXJFeGVjdXRh
YmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOworICAgICAgICB2bSgpLT5mdW5jdGlvbkhh
c0V4ZWN1dGVkQ2FjaGUoKS0+cmVtb3ZlVW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+
c291cmNlSUQoKSwgb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwg
b3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwogCiAgICAgc2V0Q29u
c3RhbnRSZWdpc3RlcnModW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXJzKCksIHVu
bGlua2VkQ29kZUJsb2NrLT5jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSk7CiAg
ICAgaWYgKHVubGlua2VkQ29kZUJsb2NrLT51c2VzR2xvYmFsT2JqZWN0KCkpCkBAIC0xNzg1LDcg
KzE3ODUsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbgogICAgIGZvciAoc2l6ZV90IGNvdW50
ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNscygpLCBpID0gMDsgaSA8
IGNvdW50OyArK2kpIHsKICAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlu
a2VkRXhlY3V0YWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkRlY2woaSk7CiAgICAg
ICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSB8fCB2bSgpLT5jb250cm9sRmxvd1Byb2ZpbGVy
KCkpCi0gICAgICAgICAgICB2bSgpLT5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+aW5zZXJ0
VW5leGVjdXRlZFJhbmdlKG1fb3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCB1bmxpbmtlZEV4
ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUt
PnR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7CisgICAgICAgICAgICB2bSgpLT5mdW5jdGlvbkhh
c0V4ZWN1dGVkQ2FjaGUoKS0+aW5zZXJ0VW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+
c291cmNlSUQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQo
KSwgdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwogICAgICAg
ICBtX2Z1bmN0aW9uRGVjbHNbaV0uc2V0KCptX3ZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2Vk
RXhlY3V0YWJsZS0+bGluaygqbV92bSwgb3duZXJFeGVjdXRhYmxlLT5zb3VyY2UoKSkpOwogICAg
IH0KIApAQCAtMTc5Myw3ICsxNzkzLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhl
Y3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW4KICAgICBm
b3IgKHNpemVfdCBjb3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRXhw
cnMoKSwgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUgPSB1bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rp
b25FeHByKGkpOwogICAgICAgICBpZiAodm0oKS0+dHlwZVByb2ZpbGVyKCkgfHwgdm0oKS0+Y29u
dHJvbEZsb3dQcm9maWxlcigpKQotICAgICAgICAgICAgdm0oKS0+ZnVuY3Rpb25IYXNFeGVjdXRl
ZENhY2hlKCktPmluc2VydFVuZXhlY3V0ZWRSYW5nZShtX293bmVyRXhlY3V0YWJsZS0+c291cmNl
SUQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgdW5s
aW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOworICAgICAgICAgICAg
dm0oKS0+ZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKCktPmluc2VydFVuZXhlY3V0ZWRSYW5nZShv
d25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2Zp
bGluZ1N0YXJ0T2Zmc2V0KCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ0VuZE9m
ZnNldCgpKTsKICAgICAgICAgbV9mdW5jdGlvbkV4cHJzW2ldLnNldCgqbV92bSwgb3duZXJFeGVj
dXRhYmxlLCB1bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmsoKm1fdm0sIG93bmVyRXhlY3V0YWJsZS0+
c291cmNlKCkpKTsKICAgICB9CiAKQEAgLTE5MjUsNyArMTkyNSw3IEBAIENvZGVCbG9jazo6Q29k
ZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxv
Y2sqIHVubGluCiAKICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAxXSA9
IG9iamVjdEFsbG9jYXRpb25Qcm9maWxlOwogICAgICAgICAgICAgb2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUtPmluaXRpYWxpemUoKnZtKCksCi0gICAgICAgICAgICAgICAgbV9vd25lckV4ZWN1dGFi
bGUuZ2V0KCksIG1fZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSwgaW5mZXJyZWRJbmxp
bmVDYXBhY2l0eSk7CisgICAgICAgICAgICAgICAgb3duZXJFeGVjdXRhYmxlLCBtX2dsb2JhbE9i
amVjdC0+b2JqZWN0UHJvdG90eXBlKCksIGluZmVycmVkSW5saW5lQ2FwYWNpdHkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMjEwNiw3ICsyMTA2LDcgQEAgQ29kZUJsb2Nr
OjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENv
ZGVCbG9jayogdW5saW4KICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHVzZXIncyBwcm9ncmFt
LCBnaXZlIHRoZSB0eXBlIHByb2ZpbGVyIHNvbWUgcmFuZ2UgdG8gaWRlbnRpZnkgdGhlc2UgcmV0
dXJuIHN0YXRlbWVudHMuCiAgICAgICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSwgdGhlIHRl
eHQgb2Zmc2V0IHRoYXQgaXMgdXNlZCBhcyBpZGVudGlmaWNhdGlvbiBpcyAiZiIgaW4gdGhlIGZ1
bmN0aW9uIGtleXdvcmQKICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGlzIHN0b3JlZCBvbiBU
eXBlTG9jYXRpb24ncyBtX2Rpdm90Rm9yRnVuY3Rpb25PZmZzZXRJZlJldHVyblN0YXRlbWVudCBt
ZW1iZXIgdmFyaWFibGUuCi0gICAgICAgICAgICAgICAgICAgIGRpdm90U3RhcnQgPSBkaXZvdEVu
ZCA9IG1fb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgZGl2b3RTdGFydCA9IGRpdm90RW5kID0gb3duZXJFeGVjdXRhYmxlLT50
eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKTsKICAgICAgICAgICAgICAgICAgICAgc2hvdWxkQW5h
bHl6ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMjExNCwxMiArMjExNCwxMiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRh
YmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbgogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBzdGQ6OnBhaXI8VHlwZUxvY2F0aW9uKiwgYm9vbD4gbG9jYXRp
b25QYWlyID0gdm0oKS0+dHlwZVByb2ZpbGVyKCktPnR5cGVMb2NhdGlvbkNhY2hlKCktPmdldFR5
cGVMb2NhdGlvbihnbG9iYWxWYXJpYWJsZUlELAotICAgICAgICAgICAgICAgIG1fb3duZXJFeGVj
dXRhYmxlLT5zb3VyY2VJRCgpLCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCwgZ2xvYmFsVHlwZVNldCwg
dm0oKSk7CisgICAgICAgICAgICAgICAgb3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBkaXZv
dFN0YXJ0LCBkaXZvdEVuZCwgZ2xvYmFsVHlwZVNldCwgdm0oKSk7CiAgICAgICAgICAgICBUeXBl
TG9jYXRpb24qIGxvY2F0aW9uID0gbG9jYXRpb25QYWlyLmZpcnN0OwogICAgICAgICAgICAgYm9v
bCBpc05ld0xvY2F0aW9uID0gbG9jYXRpb25QYWlyLnNlY29uZDsKIAogICAgICAgICAgICAgaWYg
KGZsYWcgPT0gUHJvZmlsZVR5cGVCeXRlY29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50KQotICAg
ICAgICAgICAgICAgIGxvY2F0aW9uLT5tX2Rpdm90Rm9yRnVuY3Rpb25PZmZzZXRJZlJldHVyblN0
YXRlbWVudCA9IG1fb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKTsK
KyAgICAgICAgICAgICAgICBsb2NhdGlvbi0+bV9kaXZvdEZvckZ1bmN0aW9uT2Zmc2V0SWZSZXR1
cm5TdGF0ZW1lbnQgPSBvd25lckV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgp
OwogCiAgICAgICAgICAgICBpZiAoc2hvdWxkQW5hbHl6ZSAmJiBpc05ld0xvY2F0aW9uKQogICAg
ICAgICAgICAgICAgIHZtKCktPnR5cGVQcm9maWxlcigpLT5pbnNlcnROZXdMb2NhdGlvbihsb2Nh
dGlvbik7CkBAIC0yMTYzLDYgKzIxNjMsMzkgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0
RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW4KICAg
ICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVvZihDb2RlQmxvY2spICsg
bV9pbnN0cnVjdGlvbnMuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSk7CiB9CiAKKyNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCitDb2RlQmxvY2s6OkNvZGVCbG9jayhXZWJBc3NlbWJseUV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQorICAgIDogbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1
dGFibGUsIGdsb2JhbE9iamVjdCkKKyAgICAsIG1faGVhcCgmbV9nbG9iYWxPYmplY3QtPnZtKCku
aGVhcCkKKyAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKDApCisgICAgLCBtX251bVZhcnMoMCkK
KyAgICAsIG1faXNDb25zdHJ1Y3RvcihmYWxzZSkKKyAgICAsIG1fc2hvdWxkQWx3YXlzQmVJbmxp
bmVkKGZhbHNlKQorICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCisgICAgLCBt
X2hhc0JlZW5Db21waWxlZFdpdGhGVEwoZmFsc2UpCisgICAgLCBtX2hhc0RlYnVnZ2VyU3RhdGVt
ZW50KGZhbHNlKQorICAgICwgbV9zdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRGlzYWJsZWQpCisg
ICAgLCBtX251bUJyZWFrcG9pbnRzKDApCisgICAgLCBtX293bmVyRXhlY3V0YWJsZShtX2dsb2Jh
bE9iamVjdC0+dm0oKSwgb3duZXJFeGVjdXRhYmxlLCBvd25lckV4ZWN1dGFibGUpCisgICAgLCBt
X3ZtKCZ2bSkKKyAgICAsIG1faXNTdHJpY3RNb2RlKGZhbHNlKQorICAgICwgbV9uZWVkc0FjdGl2
YXRpb24oZmFsc2UpCisgICAgLCBtX21heUJlRXhlY3V0aW5nKGZhbHNlKQorICAgICwgbV9jb2Rl
VHlwZShGdW5jdGlvbkNvZGUpCisgICAgLCBtX29zckV4aXRDb3VudGVyKDApCisgICAgLCBtX29w
dGltaXphdGlvbkRlbGF5Q291bnRlcigwKQorICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291
bnRlcigwKQorI2lmIEVOQUJMRShKSVQpCisgICAgLCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlKERG
Rzo6Q2Fubm90Q29tcGlsZSkKKyNlbmRpZgoreworICAgIEFTU0VSVChtX2hlYXAtPmlzRGVmZXJy
ZWQoKSk7CisKKyAgICBtX2hlYXAtPm1fY29kZUJsb2Nrcy5hZGQodGhpcyk7CisgICAgbV9oZWFw
LT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChzaXplb2YoQ29kZUJsb2NrKSk7Cit9CisjZW5k
aWYKKwogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKIHsKICAgICBpZiAobV92bS0+bV9wZXJCeXRl
Y29kZVByb2ZpbGVyKQpAQCAtMjUwOCw3ICsyNTQxLDExIEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNp
dFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogdm9pZCBDb2RlQmxvY2s6OmZp
bmFsaXplVW5jb25kaXRpb25hbGx5KCkKIHsKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIg
PSBtX3ZtLT5pbnRlcnByZXRlcjsKLSAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVk
KGppdFR5cGUoKSkpIHsKKyAgICBib29sIG93bmVkQnlXZWJBc3NlbWJseUV4ZWN1dGFibGUgPSBm
YWxzZTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgb3duZWRCeVdlYkFzc2VtYmx5RXhl
Y3V0YWJsZSA9IG1fb3duZXJFeGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpOwor
I2VuZGlmCisgICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkpICYm
ICFvd25lZEJ5V2ViQXNzZW1ibHlFeGVjdXRhYmxlKSB7CiAgICAgICAgIGNvbnN0IFZlY3Rvcjx1
bnNpZ25lZD4mIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGUtPnBy
b3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IHNpemUgPSBw
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7
CiAgICAgICAgICAgICBJbnN0cnVjdGlvbiogY3VySW5zdHJ1Y3Rpb24gPSAmaW5zdHJ1Y3Rpb25z
KClbcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbaV1dOwpAQCAtMjkxMyw3ICsyOTUwLDcgQEAg
SGFuZGxlckluZm8qIENvZGVCbG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0LCBSZXF1aXIKIHVuc2lnbmVkIENvZGVCbG9jazo6bGluZU51bWJlckZv
ckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLSAgICByZXR1
cm4gbV9vd25lckV4ZWN1dGFibGUtPmZpcnN0TGluZSgpICsgbV91bmxpbmtlZENvZGUtPmxpbmVO
dW1iZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAgcmV0dXJuIG93bmVy
U2NyaXB0RXhlY3V0YWJsZSgpLT5maXJzdExpbmUoKSArIG1fdW5saW5rZWRDb2RlLT5saW5lTnVt
YmVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOwogfQogCiB1bnNpZ25lZCBDb2Rl
QmxvY2s6OmNvbHVtbk51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0KQpAQCAtMjkzMiw3ICsyOTY5LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5n
ZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGQKICAgICBt
X3VubGlua2VkQ29kZS0+ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVP
ZmZzZXQsIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBjb2x1bW4pOwogICAg
IGRpdm90ICs9IG1fc291cmNlT2Zmc2V0OwogICAgIGNvbHVtbiArPSBsaW5lID8gMSA6IGZpcnN0
TGluZUNvbHVtbk9mZnNldCgpOwotICAgIGxpbmUgKz0gbV9vd25lckV4ZWN1dGFibGUtPmZpcnN0
TGluZSgpOworICAgIGxpbmUgKz0gb3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPmZpcnN0TGluZSgp
OwogfQogCiBib29sIENvZGVCbG9jazo6aGFzT3BEZWJ1Z0ZvckxpbmVBbmRDb2x1bW4odW5zaWdu
ZWQgbGluZSwgdW5zaWduZWQgY29sdW1uKQpAQCAtMzAwOSwxMiArMzA0NiwxMiBAQCB2b2lkIENv
ZGVCbG9jazo6bGlua0luY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBMTEludENh
bGxMaW5rSW5mbyogaW5jbwogCiB2b2lkIENvZGVCbG9jazo6aW5zdGFsbCgpCiB7Ci0gICAgb3du
ZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKHRoaXMpOworICAgIG93bmVyU2NyaXB0RXhlY3V0
YWJsZSgpLT5pbnN0YWxsQ29kZSh0aGlzKTsKIH0KIAogUGFzc1JlZlB0cjxDb2RlQmxvY2s+IENv
ZGVCbG9jazo6bmV3UmVwbGFjZW1lbnQoKQogewotICAgIHJldHVybiBvd25lckV4ZWN1dGFibGUo
KS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKCkpOworICAg
IHJldHVybiBvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tG
b3Ioc3BlY2lhbGl6YXRpb25LaW5kKCkpOwogfQogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTMwNDks
NiArMzA4NiwxOCBAQCBERkc6OkNhcGFiaWxpdHlMZXZlbCBGdW5jdGlvbkNvZGVCbG9jazo6Y2Fw
YWJpbGl0eUxldmVsSW50ZXJuYWwoKQogICAgICAgICByZXR1cm4gREZHOjpmdW5jdGlvbkZvckNv
bnN0cnVjdENhcGFiaWxpdHlMZXZlbCh0aGlzKTsKICAgICByZXR1cm4gREZHOjpmdW5jdGlvbkZv
ckNhbGxDYXBhYmlsaXR5TGV2ZWwodGhpcyk7CiB9CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CitDb2RlQmxvY2sqIFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpyZXBsYWNlbWVudCgpCit7CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK0RGRzo6Q2FwYWJpbGl0eUxldmVsIFdlYkFzc2VtYmx5Q29k
ZUJsb2NrOjpjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpCit7CisgICAgcmV0dXJuIERGRzo6Q2Fu
bm90Q29tcGlsZTsKK30KKyNlbmRpZgogI2VuZGlmCiAKIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNv
bihQcm9maWxlcjo6SmV0dGlzb25SZWFzb24gcmVhc29uLCBSZW9wdGltaXphdGlvbk1vZGUgbW9k
ZSwgY29uc3QgRmlyZURldGFpbCogZGV0YWlsKQpAQCAtMzYwMSw2ICszNjUwLDEwIEBAIHZvaWQg
Q29kZUJsb2NrOjp1cGRhdGVBbGxBcnJheVByZWRpY3Rpb25zKCkKIAogdm9pZCBDb2RlQmxvY2s6
OnVwZGF0ZUFsbFByZWRpY3Rpb25zKCkKIHsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAg
aWYgKG1fb3duZXJFeGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKQorICAgICAg
ICByZXR1cm47CisjZW5kaWYKICAgICB1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9ucygp
OwogICAgIHVwZGF0ZUFsbEFycmF5UHJlZGljdGlvbnMoKTsKIH0KQEAgLTM5MTgsNyArMzk3MSw3
IEBAIHZvaWQgQ29kZUJsb2NrOjppbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmllc0ZvckNvbnRyb2xG
bG93UHJvZmlsZXIoVmVjdG9yPEluc3RydWN0CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh2
bSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zW2VuZElkeF0udS5vcGNv
ZGUpID09IG9wX3Byb2ZpbGVfY29udHJvbF9mbG93KTsKICAgICAgICAgICAgIGJhc2ljQmxvY2tF
bmRPZmZzZXQgPSBpbnN0cnVjdGlvbnNbZW5kSWR4ICsgMV0udS5vcGVyYW5kIC0gMTsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJhc2ljQmxvY2tFbmRPZmZzZXQgPSBtX3NvdXJjZU9m
ZnNldCArIG1fb3duZXJFeGVjdXRhYmxlLT5zb3VyY2UoKS5sZW5ndGgoKSAtIDE7IC8vIE9mZnNl
dCBiZWZvcmUgdGhlIGNsb3NpbmcgYnJhY2UuCisgICAgICAgICAgICBiYXNpY0Jsb2NrRW5kT2Zm
c2V0ID0gbV9zb3VyY2VPZmZzZXQgKyBvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+c291cmNlKCku
bGVuZ3RoKCkgLSAxOyAvLyBPZmZzZXQgYmVmb3JlIHRoZSBjbG9zaW5nIGJyYWNlLgogICAgICAg
ICAgICAgYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0ID0gc3RkOjptaW4oYmFzaWNCbG9ja1N0YXJ0T2Zm
c2V0LCBiYXNpY0Jsb2NrRW5kT2Zmc2V0KTsgLy8gU29tZSBzdGFydCBvZmZzZXRzIG1heSBiZSBh
dCB0aGUgY2xvc2luZyBicmFjZSwgZW5zdXJlIGl0IGlzIHRoZSBvZmZzZXQgYmVmb3JlLgogICAg
ICAgICB9CiAKQEAgLTM5NDYsNyArMzk5OSw3IEBAIHZvaWQgQ29kZUJsb2NrOjppbnNlcnRCYXNp
Y0Jsb2NrQm91bmRhcmllc0ZvckNvbnRyb2xGbG93UHJvZmlsZXIoVmVjdG9yPEluc3RydWN0CiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIEJhc2ljQmxvY2tMb2Nh
dGlvbiogYmFzaWNCbG9ja0xvY2F0aW9uID0gdm0oKS0+Y29udHJvbEZsb3dQcm9maWxlcigpLT5n
ZXRCYXNpY0Jsb2NrTG9jYXRpb24obV9vd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIGJhc2lj
QmxvY2tTdGFydE9mZnNldCwgYmFzaWNCbG9ja0VuZE9mZnNldCk7CisgICAgICAgIEJhc2ljQmxv
Y2tMb2NhdGlvbiogYmFzaWNCbG9ja0xvY2F0aW9uID0gdm0oKS0+Y29udHJvbEZsb3dQcm9maWxl
cigpLT5nZXRCYXNpY0Jsb2NrTG9jYXRpb24ob3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPnNvdXJj
ZUlEKCksIGJhc2ljQmxvY2tTdGFydE9mZnNldCwgYmFzaWNCbG9ja0VuZE9mZnNldCk7CiAKICAg
ICAgICAgLy8gRmluZCBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIGVuY2xvc2VkIHdpdGhpbiB0aGUg
cmFuZ2U6IFtiYXNpY0Jsb2NrU3RhcnRPZmZzZXQsIGJhc2ljQmxvY2tFbmRPZmZzZXRdCiAgICAg
ICAgIC8vIGFuZCBpbnNlcnQgdGhlc2UgZnVuY3Rpb25zJyBzdGFydC9lbmQgb2Zmc2V0cyBhcyBn
YXBzIGluIHRoZSBjdXJyZW50IEJhc2ljQmxvY2tMb2NhdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRleCA5NDk5NDA1NjQzYWE5MTNkYzc4ZTc5OWFh
MGNjNTY3MmViMzZlZjNjLi5jYjllYmQ2MWI1ZGRmZTBjYjNmNjdmMzEwZGY4ODE3N2RkNjM1NDli
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC05Niw2
ICs5Niw5IEBAIHByb3RlY3RlZDoKICAgICBDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBD
b2RlQmxvY2smIG90aGVyKTsKICAgICAgICAgCiAgICAgQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFi
bGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqLCBKU1Njb3BlKiwgUGFzc1Jl
ZlB0cjxTb3VyY2VQcm92aWRlcj4sIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmly
c3RMaW5lQ29sdW1uT2Zmc2V0KTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgQ29kZUJs
b2NrKFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBWTSYsIEpTR2xvYmFs
T2JqZWN0Kik7CisjZW5kaWYKIAogICAgIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD4gbV9n
bG9iYWxPYmplY3Q7CiAgICAgSGVhcCogbV9oZWFwOwpAQCAtMzAzLDcgKzMwNiw4IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgamV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uUmVhc29uLCBSZW9wdGlt
aXphdGlvbk1vZGUgPSBEb250Q291bnRSZW9wdGltaXphdGlvbiwgY29uc3QgRmlyZURldGFpbCog
PSBudWxscHRyKTsKICAgICAKLSAgICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUo
KSBjb25zdCB7IHJldHVybiBtX293bmVyRXhlY3V0YWJsZS5nZXQoKTsgfQorICAgIEV4ZWN1dGFi
bGVCYXNlKiBvd25lckV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBtX293bmVyRXhlY3V0YWJs
ZS5nZXQoKTsgfQorICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgp
IGNvbnN0IHsgcmV0dXJuIGpzQ2FzdDxTY3JpcHRFeGVjdXRhYmxlKj4obV9vd25lckV4ZWN1dGFi
bGUuZ2V0KCkpOyB9CiAKICAgICB2b2lkIHNldFZNKFZNKiB2bSkgeyBtX3ZtID0gdm07IH0KICAg
ICBWTSogdm0oKSB7IHJldHVybiBtX3ZtOyB9CkBAIC0zNDYsNyArMzUwLDE1IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1fbmVlZHNBY3RpdmF0aW9uOwogICAgIH0KICAgICAKLSAgICBDb2Rl
VHlwZSBjb2RlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb2RlVHlwZSgp
OyB9CisgICAgQ29kZVR5cGUgY29kZVR5cGUoKSBjb25zdAorICAgIHsKKyNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCisgICAgICAgIGlmIChtX293bmVyRXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseUV4
ZWN1dGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiBGdW5jdGlvbkNvZGU7CisjZW5kaWYKKyAg
ICAgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb2RlVHlwZSgpOworICAgIH0KKwogICAgIFB1
dFByb3BlcnR5U2xvdDo6Q29udGV4dCBwdXRCeUlkQ29udGV4dCgpIGNvbnN0CiAgICAgewogICAg
ICAgICBpZiAoY29kZVR5cGUoKSA9PSBFdmFsQ29kZSkKQEAgLTk4Myw3ICs5OTUsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgdW5zaWduZWQgbV9udW1CcmVha3BvaW50cyA6IDMwOwogICAgICAg
ICB9OwogICAgIH07Ci0gICAgV3JpdGVCYXJyaWVyPFNjcmlwdEV4ZWN1dGFibGU+IG1fb3duZXJF
eGVjdXRhYmxlOworICAgIFdyaXRlQmFycmllcjxFeGVjdXRhYmxlQmFzZT4gbV9vd25lckV4ZWN1
dGFibGU7CiAgICAgVk0qIG1fdm07CiAKICAgICBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+
IG1faW5zdHJ1Y3Rpb25zOwpAQCAtMTEzNCw2ICsxMTQ2LDI3IEBAIHByb3RlY3RlZDoKICNlbmRp
ZgogfTsKIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKK2NsYXNzIFdlYkFzc2VtYmx5Q29kZUJs
b2NrIDogcHVibGljIENvZGVCbG9jayB7CitwdWJsaWM6CisgICAgV2ViQXNzZW1ibHlDb2RlQmxv
Y2soQ29weVBhcnNlZEJsb2NrVGFnLCBXZWJBc3NlbWJseUNvZGVCbG9jayYgb3RoZXIpCisgICAg
ICAgIDogQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCisgICAgeworICAgIH0KKwor
ICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogb3duZXJFeGVj
dXRhYmxlLCBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgICAgIDog
Q29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgdm0sIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAg
fQorCisjaWYgRU5BQkxFKEpJVCkKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIENvZGVCbG9jayog
cmVwbGFjZW1lbnQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVs
IGNhcGFiaWxpdHlMZXZlbEludGVybmFsKCkgb3ZlcnJpZGU7CisjZW5kaWYKK307CisjZW5kaWYK
KwogaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6OnIoaW50IGluZGV4KQogewogICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAppbmRleCAzNTM4MzcyNzMwMzYwYzkzMGExZTZmN2Y2
ODdlNWE5MzQwZGIxYjQwLi5jNmYxNGE5NDE1ODBiYjRiZmM1MzU3OWFiNTM4NjA1OGYzOWNiODIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKQEAgLTIy
Nyw3ICsyMjcsNyBAQCB2b2lkIERlYnVnZ2VyOjpyZWdpc3RlckNvZGVCbG9jayhDb2RlQmxvY2sq
IGNvZGVCbG9jaykKIAogdm9pZCBEZWJ1Z2dlcjo6dG9nZ2xlQnJlYWtwb2ludChDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQnJlYWtwb2ludCYgYnJlYWtwb2ludCwgQnJlYWtwb2ludFN0YXRlIGVuYWJs
ZWRPck5vdCkKIHsKLSAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKTsKKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0g
Y29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKTsKIAogICAgIFNvdXJjZUlEIHNvdXJj
ZUlEID0gc3RhdGljX2Nhc3Q8U291cmNlSUQ+KGV4ZWN1dGFibGUtPnNvdXJjZUlEKCkpOwogICAg
IGlmIChicmVha3BvaW50LnNvdXJjZUlEICE9IHNvdXJjZUlEKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKaW5kZXggYmYwOTNl
ODliNDRiYWYzNTU2MTE1MTE3NDYyNzdhMTAxYzdhNzI2Yi4uZDM4M2MzZmZkMDgyMGY4YTJiNzFl
ODdjNDU1MmRmNzdkMDY1NGY3YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rl
YnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCkBAIC0yNDIsNyArMjQyLDcgQEAgU291cmNl
SUQgRGVidWdnZXJDYWxsRnJhbWU6OnNvdXJjZUlERm9yQ2FsbEZyYW1lKENhbGxGcmFtZSogY2Fs
bEZyYW1lKQogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2so
KTsKICAgICBpZiAoIWNvZGVCbG9jaykKICAgICAgICAgcmV0dXJuIG5vU291cmNlSUQ7Ci0gICAg
cmV0dXJuIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZUlEKCk7CisgICAgcmV0
dXJuIGNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPnNvdXJjZUlEKCk7CiB9CiAK
IEpTVmFsdWUgRGVidWdnZXJDYWxsRnJhbWU6OnRoaXNWYWx1ZUZvckNhbGxGcmFtZShDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAKaW5kZXggY2JiYTljODUwMjY1ODY3MjQ4YTEzOGI4NjcwMDJhNDJmZGY3OTIz
YS4uZDlhOTYyYWUxZmFmNDljYjcyZTM4NDU1ZTM2ZTdlMjhhOTRiNTU3MyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTkzOSw3ICs5
MzksNyBAQCBwcml2YXRlOgogICAgICAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKICAg
ICAgICAgSW5saW5lQ2FsbEZyYW1lKiBtX2lubGluZUNhbGxGcmFtZTsKICAgICAgICAgCi0gICAg
ICAgIFNjcmlwdEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCk7IH0KKyAgICAgICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKTsgfQogICAg
ICAgICAKICAgICAgICAgUXVlcnlhYmxlRXhpdFByb2ZpbGUgbV9leGl0UHJvZmlsZTsKICAgICAg
ICAgCkBAIC0xMjUyLDggKzEyNTIsOCBAQCB1bnNpZ25lZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5p
bmdDb3N0KENhbGxWYXJpYW50IGNhbGxlZSwgaW50IGFyZ3VtZW50Q291bnRJbmNsdQogICAgICAg
ICBkYXRhTG9nKCIgICAgTWlnaHQgaW5saW5lIGZ1bmN0aW9uOiAiLCBtaWdodElubGluZUZ1bmN0
aW9uRm9yKGNvZGVCbG9jaywga2luZCksICJcbiIpOwogICAgICAgICBkYXRhTG9nKCIgICAgTWln
aHQgY29tcGlsZSBmdW5jdGlvbjogIiwgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3IoY29kZUJsb2Nr
LCBraW5kKSwgIlxuIik7CiAgICAgICAgIGRhdGFMb2coIiAgICBJcyBzdXBwb3J0ZWQgZm9yIGlu
bGluaW5nOiAiLCBpc1N1cHBvcnRlZEZvcklubGluaW5nKGNvZGVCbG9jayksICJcbiIpOwotICAg
ICAgICBkYXRhTG9nKCIgICAgTmVlZHMgYWN0aXZhdGlvbjogIiwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKS0+bmVlZHNBY3RpdmF0aW9uKCksICJcbiIpOwotICAgICAgICBkYXRhTG9nKCIg
ICAgSXMgaW5saW5pbmcgY2FuZGlkYXRlOiAiLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LT5pc0lubGluaW5nQ2FuZGlkYXRlKCksICJcbiIpOworICAgICAgICBkYXRhTG9nKCIgICAgTmVl
ZHMgYWN0aXZhdGlvbjogIiwgY29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+bmVl
ZHNBY3RpdmF0aW9uKCksICJcbiIpOworICAgICAgICBkYXRhTG9nKCIgICAgSXMgaW5saW5pbmcg
Y2FuZGlkYXRlOiAiLCBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5pc0lubGlu
aW5nQ2FuZGlkYXRlKCksICJcbiIpOwogICAgIH0KICAgICBpZiAoIWNhbklubGluZShjYXBhYmls
aXR5TGV2ZWwpKSB7CiAgICAgICAgIGlmICh2ZXJib3NlKQpAQCAtNDQzNiw3ICs0NDM2LDcgQEAg
Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkoCiAgICAg
ICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2dyYXBoLmZyZWV6ZShjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpKTsKICAgICAgICAgLy8gVGhlIG93bmVyIGlzIHRoZSBtYWNoaW5lIGNvZGUgYmxvY2ss
IGFuZCB3ZSBhbHJlYWR5IGhhdmUgYSBiYXJyaWVyIG9uIHRoYXQgd2hlbiB0aGUKICAgICAgICAg
Ly8gcGxhbiBmaW5pc2hlcy4KLSAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUu
c2V0V2l0aG91dFdyaXRlQmFycmllcihjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKTsKKyAg
ICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuc2V0V2l0aG91dFdyaXRlQmFycmll
cihjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpKTsKICAgICAgICAgbV9pbmxpbmVD
YWxsRnJhbWUtPnNldFN0YWNrT2Zmc2V0KGlubGluZUNhbGxGcmFtZVN0YXJ0Lm9mZnNldCgpIC0g
SlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSk7CiAgICAgICAgIGlmIChjYWxsZWUpIHsKICAg
ICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeSA9IFZhbHVlUmVjb3Zl
cnk6OmNvbnN0YW50KGNhbGxlZSk7CkBAIC00NTI5LDcgKzQ1MjksNyBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpCiAgICAgICAgIH0KICAgICAgICAgZGF0YUxvZygKICAg
ICAgICAgICAgICI6IG5lZWRzQWN0aXZhdGlvbiA9ICIsIGNvZGVCbG9jay0+bmVlZHNBY3RpdmF0
aW9uKCksCi0gICAgICAgICAgICAiLCBpc1N0cmljdE1vZGUgPSAiLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSwgIlxuIik7CisgICAgICAgICAgICAiLCBpc1N0
cmljdE1vZGUgPSAiLCBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5pc1N0cmlj
dE1vZGUoKSwgIlxuIik7CiAgICAgICAgIGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCktPmR1
bXBCeXRlY29kZSgpOwogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2FwYWJpbGl0aWVzLmNwcAppbmRleCA3ZjU0MzA4NDg1MjkxNTkzZmI3NWY2YmJjMDY5YmFh
M2I2Y2QxMzI1Li4xZjI3YzU1NjU3NjJjMjgyM2NkNzhlYzkxNzhhM2MxMTVhOTYwYTE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCkBAIC00NCw3
ICs0NCwxMSBAQCBib29sIGlzU3VwcG9ydGVkKCkKIAogYm9vbCBpc1N1cHBvcnRlZEZvcklubGlu
aW5nKENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIHJldHVybiBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLT5pc0lubGluaW5nQ2FuZGlkYXRlKCk7CisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorICAgIGlmIChjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pc1dlYkFzc2VtYmx5
RXhlY3V0YWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICByZXR1cm4g
Y29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+aXNJbmxpbmluZ0NhbmRpZGF0ZSgp
OwogfQogCiBib29sIG1pZ2h0Q29tcGlsZUV2YWwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKaW5kZXggNGRiNDcxYjFmZGE5NWU4M2Q5Njk5OThi
Zjc2MWNkMjBmNDczZjkxNS4uNDY0NzZkNDc4YjNkZjEwZDc1ZGZmNDliYTMxMGM1OWVhOTg3ZTA0
NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaApAQCAtMzQ1LDcgKzM0NSw3IEBA
IHB1YmxpYzoKICAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlRm9yKElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJh
bWUpCi0gICAgICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOwor
ICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKTsK
ICAgICAgICAgCiAgICAgICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0
KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAppbmRl
eCAwMmRiZTRmYTVkZDM0MjRlZWQzYzUxMmU4OWI2MTRhZWQyYjgwMjgwLi5kODU3NjVmMGY2MGY5
NTQ5YWMwZjIyNzcwMzkzM2JiNjdiNjVjYjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmNwcApAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRy
eShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29k
ZUluCiAgICAgc2FuaXRpemVTdGFja0ZvclZNKHZtKTsKICAgICAKICAgICBpZiAoYnl0ZWNvZGVJ
bmRleCkKLSAgICAgICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+c2V0RGlkVHJ5VG9F
bnRlckluTG9vcCh0cnVlKTsKKyAgICAgICAgY29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFi
bGUoKS0+c2V0RGlkVHJ5VG9FbnRlckluTG9vcCh0cnVlKTsKICAgICAKICAgICBpZiAoY29kZUJs
b2NrLT5qaXRUeXBlKCkgIT0gSklUQ29kZTo6REZHSklUKSB7CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkZUTEpJVCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3Rvcnku
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0
b3J5LmNwcAppbmRleCBmMzNkNDA1Y2JhY2Q2NjMxY2IyOTQ2ZjA1ZWQ5YmYzMzFhMjNmYTQ5Li5m
ZDcxMjc0YTM1NjE0YjJmMDc1ZjU3NWFhMTViMTliMWIyN2ZjYjlkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9y
eS5jcHAKQEAgLTY2LDYgKzY2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAgIGlm
IChtX3JlbWFpbmluZ0NhcGFjaXR5Rm9yRnJhbWVDYXB0dXJlKSB7CisjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQorICAgICAgICAgICAgaWYgKHZpc2l0b3ItPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1
dGFibGUoKS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKKyNlbmRpZgogICAgICAgICAgICAgdW5zaWduZWQg
bGluZTsKICAgICAgICAgICAgIHVuc2lnbmVkIGNvbHVtbjsKICAgICAgICAgICAgIHZpc2l0b3It
PmNvbXB1dGVMaW5lQW5kQ29sdW1uKGxpbmUsIGNvbHVtbik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAppbmRleCBjYzM0YTY2NWJlMzBk
YjI5ZTBkYWRlM2M3ZDhhNTNhNDdhMGY1ZjcyLi5mMDRkMGIzNTBmOTE1ZWMyZTRhMmU2MzdlN2I1
NmM2OTQ4OWUwMDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAKQEAgLTE2OCw3ICsxNjgsNyBAQCBKU1ZhbHVlIGV2YWwoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCiAgICAgICAgIEFTU0VSVCghY2FsbEZyYW1lLT52bSgpLmV4Y2VwdGlv
bigpKTsKIAogICAgICAgICBUaGlzVERaTW9kZSB0aGlzVERaTW9kZSA9IGNhbGxlckNvZGVCbG9j
ay0+dW5saW5rZWRDb2RlQmxvY2soKS0+Y29uc3RydWN0b3JLaW5kKCkgPT0gQ29uc3RydWN0b3JL
aW5kOjpEZXJpdmVkID8gVGhpc1REWk1vZGU6OkFsd2F5c0NoZWNrIDogVGhpc1REWk1vZGU6OkNo
ZWNrSWZOZWVkZWQ7Ci0gICAgICAgIGV2YWwgPSBjYWxsZXJDb2RlQmxvY2stPmV2YWxDb2RlQ2Fj
aGUoKS5nZXRTbG93KGNhbGxGcmFtZSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgY2FsbGVyQ29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSwgdGhpc1REWk1vZGUsIHByb2dyYW1T
b3VyY2UsIGNhbGxlclNjb3BlQ2hhaW4pOworICAgICAgICBldmFsID0gY2FsbGVyQ29kZUJsb2Nr
LT5ldmFsQ29kZUNhY2hlKCkuZ2V0U2xvdyhjYWxsRnJhbWUsIGNhbGxlckNvZGVCbG9jay0+b3du
ZXJTY3JpcHRFeGVjdXRhYmxlKCksIGNhbGxlckNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCksIHRo
aXNURFpNb2RlLCBwcm9ncmFtU291cmNlLCBjYWxsZXJTY29wZUNoYWluKTsKICAgICAgICAgaWYg
KCFldmFsKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQpAQCAtNTE1
LDYgKzUxNSwxNiBAQCBTdHJpbmcgU3RhY2tGcmFtZTo6dG9TdHJpbmcoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCiAgICAgcmV0dXJuIHRyYWNlQnVpbGQudG9TdHJpbmcoKS5pbXBsKCk7CiB9CiAKK3N0
YXRpYyBpbmxpbmUgYm9vbCBpc1dlYkFzc2VtYmx5RXhlY3V0YWJsZShFeGVjdXRhYmxlQmFzZSog
ZXhlY3V0YWJsZSkKK3sKKyNpZiAhRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIFVOVVNFRF9QQVJB
TShleGVjdXRhYmxlKTsKKyAgICByZXR1cm4gZmFsc2U7CisjZWxzZQorICAgIHJldHVybiBleGVj
dXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpOworI2VuZGlmCit9CisKIGNsYXNzIEdl
dFN0YWNrVHJhY2VGdW5jdG9yIHsKIHB1YmxpYzoKICAgICBHZXRTdGFja1RyYWNlRnVuY3RvcihW
TSYgdm0sIFZlY3RvcjxTdGFja0ZyYW1lPiYgcmVzdWx0cywgc2l6ZV90IHJlbWFpbmluZ0NhcGFj
aXR5KQpAQCAtNTI4LDE1ICs1MzgsMTcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgVk0mIHZt
ID0gbV92bTsKICAgICAgICAgaWYgKG1fcmVtYWluaW5nQ2FwYWNpdHlGb3JGcmFtZUNhcHR1cmUp
IHsKLSAgICAgICAgICAgIGlmICh2aXNpdG9yLT5pc0pTRnJhbWUoKSAmJiAhdmlzaXRvci0+Y29k
ZUJsb2NrKCktPnVubGlua2VkQ29kZUJsb2NrKCktPmlzQnVpbHRpbkZ1bmN0aW9uKCkpIHsKKyAg
ICAgICAgICAgIGlmICh2aXNpdG9yLT5pc0pTRnJhbWUoKQorICAgICAgICAgICAgICAgICYmICFp
c1dlYkFzc2VtYmx5RXhlY3V0YWJsZSh2aXNpdG9yLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRh
YmxlKCkpCisgICAgICAgICAgICAgICAgJiYgIXZpc2l0b3ItPmNvZGVCbG9jaygpLT51bmxpbmtl
ZENvZGVCbG9jaygpLT5pc0J1aWx0aW5GdW5jdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSB2aXNpdG9yLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAg
ICBTdGFja0ZyYW1lIHMgPSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cm9uZzxKU09iamVjdD4o
dm0sIHZpc2l0b3ItPmNhbGxlZSgpKSwKICAgICAgICAgICAgICAgICAgICAgZ2V0U3RhY2tGcmFt
ZUNvZGVUeXBlKHZpc2l0b3IpLAotICAgICAgICAgICAgICAgICAgICBTdHJvbmc8U2NyaXB0RXhl
Y3V0YWJsZT4odm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpLAorICAgICAgICAgICAg
ICAgICAgICBTdHJvbmc8U2NyaXB0RXhlY3V0YWJsZT4odm0sIGNvZGVCbG9jay0+b3duZXJTY3Jp
cHRFeGVjdXRhYmxlKCkpLAogICAgICAgICAgICAgICAgICAgICBTdHJvbmc8VW5saW5rZWRDb2Rl
QmxvY2s+KHZtLCBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpLAogICAgICAgICAgICAg
ICAgICAgICBjb2RlQmxvY2stPnNvdXJjZSgpLAotICAgICAgICAgICAgICAgICAgICBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLT5maXJzdExpbmUoKSwKKyAgICAgICAgICAgICAgICAgICAg
Y29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+Zmlyc3RMaW5lKCksCiAgICAgICAg
ICAgICAgICAgICAgIGNvZGVCbG9jay0+Zmlyc3RMaW5lQ29sdW1uT2Zmc2V0KCksCiAgICAgICAg
ICAgICAgICAgICAgIGNvZGVCbG9jay0+c291cmNlT2Zmc2V0KCksCiAgICAgICAgICAgICAgICAg
ICAgIHZpc2l0b3ItPmJ5dGVjb2RlT2Zmc2V0KCksCkBAIC02MjksNyArNjQxLDcgQEAgcHVibGlj
OgogICAgICAgICBtX2NvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpOwogICAgICAgICB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IHZpc2l0b3ItPmJ5dGVjb2RlT2Zmc2V0KCk7CiAKLSAg
ICAgICAgaWYgKG1faXNUZXJtaW5hdGlvbiB8fCAhKG1faGFuZGxlciA9IG1fY29kZUJsb2NrID8g
bV9jb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkgOiBu
dWxscHRyKSkgeworICAgICAgICBpZiAobV9pc1Rlcm1pbmF0aW9uIHx8ICEobV9oYW5kbGVyID0g
KG1fY29kZUJsb2NrICYmICFpc1dlYkFzc2VtYmx5RXhlY3V0YWJsZShtX2NvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCkpKSA/IG1fY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQo
Ynl0ZWNvZGVPZmZzZXQpIDogbnVsbHB0cikpIHsKICAgICAgICAgICAgIGlmICghdW53aW5kQ2Fs
bEZyYW1lKHZpc2l0b3IpKSB7CiAgICAgICAgICAgICAgICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBw
cm9maWxlciA9IHZtLmVuYWJsZWRQcm9maWxlcigpKQogICAgICAgICAgICAgICAgICAgICBwcm9m
aWxlci0+ZXhjZXB0aW9uVW53aW5kKG1fY2FsbEZyYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKaW5kZXggZDM3NmRiNDIxN2Zh
NjFlNmMzMmVhOWRhMjdhNzViZmIwMzMwYjNiNy4uM2YyYjkxNDA0NTFkNDg4MzRhOWY3MTAzMzQ2
NGEyMTQ3ZDFiZGI3MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1N0YWNrVmlzaXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1N0YWNrVmlzaXRvci5jcHAKQEAgLTIyMSw3ICsyMjEsNyBAQCBTdHJpbmcgU3RhY2tWaXNp
dG9yOjpGcmFtZTo6c291cmNlVVJMKCkKICAgICBjYXNlIENvZGVUeXBlOjpFdmFsOgogICAgIGNh
c2UgQ29kZVR5cGU6OkZ1bmN0aW9uOgogICAgIGNhc2UgQ29kZVR5cGU6Okdsb2JhbDogewotICAg
ICAgICBTdHJpbmcgc291cmNlVVJMID0gY29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLT5z
b3VyY2VVUkwoKTsKKyAgICAgICAgU3RyaW5nIHNvdXJjZVVSTCA9IGNvZGVCbG9jaygpLT5vd25l
clNjcmlwdEV4ZWN1dGFibGUoKS0+c291cmNlVVJMKCk7CiAgICAgICAgIGlmICghc291cmNlVVJM
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHRyYWNlTGluZSA9IHNvdXJjZVVSTC5pbXBsKCk7CiAg
ICAgICAgIGJyZWFrOwpAQCAtMjkyLDExICsyOTIsMTEgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OkZy
YW1lOjpjb21wdXRlTGluZUFuZENvbHVtbih1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVt
bikKICAgICB1bnNpZ25lZCBkaXZvdENvbHVtbiA9IDA7CiAgICAgcmV0cmlldmVFeHByZXNzaW9u
SW5mbyhkaXZvdCwgdW51c2VkU3RhcnRPZmZzZXQsIHVudXNlZEVuZE9mZnNldCwgZGl2b3RMaW5l
LCBkaXZvdENvbHVtbik7CiAKLSAgICBsaW5lID0gZGl2b3RMaW5lICsgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKS0+Zmlyc3RMaW5lKCk7CisgICAgbGluZSA9IGRpdm90TGluZSArIGNvZGVC
bG9jay0+b3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPmZpcnN0TGluZSgpOwogICAgIGNvbHVtbiA9
IGRpdm90Q29sdW1uICsgKGRpdm90TGluZSA/IDEgOiBjb2RlQmxvY2stPmZpcnN0TGluZUNvbHVt
bk9mZnNldCgpKTsKIAotICAgIGlmIChjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5oYXNP
dmVycmlkZUxpbmVOdW1iZXIoKSkKLSAgICAgICAgbGluZSA9IGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCktPm92ZXJyaWRlTGluZU51bWJlcigpOworICAgIGlmIChjb2RlQmxvY2stPm93bmVy
U2NyaXB0RXhlY3V0YWJsZSgpLT5oYXNPdmVycmlkZUxpbmVOdW1iZXIoKSkKKyAgICAgICAgbGlu
ZSA9IGNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPm92ZXJyaWRlTGluZU51bWJl
cigpOwogfQogCiB2b2lkIFN0YWNrVmlzaXRvcjo6RnJhbWU6OnJldHJpZXZlRXhwcmVzc2lvbklu
Zm8oaW50JiBkaXZvdCwgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQsIHVuc2lnbmVk
JiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAKaW5kZXggYjdhMzg2ODlmOGU1MmQzYTRlOTZjMTA5MzRhZDlkNWVmODkz
YzY2My4uMTYzNzg2NmEyNDVhZmQyZWYzZGVkMmUyMTBjNThmNzFiNjZkYzMxZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC04NDgsOSArODQ4LDIy
IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0YXRlKiBleGVj
Q2FsbGVlLCBDYWxsTGlua0luZm8qIGNhbGxMCiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
Y29kZVB0cjsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7Ci0gICAgaWYgKGV4ZWN1dGFi
bGUtPmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9u
KCkpIHsKICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3IoKnZtLCBr
aW5kLCBNdXN0Q2hlY2tBcml0eSwgY2FsbExpbmtJbmZvLT5yZWdpc3RlclByZXNlcnZhdGlvbk1v
ZGUoKSk7Ci0gICAgZWxzZSB7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIH0gZWxzZSBp
ZiAoZXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKSkgeworICAgICAgICBXZWJB
c3NlbWJseUV4ZWN1dGFibGUqIHdlYkFzc2VtYmx5RXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PFdl
YkFzc2VtYmx5RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOworICAgICAgICB3ZWJBc3NlbWJseUV4
ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSk7CisgICAgICAgIGNvZGVC
bG9jayA9IHdlYkFzc2VtYmx5RXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yQ2FsbCgpOworICAgICAg
ICBBU1NFUlQoY29kZUJsb2NrKTsKKyAgICAgICAgQXJpdHlDaGVja01vZGUgYXJpdHk7CisgICAg
ICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGlj
X2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpCisgICAgICAgICAgICBh
cml0eSA9IE11c3RDaGVja0FyaXR5OworICAgICAgICBlbHNlCisgICAgICAgICAgICBhcml0eSA9
IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDsKKyAgICAgICAgY29kZVB0ciA9IHdlYkFzc2VtYmx5RXhl
Y3V0YWJsZS0+ZW50cnlwb2ludEZvcigqdm0sIGtpbmQsIGFyaXR5LCBjYWxsTGlua0luZm8tPnJl
Z2lzdGVyUHJlc2VydmF0aW9uTW9kZSgpKTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CiAgICAgICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CiAKICAgICAgICAgaWYgKCFpc0NhbGwoa2lu
ZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0
QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0KSB7CkBAIC04OTYsMTcgKzkwOSwzMyBAQCBpbmxpbmUg
Y2hhciogdmlydHVhbEZvcldpdGhGdW5jdGlvbigKICAgICBKU1Njb3BlKiBzY29wZSA9IGZ1bmN0
aW9uLT5zY29wZVVuY2hlY2tlZCgpOwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0g
ZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKICAgICBpZiAoVU5MSUtFTFkoIWV4ZWN1dGFibGUtPmhh
c0pJVENvZGVGb3Ioa2luZCkpKSB7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rp
b25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJs
ZSk7CisgICAgICAgIGJvb2wgaXNXZWJBc3NlbWJseUV4ZWN1dGFibGUgPSBmYWxzZTsKKyNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAgIGlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlID0gZXhl
Y3V0YWJsZS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKTsKKyNlbmRpZgorICAgICAgICBpZiAo
IWlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKSB7CisgICAgICAgICAgICBGdW5jdGlvbkV4ZWN1dGFi
bGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+
KGV4ZWN1dGFibGUpOwogCi0gICAgICAgIGlmICghaXNDYWxsKGtpbmQpICYmIGZ1bmN0aW9uRXhl
Y3V0YWJsZS0+Y29uc3RydWN0QWJpbGl0eSgpID09IENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENv
bnN0cnVjdCkgewotICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBj
cmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihleGVjLCBmdW5jdGlvbikpOwotICAgICAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0
aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
OwotICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAmJiBmdW5jdGlvbkV4
ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RD
b25zdHJ1Y3QpIHsKKyAgICAgICAgICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4
ZWMsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMsIGZ1bmN0aW9uKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRo
cm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOworICAgICAgICAgICAgfQogCi0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1
bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBmdW5jdGlv
biwgc2NvcGUsIGtpbmQpOwotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGV4ZWMt
PnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXJyb3IpOwotICAgICAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNh
bGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAg
ICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhl
Y3V0aW9uKGV4ZWNDYWxsZWUsIGZ1bmN0aW9uLCBzY29wZSwga2luZCk7CisgICAgICAgICAgICBp
ZiAoZXJyb3IpIHsKKyAgICAgICAgICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4
ZWMsIGVycm9yKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4odm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9y
KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSB7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAgICAgICAgaWYgKCFpc0NhbGwo
a2luZCkpIHsKKyAgICAgICAgICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMs
IGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMsIGZ1bmN0aW9uKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBXZWJBc3NlbWJseUV4ZWN1dGFi
bGUqIHdlYkFzc2VtYmx5RXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PFdlYkFzc2VtYmx5RXhlY3V0
YWJsZSo+KGV4ZWN1dGFibGUpOworICAgICAgICAgICAgd2ViQXNzZW1ibHlFeGVjdXRhYmxlLT5w
cmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWNDYWxsZWUpOworI2VuZGlmCiAgICAgICAgIH0KICAgICB9
CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGV4ZWN1dGFibGUtPmVudHJ5cG9p
bnRGb3IoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAppbmRleCA3Y2Y2NzA4YTRi
MzZiNjUyZmQyMjBlMDc0YzBhY2IwZmE0OWI1OTM0Li5hZDRmZTcyNDA0YmRmODA1NWE2OGVhNjEy
MDVkZGVkYWFlODg5ZDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKQEAg
LTE3NDIsOCArMTc0MiwxMyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgICAgIGlm
ICh2YXJpYW50LmV4ZWN1dGFibGUoKS0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAgICAgIGNv
ZGVCbG9jayA9IG51bGxwdHI7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgY29kZUJsb2Nr
ID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHZhcmlhbnQuZXhlY3V0YWJsZSgpKS0+Y29k
ZUJsb2NrRm9yQ2FsbCgpOwotICAgICAgICAgICAgCisgICAgICAgICAgICBFeGVjdXRhYmxlQmFz
ZSogZXhlY3V0YWJsZSA9IHZhcmlhbnQuZXhlY3V0YWJsZSgpOworI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKKyAgICAgICAgICAgIGlmIChleGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJs
ZSgpKQorICAgICAgICAgICAgICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxXZWJBc3NlbWJseUV4ZWN1
dGFibGUqPihleGVjdXRhYmxlKS0+Y29kZUJsb2NrRm9yQ2FsbCgpOworICAgICAgICAgICAgZWxz
ZQorI2VuZGlmCisgICAgICAgICAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5jb2RlQmxvY2tGb3JDYWxsKCk7CiAgICAgICAgICAgICAv
LyBJZiB3ZSBjYW5ub3QgaGFuZGxlIGEgY2FsbGVlLCBhc3N1bWUgdGhhdCBpdCdzIGJldHRlciBm
b3IgdGhpcyB3aG9sZSB0aGluZyB0byBiZSBhCiAgICAgICAgICAgICAvLyB2aXJ0dWFsIGNhbGwu
CiAgICAgICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0
YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5r
SW5mby5jYWxsVHlwZSgpID09IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3MgfHwgY2FsbExpbmtJ
bmZvLmNhbGxUeXBlKCkgPT0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzKSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCmluZGV4IGU5MjZmNTJkYzc2ZDll
ZGUyZjBlM2E1YjNkYzI2YjMzNmE5MmY4NWQuLjczMTNmY2UyNDIwMGNjOTE2MTY5ZTgxNGEwYTA1
OTMwYWFiYWE1M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dERhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3Bw
CkBAIC0xMzIsOCArMTMyLDggQEAgdm9pZCBEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyhWTSYgdm0p
CiAgICAgQVNTRVJUKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsID09IDY0KTsKICNlbmRp
ZgogICAgIEFTU0VSVChTdHJpbmdUeXBlID09IDYpOwotICAgIEFTU0VSVChPYmplY3RUeXBlID09
IDE4KTsKLSAgICBBU1NFUlQoRmluYWxPYmplY3RUeXBlID09IDE5KTsKKyAgICBBU1NFUlQoT2Jq
ZWN0VHlwZSA9PSAxOSk7CisgICAgQVNTRVJUKEZpbmFsT2JqZWN0VHlwZSA9PSAyMCk7CiAgICAg
QVNTRVJUKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPT0gMSk7CiAgICAgQVNTRVJUKEltcGxlbWVu
dHNIYXNJbnN0YW5jZSA9PSAyKTsKICAgICBBU1NFUlQoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0
YW5jZSA9PSA4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCmluZGV4IDY2MzQ4OWJiY2RkYjk5NzAzZDE4YzQxNGRmOWNmYjQ0NDJiYTExY2UuLjYw
MmU2MzMwMTcyODIzZTk4MWQyMTk5MWQ4OTgxNWY1Y2FjNWRjNzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAtMTExNiw5ICsxMTE2LDE0
IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKEV4ZWNTdGF0ZSogZXhlY0Nh
bGxlZSwgSW5zdHJ1Y3Rpb24qIHBjLCBDb2RlCiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
Y29kZVB0cjsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7Ci0gICAgaWYgKGV4ZWN1dGFi
bGUtPmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgYm9vbCBpc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSA9
IGZhbHNlOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBpc1dlYkFzc2VtYmx5RXhlY3V0
YWJsZSA9IGV4ZWN1dGFibGUtPmlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCk7CisjZW5kaWYKKwor
ICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKSB7CiAgICAgICAgIGNvZGVQdHIg
PSBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKHZtLCBraW5kLCBNdXN0Q2hlY2tBcml0eSwgUmVn
aXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7Ci0gICAgZWxzZSB7CisgICAgfSBlbHNlIGlm
ICghaXNXZWJBc3NlbWJseUV4ZWN1dGFibGUpIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihl
eGVjdXRhYmxlKTsKIAogICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAmJiBmdW5jdGlvbkV4ZWN1
dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25z
dHJ1Y3QpCkBAIC0xMTM1LDYgKzExNDAsMTkgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBz
ZXRVcENhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBJbnN0cnVjdGlvbiogcGMsIENvZGUKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90UmVxdWlyZWQ7CiAg
ICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Iodm0sIGtp
bmQsIGFyaXR5LCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKKyAgICB9IGVsc2Ug
eworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICAgICAgV2ViQXNzZW1ibHlFeGVjdXRhYmxl
KiB3ZWJBc3NlbWJseUV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxXZWJBc3NlbWJseUV4ZWN1dGFi
bGUqPihleGVjdXRhYmxlKTsKKyAgICAgICAgd2ViQXNzZW1ibHlFeGVjdXRhYmxlLT5wcmVwYXJl
Rm9yRXhlY3V0aW9uKGV4ZWNDYWxsZWUpOworICAgICAgICBjb2RlQmxvY2sgPSB3ZWJBc3NlbWJs
eUV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvckNhbGwoKTsKKyAgICAgICAgQVNTRVJUKGNvZGVCbG9j
ayk7CisgICAgICAgIEFyaXR5Q2hlY2tNb2RlIGFyaXR5OworICAgICAgICBpZiAoZXhlY0NhbGxl
ZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKQorICAgICAgICAgICAgYXJpdHkgPSBNdXN0Q2hlY2tB
cml0eTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90UmVx
dWlyZWQ7CisgICAgICAgIGNvZGVQdHIgPSB3ZWJBc3NlbWJseUV4ZWN1dGFibGUtPmVudHJ5cG9p
bnRGb3Iodm0sIGtpbmQsIGFyaXR5LCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsK
KyNlbmRpZgogICAgIH0KICAgICAKICAgICBBU1NFUlQoISFjb2RlUHRyKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQppbmRleCA1
YWQ4MzQ2NWNkMWE0ZThmNGU5NjRhNjdlZDA4YTE1N2U3ZmEzNzVhLi4xMzZjOTE2NjFmMjJkMmQ4
MDkzYzE5OGM5YzViZDY2NDQzOGY1NDk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCkBAIC0xNjEsOCArMTYxLDggQEAgY29u
c3QgU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlID0gMzAKIAogIyBUeXBlIGNvbnN0YW50cy4KIGNv
bnN0IFN0cmluZ1R5cGUgPSA2Ci1jb25zdCBPYmplY3RUeXBlID0gMTgKLWNvbnN0IEZpbmFsT2Jq
ZWN0VHlwZSA9IDE5Citjb25zdCBPYmplY3RUeXBlID0gMTkKK2NvbnN0IEZpbmFsT2JqZWN0VHlw
ZSA9IDIwCiAKICMgVHlwZSBmbGFncyBjb25zdGFudHMuCiBjb25zdCBNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gMQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHAKaW5kZXggYWNiZTE0NjI5ZDI4NGVlODI1MTFmNzNjNTY4MDkxZGVkZjNiNDQ0
Zi4uNzU4MDgzMzJlNGRkNDA4NDQyYTAzNDM3ZDU1YzEwNWFjYzI5NWFiMSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCkBAIC01MjUs
NyArNTI1LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSkKIFNMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9lbnRlcikKIHsKICAgICBCRUdJTigpOwotICAgIFNjcmlwdEV4
ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSA9IGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1
dGFibGUoKTsKKyAgICBFeGVjdXRhYmxlQmFzZSogb3duZXJFeGVjdXRhYmxlID0gZXhlYy0+Y29k
ZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpOwogICAgIEhlYXA6OmhlYXAob3duZXJFeGVjdXRh
YmxlKS0+d3JpdGVCYXJyaWVyKG93bmVyRXhlY3V0YWJsZSk7CiAgICAgRU5EKCk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCmluZGV4IDFiOWE3M2Q3
OTMzOGFhMzkxNGYzZTQ1NDUxYmI2ZjlhMDBjYzkwOTcuLmU0ODU0Nzk3NTY3ZGU4Y2RiZTk2NjE1
NzAyZmI2ZTc1MWI2M2M1ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4ZWN1dGFibGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
ZWN1dGFibGUuY3BwCkBAIC0zMSwxMCArMzEsMTIgQEAKICNpbmNsdWRlICJERkdEcml2ZXIuaCIK
ICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNX
QVNNTW9kdWxlLmgiCiAjaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50LmgiCiAjaW5jbHVkZSAiUGFy
c2VyLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlR5cGVQcm9m
aWxlci5oIgorI2luY2x1ZGUgIldBU01GdW5jdGlvblBhcnNlci5oIgogI2luY2x1ZGUgPHd0Zi9D
b21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtNTYyLDYgKzU2NCw2MiBAQCBGdW5jdGlvbkV4ZWN1dGFi
bGUqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUoCiAgICAgcmV0dXJuIHVubGlu
a2VkRXhlY3V0YWJsZS0+bGluayhleGVjLnZtKCksIHNvdXJjZSwgb3ZlcnJpZGVMaW5lTnVtYmVy
KTsKIH0KIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKK2NvbnN0IENsYXNzSW5mbyBXZWJBc3Nl
bWJseUV4ZWN1dGFibGU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5RXhlY3V0YWJsZSIsICZFeGVj
dXRhYmxlQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdlYkFzc2VtYmx5RXhl
Y3V0YWJsZSkgfTsKKworV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpXZWJBc3NlbWJseUV4ZWN1dGFi
bGUoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTV0FTTU1vZHVsZSogbW9kdWxl
LCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4KQorICAgIDogRXhlY3V0YWJsZUJhc2Uodm0sIHZtLndl
YkFzc2VtYmx5RXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwgTlVNX1BBUkFNRVRFUlNfTk9UX0NP
TVBJTEVEKQorICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICwgbV9tb2R1bGUodm0sIHRoaXMs
IG1vZHVsZSkKKyAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQoreworfQorCit2
b2lkIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAg
c3RhdGljX2Nhc3Q8V2ViQXNzZW1ibHlFeGVjdXRhYmxlKj4oY2VsbCktPldlYkFzc2VtYmx5RXhl
Y3V0YWJsZTo6fldlYkFzc2VtYmx5RXhlY3V0YWJsZSgpOworfQorCit2b2lkIFdlYkFzc2VtYmx5
RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQoreworICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxX
ZWJBc3NlbWJseUV4ZWN1dGFibGUqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgRXhlY3V0YWJsZUJhc2U6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgaWYgKHRoaXNPYmplY3QtPm1fY29kZUJsb2Nr
Rm9yQ2FsbCkKKyAgICAgICAgdGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDYWxsLT52aXNpdEFn
Z3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9tb2R1
bGUpOworfQorCit2b2lkIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkKK3sKKyAg
ICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBudWxscHRyOworICAgIEJhc2U6OmNsZWFyQ29kZSgpOwor
fQorCit2b2lkIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGlvbihFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGhhc0pJVENvZGVGb3JDYWxsKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgRGVmZXJHQyBkZWZlckdDKHZt
LmhlYXApOworCisgICAgUmVmUHRyPFdlYkFzc2VtYmx5Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBh
ZG9wdFJlZihuZXcgV2ViQXNzZW1ibHlDb2RlQmxvY2soCisgICAgICAgIHRoaXMsIHZtLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsKKworICAgIFdBU01GdW5jdGlvblBhcnNlcjo6Y29t
cGlsZSh2bSwgY29kZUJsb2NrLmdldCgpLCBtX21vZHVsZS5nZXQoKSwgbV9zb3VyY2UsIG1fZnVu
Y3Rpb25JbmRleCk7CisKKyAgICBtX2ppdENvZGVGb3JDYWxsID0gY29kZUJsb2NrLT5qaXRDb2Rl
KCk7CisgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyKCk7CisgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVS
ZWdzID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ2Fs
bCA9IGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOworCisgICAgbV9jb2RlQmxvY2tGb3JDYWxs
ID0gY29kZUJsb2NrOworCisgICAgSGVhcDo6aGVhcCh0aGlzKS0+d3JpdGVCYXJyaWVyKHRoaXMp
OworfQorI2VuZGlmCisKIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKIHsKICAgICBFeGVjdXRhYmxlQmFzZSogcmVhbFRoaXMgPSBjb25zdF9jYXN0PEV4
ZWN1dGFibGVCYXNlKj4odGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmgKaW5kZXggYjUxMzU0N2QwODMxY2E5NTE0MDkwM2ZjMDAyNjExMzBhM2M2NWY5Yi4u
MTAyNmE1M2VhMGMxODk0ZTUyOGJkYjAxNzlmYzMzNDVlZDNlOThmOSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaApAQCAtNTAsOSArNTAsMTEgQEAgY2xhc3Mg
Q29kZUJsb2NrOwogY2xhc3MgRGVidWdnZXI7CiBjbGFzcyBFdmFsQ29kZUJsb2NrOwogY2xhc3Mg
RnVuY3Rpb25Db2RlQmxvY2s7CitjbGFzcyBKU1Njb3BlOworY2xhc3MgSlNXQVNNTW9kdWxlOwog
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgUHJvZ3JhbUNvZGVCbG9jazsKLWNs
YXNzIEpTU2NvcGU7CitjbGFzcyBXZWJBc3NlbWJseUNvZGVCbG9jazsKICAgICAKIGVudW0gQ29t
cGlsYXRpb25LaW5kIHsgRmlyc3RDb21waWxhdGlvbiwgT3B0aW1pemluZ0NvbXBpbGF0aW9uIH07
CiAKQEAgLTkyLDE1ICs5NCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIENvZGVCbG9ja0hh
c2ggaGFzaEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKSBjb25zdDsKIAotICAgIGJvb2wgaXNF
dmFsRXhlY3V0YWJsZSgpCisgICAgYm9vbCBpc0V2YWxFeGVjdXRhYmxlKCkgY29uc3QKICAgICB7
CiAgICAgICAgIHJldHVybiB0eXBlKCkgPT0gRXZhbEV4ZWN1dGFibGVUeXBlOwogICAgIH0KLSAg
ICBib29sIGlzRnVuY3Rpb25FeGVjdXRhYmxlKCkKKyAgICBib29sIGlzRnVuY3Rpb25FeGVjdXRh
YmxlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiB0eXBlKCkgPT0gRnVuY3Rpb25FeGVj
dXRhYmxlVHlwZTsKICAgICB9Ci0gICAgYm9vbCBpc1Byb2dyYW1FeGVjdXRhYmxlKCkKKyAgICBi
b29sIGlzUHJvZ3JhbUV4ZWN1dGFibGUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHR5
cGUoKSA9PSBQcm9ncmFtRXhlY3V0YWJsZVR5cGU7CiAgICAgfQpAQCAtMTExLDYgKzExMywxMyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX251bVBhcmFtZXRlcnNGb3JDYWxsID09IE5VTV9Q
QVJBTUVURVJTX0lTX0hPU1Q7CiAgICAgfQogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAg
IGJvb2wgaXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIHR5cGUoKSA9PSBXZWJBc3NlbWJseUV4ZWN1dGFibGVUeXBlOworICAgIH0KKyNlbmRpZgor
CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykgeyByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7IH0KICAgICAgICAgCiAgICAgdm9pZCBjbGVhckNvZGUoKTsKQEAg
LTU1OCw3ICs1NjcsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2Vs
bCopOwogICAgICAgICAKLSAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRF
eGVjdXRhYmxlKCkKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVj
dXRhYmxlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJs
ZS5nZXQoKTsKICAgICB9CkBAIC02NzIsNiArNjgxLDUwIEBAIHByaXZhdGU6CiAgICAgV3JpdGVC
YXJyaWVyPEluZmVycmVkVmFsdWU+IG1fc2luZ2xldG9uRnVuY3Rpb247CiB9OwogCisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQorY2xhc3MgV2ViQXNzZW1ibHlFeGVjdXRhYmxlIGZpbmFsIDogcHVi
bGljIEV4ZWN1dGFibGVCYXNlIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEV4ZWN1dGFibGVCYXNl
IEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOworCisgICAgc3RhdGljIFdlYkFz
c2VtYmx5RXhlY3V0YWJsZSogY3JlYXRlKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNl
LCBKU1dBU01Nb2R1bGUqIG1vZHVsZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCkKKyAgICB7Cisg
ICAgICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5RXhlY3V0YWJsZT4odm0uaGVhcCkpIFdlYkFzc2VtYmx5
RXhlY3V0YWJsZSh2bSwgc291cmNlLCBtb2R1bGUsIGZ1bmN0aW9uSW5kZXgpOworICAgICAgICBl
eGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBleGVjdXRhYmxl
OworICAgIH0KKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCisgICAgeworICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5
cGVJbmZvKFdlYkFzc2VtYmx5RXhlY3V0YWJsZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgREVD
TEFSRV9JTkZPOworCisgICAgdm9pZCBjbGVhckNvZGUoKTsKKworICAgIHZvaWQgcHJlcGFyZUZv
ckV4ZWN1dGlvbihFeGVjU3RhdGUqKTsKKworICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2Rl
QmxvY2tGb3JDYWxsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNhbGwu
Z2V0KCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZShWTSYs
IGNvbnN0IFNvdXJjZUNvZGUmLCBKU1dBU01Nb2R1bGUqLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4
KTsKKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKworICAgIFNvdXJjZUNvZGUgbV9zb3VyY2U7CisgICAgV3JpdGVCYXJyaWVyPEpTV0FTTU1v
ZHVsZT4gbV9tb2R1bGU7CisgICAgdW5zaWduZWQgbV9mdW5jdGlvbkluZGV4OworCisgICAgUmVm
UHRyPFdlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNhbGw7Cit9OworI2VuZGlm
CisKIGlubGluZSB2b2lkIEV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGVWaXJ0dWFsKEV4ZWN1dGFi
bGVCYXNlKiBleGVjdXRhYmxlKQogewogICAgIHN3aXRjaCAoZXhlY3V0YWJsZS0+dHlwZSgpKSB7
CkBAIC02ODEsNiArNzM0LDEwIEBAIGlubGluZSB2b2lkIEV4ZWN1dGFibGVCYXNlOjpjbGVhckNv
ZGVWaXJ0dWFsKEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKQogICAgICAgICByZXR1cm4ganND
YXN0PFByb2dyYW1FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNsZWFyQ29kZSgpOwogICAgIGNh
c2UgRnVuY3Rpb25FeGVjdXRhYmxlVHlwZToKICAgICAgICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlv
bkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Y2xlYXJDb2RlKCk7CisjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQorICAgIGNhc2UgV2ViQXNzZW1ibHlFeGVjdXRhYmxlVHlwZToKKyAgICAgICAgcmV0
dXJuIGpzQ2FzdDxXZWJBc3NlbWJseUV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Y2xlYXJDb2Rl
KCk7CisjZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4ganNDYXN0PE5hdGl2ZUV4
ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Y2xlYXJDb2RlKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAppbmRleCAwZjczNTRlZDdhNmJkMWUz
ZTY0YjE4NTg1OWMxNGYxNTAzMjZkNDU4Li5mODNhZGY4NWQxYWU3ZWUzMWNkYjM0MmY3MTUxNDE3
OTNkZjdlYTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1
bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9u
LmNwcApAQCAtNjcsNiArNjcsMTYgQEAgSlNGdW5jdGlvbiogSlNGdW5jdGlvbjo6Y3JlYXRlKFZN
JiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKgogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitKU0Z1bmN0aW9uKiBKU0Z1
bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUs
IEpTU2NvcGUqIHNjb3BlKQoreworICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNGdW5jdGlvbj4odm0uaGVhcCkpIEpTRnVuY3Rpb24odm0sIGV4
ZWN1dGFibGUsIHNjb3BlKTsKKyAgICBBU1NFUlQoZnVuY3Rpb24tPnN0cnVjdHVyZSgpLT5nbG9i
YWxPYmplY3QoKSk7CisgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1
cm4gZnVuY3Rpb247Cit9CisjZW5kaWYKKwogc3RhdGljIGlubGluZSBOYXRpdmVFeGVjdXRhYmxl
KiBnZXROYXRpdmVFeGVjdXRhYmxlKFZNJiB2bSwgTmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rp
b24sIEludHJpbnNpYyBpbnRyaW5zaWMsIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUNvbnN0cnVjdG9y
KQogewogI2lmICFFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
dW5jdGlvbi5oCmluZGV4IDkyODM1MGUyNDc4YzQ1ZjdiZjdlOGFhODRjOWVjM2E0ZTI1MmE4NmUu
LjAxY2UzNmE1ZTI3ZTRmMjRlZWY4ZjM5MTA4NDgxYWNjZWVhZDgzNTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKQEAgLTQwLDYgKzQwLDcgQEAgY2xhc3Mg
SlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBOYXRp
dmVFeGVjdXRhYmxlOwogY2xhc3MgU291cmNlQ29kZTsKK2NsYXNzIFdlYkFzc2VtYmx5RXhlY3V0
YWJsZTsKIG5hbWVzcGFjZSBERkcgewogY2xhc3MgU3BlY3VsYXRpdmVKSVQ7CiBjbGFzcyBKSVRD
b21waWxlcjsKQEAgLTczLDYgKzc0LDkgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIGludCBsZW5n
dGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgTmF0aXZlU3RkRnVuY3Rpb24mJiwgSW50cmluc2ljID0g
Tm9JbnRyaW5zaWMsIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUNvbnN0cnVjdG9yID0gY2FsbEhvc3RG
dW5jdGlvbkFzQ29uc3RydWN0b3IpOwogCiAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShW
TSYsIEZ1bmN0aW9uRXhlY3V0YWJsZSosIEpTU2NvcGUqKTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCisgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShWTSYsIFdlYkFzc2VtYmx5RXhlY3V0
YWJsZSosIEpTU2NvcGUqKTsKKyNlbmRpZgogCiAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0
ZUJ1aWx0aW5GdW5jdGlvbihWTSYsIEZ1bmN0aW9uRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0
Kik7CiAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZUJ1aWx0aW5GdW5jdGlvbihWTSYsIEZ1
bmN0aW9uRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lKTsK
QEAgLTE0Myw2ICsxNDcsMTAgQEAgcHJvdGVjdGVkOgogICAgIEpTRnVuY3Rpb24oVk0mLCBGdW5j
dGlvbkV4ZWN1dGFibGUqLCBKU1Njb3BlKik7CiAgICAgSlNGdW5jdGlvbihWTSYsIEZ1bmN0aW9u
RXhlY3V0YWJsZSosIEpTU2NvcGUqLCBTdHJ1Y3R1cmUqKTsKIAorI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKKyAgICBKU0Z1bmN0aW9uKFZNJiwgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiwgSlNTY29w
ZSopOworI2VuZGlmCisKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0
YWJsZSosIGludCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgdXNpbmcgQmFzZTo6
ZmluaXNoQ3JlYXRpb247CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uSW5saW5lcy5oCmluZGV4IGYwNTk1ODRjZjA3ZDdmZDY5ZWEyZGNmZTI3YjYzYjY0
NGE4ODQ0MTMuLjRmNzVhYjk3MDM1ODZmYjRmYmYzNjQzODFiNjVmNWVkOGVmNTcxYTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaApA
QCAtNTIsNiArNTIsMTUgQEAgaW5saW5lIEpTRnVuY3Rpb246OkpTRnVuY3Rpb24oVk0mIHZtLCBG
dW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHMKIHsKIH0KIAorI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKK2lubGluZSBKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKFZNJiB2bSwg
V2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSkKKyAgICA6
IEJhc2Uodm0sIHNjb3BlLCBzY29wZS0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJl
KCkpCisgICAgLCBtX2V4ZWN1dGFibGUodm0sIHRoaXMsIGV4ZWN1dGFibGUpCisgICAgLCBtX3Jh
cmVEYXRhKCkKK3sKK30KKyNlbmRpZgorCiBpbmxpbmUgRnVuY3Rpb25FeGVjdXRhYmxlKiBKU0Z1
bmN0aW9uOjpqc0V4ZWN1dGFibGUoKSBjb25zdAogewogICAgIEFTU0VSVCghaXNIb3N0RnVuY3Rp
b25Ob25JbmxpbmUoKSk7CkBAIC02Niw2ICs3NSwxMCBAQCBpbmxpbmUgYm9vbCBKU0Z1bmN0aW9u
Ojppc0hvc3RGdW5jdGlvbigpIGNvbnN0CiAKIGlubGluZSBib29sIEpTRnVuY3Rpb246OmlzQnVp
bHRpbkZ1bmN0aW9uKCkgY29uc3QKIHsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgaWYg
KG1fZXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworI2VuZGlmCiAgICAgcmV0dXJuICFpc0hvc3RGdW5jdGlvbigpICYmIGpzRXhlY3V0
YWJsZSgpLT5pc0J1aWx0aW5GdW5jdGlvbigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVHlwZS5oCmluZGV4IDQwMzI2Y2UwZjMyOWZhN2M3YmJjOTlmNDQ2NDI4ZmU5NmM5MTI0
YjMuLjE1OTZlNjU4NGM4YWViOGI3YzBjY2I0ZGEzMDMwMjAwOThlNjk1ZmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5oCkBAIC00Miw2ICs0Miw3IEBAIGVudW0gSlNUeXBl
IDogdWludDhfdCB7CiAgICAgRXZhbEV4ZWN1dGFibGVUeXBlLAogICAgIFByb2dyYW1FeGVjdXRh
YmxlVHlwZSwKICAgICBGdW5jdGlvbkV4ZWN1dGFibGVUeXBlLAorICAgIFdlYkFzc2VtYmx5RXhl
Y3V0YWJsZVR5cGUsCiAKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGUsCiAgICAg
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrVHlwZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAppbmRleCA5M2M5NmZiZWMwNDRmN2Y3NGU5Nzg0NzNiNmJmOThjMDcyMWI4ZWQzLi5iMDll
NDFiYTUxMDczYWE3ZTE5NWNlMzY5M2Y5Njk3MDEwNWFjMzNkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCkBAIC0yMjEsNiArMjIxLDkgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUs
IEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIGV2YWxFeGVjdXRhYmxlU3RydWN0dXJlLnNldCgqdGhp
cywgRXZhbEV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
ICAgICBwcm9ncmFtRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFByb2dyYW1FeGVjdXRh
YmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgZnVuY3Rpb25F
eGVjdXRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
ICAgIHdlYkFzc2VtYmx5RXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFdlYkFzc2VtYmx5
RXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworI2VuZGlm
CiAgICAgcmVnRXhwU3RydWN0dXJlLnNldCgqdGhpcywgUmVnRXhwOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgc3ltYm9sU3RydWN0dXJlLnNldCgqdGhpcywgU3lt
Ym9sOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgc3ltYm9sVGFi
bGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTeW1ib2xUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlz
LCAwLCBqc051bGwoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggOWFmZTlh
NWEyZmY0MWQ5YzFmYzY1MWZkYzA2YmI2YTUwZjc0OWY2MS4uMWJiMzU0NzM5ZTNjZGNkOGY1M2Fk
NmNiOWY2NDc3YmIxNDcxYTJlNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0y
NzksNiArMjc5LDkgQEAgcHVibGljOgogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGV2YWxFeGVjdXRh
YmxlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb2dyYW1FeGVjdXRhYmxlU3Ry
dWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVy
ZTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2ViQXNz
ZW1ibHlFeGVjdXRhYmxlU3RydWN0dXJlOworI2VuZGlmCiAgICAgU3Ryb25nPFN0cnVjdHVyZT4g
cmVnRXhwU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN5bWJvbFN0cnVjdHVyZTsK
ICAgICBTdHJvbmc8U3RydWN0dXJlPiBzeW1ib2xUYWJsZVN0cnVjdHVyZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV0FTTU1vZHVsZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmgKaW5kZXggYTcyNjZiNTdkYThkMzdlNzA2ZWFj
ZjA3ODBjMmJkN2MwYmUxZjhkMy4uNDY3YjNlNmExMWY2NTg0YWNlOGFkN2M0NDIwNzM4MGQxMzc4
MjU4ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmgKQEAgLTY0
LDYgKzY0LDggQEAgcHVibGljOgogICAgIFZlY3RvcjxXQVNNRnVuY3Rpb25EZWNsYXJhdGlvbj4m
IGZ1bmN0aW9uRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xhcmF0aW9uczsg
fQogICAgIFZlY3RvcjxXQVNNRnVuY3Rpb25Qb2ludGVyVGFibGU+JiBmdW5jdGlvblBvaW50ZXJU
YWJsZXMoKSB7IHJldHVybiBtX2Z1bmN0aW9uUG9pbnRlclRhYmxlczsgfQogCisgICAgVmVjdG9y
PFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPj4mIGZ1bmN0aW9ucygpIHsgcmV0dXJuIG1fZnVuY3Rp
b25zOyB9CisKIHByaXZhdGU6CiAgICAgSlNXQVNNTW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5jcHAKaW5kZXggZDY4OWY1NmIx
Y2I4MGZjNzE5MGJiNDk3YzA1Y2RlZDZiN2M0MzgzMi4uNzhhMWExOTJjZWM4ODQ3YWQxMTAzODg4
MDJiYTMwY2ZjOTU3Y2ZhOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V0FTTUZ1bmN0aW9uUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
QVNNRnVuY3Rpb25QYXJzZXIuY3BwCkBAIC0yOCw3ICsyOCw5IEBACiAKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCiAKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJKU1dBU01N
b2R1bGUuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiV0FTTUZ1bmN0aW9u
U3ludGF4Q2hlY2tlci5oIgogCiAjZGVmaW5lIFBST1BBR0FURV9FUlJPUigpIGRvIHsgaWYgKCFt
X2Vycm9yTWVzc2FnZS5pc051bGwoKSkgcmV0dXJuIDA7IH0gd2hpbGUgKDApCkBAIC01OSw2ICs2
MSwyNyBAQCBib29sIFdBU01GdW5jdGlvblBhcnNlcjo6Y2hlY2tTeW50YXgoSlNXQVNNTW9kdWxl
KiBtb2R1bGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdQogICAgIHJldHVybiB0cnVlOwogfQogCit2
b2lkIFdBU01GdW5jdGlvblBhcnNlcjo6Y29tcGlsZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJs
b2NrLCBKU1dBU01Nb2R1bGUqIG1vZHVsZSwgY29uc3QgU291cmNlQ29kZSYsIHNpemVfdCBmdW5j
dGlvbkluZGV4KQoreworICAgIC8vIEZJWE1FOiBBY3R1YWxseSBjb21waWxlIHRoZSBjb2RlLgor
ICAgIENDYWxsSGVscGVycyBqaXQoJnZtLCBjb2RlQmxvY2spOworICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBiZWdpbkxhYmVsID0gaml0LmxhYmVsKCk7CisgICAgaml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOworICAgIGppdC5yZXQoKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgYXJpdHlDaGVjayA9IGppdC5sYWJlbCgpOworICAgIGppdC5qdW1wKGJlZ2luTGFiZWwp
OworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih2bSwgaml0LCBjb2RlQmxvY2ssIEpJVENv
bXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3aXRoQXJp
dHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYXJpdHlDaGVjayk7CisgICAgTWFjcm9B
c3NlbWJsZXI6OkNvZGVSZWYgcmVzdWx0ID0gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJC
YXNlbGluZSBKSVQgY29kZSBmb3IgV2ViQXNzZW1ibHkiKSk7CisgICAgY29kZUJsb2NrLT5zZXRK
SVRDb2RlKGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ss
IEpJVENvZGU6OkJhc2VsaW5lSklUKSkpOworICAgIGNvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVs
KCk7CisKKyAgICB1aW50MzJfdCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS0+ZnVuY3Rpb25EZWNs
YXJhdGlvbnMoKVtmdW5jdGlvbkluZGV4XS5zaWduYXR1cmVJbmRleDsKKyAgICBjb25zdCBXQVNN
U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBtb2R1bGUtPnNpZ25hdHVyZXMoKVtzaWduYXR1cmVJbmRl
eF07CisgICAgY29kZUJsb2NrLT5zZXROdW1QYXJhbWV0ZXJzKDEgKyBzaWduYXR1cmUuYXJndW1l
bnRzLnNpemUoKSk7Cit9CisKIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgogYm9vbCBXQVNNRnVu
Y3Rpb25QYXJzZXI6OnBhcnNlRnVuY3Rpb24oQ29udGV4dCYgY29udGV4dCkKIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmgKaW5kZXggNGQ2MzEz
YWZkNzhjODBjNTc0MmVkMmY3MWFiNjVhNWZlNzVjNWI5My4uNzA0YzQ2YzlkOTRkNDA2NGFjZTdi
NGY3Y2MxY2M4ZjM2MzgxYzU0MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV0FTTUZ1bmN0aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V0FTTUZ1bmN0aW9uUGFyc2VyLmgKQEAgLTM2LDExICszNiwxNCBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAorY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSlNXQVNNTW9kdWxlOworY2xhc3MgVk07CiAK
IGNsYXNzIFdBU01GdW5jdGlvblBhcnNlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgY2hl
Y2tTeW50YXgoSlNXQVNNTW9kdWxlKiwgY29uc3QgU291cmNlQ29kZSYsIHNpemVfdCBmdW5jdGlv
bkluZGV4LCB1bnNpZ25lZCBzdGFydE9mZnNldEluU291cmNlLCB1bnNpZ25lZCYgZW5kT2Zmc2V0
SW5Tb3VyY2UsIFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKKyAgICBzdGF0aWMgdm9pZCBjb21waWxl
KFZNJiwgQ29kZUJsb2NrKiwgSlNXQVNNTW9kdWxlKiwgY29uc3QgU291cmNlQ29kZSYsIHNpemVf
dCBmdW5jdGlvbkluZGV4KTsKIAogcHJpdmF0ZToKICAgICBXQVNNRnVuY3Rpb25QYXJzZXIoSlNX
QVNNTW9kdWxlKiBtb2R1bGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgc2l6ZV90IGZ1bmN0
aW9uSW5kZXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9k
dWxlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJz
ZXIuY3BwCmluZGV4IDUwZGJiOGU1MDliNmM3ZjQ1N2QxZDc2ZDYxNmNhODA0NTc1Y2E4YWYuLjY3
ZTNhYTY0NmNlNmZkOTQ3ZmU5OGY0YzY1ZWVkMWRjN2ZkNTE5MjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuY3BwCkBAIC00OSwxNSArNDksMTcg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLVdBU01Nb2R1bGVQYXJzZXI6OldBU01Nb2R1bGVQYXJz
ZXIoY29uc3QgU291cmNlQ29kZSYgc291cmNlKQotICAgIDogbV9zb3VyY2Uoc291cmNlKQorV0FT
TU1vZHVsZVBhcnNlcjo6V0FTTU1vZHVsZVBhcnNlcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKKyAgICA6IG1fdm0odm0pCisg
ICAgLCBtX2dsb2JhbE9iamVjdCh2bSwgZ2xvYmFsT2JqZWN0KQorICAgICwgbV9zb3VyY2Uoc291
cmNlKQogICAgICwgbV9yZWFkZXIoc3RhdGljX2Nhc3Q8V2ViQXNzZW1ibHlTb3VyY2VQcm92aWRl
cio+KHNvdXJjZS5wcm92aWRlcigpKS0+ZGF0YSgpKQogewogfQogCi1KU1dBU01Nb2R1bGUqIFdB
U01Nb2R1bGVQYXJzZXI6OnBhcnNlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCitKU1dBU01Nb2R1bGUqIFdBU01Nb2R1bGVQYXJzZXI6
OnBhcnNlKFN0cmluZyYgZXJyb3JNZXNzYWdlKQogewotICAgIG1fbW9kdWxlLnNldCh2bSwgSlNX
QVNNTW9kdWxlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+d2FzbU1vZHVsZVN0cnVjdHVyZSgp
KSk7CisgICAgbV9tb2R1bGUuc2V0KG1fdm0sIEpTV0FTTU1vZHVsZTo6Y3JlYXRlKG1fdm0sIG1f
Z2xvYmFsT2JqZWN0LT53YXNtTW9kdWxlU3RydWN0dXJlKCkpKTsKICAgICBwYXJzZU1vZHVsZSgp
OwogICAgIGlmICghbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkpIHsKICAgICAgICAgZXJyb3JNZXNz
YWdlID0gbV9lcnJvck1lc3NhZ2U7CkBAIC0yMTcsNiArMjE5LDcgQEAgdm9pZCBXQVNNTW9kdWxl
UGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKCkKICAgICB1aW50MzJfdCBu
dW1iZXJPZkZ1bmN0aW9uRGVjbGFyYXRpb25zOwogICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1Jf
RkFJTChudW1iZXJPZkZ1bmN0aW9uRGVjbGFyYXRpb25zLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJl
ciBvZiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuIik7CiAgICAgbV9tb2R1bGUtPmZ1bmN0aW9uRGVj
bGFyYXRpb25zKCkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkZ1bmN0aW9uRGVjbGFy
YXRpb25zKTsKKyAgICBtX21vZHVsZS0+ZnVuY3Rpb25zKCkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShudW1iZXJPZkZ1bmN0aW9uRGVjbGFyYXRpb25zKTsKICAgICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgbnVtYmVyT2ZGdW5jdGlvbkRlY2xhcmF0aW9uczsgKytpKSB7CiAgICAgICAgIFdBU01G
dW5jdGlvbkRlY2xhcmF0aW9uIGZ1bmN0aW9uRGVjbGFyYXRpb247CiAgICAgICAgIFJFQURfQ09N
UEFDVF9VSU5UMzJfT1JfRkFJTChmdW5jdGlvbkRlY2xhcmF0aW9uLnNpZ25hdHVyZUluZGV4LCAi
Q2Fubm90IHJlYWQgdGhlIHNpZ25hdHVyZSBpbmRleC4iKTsKQEAgLTI2NSw2ICsyNjgsMTAgQEAg
dm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbihzaXplX3QgZnVu
Y3Rpb25JbmRleCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX3JlYWRlci5zZXRPZmZz
ZXQoZW5kT2Zmc2V0SW5Tb3VyY2UpOworCisgICAgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiB3ZWJB
c3NlbWJseUV4ZWN1dGFibGUgPSBXZWJBc3NlbWJseUV4ZWN1dGFibGU6OmNyZWF0ZShtX3ZtLCBt
X3NvdXJjZSwgbV9tb2R1bGUuZ2V0KCksIGZ1bmN0aW9uSW5kZXgpOworICAgIEpTRnVuY3Rpb24q
IGZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKG1fdm0sIHdlYkFzc2VtYmx5RXhlY3V0YWJs
ZSwgbV9nbG9iYWxPYmplY3QuZ2V0KCkpOworICAgIG1fbW9kdWxlLT5mdW5jdGlvbnMoKS51bmNo
ZWNrZWRBcHBlbmQoV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+KG1fdm0sIG1fbW9kdWxlLmdldCgp
LCBmdW5jdGlvbikpOwogfQogCiB2b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0U2Vj
dGlvbigpCkBAIC0yODUsMTEgKzI5MiwxMSBAQCB2b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNl
RXhwb3J0U2VjdGlvbigpCiAgICAgICAgIGZvciAodWludDMyX3QgZXhwb3J0SW5kZXggPSAwOyBl
eHBvcnRJbmRleCA8IG51bWJlck9mRXhwb3J0czsgKytleHBvcnRJbmRleCkgewogICAgICAgICAg
ICAgU3RyaW5nIGV4cG9ydE5hbWU7CiAgICAgICAgICAgICBSRUFEX1NUUklOR19PUl9GQUlMKGV4
cG9ydE5hbWUsICJDYW5ub3QgcmVhZCB0aGUgZnVuY3Rpb24gZXhwb3J0IG5hbWUuIik7Ci0gICAg
ICAgICAgICAvLyBGSVhNRTogQ2hlY2sgdGhhdCBleHBvcnROYW1lIGlzIGxlZ2FsLgogICAgICAg
ICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleDsKICAgICAgICAgICAgIFJFQURfQ09NUEFDVF9V
SU5UMzJfT1JfRkFJTChmdW5jdGlvbkluZGV4LCAiQ2Fubm90IHJlYWQgdGhlIGZ1bmN0aW9uIGlu
ZGV4LiIpOwogICAgICAgICAgICAgRkFJTF9JRl9GQUxTRShmdW5jdGlvbkluZGV4IDwgbV9tb2R1
bGUtPmZ1bmN0aW9uRGVjbGFyYXRpb25zKCkuc2l6ZSgpLCAiVGhlIGZ1bmN0aW9uIGluZGV4IGlz
IGluY29ycmVjdC4iKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBFeHBvcnQgdGhlIGZ1bmN0aW9u
LgorICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmbV92bSwgZXhwb3J0TmFtZSk7CisgICAgICAgICAgICBtX21vZHVsZS0+cHV0RGlyZWN0
KG1fdm0sIGlkZW50aWZpZXIsIG1fbW9kdWxlLT5mdW5jdGlvbnMoKVtmdW5jdGlvbkluZGV4XS5n
ZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzAwLDggKzMwNyw4
IEBAIHZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VFeHBvcnRTZWN0aW9uKCkKIAogSlNXQVNN
TW9kdWxlKiBwYXJzZVdlYkFzc2VtYmx5KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKIHsKLSAgICBXQVNNTW9kdWxlUGFyc2Vy
IFdBU01Nb2R1bGVQYXJzZXIoc291cmNlKTsKLSAgICByZXR1cm4gV0FTTU1vZHVsZVBhcnNlci5w
YXJzZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGVycm9yTWVzc2Fn
ZSk7CisgICAgV0FTTU1vZHVsZVBhcnNlciBtb2R1bGVQYXJzZXIoZXhlYy0+dm0oKSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzb3VyY2UpOworICAgIHJldHVybiBtb2R1bGVQYXJzZXIu
cGFyc2UoZXJyb3JNZXNzYWdlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmgKaW5kZXggMzBmMWE1NjU5ODhj
NjAxNGI1NDVmYzFjNmMyNmMwOTNkOGZiNTQwZi4uZTJmNGZiNzU4Yzk1MTM1M2Y4NjA4N2Q1OTA0
YzVmMzYyNjNlZWZhYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FT
TU1vZHVsZVBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1
bGVQYXJzZXIuaApAQCAtNDIsOCArNDIsOCBAQCBjbGFzcyBWTTsKIAogY2xhc3MgV0FTTU1vZHVs
ZVBhcnNlciB7CiBwdWJsaWM6Ci0gICAgV0FTTU1vZHVsZVBhcnNlcihjb25zdCBTb3VyY2VDb2Rl
Jik7Ci0gICAgSlNXQVNNTW9kdWxlKiBwYXJzZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RyaW5n
JiBlcnJvck1lc3NhZ2UpOworICAgIFdBU01Nb2R1bGVQYXJzZXIoVk0mLCBKU0dsb2JhbE9iamVj
dCosIGNvbnN0IFNvdXJjZUNvZGUmKTsKKyAgICBKU1dBU01Nb2R1bGUqIHBhcnNlKFN0cmluZyYg
ZXJyb3JNZXNzYWdlKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlTW9kdWxlKCk7CkBAIC01
Nyw2ICs1Nyw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbihz
aXplX3QgZnVuY3Rpb25JbmRleCk7CiAgICAgdm9pZCBwYXJzZUV4cG9ydFNlY3Rpb24oKTsKIAor
ICAgIFZNJiBtX3ZtOworICAgIFN0cm9uZzxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7
CiAgICAgY29uc3QgU291cmNlQ29kZSYgbV9zb3VyY2U7CiAgICAgV0FTTVJlYWRlciBtX3JlYWRl
cjsKICAgICBTdHJvbmc8SlNXQVNNTW9kdWxlPiBtX21vZHVsZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcAppbmRleCA0YmFjZDU1ZmVlM2JlMTk1ZmEzMDc0ZjRiMzcwMzQyZTE3YjRj
Zjk5Li5hOWQ0Y2IxMDYzYTdhNzVlNWU5ZGU2Y2JjMmZkMzVhZWM5ZmIwZWM4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0xNDYyLDcgKzE0NjIsNyBAQCBTdHJpbmcgSW50
ZXJuYWxzOjpwYXJzZXJNZXRhRGF0YShEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSB2YWx1ZSkKICAg
ICAgICAgR2V0Q2FsbGVyQ29kZUJsb2NrRnVuY3RvciBpdGVyOwogICAgICAgICBleGVjLT5pdGVy
YXRlKGl0ZXIpOwogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGl0ZXIuY29kZUJsb2Nr
KCk7Ci0gICAgICAgIGV4ZWN1dGFibGUgPSBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOyAK
KyAgICAgICAgZXhlY3V0YWJsZSA9IGNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRhYmxlKCk7
CiAgICAgfSBlbHNlIGlmIChjb2RlLmlzRnVuY3Rpb24oKSkgewogICAgICAgICBKU0Z1bmN0aW9u
KiBmdW5jT2JqID0gSlNDOjpqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvZGUudG9PYmplY3QoZXhlYykp
OwogICAgICAgICBleGVjdXRhYmxlID0gZnVuY09iai0+anNFeGVjdXRhYmxlKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260117</attachid>
            <date>2015-08-27 21:03:20 -0700</date>
            <delta_ts>2015-08-27 23:39:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148373-20150827210307.patch</filename>
            <type>text/plain</type>
            <size>64466</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg5MDgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
OTJhYTA3NDM5NWE5NTNlNDlkY2E2OGM0MzE4ZWNhMzZkZGRiNWVmLi4zNGYxOGVkNGUzN2JmYjJk
ZmQ4ZjVjOGQ5YzM1NGM5YWM1ZTJlOTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTkgQEAKKzIwMTUtMDgtMjcgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0Bn
bWFpbC5jb20+CisKKyAgICAgICAgQ3JlYXRlIFdlYkFzc2VtYmx5IGZ1bmN0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4MzczCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3JlYXRlIGZ1bmN0aW9u
cyBmcm9tIFdlYkFzc2VtYmx5IGZpbGVzIGdlbmVyYXRlZCBieSBwYWNrLWFzbWpzCisgICAgICAg
IDxodHRwczovL2dpdGh1Yi5jb20vV2ViQXNzZW1ibHkvcG9seWZpbGwtcHJvdG90eXBlLTE+Lgor
ICAgICAgICBXZWJBc3NlbWJseSBmdW5jdGlvbnMgY3JlYXRlZCBieSB0aGlzIHBhdGNoIGNhbiBv
bmx5IHJldHVybiAwLgorICAgICAgICBBY3R1YWwgY29kZSBnZW5lcmF0aW9uIHdpbGwgYmUgaW1w
bGVtZW50ZWQgaW4gc3Vic2VxdWVudCBwYXRjaGVzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50
cm9kdWNlcyBXZWJBc3NlbWJseUV4ZWN1dGFibGUsIGEgbmV3IHN1YmNsYXNzIG9mCisgICAgICAg
IEV4ZWN1dGFibGVCYXNlIGZvciBXZWJBc3NlbWJseSBmdW5jdGlvbnMuIENvZGVCbG9ja3MgY2Fu
IG5vdyBoYXZlCisgICAgICAgIGFuIG93bmVyIHRoYXQgaXMgbm90IGEgU2NyaXB0RXhlY3V0YWJs
ZS4gVGhpcyBwYXRjaCBjaGFuZ2VzIHRoZQorICAgICAgICByZXR1cm4gdHlwZSBvZiBDb2RlQmxv
Y2s6Om93bmVyRXhlY3V0YWJsZSgpIGZyb20gU2NyaXB0RXhlY3V0YWJsZSoKKyAgICAgICAgdG8g
RXhlY3V0YWJsZUJhc2UqLiBJdCBhbHNvIGNoYW5nZXMgY29kZSB0aGF0IGNhbGxzIFNjcmlwdEV4
ZWN1dGFibGUncworICAgICAgICBtZXRob2RzIG9uIENvZGVCbG9jazo6b3duZXJFeGVjdXRhYmxl
KCkgdG8gdXNlCisgICAgICAgIENvZGVCbG9jazo6b3duZXJTY3JpcHRFeGVjdXRhYmxlKCksIHdo
aWNoIGRvZXMganNDYXN0PFNjcmlwdEV4ZWN1dGFibGUqPi4KKworICAgICAgICBTaW5jZSBvd25l
clNjcmlwdEV4ZWN1dGFibGUoKSBpcyBjYWxsZWQgZnJvbSBXZWJDb3JlIGFuZCBpdCB1c2VzCisg
ICAgICAgIGpzQ2FzdDxTY3JpcHRFeGVjdXRhYmxlKj4sIHRoaXMgcGF0Y2ggbmVlZHMgdG8gZXhw
b3J0CisgICAgICAgIFNjcmlwdEV4ZWN1dGFibGU6OmluZm8oKS4gVGhpcyBzaG91bGQgZml4IHRo
ZSBidWlsZCBlcnJvciBpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ4NTU1CisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6Omhhc2gpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNv
dXJjZUNvZGVGb3JUb29scyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEFzc3VtaW5n
SklUVHlwZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcFNvdXJjZSk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpm
aW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGluZU51
bWJlckZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpleHByZXNz
aW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aW5z
dGFsbCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bmV3UmVwbGFjZW1lbnQpOgorICAgICAg
ICAoSlNDOjpXZWJBc3NlbWJseUNvZGVCbG9jazo6cmVwbGFjZW1lbnQpOgorICAgICAgICAoSlND
OjpXZWJBc3NlbWJseUNvZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsSW50ZXJuYWwpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjppbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmllc0ZvckNvbnRyb2xGbG93UHJvZmls
ZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6Om93bmVyRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3duZXJT
Y3JpcHRFeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb2RlVHlwZSk6Cisg
ICAgICAgIChKU0M6OldlYkFzc2VtYmx5Q29kZUJsb2NrOjpXZWJBc3NlbWJseUNvZGVCbG9jayk6
CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuY3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dl
cjo6dG9nZ2xlQnJlYWtwb2ludCk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJDYWxsRnJh
bWUuY3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6c291cmNlSURGb3JDYWxs
RnJhbWUpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OmV4ZWN1dGFibGUpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjppbmxpbmluZ0Nvc3QpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFj
a0VudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxv
Y2spOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OmlzU3VwcG9ydGVkRm9ySW5saW5pbmcpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpleGVjdXRhYmxlRm9yKToKKyAgICAgICAgKiBkZmcv
REZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVPU1JFbnRyeSk6Cisg
ICAgICAgICogaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwOgorICAgICAgICAo
SW5zcGVjdG9yOjpDcmVhdGVTY3JpcHRDYWxsU3RhY2tGdW5jdG9yOjpvcGVyYXRvcigpKToKKyAg
ICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OmV2YWwp
OgorICAgICAgICAoSlNDOjppc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6
OkdldFN0YWNrVHJhY2VGdW5jdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6VW53aW5k
RnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6c291cmNlVVJMKToKKyAg
ICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6Y29tcHV0ZUxpbmVBbmRDb2x1bW4pOgor
ICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5j
cHA6CisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGwpOgorICAgICAgICAqIGxsaW50
L0xMSW50RGF0YS5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpEYXRhOjpwZXJmb3JtQXNzZXJ0
aW9ucyk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlND
OjpMTEludDo6c2V0VXBDYWxsKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6CisgICAgICAgIChK
U0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4ZWN1dGFibGU6OldlYkFzc2VtYmx5RXhlY3V0YWJs
ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6ZGVzdHJveSk6CisgICAg
ICAgIChKU0M6OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAg
IChKU0M6OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6Y2xlYXJDb2RlKToKKyAgICAgICAgKEpTQzo6
V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aW9uKToKKyAgICAgICAgKiBy
dW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUJhc2U6OmlzRXZh
bEV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6aXNGdW5jdGlvbkV4
ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6aXNQcm9ncmFtRXhlY3V0
YWJsZSk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjppc1dlYkFzc2VtYmx5RXhlY3V0
YWJsZSk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGVWaXJ0dWFsKToK
KyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0
aW9uOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAq
IHJ1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6
SlNGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmlzQnVpbHRpbkZ1bmN0aW9u
KToKKyAgICAgICAgKiBydW50aW1lL0pTVHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3Bw
OgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAg
ICAgKiB3YXNtL0pTV0FTTU1vZHVsZS5oOgorICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OmZ1
bmN0aW9ucyk6CisgICAgICAgICogd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuY3BwOgorICAgICAg
ICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OmNvbXBpbGUpOgorICAgICAgICAqIHdhc20vV0FT
TUZ1bmN0aW9uUGFyc2VyLmg6CisgICAgICAgICogd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcDoK
KyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6V0FTTU1vZHVsZVBhcnNlcik6CisgICAg
ICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKEpTQzo6V0FTTU1v
ZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uU2VjdGlvbik6CisgICAgICAgIChK
U0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKToKKyAgICAgICAg
KEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VFeHBvcnRTZWN0aW9uKToKKyAgICAgICAgKEpT
Qzo6cGFyc2VXZWJBc3NlbWJseSk6CisgICAgICAgICogd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmg6
CisKIDIwMTUtMDgtMjcgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxODkwNzkuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTZhZWJkNzQwYzc1NmFkZWM4YzJhM2MxYjFjNjE4ZGFhMzgzNDI0NS4uMDBhNGEwZTZlZmViODgx
NWQ4ZWQzNzI1ZDk5MWYwZDM3Yjc2MzZhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisy
MDE1LTA4LTI3ICBTdWtvbHNhayBTYWtzaHV3b25nICA8c3Vrb2xzYWtAZ21haWwuY29tPgorCisg
ICAgICAgIENyZWF0ZSBXZWJBc3NlbWJseSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODM3MworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYmVjYXVzZSBpdCBpcyBh
IGZ1bmN0aW9uIHJlbmFtZS4KKworICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cGFyc2VyTWV0YURhdGEpOgorCiAyMDE1LTA4LTI3
ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByMTg5MDc5LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCAyMGMxNDdhMDE1ZDJjNDNkZWMzODNmN2JhYTgxMGE2
NmE5MTkxNDYyLi5jMzI0MGEwN2M0MTRlMTk1NWUwYWFjMDRjYzUwZmRiMmNhYTIyZTZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtMTA3LDcg
KzEwNyw3IEBAIENvZGVCbG9ja0hhc2ggQ29kZUJsb2NrOjpoYXNoKCkgY29uc3QKIHsKICAgICBp
ZiAoIW1faGFzaCkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1NhZmVUb0NvbXB1dGVIYXNo
KCkpOwotICAgICAgICBtX2hhc2ggPSBDb2RlQmxvY2tIYXNoKG93bmVyRXhlY3V0YWJsZSgpLT5z
b3VyY2UoKSwgc3BlY2lhbGl6YXRpb25LaW5kKCkpOworICAgICAgICBtX2hhc2ggPSBDb2RlQmxv
Y2tIYXNoKG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5zb3VyY2UoKSwgc3BlY2lhbGl6YXRpb25L
aW5kKCkpOwogICAgIH0KICAgICByZXR1cm4gbV9oYXNoOwogfQpAQCAtMTE1LDcgKzExNSw3IEBA
IENvZGVCbG9ja0hhc2ggQ29kZUJsb2NrOjpoYXNoKCkgY29uc3QKIENTdHJpbmcgQ29kZUJsb2Nr
Ojpzb3VyY2VDb2RlRm9yVG9vbHMoKSBjb25zdAogewogICAgIGlmIChjb2RlVHlwZSgpICE9IEZ1
bmN0aW9uQ29kZSkKLSAgICAgICAgcmV0dXJuIG93bmVyRXhlY3V0YWJsZSgpLT5zb3VyY2UoKS50
b1VURjgoKTsKKyAgICAgICAgcmV0dXJuIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5zb3VyY2Uo
KS50b1VURjgoKTsKICAgICAKICAgICBTb3VyY2VQcm92aWRlciogcHJvdmlkZXIgPSBzb3VyY2Uo
KTsKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpOwpAQCAtMTU1LDExICsxNTUsMTEgQEAgdm9p
ZCBDb2RlQmxvY2s6OmR1bXBBc3N1bWluZ0pJVFR5cGUoUHJpbnRTdHJlYW0mIG91dCwgSklUQ29k
ZTo6SklUVHlwZSBqaXRUeXBlKQogICAgIG91dC5wcmludCgiLCAiLCBpbnN0cnVjdGlvbkNvdW50
KCkpOwogICAgIGlmICh0aGlzLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQgJiYg
bV9zaG91bGRBbHdheXNCZUlubGluZWQpCiAgICAgICAgIG91dC5wcmludCgiIChTaG91bGRBbHdh
eXNCZUlubGluZWQpIik7Ci0gICAgaWYgKG93bmVyRXhlY3V0YWJsZSgpLT5uZXZlcklubGluZSgp
KQorICAgIGlmIChvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+bmV2ZXJJbmxpbmUoKSkKICAgICAg
ICAgb3V0LnByaW50KCIgKE5ldmVySW5saW5lKSIpOwotICAgIGlmIChvd25lckV4ZWN1dGFibGUo
KS0+ZGlkVHJ5VG9FbnRlckluTG9vcCgpKQorICAgIGlmIChvd25lclNjcmlwdEV4ZWN1dGFibGUo
KS0+ZGlkVHJ5VG9FbnRlckluTG9vcCgpKQogICAgICAgICBvdXQucHJpbnQoIiAoRGlkVHJ5VG9F
bnRlckluTG9vcCkiKTsKLSAgICBpZiAob3duZXJFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgp
KQorICAgIGlmIChvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpCiAgICAg
ICAgIG91dC5wcmludCgiIChTdHJpY3RNb2RlKSIpOwogICAgIGlmICh0aGlzLT5qaXRUeXBlKCkg
PT0gSklUQ29kZTo6QmFzZWxpbmVKSVQgJiYgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24pCiAgICAg
ICAgIG91dC5wcmludCgiIChGVExGYWlsKSIpOwpAQCAtNTUyLDcgKzU1Miw3IEBAIHZvaWQgQ29k
ZUJsb2NrOjpkdW1wU291cmNlKCkKIAogdm9pZCBDb2RlQmxvY2s6OmR1bXBTb3VyY2UoUHJpbnRT
dHJlYW0mIG91dCkKIHsKLSAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gb3duZXJF
eGVjdXRhYmxlKCk7CisgICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG93bmVyU2Ny
aXB0RXhlY3V0YWJsZSgpOwogICAgIGlmIChleGVjdXRhYmxlLT5pc0Z1bmN0aW9uRXhlY3V0YWJs
ZSgpKSB7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0g
cmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKICAgICAg
ICAgU3RyaW5nIHNvdXJjZSA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIo
KS0+Z2V0UmFuZ2UoCkBAIC0xNzUxLDcgKzE3NTEsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhT
Y3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxp
bgogICAgIHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSk7CiAKICAgICBpZiAodm0oKS0+dHlwZVByb2ZpbGVyKCkgfHwgdm0oKS0+Y29udHJvbEZsb3dQ
cm9maWxlcigpKQotICAgICAgICB2bSgpLT5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+cmVt
b3ZlVW5leGVjdXRlZFJhbmdlKG1fb3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBtX293bmVy
RXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCksIG1fb3duZXJFeGVjdXRhYmxl
LT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOworICAgICAgICB2bSgpLT5mdW5jdGlvbkhhc0V4
ZWN1dGVkQ2FjaGUoKS0+cmVtb3ZlVW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+c291
cmNlSUQoKSwgb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgb3du
ZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwogCiAgICAgc2V0Q29uc3Rh
bnRSZWdpc3RlcnModW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXJzKCksIHVubGlu
a2VkQ29kZUJsb2NrLT5jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSk7CiAgICAg
aWYgKHVubGlua2VkQ29kZUJsb2NrLT51c2VzR2xvYmFsT2JqZWN0KCkpCkBAIC0xNzg1LDcgKzE3
ODUsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1
dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbgogICAgIGZvciAoc2l6ZV90IGNvdW50ID0g
dW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNscygpLCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKICAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2Vk
RXhlY3V0YWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkRlY2woaSk7CiAgICAgICAg
IGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSB8fCB2bSgpLT5jb250cm9sRmxvd1Byb2ZpbGVyKCkp
Ci0gICAgICAgICAgICB2bSgpLT5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+aW5zZXJ0VW5l
eGVjdXRlZFJhbmdlKG1fb3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCB1bmxpbmtlZEV4ZWN1
dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5
cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7CisgICAgICAgICAgICB2bSgpLT5mdW5jdGlvbkhhc0V4
ZWN1dGVkQ2FjaGUoKS0+aW5zZXJ0VW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+c291
cmNlSUQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwg
dW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwogICAgICAgICBt
X2Z1bmN0aW9uRGVjbHNbaV0uc2V0KCptX3ZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkRXhl
Y3V0YWJsZS0+bGluaygqbV92bSwgb3duZXJFeGVjdXRhYmxlLT5zb3VyY2UoKSkpOwogICAgIH0K
IApAQCAtMTc5Myw3ICsxNzkzLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0
YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW4KICAgICBmb3Ig
KHNpemVfdCBjb3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRXhwcnMo
KSwgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUgPSB1bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rpb25F
eHByKGkpOwogICAgICAgICBpZiAodm0oKS0+dHlwZVByb2ZpbGVyKCkgfHwgdm0oKS0+Y29udHJv
bEZsb3dQcm9maWxlcigpKQotICAgICAgICAgICAgdm0oKS0+ZnVuY3Rpb25IYXNFeGVjdXRlZENh
Y2hlKCktPmluc2VydFVuZXhlY3V0ZWRSYW5nZShtX293bmVyRXhlY3V0YWJsZS0+c291cmNlSUQo
KSwgdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgdW5saW5r
ZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOworICAgICAgICAgICAgdm0o
KS0+ZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKCktPmluc2VydFVuZXhlY3V0ZWRSYW5nZShvd25l
ckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGlu
Z1N0YXJ0T2Zmc2V0KCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ0VuZE9mZnNl
dCgpKTsKICAgICAgICAgbV9mdW5jdGlvbkV4cHJzW2ldLnNldCgqbV92bSwgb3duZXJFeGVjdXRh
YmxlLCB1bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmsoKm1fdm0sIG93bmVyRXhlY3V0YWJsZS0+c291
cmNlKCkpKTsKICAgICB9CiAKQEAgLTE5MjUsNyArMTkyNSw3IEBAIENvZGVCbG9jazo6Q29kZUJs
b2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sq
IHVubGluCiAKICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAxXSA9IG9i
amVjdEFsbG9jYXRpb25Qcm9maWxlOwogICAgICAgICAgICAgb2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUtPmluaXRpYWxpemUoKnZtKCksCi0gICAgICAgICAgICAgICAgbV9vd25lckV4ZWN1dGFibGUu
Z2V0KCksIG1fZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSwgaW5mZXJyZWRJbmxpbmVD
YXBhY2l0eSk7CisgICAgICAgICAgICAgICAgb3duZXJFeGVjdXRhYmxlLCBtX2dsb2JhbE9iamVj
dC0+b2JqZWN0UHJvdG90eXBlKCksIGluZmVycmVkSW5saW5lQ2FwYWNpdHkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMjEwNiw3ICsyMTA2LDcgQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVC
bG9jayogdW5saW4KICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHVzZXIncyBwcm9ncmFtLCBn
aXZlIHRoZSB0eXBlIHByb2ZpbGVyIHNvbWUgcmFuZ2UgdG8gaWRlbnRpZnkgdGhlc2UgcmV0dXJu
IHN0YXRlbWVudHMuCiAgICAgICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSwgdGhlIHRleHQg
b2Zmc2V0IHRoYXQgaXMgdXNlZCBhcyBpZGVudGlmaWNhdGlvbiBpcyAiZiIgaW4gdGhlIGZ1bmN0
aW9uIGtleXdvcmQKICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGlzIHN0b3JlZCBvbiBUeXBl
TG9jYXRpb24ncyBtX2Rpdm90Rm9yRnVuY3Rpb25PZmZzZXRJZlJldHVyblN0YXRlbWVudCBtZW1i
ZXIgdmFyaWFibGUuCi0gICAgICAgICAgICAgICAgICAgIGRpdm90U3RhcnQgPSBkaXZvdEVuZCA9
IG1fb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgZGl2b3RTdGFydCA9IGRpdm90RW5kID0gb3duZXJFeGVjdXRhYmxlLT50eXBl
UHJvZmlsaW5nU3RhcnRPZmZzZXQoKTsKICAgICAgICAgICAgICAgICAgICAgc2hvdWxkQW5hbHl6
ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MjExNCwxMiArMjExNCwxMiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxl
KiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbgogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBzdGQ6OnBhaXI8VHlwZUxvY2F0aW9uKiwgYm9vbD4gbG9jYXRpb25Q
YWlyID0gdm0oKS0+dHlwZVByb2ZpbGVyKCktPnR5cGVMb2NhdGlvbkNhY2hlKCktPmdldFR5cGVM
b2NhdGlvbihnbG9iYWxWYXJpYWJsZUlELAotICAgICAgICAgICAgICAgIG1fb3duZXJFeGVjdXRh
YmxlLT5zb3VyY2VJRCgpLCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCwgZ2xvYmFsVHlwZVNldCwgdm0o
KSk7CisgICAgICAgICAgICAgICAgb3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBkaXZvdFN0
YXJ0LCBkaXZvdEVuZCwgZ2xvYmFsVHlwZVNldCwgdm0oKSk7CiAgICAgICAgICAgICBUeXBlTG9j
YXRpb24qIGxvY2F0aW9uID0gbG9jYXRpb25QYWlyLmZpcnN0OwogICAgICAgICAgICAgYm9vbCBp
c05ld0xvY2F0aW9uID0gbG9jYXRpb25QYWlyLnNlY29uZDsKIAogICAgICAgICAgICAgaWYgKGZs
YWcgPT0gUHJvZmlsZVR5cGVCeXRlY29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50KQotICAgICAg
ICAgICAgICAgIGxvY2F0aW9uLT5tX2Rpdm90Rm9yRnVuY3Rpb25PZmZzZXRJZlJldHVyblN0YXRl
bWVudCA9IG1fb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKTsKKyAg
ICAgICAgICAgICAgICBsb2NhdGlvbi0+bV9kaXZvdEZvckZ1bmN0aW9uT2Zmc2V0SWZSZXR1cm5T
dGF0ZW1lbnQgPSBvd25lckV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpOwog
CiAgICAgICAgICAgICBpZiAoc2hvdWxkQW5hbHl6ZSAmJiBpc05ld0xvY2F0aW9uKQogICAgICAg
ICAgICAgICAgIHZtKCktPnR5cGVQcm9maWxlcigpLT5pbnNlcnROZXdMb2NhdGlvbihsb2NhdGlv
bik7CkBAIC0yMTYzLDYgKzIxNjMsMzkgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhl
Y3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW4KICAgICBt
X2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVvZihDb2RlQmxvY2spICsgbV9p
bnN0cnVjdGlvbnMuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSk7CiB9CiAKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCitDb2RlQmxvY2s6OkNvZGVCbG9jayhXZWJBc3NlbWJseUV4ZWN1dGFi
bGUqIG93bmVyRXhlY3V0YWJsZSwgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQorICAgIDogbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFi
bGUsIGdsb2JhbE9iamVjdCkKKyAgICAsIG1faGVhcCgmbV9nbG9iYWxPYmplY3QtPnZtKCkuaGVh
cCkKKyAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKDApCisgICAgLCBtX251bVZhcnMoMCkKKyAg
ICAsIG1faXNDb25zdHJ1Y3RvcihmYWxzZSkKKyAgICAsIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVk
KGZhbHNlKQorICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCisgICAgLCBtX2hh
c0JlZW5Db21waWxlZFdpdGhGVEwoZmFsc2UpCisgICAgLCBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50
KGZhbHNlKQorICAgICwgbV9zdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRGlzYWJsZWQpCisgICAg
LCBtX251bUJyZWFrcG9pbnRzKDApCisgICAgLCBtX293bmVyRXhlY3V0YWJsZShtX2dsb2JhbE9i
amVjdC0+dm0oKSwgb3duZXJFeGVjdXRhYmxlLCBvd25lckV4ZWN1dGFibGUpCisgICAgLCBtX3Zt
KCZ2bSkKKyAgICAsIG1faXNTdHJpY3RNb2RlKGZhbHNlKQorICAgICwgbV9uZWVkc0FjdGl2YXRp
b24oZmFsc2UpCisgICAgLCBtX21heUJlRXhlY3V0aW5nKGZhbHNlKQorICAgICwgbV9jb2RlVHlw
ZShGdW5jdGlvbkNvZGUpCisgICAgLCBtX29zckV4aXRDb3VudGVyKDApCisgICAgLCBtX29wdGlt
aXphdGlvbkRlbGF5Q291bnRlcigwKQorICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRl
cigwKQorI2lmIEVOQUJMRShKSVQpCisgICAgLCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlKERGRzo6
Q2Fubm90Q29tcGlsZSkKKyNlbmRpZgoreworICAgIEFTU0VSVChtX2hlYXAtPmlzRGVmZXJyZWQo
KSk7CisKKyAgICBtX2hlYXAtPm1fY29kZUJsb2Nrcy5hZGQodGhpcyk7CisgICAgbV9oZWFwLT5y
ZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChzaXplb2YoQ29kZUJsb2NrKSk7Cit9CisjZW5kaWYK
KwogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKIHsKICAgICBpZiAobV92bS0+bV9wZXJCeXRlY29k
ZVByb2ZpbGVyKQpAQCAtMjUwOCw3ICsyNTQxLDExIEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdFdl
YWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogdm9pZCBDb2RlQmxvY2s6OmZpbmFs
aXplVW5jb25kaXRpb25hbGx5KCkKIHsKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBt
X3ZtLT5pbnRlcnByZXRlcjsKLSAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGpp
dFR5cGUoKSkpIHsKKyAgICBib29sIG93bmVkQnlXZWJBc3NlbWJseUV4ZWN1dGFibGUgPSBmYWxz
ZTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgb3duZWRCeVdlYkFzc2VtYmx5RXhlY3V0
YWJsZSA9IG1fb3duZXJFeGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpOworI2Vu
ZGlmCisgICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkpICYmICFv
d25lZEJ5V2ViQXNzZW1ibHlFeGVjdXRhYmxlKSB7CiAgICAgICAgIGNvbnN0IFZlY3Rvcjx1bnNp
Z25lZD4mIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGUtPnByb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IHNpemUgPSBwcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAg
ICAgICAgICAgICBJbnN0cnVjdGlvbiogY3VySW5zdHJ1Y3Rpb24gPSAmaW5zdHJ1Y3Rpb25zKClb
cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbaV1dOwpAQCAtMjkxMyw3ICsyOTUwLDcgQEAgSGFu
ZGxlckluZm8qIENvZGVCbG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0LCBSZXF1aXIKIHVuc2lnbmVkIENvZGVCbG9jazo6bGluZU51bWJlckZvckJ5
dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQogewogICAgIFJFTEVBU0VfQVNT
RVJUKGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLSAgICByZXR1cm4g
bV9vd25lckV4ZWN1dGFibGUtPmZpcnN0TGluZSgpICsgbV91bmxpbmtlZENvZGUtPmxpbmVOdW1i
ZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAgcmV0dXJuIG93bmVyU2Ny
aXB0RXhlY3V0YWJsZSgpLT5maXJzdExpbmUoKSArIG1fdW5saW5rZWRDb2RlLT5saW5lTnVtYmVy
Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOwogfQogCiB1bnNpZ25lZCBDb2RlQmxv
Y2s6OmNvbHVtbk51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
KQpAQCAtMjkzMiw3ICsyOTY5LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZv
ckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGQKICAgICBtX3Vu
bGlua2VkQ29kZS0+ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZz
ZXQsIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBjb2x1bW4pOwogICAgIGRp
dm90ICs9IG1fc291cmNlT2Zmc2V0OwogICAgIGNvbHVtbiArPSBsaW5lID8gMSA6IGZpcnN0TGlu
ZUNvbHVtbk9mZnNldCgpOwotICAgIGxpbmUgKz0gbV9vd25lckV4ZWN1dGFibGUtPmZpcnN0TGlu
ZSgpOworICAgIGxpbmUgKz0gb3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPmZpcnN0TGluZSgpOwog
fQogCiBib29sIENvZGVCbG9jazo6aGFzT3BEZWJ1Z0ZvckxpbmVBbmRDb2x1bW4odW5zaWduZWQg
bGluZSwgdW5zaWduZWQgY29sdW1uKQpAQCAtMzAwOSwxMiArMzA0NiwxMiBAQCB2b2lkIENvZGVC
bG9jazo6bGlua0luY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBMTEludENhbGxM
aW5rSW5mbyogaW5jbwogCiB2b2lkIENvZGVCbG9jazo6aW5zdGFsbCgpCiB7Ci0gICAgb3duZXJF
eGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKHRoaXMpOworICAgIG93bmVyU2NyaXB0RXhlY3V0YWJs
ZSgpLT5pbnN0YWxsQ29kZSh0aGlzKTsKIH0KIAogUGFzc1JlZlB0cjxDb2RlQmxvY2s+IENvZGVC
bG9jazo6bmV3UmVwbGFjZW1lbnQoKQogewotICAgIHJldHVybiBvd25lckV4ZWN1dGFibGUoKS0+
bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKCkpOworICAgIHJl
dHVybiBvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3Io
c3BlY2lhbGl6YXRpb25LaW5kKCkpOwogfQogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTMwNDksNiAr
MzA4NiwxOCBAQCBERkc6OkNhcGFiaWxpdHlMZXZlbCBGdW5jdGlvbkNvZGVCbG9jazo6Y2FwYWJp
bGl0eUxldmVsSW50ZXJuYWwoKQogICAgICAgICByZXR1cm4gREZHOjpmdW5jdGlvbkZvckNvbnN0
cnVjdENhcGFiaWxpdHlMZXZlbCh0aGlzKTsKICAgICByZXR1cm4gREZHOjpmdW5jdGlvbkZvckNh
bGxDYXBhYmlsaXR5TGV2ZWwodGhpcyk7CiB9CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitD
b2RlQmxvY2sqIFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpyZXBsYWNlbWVudCgpCit7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK0RGRzo6Q2FwYWJpbGl0eUxldmVsIFdlYkFzc2VtYmx5Q29kZUJs
b2NrOjpjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpCit7CisgICAgcmV0dXJuIERGRzo6Q2Fubm90
Q29tcGlsZTsKK30KKyNlbmRpZgogI2VuZGlmCiAKIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQ
cm9maWxlcjo6SmV0dGlzb25SZWFzb24gcmVhc29uLCBSZW9wdGltaXphdGlvbk1vZGUgbW9kZSwg
Y29uc3QgRmlyZURldGFpbCogZGV0YWlsKQpAQCAtMzYwMSw2ICszNjUwLDEwIEBAIHZvaWQgQ29k
ZUJsb2NrOjp1cGRhdGVBbGxBcnJheVByZWRpY3Rpb25zKCkKIAogdm9pZCBDb2RlQmxvY2s6OnVw
ZGF0ZUFsbFByZWRpY3Rpb25zKCkKIHsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgaWYg
KG1fb3duZXJFeGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKQorICAgICAgICBy
ZXR1cm47CisjZW5kaWYKICAgICB1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9ucygpOwog
ICAgIHVwZGF0ZUFsbEFycmF5UHJlZGljdGlvbnMoKTsKIH0KQEAgLTM5MTgsNyArMzk3MSw3IEBA
IHZvaWQgQ29kZUJsb2NrOjppbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmllc0ZvckNvbnRyb2xGbG93
UHJvZmlsZXIoVmVjdG9yPEluc3RydWN0CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bSgp
LT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zW2VuZElkeF0udS5vcGNvZGUp
ID09IG9wX3Byb2ZpbGVfY29udHJvbF9mbG93KTsKICAgICAgICAgICAgIGJhc2ljQmxvY2tFbmRP
ZmZzZXQgPSBpbnN0cnVjdGlvbnNbZW5kSWR4ICsgMV0udS5vcGVyYW5kIC0gMTsKICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGJhc2ljQmxvY2tFbmRPZmZzZXQgPSBtX3NvdXJjZU9mZnNl
dCArIG1fb3duZXJFeGVjdXRhYmxlLT5zb3VyY2UoKS5sZW5ndGgoKSAtIDE7IC8vIE9mZnNldCBi
ZWZvcmUgdGhlIGNsb3NpbmcgYnJhY2UuCisgICAgICAgICAgICBiYXNpY0Jsb2NrRW5kT2Zmc2V0
ID0gbV9zb3VyY2VPZmZzZXQgKyBvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+c291cmNlKCkubGVu
Z3RoKCkgLSAxOyAvLyBPZmZzZXQgYmVmb3JlIHRoZSBjbG9zaW5nIGJyYWNlLgogICAgICAgICAg
ICAgYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0ID0gc3RkOjptaW4oYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0
LCBiYXNpY0Jsb2NrRW5kT2Zmc2V0KTsgLy8gU29tZSBzdGFydCBvZmZzZXRzIG1heSBiZSBhdCB0
aGUgY2xvc2luZyBicmFjZSwgZW5zdXJlIGl0IGlzIHRoZSBvZmZzZXQgYmVmb3JlLgogICAgICAg
ICB9CiAKQEAgLTM5NDYsNyArMzk5OSw3IEBAIHZvaWQgQ29kZUJsb2NrOjppbnNlcnRCYXNpY0Js
b2NrQm91bmRhcmllc0ZvckNvbnRyb2xGbG93UHJvZmlsZXIoVmVjdG9yPEluc3RydWN0CiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIEJhc2ljQmxvY2tMb2NhdGlv
biogYmFzaWNCbG9ja0xvY2F0aW9uID0gdm0oKS0+Y29udHJvbEZsb3dQcm9maWxlcigpLT5nZXRC
YXNpY0Jsb2NrTG9jYXRpb24obV9vd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIGJhc2ljQmxv
Y2tTdGFydE9mZnNldCwgYmFzaWNCbG9ja0VuZE9mZnNldCk7CisgICAgICAgIEJhc2ljQmxvY2tM
b2NhdGlvbiogYmFzaWNCbG9ja0xvY2F0aW9uID0gdm0oKS0+Y29udHJvbEZsb3dQcm9maWxlcigp
LT5nZXRCYXNpY0Jsb2NrTG9jYXRpb24ob3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPnNvdXJjZUlE
KCksIGJhc2ljQmxvY2tTdGFydE9mZnNldCwgYmFzaWNCbG9ja0VuZE9mZnNldCk7CiAKICAgICAg
ICAgLy8gRmluZCBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIGVuY2xvc2VkIHdpdGhpbiB0aGUgcmFu
Z2U6IFtiYXNpY0Jsb2NrU3RhcnRPZmZzZXQsIGJhc2ljQmxvY2tFbmRPZmZzZXRdCiAgICAgICAg
IC8vIGFuZCBpbnNlcnQgdGhlc2UgZnVuY3Rpb25zJyBzdGFydC9lbmQgb2Zmc2V0cyBhcyBnYXBz
IGluIHRoZSBjdXJyZW50IEJhc2ljQmxvY2tMb2NhdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRleCA5NDk5NDA1NjQzYWE5MTNkYzc4ZTc5OWFhMGNj
NTY3MmViMzZlZjNjLi5jYjllYmQ2MWI1ZGRmZTBjYjNmNjdmMzEwZGY4ODE3N2RkNjM1NDliIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC05Niw2ICs5
Niw5IEBAIHByb3RlY3RlZDoKICAgICBDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBDb2Rl
QmxvY2smIG90aGVyKTsKICAgICAgICAgCiAgICAgQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUq
IG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqLCBKU1Njb3BlKiwgUGFzc1JlZlB0
cjxTb3VyY2VQcm92aWRlcj4sIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RM
aW5lQ29sdW1uT2Zmc2V0KTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgQ29kZUJsb2Nr
KFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBWTSYsIEpTR2xvYmFsT2Jq
ZWN0Kik7CisjZW5kaWYKIAogICAgIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD4gbV9nbG9i
YWxPYmplY3Q7CiAgICAgSGVhcCogbV9oZWFwOwpAQCAtMzAzLDcgKzMwNiw4IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgamV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uUmVhc29uLCBSZW9wdGltaXph
dGlvbk1vZGUgPSBEb250Q291bnRSZW9wdGltaXphdGlvbiwgY29uc3QgRmlyZURldGFpbCogPSBu
dWxscHRyKTsKICAgICAKLSAgICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUoKSBj
b25zdCB7IHJldHVybiBtX293bmVyRXhlY3V0YWJsZS5nZXQoKTsgfQorICAgIEV4ZWN1dGFibGVC
YXNlKiBvd25lckV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBtX293bmVyRXhlY3V0YWJsZS5n
ZXQoKTsgfQorICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpIGNv
bnN0IHsgcmV0dXJuIGpzQ2FzdDxTY3JpcHRFeGVjdXRhYmxlKj4obV9vd25lckV4ZWN1dGFibGUu
Z2V0KCkpOyB9CiAKICAgICB2b2lkIHNldFZNKFZNKiB2bSkgeyBtX3ZtID0gdm07IH0KICAgICBW
TSogdm0oKSB7IHJldHVybiBtX3ZtOyB9CkBAIC0zNDYsNyArMzUwLDE1IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1fbmVlZHNBY3RpdmF0aW9uOwogICAgIH0KICAgICAKLSAgICBDb2RlVHlw
ZSBjb2RlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb2RlVHlwZSgpOyB9
CisgICAgQ29kZVR5cGUgY29kZVR5cGUoKSBjb25zdAorICAgIHsKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisgICAgICAgIGlmIChtX293bmVyRXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseUV4ZWN1
dGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiBGdW5jdGlvbkNvZGU7CisjZW5kaWYKKyAgICAg
ICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb2RlVHlwZSgpOworICAgIH0KKwogICAgIFB1dFBy
b3BlcnR5U2xvdDo6Q29udGV4dCBwdXRCeUlkQ29udGV4dCgpIGNvbnN0CiAgICAgewogICAgICAg
ICBpZiAoY29kZVR5cGUoKSA9PSBFdmFsQ29kZSkKQEAgLTk4Myw3ICs5OTUsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgdW5zaWduZWQgbV9udW1CcmVha3BvaW50cyA6IDMwOwogICAgICAgICB9
OwogICAgIH07Ci0gICAgV3JpdGVCYXJyaWVyPFNjcmlwdEV4ZWN1dGFibGU+IG1fb3duZXJFeGVj
dXRhYmxlOworICAgIFdyaXRlQmFycmllcjxFeGVjdXRhYmxlQmFzZT4gbV9vd25lckV4ZWN1dGFi
bGU7CiAgICAgVk0qIG1fdm07CiAKICAgICBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+IG1f
aW5zdHJ1Y3Rpb25zOwpAQCAtMTEzNCw2ICsxMTQ2LDI3IEBAIHByb3RlY3RlZDoKICNlbmRpZgog
fTsKIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKK2NsYXNzIFdlYkFzc2VtYmx5Q29kZUJsb2Nr
IDogcHVibGljIENvZGVCbG9jayB7CitwdWJsaWM6CisgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2so
Q29weVBhcnNlZEJsb2NrVGFnLCBXZWJBc3NlbWJseUNvZGVCbG9jayYgb3RoZXIpCisgICAgICAg
IDogQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCisgICAgeworICAgIH0KKworICAg
IFdlYkFzc2VtYmx5Q29kZUJsb2NrKFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogb3duZXJFeGVjdXRh
YmxlLCBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgICAgIDogQ29k
ZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgdm0sIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgfQor
CisjaWYgRU5BQkxFKEpJVCkKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVw
bGFjZW1lbnQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNh
cGFiaWxpdHlMZXZlbEludGVybmFsKCkgb3ZlcnJpZGU7CisjZW5kaWYKK307CisjZW5kaWYKKwog
aW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6OnIoaW50IGluZGV4KQogewogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAppbmRleCAzNTM4MzcyNzMwMzYwYzkzMGExZTZmN2Y2ODdl
NWE5MzQwZGIxYjQwLi5jNmYxNGE5NDE1ODBiYjRiZmM1MzU3OWFiNTM4NjA1OGYzOWNiODIwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKQEAgLTIyNyw3
ICsyMjcsNyBAQCB2b2lkIERlYnVnZ2VyOjpyZWdpc3RlckNvZGVCbG9jayhDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKIAogdm9pZCBEZWJ1Z2dlcjo6dG9nZ2xlQnJlYWtwb2ludChDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQnJlYWtwb2ludCYgYnJlYWtwb2ludCwgQnJlYWtwb2ludFN0YXRlIGVuYWJsZWRP
ck5vdCkKIHsKLSAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKTsKKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gY29k
ZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKTsKIAogICAgIFNvdXJjZUlEIHNvdXJjZUlE
ID0gc3RhdGljX2Nhc3Q8U291cmNlSUQ+KGV4ZWN1dGFibGUtPnNvdXJjZUlEKCkpOwogICAgIGlm
IChicmVha3BvaW50LnNvdXJjZUlEICE9IHNvdXJjZUlEKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKaW5kZXggYmYwOTNlODli
NDRiYWYzNTU2MTE1MTE3NDYyNzdhMTAxYzdhNzI2Yi4uZDM4M2MzZmZkMDgyMGY4YTJiNzFlODdj
NDU1MmRmNzdkMDY1NGY3YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVn
Z2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCkBAIC0yNDIsNyArMjQyLDcgQEAgU291cmNlSUQg
RGVidWdnZXJDYWxsRnJhbWU6OnNvdXJjZUlERm9yQ2FsbEZyYW1lKENhbGxGcmFtZSogY2FsbEZy
YW1lKQogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsK
ICAgICBpZiAoIWNvZGVCbG9jaykKICAgICAgICAgcmV0dXJuIG5vU291cmNlSUQ7Ci0gICAgcmV0
dXJuIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZUlEKCk7CisgICAgcmV0dXJu
IGNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPnNvdXJjZUlEKCk7CiB9CiAKIEpT
VmFsdWUgRGVidWdnZXJDYWxsRnJhbWU6OnRoaXNWYWx1ZUZvckNhbGxGcmFtZShDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAKaW5kZXggMGExNjI0ZTczMTE3NjRmMzc3MDZkYmI0MTlmNjNlZWI3NjJiYmI0Ny4u
N2Y2NTA1MmRhOGYyZjFmOTc0MzRjOGNiN2E2YTIwZmM0MjI2ZTUwNyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTkzOSw3ICs5Mzks
NyBAQCBwcml2YXRlOgogICAgICAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKICAgICAg
ICAgSW5saW5lQ2FsbEZyYW1lKiBtX2lubGluZUNhbGxGcmFtZTsKICAgICAgICAgCi0gICAgICAg
IFNjcmlwdEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCk7IH0KKyAgICAgICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZSgp
IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKTsgfQogICAgICAg
ICAKICAgICAgICAgUXVlcnlhYmxlRXhpdFByb2ZpbGUgbV9leGl0UHJvZmlsZTsKICAgICAgICAg
CkBAIC0xMjUyLDggKzEyNTIsOCBAQCB1bnNpZ25lZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5pbmdD
b3N0KENhbGxWYXJpYW50IGNhbGxlZSwgaW50IGFyZ3VtZW50Q291bnRJbmNsdQogICAgICAgICBk
YXRhTG9nKCIgICAgTWlnaHQgaW5saW5lIGZ1bmN0aW9uOiAiLCBtaWdodElubGluZUZ1bmN0aW9u
Rm9yKGNvZGVCbG9jaywga2luZCksICJcbiIpOwogICAgICAgICBkYXRhTG9nKCIgICAgTWlnaHQg
Y29tcGlsZSBmdW5jdGlvbjogIiwgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3IoY29kZUJsb2NrLCBr
aW5kKSwgIlxuIik7CiAgICAgICAgIGRhdGFMb2coIiAgICBJcyBzdXBwb3J0ZWQgZm9yIGlubGlu
aW5nOiAiLCBpc1N1cHBvcnRlZEZvcklubGluaW5nKGNvZGVCbG9jayksICJcbiIpOwotICAgICAg
ICBkYXRhTG9nKCIgICAgTmVlZHMgYWN0aXZhdGlvbjogIiwgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKS0+bmVlZHNBY3RpdmF0aW9uKCksICJcbiIpOwotICAgICAgICBkYXRhTG9nKCIgICAg
SXMgaW5saW5pbmcgY2FuZGlkYXRlOiAiLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5p
c0lubGluaW5nQ2FuZGlkYXRlKCksICJcbiIpOworICAgICAgICBkYXRhTG9nKCIgICAgTmVlZHMg
YWN0aXZhdGlvbjogIiwgY29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+bmVlZHNB
Y3RpdmF0aW9uKCksICJcbiIpOworICAgICAgICBkYXRhTG9nKCIgICAgSXMgaW5saW5pbmcgY2Fu
ZGlkYXRlOiAiLCBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5pc0lubGluaW5n
Q2FuZGlkYXRlKCksICJcbiIpOwogICAgIH0KICAgICBpZiAoIWNhbklubGluZShjYXBhYmlsaXR5
TGV2ZWwpKSB7CiAgICAgICAgIGlmICh2ZXJib3NlKQpAQCAtNDQzNiw3ICs0NDM2LDcgQEAgQnl0
ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkoCiAgICAgICAg
IGJ5dGVDb2RlUGFyc2VyLT5tX2dyYXBoLmZyZWV6ZShjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpKTsKICAgICAgICAgLy8gVGhlIG93bmVyIGlzIHRoZSBtYWNoaW5lIGNvZGUgYmxvY2ssIGFu
ZCB3ZSBhbHJlYWR5IGhhdmUgYSBiYXJyaWVyIG9uIHRoYXQgd2hlbiB0aGUKICAgICAgICAgLy8g
cGxhbiBmaW5pc2hlcy4KLSAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuc2V0
V2l0aG91dFdyaXRlQmFycmllcihjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKTsKKyAgICAg
ICAgbV9pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuc2V0V2l0aG91dFdyaXRlQmFycmllcihj
b2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpKTsKICAgICAgICAgbV9pbmxpbmVDYWxs
RnJhbWUtPnNldFN0YWNrT2Zmc2V0KGlubGluZUNhbGxGcmFtZVN0YXJ0Lm9mZnNldCgpIC0gSlNT
dGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSk7CiAgICAgICAgIGlmIChjYWxsZWUpIHsKICAgICAg
ICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6
OmNvbnN0YW50KGNhbGxlZSk7CkBAIC00NTI5LDcgKzQ1MjksNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUNvZGVCbG9jaygpCiAgICAgICAgIH0KICAgICAgICAgZGF0YUxvZygKICAgICAg
ICAgICAgICI6IG5lZWRzQWN0aXZhdGlvbiA9ICIsIGNvZGVCbG9jay0+bmVlZHNBY3RpdmF0aW9u
KCksCi0gICAgICAgICAgICAiLCBpc1N0cmljdE1vZGUgPSAiLCBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSwgIlxuIik7CisgICAgICAgICAgICAiLCBpc1N0cmlj
dE1vZGUgPSAiLCBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5pc1N0cmljdE1v
ZGUoKSwgIlxuIik7CiAgICAgICAgIGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCktPmR1bXBC
eXRlY29kZSgpOwogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2FwYWJpbGl0aWVzLmNwcAppbmRleCA3ZjU0MzA4NDg1MjkxNTkzZmI3NWY2YmJjMDY5YmFhM2I2
Y2QxMzI1Li4xZjI3YzU1NjU3NjJjMjgyM2NkNzhlYzkxNzhhM2MxMTVhOTYwYTE5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCkBAIC00NCw3ICs0
NCwxMSBAQCBib29sIGlzU3VwcG9ydGVkKCkKIAogYm9vbCBpc1N1cHBvcnRlZEZvcklubGluaW5n
KENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIHJldHVybiBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLT5pc0lubGluaW5nQ2FuZGlkYXRlKCk7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQorICAgIGlmIChjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pc1dlYkFzc2VtYmx5RXhl
Y3V0YWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICByZXR1cm4gY29k
ZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+aXNJbmxpbmluZ0NhbmRpZGF0ZSgpOwog
fQogCiBib29sIG1pZ2h0Q29tcGlsZUV2YWwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKaW5kZXggNGRiNDcxYjFmZGE5NWU4M2Q5Njk5OThiZjc2
MWNkMjBmNDczZjkxNS4uNDY0NzZkNDc4YjNkZjEwZDc1ZGZmNDliYTMxMGM1OWVhOTg3ZTA0NyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaApAQCAtMzQ1LDcgKzM0NSw3IEBAIHB1
YmxpYzoKICAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlRm9yKElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUp
Ci0gICAgICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOworICAg
ICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKTsKICAg
ICAgICAgCiAgICAgICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCk7
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAppbmRleCAw
MmRiZTRmYTVkZDM0MjRlZWQzYzUxMmU4OWI2MTRhZWQyYjgwMjgwLi5kODU3NjVmMGY2MGY5NTQ5
YWMwZjIyNzcwMzkzM2JiNjdiNjVjYjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkVudHJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5LmNwcApAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShF
eGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUlu
CiAgICAgc2FuaXRpemVTdGFja0ZvclZNKHZtKTsKICAgICAKICAgICBpZiAoYnl0ZWNvZGVJbmRl
eCkKLSAgICAgICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+c2V0RGlkVHJ5VG9FbnRl
ckluTG9vcCh0cnVlKTsKKyAgICAgICAgY29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUo
KS0+c2V0RGlkVHJ5VG9FbnRlckluTG9vcCh0cnVlKTsKICAgICAKICAgICBpZiAoY29kZUJsb2Nr
LT5qaXRUeXBlKCkgIT0gSklUQ29kZTo6REZHSklUKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkZUTEpJVCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5
LmNwcAppbmRleCBmMzNkNDA1Y2JhY2Q2NjMxY2IyOTQ2ZjA1ZWQ5YmYzMzFhMjNmYTQ5Li5mZDcx
Mjc0YTM1NjE0YjJmMDc1ZjU3NWFhMTViMTliMWIyN2ZjYjlkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5j
cHAKQEAgLTY2LDYgKzY2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAgIGlmICht
X3JlbWFpbmluZ0NhcGFjaXR5Rm9yRnJhbWVDYXB0dXJlKSB7CisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorICAgICAgICAgICAgaWYgKHZpc2l0b3ItPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFi
bGUoKS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
U3RhY2tWaXNpdG9yOjpDb250aW51ZTsKKyNlbmRpZgogICAgICAgICAgICAgdW5zaWduZWQgbGlu
ZTsKICAgICAgICAgICAgIHVuc2lnbmVkIGNvbHVtbjsKICAgICAgICAgICAgIHZpc2l0b3ItPmNv
bXB1dGVMaW5lQW5kQ29sdW1uKGxpbmUsIGNvbHVtbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAppbmRleCAxMDUwMWMxZDAxNmIxOWVl
ZWNhNGQyODVkMjY2NWVjY2JhZjgyYjRmLi42NmZhOGVjZjU0MDYzNTg2Y2Q0YWFhOGZiODQ5N2Jj
NjE1MWViMDM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHAKQEAgLTE2OCw3ICsxNjgsNyBAQCBKU1ZhbHVlIGV2YWwoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiAgICAgICAgIEFTU0VSVCghY2FsbEZyYW1lLT52bSgpLmV4Y2VwdGlvbigp
KTsKIAogICAgICAgICBUaGlzVERaTW9kZSB0aGlzVERaTW9kZSA9IGNhbGxlckNvZGVCbG9jay0+
dW5saW5rZWRDb2RlQmxvY2soKS0+Y29uc3RydWN0b3JLaW5kKCkgPT0gQ29uc3RydWN0b3JLaW5k
OjpEZXJpdmVkID8gVGhpc1REWk1vZGU6OkFsd2F5c0NoZWNrIDogVGhpc1REWk1vZGU6OkNoZWNr
SWZOZWVkZWQ7Ci0gICAgICAgIGV2YWwgPSBjYWxsZXJDb2RlQmxvY2stPmV2YWxDb2RlQ2FjaGUo
KS5nZXRTbG93KGNhbGxGcmFtZSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
Y2FsbGVyQ29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSwgdGhpc1REWk1vZGUsIHByb2dyYW1Tb3Vy
Y2UsIGNhbGxlclNjb3BlQ2hhaW4pOworICAgICAgICBldmFsID0gY2FsbGVyQ29kZUJsb2NrLT5l
dmFsQ29kZUNhY2hlKCkuZ2V0U2xvdyhjYWxsRnJhbWUsIGNhbGxlckNvZGVCbG9jay0+b3duZXJT
Y3JpcHRFeGVjdXRhYmxlKCksIGNhbGxlckNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCksIHRoaXNU
RFpNb2RlLCBwcm9ncmFtU291cmNlLCBjYWxsZXJTY29wZUNoYWluKTsKICAgICAgICAgaWYgKCFl
dmFsKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQpAQCAtNTE1LDYg
KzUxNSwxNiBAQCBTdHJpbmcgU3RhY2tGcmFtZTo6dG9TdHJpbmcoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCiAgICAgcmV0dXJuIHRyYWNlQnVpbGQudG9TdHJpbmcoKS5pbXBsKCk7CiB9CiAKK3N0YXRp
YyBpbmxpbmUgYm9vbCBpc1dlYkFzc2VtYmx5RXhlY3V0YWJsZShFeGVjdXRhYmxlQmFzZSogZXhl
Y3V0YWJsZSkKK3sKKyNpZiAhRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIFVOVVNFRF9QQVJBTShl
eGVjdXRhYmxlKTsKKyAgICByZXR1cm4gZmFsc2U7CisjZWxzZQorICAgIHJldHVybiBleGVjdXRh
YmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpOworI2VuZGlmCit9CisKIGNsYXNzIEdldFN0
YWNrVHJhY2VGdW5jdG9yIHsKIHB1YmxpYzoKICAgICBHZXRTdGFja1RyYWNlRnVuY3RvcihWTSYg
dm0sIFZlY3RvcjxTdGFja0ZyYW1lPiYgcmVzdWx0cywgc2l6ZV90IHJlbWFpbmluZ0NhcGFjaXR5
KQpAQCAtNTI4LDE1ICs1MzgsMTcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgVk0mIHZtID0g
bV92bTsKICAgICAgICAgaWYgKG1fcmVtYWluaW5nQ2FwYWNpdHlGb3JGcmFtZUNhcHR1cmUpIHsK
LSAgICAgICAgICAgIGlmICh2aXNpdG9yLT5pc0pTRnJhbWUoKSAmJiAhdmlzaXRvci0+Y29kZUJs
b2NrKCktPnVubGlua2VkQ29kZUJsb2NrKCktPmlzQnVpbHRpbkZ1bmN0aW9uKCkpIHsKKyAgICAg
ICAgICAgIGlmICh2aXNpdG9yLT5pc0pTRnJhbWUoKQorICAgICAgICAgICAgICAgICYmICFpc1dl
YkFzc2VtYmx5RXhlY3V0YWJsZSh2aXNpdG9yLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxl
KCkpCisgICAgICAgICAgICAgICAgJiYgIXZpc2l0b3ItPmNvZGVCbG9jaygpLT51bmxpbmtlZENv
ZGVCbG9jaygpLT5pc0J1aWx0aW5GdW5jdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSB2aXNpdG9yLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBT
dGFja0ZyYW1lIHMgPSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cm9uZzxKU09iamVjdD4odm0s
IHZpc2l0b3ItPmNhbGxlZSgpKSwKICAgICAgICAgICAgICAgICAgICAgZ2V0U3RhY2tGcmFtZUNv
ZGVUeXBlKHZpc2l0b3IpLAotICAgICAgICAgICAgICAgICAgICBTdHJvbmc8U2NyaXB0RXhlY3V0
YWJsZT4odm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpLAorICAgICAgICAgICAgICAg
ICAgICBTdHJvbmc8U2NyaXB0RXhlY3V0YWJsZT4odm0sIGNvZGVCbG9jay0+b3duZXJTY3JpcHRF
eGVjdXRhYmxlKCkpLAogICAgICAgICAgICAgICAgICAgICBTdHJvbmc8VW5saW5rZWRDb2RlQmxv
Y2s+KHZtLCBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpLAogICAgICAgICAgICAgICAg
ICAgICBjb2RlQmxvY2stPnNvdXJjZSgpLAotICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLT5maXJzdExpbmUoKSwKKyAgICAgICAgICAgICAgICAgICAgY29k
ZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+Zmlyc3RMaW5lKCksCiAgICAgICAgICAg
ICAgICAgICAgIGNvZGVCbG9jay0+Zmlyc3RMaW5lQ29sdW1uT2Zmc2V0KCksCiAgICAgICAgICAg
ICAgICAgICAgIGNvZGVCbG9jay0+c291cmNlT2Zmc2V0KCksCiAgICAgICAgICAgICAgICAgICAg
IHZpc2l0b3ItPmJ5dGVjb2RlT2Zmc2V0KCksCkBAIC02MjksNyArNjQxLDcgQEAgcHVibGljOgog
ICAgICAgICBtX2NvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpOwogICAgICAgICB1bnNp
Z25lZCBieXRlY29kZU9mZnNldCA9IHZpc2l0b3ItPmJ5dGVjb2RlT2Zmc2V0KCk7CiAKLSAgICAg
ICAgaWYgKG1faXNUZXJtaW5hdGlvbiB8fCAhKG1faGFuZGxlciA9IG1fY29kZUJsb2NrID8gbV9j
b2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkgOiBudWxs
cHRyKSkgeworICAgICAgICBpZiAobV9pc1Rlcm1pbmF0aW9uIHx8ICEobV9oYW5kbGVyID0gKG1f
Y29kZUJsb2NrICYmICFpc1dlYkFzc2VtYmx5RXhlY3V0YWJsZShtX2NvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCkpKSA/IG1fY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0
ZWNvZGVPZmZzZXQpIDogbnVsbHB0cikpIHsKICAgICAgICAgICAgIGlmICghdW53aW5kQ2FsbEZy
YW1lKHZpc2l0b3IpKSB7CiAgICAgICAgICAgICAgICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9m
aWxlciA9IHZtLmVuYWJsZWRQcm9maWxlcigpKQogICAgICAgICAgICAgICAgICAgICBwcm9maWxl
ci0+ZXhjZXB0aW9uVW53aW5kKG1fY2FsbEZyYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKaW5kZXggZDM3NmRiNDIxN2ZhNjFl
NmMzMmVhOWRhMjdhNzViZmIwMzMwYjNiNy4uM2YyYjkxNDA0NTFkNDg4MzRhOWY3MTAzMzQ2NGEy
MTQ3ZDFiZGI3MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L1N0YWNrVmlzaXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L1N0YWNrVmlzaXRvci5jcHAKQEAgLTIyMSw3ICsyMjEsNyBAQCBTdHJpbmcgU3RhY2tWaXNpdG9y
OjpGcmFtZTo6c291cmNlVVJMKCkKICAgICBjYXNlIENvZGVUeXBlOjpFdmFsOgogICAgIGNhc2Ug
Q29kZVR5cGU6OkZ1bmN0aW9uOgogICAgIGNhc2UgQ29kZVR5cGU6Okdsb2JhbDogewotICAgICAg
ICBTdHJpbmcgc291cmNlVVJMID0gY29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLT5zb3Vy
Y2VVUkwoKTsKKyAgICAgICAgU3RyaW5nIHNvdXJjZVVSTCA9IGNvZGVCbG9jaygpLT5vd25lclNj
cmlwdEV4ZWN1dGFibGUoKS0+c291cmNlVVJMKCk7CiAgICAgICAgIGlmICghc291cmNlVVJMLmlz
RW1wdHkoKSkKICAgICAgICAgICAgIHRyYWNlTGluZSA9IHNvdXJjZVVSTC5pbXBsKCk7CiAgICAg
ICAgIGJyZWFrOwpAQCAtMjkyLDExICsyOTIsMTEgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OkZyYW1l
Ojpjb21wdXRlTGluZUFuZENvbHVtbih1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikK
ICAgICB1bnNpZ25lZCBkaXZvdENvbHVtbiA9IDA7CiAgICAgcmV0cmlldmVFeHByZXNzaW9uSW5m
byhkaXZvdCwgdW51c2VkU3RhcnRPZmZzZXQsIHVudXNlZEVuZE9mZnNldCwgZGl2b3RMaW5lLCBk
aXZvdENvbHVtbik7CiAKLSAgICBsaW5lID0gZGl2b3RMaW5lICsgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKS0+Zmlyc3RMaW5lKCk7CisgICAgbGluZSA9IGRpdm90TGluZSArIGNvZGVCbG9j
ay0+b3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPmZpcnN0TGluZSgpOwogICAgIGNvbHVtbiA9IGRp
dm90Q29sdW1uICsgKGRpdm90TGluZSA/IDEgOiBjb2RlQmxvY2stPmZpcnN0TGluZUNvbHVtbk9m
ZnNldCgpKTsKIAotICAgIGlmIChjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5oYXNPdmVy
cmlkZUxpbmVOdW1iZXIoKSkKLSAgICAgICAgbGluZSA9IGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCktPm92ZXJyaWRlTGluZU51bWJlcigpOworICAgIGlmIChjb2RlQmxvY2stPm93bmVyU2Ny
aXB0RXhlY3V0YWJsZSgpLT5oYXNPdmVycmlkZUxpbmVOdW1iZXIoKSkKKyAgICAgICAgbGluZSA9
IGNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPm92ZXJyaWRlTGluZU51bWJlcigp
OwogfQogCiB2b2lkIFN0YWNrVmlzaXRvcjo6RnJhbWU6OnJldHJpZXZlRXhwcmVzc2lvbkluZm8o
aW50JiBkaXZvdCwgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQsIHVuc2lnbmVkJiBs
aW5lLCB1bnNpZ25lZCYgY29sdW1uKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAKaW5kZXggYTFmNzY1NjJiZDcwYjdmZWFhNmViYzlkZjIxNjkyYTBlYzg1ZWMz
NS4uY2I3YmJmNjFjOTE5NjE2MTI0ZGE2MmQxYWI5OGM4NWY3OTExZjE1MSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC04NDgsOSArODQ4LDIyIEBA
IGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0YXRlKiBleGVjQ2Fs
bGVlLCBDYWxsTGlua0luZm8qIGNhbGxMCiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29k
ZVB0cjsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7Ci0gICAgaWYgKGV4ZWN1dGFibGUt
PmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkp
IHsKICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3IoKnZtLCBraW5k
LCBNdXN0Q2hlY2tBcml0eSwgY2FsbExpbmtJbmZvLT5yZWdpc3RlclByZXNlcnZhdGlvbk1vZGUo
KSk7Ci0gICAgZWxzZSB7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIH0gZWxzZSBpZiAo
ZXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKSkgeworICAgICAgICBXZWJBc3Nl
bWJseUV4ZWN1dGFibGUqIHdlYkFzc2VtYmx5RXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PFdlYkFz
c2VtYmx5RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOworICAgICAgICB3ZWJBc3NlbWJseUV4ZWN1
dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSk7CisgICAgICAgIGNvZGVCbG9j
ayA9IHdlYkFzc2VtYmx5RXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yQ2FsbCgpOworICAgICAgICBB
U1NFUlQoY29kZUJsb2NrKTsKKyAgICAgICAgQXJpdHlDaGVja01vZGUgYXJpdHk7CisgICAgICAg
IGlmIChleGVjQ2FsbGVlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nh
c3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpCisgICAgICAgICAgICBhcml0
eSA9IE11c3RDaGVja0FyaXR5OworICAgICAgICBlbHNlCisgICAgICAgICAgICBhcml0eSA9IEFy
aXR5Q2hlY2tOb3RSZXF1aXJlZDsKKyAgICAgICAgY29kZVB0ciA9IHdlYkFzc2VtYmx5RXhlY3V0
YWJsZS0+ZW50cnlwb2ludEZvcigqdm0sIGtpbmQsIGFyaXR5LCBjYWxsTGlua0luZm8tPnJlZ2lz
dGVyUHJlc2VydmF0aW9uTW9kZSgpKTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CiAgICAgICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CiAKICAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkg
JiYgZnVuY3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0QWJp
bGl0eTo6Q2Fubm90Q29uc3RydWN0KSB7CkBAIC04OTYsMTcgKzkwOSwzMyBAQCBpbmxpbmUgY2hh
ciogdmlydHVhbEZvcldpdGhGdW5jdGlvbigKICAgICBKU1Njb3BlKiBzY29wZSA9IGZ1bmN0aW9u
LT5zY29wZVVuY2hlY2tlZCgpOwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gZnVu
Y3Rpb24tPmV4ZWN1dGFibGUoKTsKICAgICBpZiAoVU5MSUtFTFkoIWV4ZWN1dGFibGUtPmhhc0pJ
VENvZGVGb3Ioa2luZCkpKSB7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25F
eGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7
CisgICAgICAgIGJvb2wgaXNXZWJBc3NlbWJseUV4ZWN1dGFibGUgPSBmYWxzZTsKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCisgICAgICAgIGlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlID0gZXhlY3V0
YWJsZS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKTsKKyNlbmRpZgorICAgICAgICBpZiAoIWlz
V2ViQXNzZW1ibHlFeGVjdXRhYmxlKSB7CisgICAgICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4
ZWN1dGFibGUpOwogCi0gICAgICAgIGlmICghaXNDYWxsKGtpbmQpICYmIGZ1bmN0aW9uRXhlY3V0
YWJsZS0+Y29uc3RydWN0QWJpbGl0eSgpID09IENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0
cnVjdCkgewotICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVh
dGVOb3RBQ29uc3RydWN0b3JFcnJvcihleGVjLCBmdW5jdGlvbikpOwotICAgICAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwot
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAmJiBmdW5jdGlvbkV4ZWN1
dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25z
dHJ1Y3QpIHsKKyAgICAgICAgICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMs
IGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMsIGZ1bmN0aW9uKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpOworICAgICAgICAgICAgfQogCi0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0
aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBmdW5jdGlvbiwg
c2NvcGUsIGtpbmQpOwotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGV4ZWMtPnZt
KCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXJyb3IpOwotICAgICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAg
ICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0
aW9uKGV4ZWNDYWxsZWUsIGZ1bmN0aW9uLCBzY29wZSwga2luZCk7CisgICAgICAgICAgICBpZiAo
ZXJyb3IpIHsKKyAgICAgICAgICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMs
IGVycm9yKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
dm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSB7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAgICAgICAgaWYgKCFpc0NhbGwoa2lu
ZCkpIHsKKyAgICAgICAgICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNy
ZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMsIGZ1bmN0aW9uKSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhj
ZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNz
KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBXZWJBc3NlbWJseUV4ZWN1dGFibGUq
IHdlYkFzc2VtYmx5RXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PFdlYkFzc2VtYmx5RXhlY3V0YWJs
ZSo+KGV4ZWN1dGFibGUpOworICAgICAgICAgICAgd2ViQXNzZW1ibHlFeGVjdXRhYmxlLT5wcmVw
YXJlRm9yRXhlY3V0aW9uKGV4ZWNDYWxsZWUpOworI2VuZGlmCiAgICAgICAgIH0KICAgICB9CiAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRG
b3IoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAppbmRleCA3Y2Y2NzA4YTRiMzZi
NjUyZmQyMjBlMDc0YzBhY2IwZmE0OWI1OTM0Li5hZDRmZTcyNDA0YmRmODA1NWE2OGVhNjEyMDVk
ZGVkYWFlODg5ZDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKQEAgLTE3
NDIsOCArMTc0MiwxMyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgICAgIGlmICh2
YXJpYW50LmV4ZWN1dGFibGUoKS0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAgICAgIGNvZGVC
bG9jayA9IG51bGxwdHI7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgY29kZUJsb2NrID0g
anNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHZhcmlhbnQuZXhlY3V0YWJsZSgpKS0+Y29kZUJs
b2NrRm9yQ2FsbCgpOwotICAgICAgICAgICAgCisgICAgICAgICAgICBFeGVjdXRhYmxlQmFzZSog
ZXhlY3V0YWJsZSA9IHZhcmlhbnQuZXhlY3V0YWJsZSgpOworI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKyAgICAgICAgICAgIGlmIChleGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgp
KQorICAgICAgICAgICAgICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxXZWJBc3NlbWJseUV4ZWN1dGFi
bGUqPihleGVjdXRhYmxlKS0+Y29kZUJsb2NrRm9yQ2FsbCgpOworICAgICAgICAgICAgZWxzZQor
I2VuZGlmCisgICAgICAgICAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0
YWJsZSo+KGV4ZWN1dGFibGUpLT5jb2RlQmxvY2tGb3JDYWxsKCk7CiAgICAgICAgICAgICAvLyBJ
ZiB3ZSBjYW5ub3QgaGFuZGxlIGEgY2FsbGVlLCBhc3N1bWUgdGhhdCBpdCdzIGJldHRlciBmb3Ig
dGhpcyB3aG9sZSB0aGluZyB0byBiZSBhCiAgICAgICAgICAgICAvLyB2aXJ0dWFsIGNhbGwuCiAg
ICAgICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRp
Y19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5m
by5jYWxsVHlwZSgpID09IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3MgfHwgY2FsbExpbmtJbmZv
LmNhbGxUeXBlKCkgPT0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCmluZGV4IGU5MjZmNTJkYzc2ZDllZGUy
ZjBlM2E1YjNkYzI2YjMzNmE5MmY4NWQuLjczMTNmY2UyNDIwMGNjOTE2MTY5ZTgxNGEwYTA1OTMw
YWFiYWE1M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERh
dGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCkBA
IC0xMzIsOCArMTMyLDggQEAgdm9pZCBEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyhWTSYgdm0pCiAg
ICAgQVNTRVJUKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsID09IDY0KTsKICNlbmRpZgog
ICAgIEFTU0VSVChTdHJpbmdUeXBlID09IDYpOwotICAgIEFTU0VSVChPYmplY3RUeXBlID09IDE4
KTsKLSAgICBBU1NFUlQoRmluYWxPYmplY3RUeXBlID09IDE5KTsKKyAgICBBU1NFUlQoT2JqZWN0
VHlwZSA9PSAxOSk7CisgICAgQVNTRVJUKEZpbmFsT2JqZWN0VHlwZSA9PSAyMCk7CiAgICAgQVNT
RVJUKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPT0gMSk7CiAgICAgQVNTRVJUKEltcGxlbWVudHNI
YXNJbnN0YW5jZSA9PSAyKTsKICAgICBBU1NFUlQoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5j
ZSA9PSA4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwCmluZGV4IDJhMjQ4ODNjMjk4MzU0ZTRkYTBkNjYwZDAzZWMzYWE2MzhjYzQxZjMuLjI3Y2Jj
YzVkOTkyOGI2MzQ0MWE0ZDA3ZGI1NzA1MGUwZjhkYTQwYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAtMTExNiw5ICsxMTE2LDE0IEBA
IGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxl
ZSwgSW5zdHJ1Y3Rpb24qIHBjLCBDb2RlCiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29k
ZVB0cjsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7Ci0gICAgaWYgKGV4ZWN1dGFibGUt
PmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgYm9vbCBpc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSA9IGZh
bHNlOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBpc1dlYkFzc2VtYmx5RXhlY3V0YWJs
ZSA9IGV4ZWN1dGFibGUtPmlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCk7CisjZW5kaWYKKworICAg
IGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKSB7CiAgICAgICAgIGNvZGVQdHIgPSBl
eGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKHZtLCBraW5kLCBNdXN0Q2hlY2tBcml0eSwgUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7Ci0gICAgZWxzZSB7CisgICAgfSBlbHNlIGlmICgh
aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUpIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBm
dW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVj
dXRhYmxlKTsKIAogICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAmJiBmdW5jdGlvbkV4ZWN1dGFi
bGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1
Y3QpCkBAIC0xMTM1LDYgKzExNDAsMTkgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRV
cENhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBJbnN0cnVjdGlvbiogcGMsIENvZGUKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90UmVxdWlyZWQ7CiAgICAg
ICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Iodm0sIGtpbmQs
IGFyaXR5LCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKKyAgICB9IGVsc2Ugewor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICAgICAgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiB3
ZWJBc3NlbWJseUV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxXZWJBc3NlbWJseUV4ZWN1dGFibGUq
PihleGVjdXRhYmxlKTsKKyAgICAgICAgd2ViQXNzZW1ibHlFeGVjdXRhYmxlLT5wcmVwYXJlRm9y
RXhlY3V0aW9uKGV4ZWNDYWxsZWUpOworICAgICAgICBjb2RlQmxvY2sgPSB3ZWJBc3NlbWJseUV4
ZWN1dGFibGUtPmNvZGVCbG9ja0ZvckNhbGwoKTsKKyAgICAgICAgQVNTRVJUKGNvZGVCbG9jayk7
CisgICAgICAgIEFyaXR5Q2hlY2tNb2RlIGFyaXR5OworICAgICAgICBpZiAoZXhlY0NhbGxlZS0+
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzKCkpKQorICAgICAgICAgICAgYXJpdHkgPSBNdXN0Q2hlY2tBcml0
eTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90UmVxdWly
ZWQ7CisgICAgICAgIGNvZGVQdHIgPSB3ZWJBc3NlbWJseUV4ZWN1dGFibGUtPmVudHJ5cG9pbnRG
b3Iodm0sIGtpbmQsIGFyaXR5LCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKKyNl
bmRpZgogICAgIH0KICAgICAKICAgICBBU1NFUlQoISFjb2RlUHRyKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQppbmRleCA1YWQ4
MzQ2NWNkMWE0ZThmNGU5NjRhNjdlZDA4YTE1N2U3ZmEzNzVhLi4xMzZjOTE2NjFmMjJkMmQ4MDkz
YzE5OGM5YzViZDY2NDQzOGY1NDk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCkBAIC0xNjEsOCArMTYxLDggQEAgY29uc3Qg
U2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlID0gMzAKIAogIyBUeXBlIGNvbnN0YW50cy4KIGNvbnN0
IFN0cmluZ1R5cGUgPSA2Ci1jb25zdCBPYmplY3RUeXBlID0gMTgKLWNvbnN0IEZpbmFsT2JqZWN0
VHlwZSA9IDE5Citjb25zdCBPYmplY3RUeXBlID0gMTkKK2NvbnN0IEZpbmFsT2JqZWN0VHlwZSA9
IDIwCiAKICMgVHlwZSBmbGFncyBjb25zdGFudHMuCiBjb25zdCBNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gMQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5jcHAKaW5kZXggYWNiZTE0NjI5ZDI4NGVlODI1MTFmNzNjNTY4MDkxZGVkZjNiNDQ0Zi4u
NzU4MDgzMzJlNGRkNDA4NDQyYTAzNDM3ZDU1YzEwNWFjYzI5NWFiMSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCkBAIC01MjUsNyAr
NTI1LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSkKIFNMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9lbnRlcikKIHsKICAgICBCRUdJTigpOwotICAgIFNjcmlwdEV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSA9IGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFi
bGUoKTsKKyAgICBFeGVjdXRhYmxlQmFzZSogb3duZXJFeGVjdXRhYmxlID0gZXhlYy0+Y29kZUJs
b2NrKCktPm93bmVyRXhlY3V0YWJsZSgpOwogICAgIEhlYXA6OmhlYXAob3duZXJFeGVjdXRhYmxl
KS0+d3JpdGVCYXJyaWVyKG93bmVyRXhlY3V0YWJsZSk7CiAgICAgRU5EKCk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCmluZGV4IDFiOWE3M2Q3OTMz
OGFhMzkxNGYzZTQ1NDUxYmI2ZjlhMDBjYzkwOTcuLmU0ODU0Nzk3NTY3ZGU4Y2RiZTk2NjE1NzAy
ZmI2ZTc1MWI2M2M1ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4ZWN1dGFibGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuY3BwCkBAIC0zMSwxMCArMzEsMTIgQEAKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNp
bmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNXQVNN
TW9kdWxlLmgiCiAjaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50LmgiCiAjaW5jbHVkZSAiUGFyc2Vy
LmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxl
ci5oIgorI2luY2x1ZGUgIldBU01GdW5jdGlvblBhcnNlci5oIgogI2luY2x1ZGUgPHd0Zi9Db21t
YVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgpAQCAtNTYyLDYgKzU2NCw2MiBAQCBGdW5jdGlvbkV4ZWN1dGFibGUq
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUoCiAgICAgcmV0dXJuIHVubGlua2Vk
RXhlY3V0YWJsZS0+bGluayhleGVjLnZtKCksIHNvdXJjZSwgb3ZlcnJpZGVMaW5lTnVtYmVyKTsK
IH0KIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKK2NvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJs
eUV4ZWN1dGFibGU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5RXhlY3V0YWJsZSIsICZFeGVjdXRh
YmxlQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdlYkFzc2VtYmx5RXhlY3V0
YWJsZSkgfTsKKworV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpXZWJBc3NlbWJseUV4ZWN1dGFibGUo
Vk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTV0FTTU1vZHVsZSogbW9kdWxlLCB1
bnNpZ25lZCBmdW5jdGlvbkluZGV4KQorICAgIDogRXhlY3V0YWJsZUJhc2Uodm0sIHZtLndlYkFz
c2VtYmx5RXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwgTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJ
TEVEKQorICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICwgbV9tb2R1bGUodm0sIHRoaXMsIG1v
ZHVsZSkKKyAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQoreworfQorCit2b2lk
IFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgc3Rh
dGljX2Nhc3Q8V2ViQXNzZW1ibHlFeGVjdXRhYmxlKj4oY2VsbCktPldlYkFzc2VtYmx5RXhlY3V0
YWJsZTo6fldlYkFzc2VtYmx5RXhlY3V0YWJsZSgpOworfQorCit2b2lkIFdlYkFzc2VtYmx5RXhl
Y3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQoreworICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJB
c3NlbWJseUV4ZWN1dGFibGUqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgRXhlY3V0YWJsZUJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgaWYgKHRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9y
Q2FsbCkKKyAgICAgICAgdGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDYWxsLT52aXNpdEFnZ3Jl
Z2F0ZSh2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9tb2R1bGUp
OworfQorCit2b2lkIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkKK3sKKyAgICBt
X2NvZGVCbG9ja0ZvckNhbGwgPSBudWxscHRyOworICAgIEJhc2U6OmNsZWFyQ29kZSgpOworfQor
Cit2b2lkIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGlvbihFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgaWYgKGhhc0pJVENvZGVGb3JDYWxsKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhl
YXApOworCisgICAgUmVmUHRyPFdlYkFzc2VtYmx5Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBhZG9w
dFJlZihuZXcgV2ViQXNzZW1ibHlDb2RlQmxvY2soCisgICAgICAgIHRoaXMsIHZtLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsKKworICAgIFdBU01GdW5jdGlvblBhcnNlcjo6Y29tcGls
ZSh2bSwgY29kZUJsb2NrLmdldCgpLCBtX21vZHVsZS5nZXQoKSwgbV9zb3VyY2UsIG1fZnVuY3Rp
b25JbmRleCk7CisKKyAgICBtX2ppdENvZGVGb3JDYWxsID0gY29kZUJsb2NrLT5qaXRDb2RlKCk7
CisgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyKCk7CisgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVSZWdz
ID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCA9
IGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOworCisgICAgbV9jb2RlQmxvY2tGb3JDYWxsID0g
Y29kZUJsb2NrOworCisgICAgSGVhcDo6aGVhcCh0aGlzKS0+d3JpdGVCYXJyaWVyKHRoaXMpOwor
fQorI2VuZGlmCisKIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKIHsKICAgICBFeGVjdXRhYmxlQmFzZSogcmVhbFRoaXMgPSBjb25zdF9jYXN0PEV4ZWN1
dGFibGVCYXNlKj4odGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRh
YmxlLmgKaW5kZXggYjUxMzU0N2QwODMxY2E5NTE0MDkwM2ZjMDAyNjExMzBhM2M2NWY5Yi4uZmY3
Y2UwZjQ4NWQ3ZDMxOWQ3NmQzMjE5OTg2NjIwYmYxOWQ2YTZmNCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaApAQCAtNTAsOSArNTAsMTEgQEAgY2xhc3MgQ29k
ZUJsb2NrOwogY2xhc3MgRGVidWdnZXI7CiBjbGFzcyBFdmFsQ29kZUJsb2NrOwogY2xhc3MgRnVu
Y3Rpb25Db2RlQmxvY2s7CitjbGFzcyBKU1Njb3BlOworY2xhc3MgSlNXQVNNTW9kdWxlOwogY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgUHJvZ3JhbUNvZGVCbG9jazsKLWNsYXNz
IEpTU2NvcGU7CitjbGFzcyBXZWJBc3NlbWJseUNvZGVCbG9jazsKICAgICAKIGVudW0gQ29tcGls
YXRpb25LaW5kIHsgRmlyc3RDb21waWxhdGlvbiwgT3B0aW1pemluZ0NvbXBpbGF0aW9uIH07CiAK
QEAgLTkyLDE1ICs5NCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIENvZGVCbG9ja0hhc2gg
aGFzaEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKSBjb25zdDsKIAotICAgIGJvb2wgaXNFdmFs
RXhlY3V0YWJsZSgpCisgICAgYm9vbCBpc0V2YWxFeGVjdXRhYmxlKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiB0eXBlKCkgPT0gRXZhbEV4ZWN1dGFibGVUeXBlOwogICAgIH0KLSAgICBi
b29sIGlzRnVuY3Rpb25FeGVjdXRhYmxlKCkKKyAgICBib29sIGlzRnVuY3Rpb25FeGVjdXRhYmxl
KCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiB0eXBlKCkgPT0gRnVuY3Rpb25FeGVjdXRh
YmxlVHlwZTsKICAgICB9Ci0gICAgYm9vbCBpc1Byb2dyYW1FeGVjdXRhYmxlKCkKKyAgICBib29s
IGlzUHJvZ3JhbUV4ZWN1dGFibGUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGUo
KSA9PSBQcm9ncmFtRXhlY3V0YWJsZVR5cGU7CiAgICAgfQpAQCAtMTExLDYgKzExMywxMyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX251bVBhcmFtZXRlcnNGb3JDYWxsID09IE5VTV9QQVJB
TUVURVJTX0lTX0hPU1Q7CiAgICAgfQogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGJv
b2wgaXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IHR5cGUoKSA9PSBXZWJBc3NlbWJseUV4ZWN1dGFibGVUeXBlOworICAgIH0KKyNlbmRpZgorCiAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykgeyByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7IH0KICAgICAgICAgCiAgICAgdm9pZCBjbGVhckNvZGUoKTsKQEAgLTM4
Myw3ICszOTIsNyBAQCBwdWJsaWM6CiAKICAgICBDb2RlRmVhdHVyZXMgZmVhdHVyZXMoKSBjb25z
dCB7IHJldHVybiBtX2ZlYXR1cmVzOyB9CiAgICAgICAgIAotICAgIERFQ0xBUkVfSU5GTzsKKyAg
ICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAgdm9pZCByZWNvcmRQYXJzZShDb2RlRmVhdHVy
ZXMgZmVhdHVyZXMsIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMsIGludCBmaXJzdExpbmUsIGlu
dCBsYXN0TGluZSwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbikKICAg
ICB7CkBAIC01NTgsNyArNTY3LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0NlbGwqKTsKICAgICAgICAgCi0gICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVu
bGlua2VkRXhlY3V0YWJsZSgpCisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlu
a2VkRXhlY3V0YWJsZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV91bmxpbmtlZEV4
ZWN1dGFibGUuZ2V0KCk7CiAgICAgfQpAQCAtNjcyLDYgKzY4MSw1MCBAQCBwcml2YXRlOgogICAg
IFdyaXRlQmFycmllcjxJbmZlcnJlZFZhbHVlPiBtX3NpbmdsZXRvbkZ1bmN0aW9uOwogfTsKIAor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKK2NsYXNzIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSBmaW5h
bCA6IHB1YmxpYyBFeGVjdXRhYmxlQmFzZSB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBFeGVjdXRh
YmxlQmFzZSBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKKworICAgIHN0YXRp
YyBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIGNyZWF0ZShWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgSlNXQVNNTW9kdWxlKiBtb2R1bGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgpCisg
ICAgeworICAgICAgICBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUV4ZWN1dGFibGU+KHZtLmhlYXApKSBXZWJB
c3NlbWJseUV4ZWN1dGFibGUodm0sIHNvdXJjZSwgbW9kdWxlLCBmdW5jdGlvbkluZGV4KTsKKyAg
ICAgICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gZXhl
Y3V0YWJsZTsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvLCBUeXBlSW5mbyhXZWJBc3NlbWJseUV4ZWN1dGFibGVUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKwor
ICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHZvaWQgY2xlYXJDb2RlKCk7CisKKyAgICB2b2lkIHBy
ZXBhcmVGb3JFeGVjdXRpb24oRXhlY1N0YXRlKik7CisKKyAgICBXZWJBc3NlbWJseUNvZGVCbG9j
ayogY29kZUJsb2NrRm9yQ2FsbCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tG
b3JDYWxsLmdldCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBXZWJBc3NlbWJseUV4ZWN1dGFi
bGUoVk0mLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNXQVNNTW9kdWxlKiwgdW5zaWduZWQgZnVuY3Rp
b25JbmRleCk7CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisKKyAgICBTb3VyY2VDb2RlIG1fc291cmNlOworICAgIFdyaXRlQmFycmllcjxK
U1dBU01Nb2R1bGU+IG1fbW9kdWxlOworICAgIHVuc2lnbmVkIG1fZnVuY3Rpb25JbmRleDsKKwor
ICAgIFJlZlB0cjxXZWJBc3NlbWJseUNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDYWxsOworfTsK
KyNlbmRpZgorCiBpbmxpbmUgdm9pZCBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlVmlydHVhbChF
eGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSkKIHsKICAgICBzd2l0Y2ggKGV4ZWN1dGFibGUtPnR5
cGUoKSkgewpAQCAtNjgxLDYgKzczNCwxMCBAQCBpbmxpbmUgdm9pZCBFeGVjdXRhYmxlQmFzZTo6
Y2xlYXJDb2RlVmlydHVhbChFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSkKICAgICAgICAgcmV0
dXJuIGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5jbGVhckNvZGUoKTsK
ICAgICBjYXNlIEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGU6CiAgICAgICAgIHJldHVybiBqc0Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNsZWFyQ29kZSgpOworI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKKyAgICBjYXNlIFdlYkFzc2VtYmx5RXhlY3V0YWJsZVR5cGU6CisgICAg
ICAgIHJldHVybiBqc0Nhc3Q8V2ViQXNzZW1ibHlFeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNs
ZWFyQ29kZSgpOworI2VuZGlmCiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGpzQ2FzdDxO
YXRpdmVFeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNsZWFyQ29kZSgpOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKaW5kZXggMGY3MzU0ZWQ3
YTZiZDFlM2U2NGIxODU4NTljMTRmMTUwMzI2ZDQ1OC4uZjgzYWRmODVkMWFlN2VlMzFjZGIzNDJm
NzE1MTQxNzkzZGY3ZWE1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGdW5jdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
dW5jdGlvbi5jcHAKQEAgLTY3LDYgKzY3LDE2IEBAIEpTRnVuY3Rpb24qIEpTRnVuY3Rpb246OmNy
ZWF0ZShWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSoKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorSlNGdW5jdGlv
biogSlNGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBleGVj
dXRhYmxlLCBKU1Njb3BlKiBzY29wZSkKK3sKKyAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+KHZtLmhlYXApKSBKU0Z1bmN0aW9u
KHZtLCBleGVjdXRhYmxlLCBzY29wZSk7CisgICAgQVNTRVJUKGZ1bmN0aW9uLT5zdHJ1Y3R1cmUo
KS0+Z2xvYmFsT2JqZWN0KCkpOworICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbih2bSk7Cisg
ICAgcmV0dXJuIGZ1bmN0aW9uOworfQorI2VuZGlmCisKIHN0YXRpYyBpbmxpbmUgTmF0aXZlRXhl
Y3V0YWJsZSogZ2V0TmF0aXZlRXhlY3V0YWJsZShWTSYgdm0sIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2
ZUZ1bmN0aW9uLCBJbnRyaW5zaWMgaW50cmluc2ljLCBOYXRpdmVGdW5jdGlvbiBuYXRpdmVDb25z
dHJ1Y3RvcikKIHsKICNpZiAhRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uaAppbmRleCA5MjgzNTBlMjQ3OGM0NWY3YmY3ZThhYTg0YzllYzNhNGUy
NTJhODZlLi4wMWNlMzZhNWUyN2U0ZjI0ZWVmOGYzOTEwODQ4MWFjY2VlYWQ4MzU3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCkBAIC00MCw2ICs0MCw3IEBA
IGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xh
c3MgTmF0aXZlRXhlY3V0YWJsZTsKIGNsYXNzIFNvdXJjZUNvZGU7CitjbGFzcyBXZWJBc3NlbWJs
eUV4ZWN1dGFibGU7CiBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIFNwZWN1bGF0aXZlSklUOwogY2xh
c3MgSklUQ29tcGlsZXI7CkBAIC03Myw2ICs3NCw5IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBp
bnQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIE5hdGl2ZVN0ZEZ1bmN0aW9uJiYsIEludHJp
bnNpYyA9IE5vSW50cmluc2ljLCBOYXRpdmVGdW5jdGlvbiBuYXRpdmVDb25zdHJ1Y3RvciA9IGNh
bGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKTsKIAogICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBj
cmVhdGUoVk0mLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU1Njb3BlKik7CisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUoVk0mLCBXZWJBc3NlbWJs
eUV4ZWN1dGFibGUqLCBKU1Njb3BlKik7CisjZW5kaWYKIAogICAgIHN0YXRpYyBKU0Z1bmN0aW9u
KiBjcmVhdGVCdWlsdGluRnVuY3Rpb24oVk0mLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU0dsb2Jh
bE9iamVjdCopOwogICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVCdWlsdGluRnVuY3Rpb24o
Vk0mLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYg
bmFtZSk7CkBAIC0xNDMsNiArMTQ3LDEwIEBAIHByb3RlY3RlZDoKICAgICBKU0Z1bmN0aW9uKFZN
JiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwgSlNTY29wZSopOwogICAgIEpTRnVuY3Rpb24oVk0mLCBG
dW5jdGlvbkV4ZWN1dGFibGUqLCBKU1Njb3BlKiwgU3RydWN0dXJlKik7CiAKKyNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCisgICAgSlNGdW5jdGlvbihWTSYsIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSos
IEpTU2NvcGUqKTsKKyNlbmRpZgorCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2
ZUV4ZWN1dGFibGUqLCBpbnQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIHVzaW5n
IEJhc2U6OmZpbmlzaENyZWF0aW9uOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaAppbmRleCBmMDU5NTg0Y2YwN2Q3ZmQ2OWVhMmRjZmUy
N2I2M2I2NDRhODg0NDEzLi40Zjc1YWI5NzAzNTg2ZmI0ZmJmMzY0MzgxYjY1ZjVlZDhlZjU3MWEx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uSW5s
aW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25Jbmxp
bmVzLmgKQEAgLTUyLDYgKzUyLDE1IEBAIGlubGluZSBKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKFZN
JiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzCiB7CiB9CiAK
KyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitpbmxpbmUgSlNGdW5jdGlvbjo6SlNGdW5jdGlvbihW
TSYgdm0sIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUp
CisgICAgOiBCYXNlKHZtLCBzY29wZSwgc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0
cnVjdHVyZSgpKQorICAgICwgbV9leGVjdXRhYmxlKHZtLCB0aGlzLCBleGVjdXRhYmxlKQorICAg
ICwgbV9yYXJlRGF0YSgpCit7Cit9CisjZW5kaWYKKwogaW5saW5lIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogSlNGdW5jdGlvbjo6anNFeGVjdXRhYmxlKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlzSG9z
dEZ1bmN0aW9uTm9uSW5saW5lKCkpOwpAQCAtNjYsNiArNzUsMTAgQEAgaW5saW5lIGJvb2wgSlNG
dW5jdGlvbjo6aXNIb3N0RnVuY3Rpb24oKSBjb25zdAogCiBpbmxpbmUgYm9vbCBKU0Z1bmN0aW9u
Ojppc0J1aWx0aW5GdW5jdGlvbigpIGNvbnN0CiB7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
ICAgIGlmIChtX2V4ZWN1dGFibGUtPmlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyNlbmRpZgogICAgIHJldHVybiAhaXNIb3N0RnVuY3Rpb24oKSAmJiBq
c0V4ZWN1dGFibGUoKS0+aXNCdWlsdGluRnVuY3Rpb24oKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGUuaAppbmRleCA0MDMyNmNlMGYzMjlmYTdjN2JiYzk5ZjQ0NjQyOGZl
OTZjOTEyNGIzLi4xNTk2ZTY1ODRjOGFlYjhiN2MwY2NiNGRhMzAzMDIwMDk4ZTY5NWZmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaApAQCAtNDIsNiArNDIsNyBAQCBlbnVt
IEpTVHlwZSA6IHVpbnQ4X3QgewogICAgIEV2YWxFeGVjdXRhYmxlVHlwZSwKICAgICBQcm9ncmFt
RXhlY3V0YWJsZVR5cGUsCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlVHlwZSwKKyAgICBXZWJBc3Nl
bWJseUV4ZWN1dGFibGVUeXBlLAogCiAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVUeXBl
LAogICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9ja1R5cGUsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAKaW5kZXggNWFmNmNhZjI3ZDM1OWQ5MWY0N2MxMTU2NDc1ODQyMDhiN2YwNDk3
Ni4uYzYzN2U1NmViYTE3Y2Q5NmRmZmJmODEyNTAzNTU1MGZhZGUxZmZlMyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMjIxLDYgKzIyMSw5IEBAIFZNOjpWTShWTVR5cGUg
dm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICBldmFsRXhlY3V0YWJsZVN0cnVjdHVyZS5z
ZXQoKnRoaXMsIEV2YWxFeGVjdXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVs
bCgpKSk7CiAgICAgcHJvZ3JhbUV4ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9ncmFt
RXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGZ1
bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKKyAgICB3ZWJBc3NlbWJseUV4ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWJB
c3NlbWJseUV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
KyNlbmRpZgogICAgIHJlZ0V4cFN0cnVjdHVyZS5zZXQoKnRoaXMsIFJlZ0V4cDo6Y3JlYXRlU3Ry
dWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHN5bWJvbFN0cnVjdHVyZS5zZXQoKnRo
aXMsIFN5bWJvbDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHN5
bWJvbFRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgU3ltYm9sVGFibGU6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4
IGJmOTI1YjU5NWY5MjM5MzYyZWY4NzkxNzAzYzNlNTBhMjcyYWMyODIuLmVhM2Y4NTZhMmZjMWZj
NGJhZjQ5MTYwMWU4OWQ1ZjBlOGM2ZGJjMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aApAQCAtMjc5LDYgKzI3OSw5IEBAIHB1YmxpYzoKICAgICBTdHJvbmc8U3RydWN0dXJlPiBldmFs
RXhlY3V0YWJsZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9ncmFtRXhlY3V0
YWJsZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBmdW5jdGlvbkV4ZWN1dGFibGVT
dHJ1Y3R1cmU7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIFN0cm9uZzxTdHJ1Y3R1cmU+
IHdlYkFzc2VtYmx5RXhlY3V0YWJsZVN0cnVjdHVyZTsKKyNlbmRpZgogICAgIFN0cm9uZzxTdHJ1
Y3R1cmU+IHJlZ0V4cFN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBzeW1ib2xTdHJ1
Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3ltYm9sVGFibGVTdHJ1Y3R1cmU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dBU01Nb2R1bGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV0FTTU1vZHVsZS5oCmluZGV4IGE3MjY2YjU3ZGE4ZDM3
ZTcwNmVhY2YwNzgwYzJiZDdjMGJlMWY4ZDMuLjQ2N2IzZTZhMTFmNjU4NGFjZThhZDdjNDQyMDcz
ODBkMTM3ODI1OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV0FT
TU1vZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV0FTTU1vZHVsZS5o
CkBAIC02NCw2ICs2NCw4IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8V0FTTUZ1bmN0aW9uRGVjbGFy
YXRpb24+JiBmdW5jdGlvbkRlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsYXJh
dGlvbnM7IH0KICAgICBWZWN0b3I8V0FTTUZ1bmN0aW9uUG9pbnRlclRhYmxlPiYgZnVuY3Rpb25Q
b2ludGVyVGFibGVzKCkgeyByZXR1cm4gbV9mdW5jdGlvblBvaW50ZXJUYWJsZXM7IH0KIAorICAg
IFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4+JiBmdW5jdGlvbnMoKSB7IHJldHVybiBt
X2Z1bmN0aW9uczsgfQorCiBwcml2YXRlOgogICAgIEpTV0FTTU1vZHVsZShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuY3BwCmluZGV4IGQ2
ODlmNTZiMWNiODBmYzcxOTBiYjQ5N2MwNWNkZWQ2YjdjNDM4MzIuLjc4YTFhMTkyY2VjODg0N2Fk
MTEwMzg4ODAyYmEzMGNmYzk1N2NmYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcApAQCAtMjgsNyArMjgsOSBAQAogCiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAi
SlNXQVNNTW9kdWxlLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIldBU01G
dW5jdGlvblN5bnRheENoZWNrZXIuaCIKIAogI2RlZmluZSBQUk9QQUdBVEVfRVJST1IoKSBkbyB7
IGlmICghbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkpIHJldHVybiAwOyB9IHdoaWxlICgwKQpAQCAt
NTksNiArNjEsMjcgQEAgYm9vbCBXQVNNRnVuY3Rpb25QYXJzZXI6OmNoZWNrU3ludGF4KEpTV0FT
TU1vZHVsZSogbW9kdWxlLCBjb25zdCBTb3VyY2VDb2RlJiBzb3UKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAordm9pZCBXQVNNRnVuY3Rpb25QYXJzZXI6OmNvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSlNXQVNNTW9kdWxlKiBtb2R1bGUsIGNvbnN0IFNvdXJjZUNvZGUmLCBzaXpl
X3QgZnVuY3Rpb25JbmRleCkKK3sKKyAgICAvLyBGSVhNRTogQWN0dWFsbHkgY29tcGlsZSB0aGUg
Y29kZS4KKyAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSwgY29kZUJsb2NrKTsKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgYmVnaW5MYWJlbCA9IGppdC5sYWJlbCgpOworICAgIGppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSks
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICBqaXQucmV0KCk7CisgICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIGFyaXR5Q2hlY2sgPSBqaXQubGFiZWwoKTsKKyAgICBqaXQuanVtcChiZWdp
bkxhYmVsKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIodm0sIGppdCwgY29kZUJsb2Nr
LCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
d2l0aEFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGFyaXR5Q2hlY2spOworICAg
IE1hY3JvQXNzZW1ibGVyOjpDb2RlUmVmIHJlc3VsdCA9IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsICgiQmFzZWxpbmUgSklUIGNvZGUgZm9yIFdlYkFzc2VtYmx5IikpOworICAgIGNvZGVCbG9j
ay0+c2V0SklUQ29kZShhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0
eUNoZWNrLCBKSVRDb2RlOjpCYXNlbGluZUpJVCkpKTsKKyAgICBjb2RlQmxvY2stPmNhcGFiaWxp
dHlMZXZlbCgpOworCisgICAgdWludDMyX3Qgc2lnbmF0dXJlSW5kZXggPSBtb2R1bGUtPmZ1bmN0
aW9uRGVjbGFyYXRpb25zKClbZnVuY3Rpb25JbmRleF0uc2lnbmF0dXJlSW5kZXg7CisgICAgY29u
c3QgV0FTTVNpZ25hdHVyZSYgc2lnbmF0dXJlID0gbW9kdWxlLT5zaWduYXR1cmVzKClbc2lnbmF0
dXJlSW5kZXhdOworICAgIGNvZGVCbG9jay0+c2V0TnVtUGFyYW1ldGVycygxICsgc2lnbmF0dXJl
LmFyZ3VtZW50cy5zaXplKCkpOworfQorCiB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KIGJvb2wg
V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUZ1bmN0aW9uKENvbnRleHQmIGNvbnRleHQpCiB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5oCmluZGV4
IDRkNjMxM2FmZDc4YzgwYzU3NDJlZDJmNzFhYjY1YTVmZTc1YzViOTMuLjcwNGM0NmM5ZDk0ZDQw
NjRhY2U3YjRmN2NjMWNjOGYzNjM4MWM1NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5oCkBAIC0zNiwxMSArMzYsMTQgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKK2NsYXNzIENvZGVCbG9jazsKIGNsYXNzIEpTV0FTTU1vZHVsZTsKK2NsYXNz
IFZNOwogCiBjbGFzcyBXQVNNRnVuY3Rpb25QYXJzZXIgewogcHVibGljOgogICAgIHN0YXRpYyBi
b29sIGNoZWNrU3ludGF4KEpTV0FTTU1vZHVsZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBzaXplX3Qg
ZnVuY3Rpb25JbmRleCwgdW5zaWduZWQgc3RhcnRPZmZzZXRJblNvdXJjZSwgdW5zaWduZWQmIGVu
ZE9mZnNldEluU291cmNlLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CisgICAgc3RhdGljIHZvaWQg
Y29tcGlsZShWTSYsIENvZGVCbG9jayosIEpTV0FTTU1vZHVsZSosIGNvbnN0IFNvdXJjZUNvZGUm
LCBzaXplX3QgZnVuY3Rpb25JbmRleCk7CiAKIHByaXZhdGU6CiAgICAgV0FTTUZ1bmN0aW9uUGFy
c2VyKEpTV0FTTU1vZHVsZSogbW9kdWxlLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIHNpemVf
dCBmdW5jdGlvbkluZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V0FTTU1vZHVsZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9k
dWxlUGFyc2VyLmNwcAppbmRleCA1MGRiYjhlNTA5YjZjN2Y0NTdkMWQ3NmQ2MTZjYTgwNDU3NWNh
OGFmLi42N2UzYWE2NDZjZTZmZDk0N2ZlOThmNGM2NWVlZDFkYzdmZDUxOTIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcApAQCAtNDksMTUg
KzQ5LDE3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1XQVNNTW9kdWxlUGFyc2VyOjpXQVNNTW9k
dWxlUGFyc2VyKGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKLSAgICA6IG1fc291cmNlKHNvdXJj
ZSkKK1dBU01Nb2R1bGVQYXJzZXI6OldBU01Nb2R1bGVQYXJzZXIoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCisgICAgOiBtX3Zt
KHZtKQorICAgICwgbV9nbG9iYWxPYmplY3Qodm0sIGdsb2JhbE9iamVjdCkKKyAgICAsIG1fc291
cmNlKHNvdXJjZSkKICAgICAsIG1fcmVhZGVyKHN0YXRpY19jYXN0PFdlYkFzc2VtYmx5U291cmNl
UHJvdmlkZXIqPihzb3VyY2UucHJvdmlkZXIoKSktPmRhdGEoKSkKIHsKIH0KIAotSlNXQVNNTW9k
dWxlKiBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQorSlNXQVNNTW9kdWxlKiBXQVNNTW9kdWxl
UGFyc2VyOjpwYXJzZShTdHJpbmcmIGVycm9yTWVzc2FnZSkKIHsKLSAgICBtX21vZHVsZS5zZXQo
dm0sIEpTV0FTTU1vZHVsZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPndhc21Nb2R1bGVTdHJ1
Y3R1cmUoKSkpOworICAgIG1fbW9kdWxlLnNldChtX3ZtLCBKU1dBU01Nb2R1bGU6OmNyZWF0ZSht
X3ZtLCBtX2dsb2JhbE9iamVjdC0+d2FzbU1vZHVsZVN0cnVjdHVyZSgpKSk7CiAgICAgcGFyc2VN
b2R1bGUoKTsKICAgICBpZiAoIW1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpKSB7CiAgICAgICAgIGVy
cm9yTWVzc2FnZSA9IG1fZXJyb3JNZXNzYWdlOwpAQCAtMjE3LDYgKzIxOSw3IEBAIHZvaWQgV0FT
TU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uU2VjdGlvbigpCiAgICAgdWlu
dDMyX3QgbnVtYmVyT2ZGdW5jdGlvbkRlY2xhcmF0aW9uczsKICAgICBSRUFEX0NPTVBBQ1RfVUlO
VDMyX09SX0ZBSUwobnVtYmVyT2ZGdW5jdGlvbkRlY2xhcmF0aW9ucywgIkNhbm5vdCByZWFkIHRo
ZSBudW1iZXIgb2YgZnVuY3Rpb24gZGVjbGFyYXRpb25zLiIpOwogICAgIG1fbW9kdWxlLT5mdW5j
dGlvbkRlY2xhcmF0aW9ucygpLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZGdW5jdGlv
bkRlY2xhcmF0aW9ucyk7CisgICAgbV9tb2R1bGUtPmZ1bmN0aW9ucygpLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobnVtYmVyT2ZGdW5jdGlvbkRlY2xhcmF0aW9ucyk7CiAgICAgZm9yICh1aW50MzJf
dCBpID0gMDsgaSA8IG51bWJlck9mRnVuY3Rpb25EZWNsYXJhdGlvbnM7ICsraSkgewogICAgICAg
ICBXQVNNRnVuY3Rpb25EZWNsYXJhdGlvbiBmdW5jdGlvbkRlY2xhcmF0aW9uOwogICAgICAgICBS
RUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwoZnVuY3Rpb25EZWNsYXJhdGlvbi5zaWduYXR1cmVJ
bmRleCwgIkNhbm5vdCByZWFkIHRoZSBzaWduYXR1cmUgaW5kZXguIik7CkBAIC0yNjUsNiArMjY4
LDEwIEBAIHZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb24oc2l6
ZV90IGZ1bmN0aW9uSW5kZXgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9yZWFkZXIu
c2V0T2Zmc2V0KGVuZE9mZnNldEluU291cmNlKTsKKworICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJs
ZSogd2ViQXNzZW1ibHlFeGVjdXRhYmxlID0gV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpjcmVhdGUo
bV92bSwgbV9zb3VyY2UsIG1fbW9kdWxlLmdldCgpLCBmdW5jdGlvbkluZGV4KTsKKyAgICBKU0Z1
bmN0aW9uKiBmdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNyZWF0ZShtX3ZtLCB3ZWJBc3NlbWJseUV4
ZWN1dGFibGUsIG1fZ2xvYmFsT2JqZWN0LmdldCgpKTsKKyAgICBtX21vZHVsZS0+ZnVuY3Rpb25z
KCkudW5jaGVja2VkQXBwZW5kKFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPihtX3ZtLCBtX21vZHVs
ZS5nZXQoKSwgZnVuY3Rpb24pKTsKIH0KIAogdm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUV4
cG9ydFNlY3Rpb24oKQpAQCAtMjg1LDExICsyOTIsMTEgQEAgdm9pZCBXQVNNTW9kdWxlUGFyc2Vy
OjpwYXJzZUV4cG9ydFNlY3Rpb24oKQogICAgICAgICBmb3IgKHVpbnQzMl90IGV4cG9ydEluZGV4
ID0gMDsgZXhwb3J0SW5kZXggPCBudW1iZXJPZkV4cG9ydHM7ICsrZXhwb3J0SW5kZXgpIHsKICAg
ICAgICAgICAgIFN0cmluZyBleHBvcnROYW1lOwogICAgICAgICAgICAgUkVBRF9TVFJJTkdfT1Jf
RkFJTChleHBvcnROYW1lLCAiQ2Fubm90IHJlYWQgdGhlIGZ1bmN0aW9uIGV4cG9ydCBuYW1lLiIp
OwotICAgICAgICAgICAgLy8gRklYTUU6IENoZWNrIHRoYXQgZXhwb3J0TmFtZSBpcyBsZWdhbC4K
ICAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CiAgICAgICAgICAgICBSRUFEX0NP
TVBBQ1RfVUlOVDMyX09SX0ZBSUwoZnVuY3Rpb25JbmRleCwgIkNhbm5vdCByZWFkIHRoZSBmdW5j
dGlvbiBpbmRleC4iKTsKICAgICAgICAgICAgIEZBSUxfSUZfRkFMU0UoZnVuY3Rpb25JbmRleCA8
IG1fbW9kdWxlLT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpLnNpemUoKSwgIlRoZSBmdW5jdGlvbiBp
bmRleCBpcyBpbmNvcnJlY3QuIik7Ci0gICAgICAgICAgICAvLyBGSVhNRTogRXhwb3J0IHRoZSBm
dW5jdGlvbi4KKyAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJm1fdm0sIGV4cG9ydE5hbWUpOworICAgICAgICAgICAgbV9tb2R1bGUtPnB1
dERpcmVjdChtX3ZtLCBpZGVudGlmaWVyLCBtX21vZHVsZS0+ZnVuY3Rpb25zKClbZnVuY3Rpb25J
bmRleF0uZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMwMCw4
ICszMDcsOCBAQCB2b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0U2VjdGlvbigpCiAK
IEpTV0FTTU1vZHVsZSogcGFyc2VXZWJBc3NlbWJseShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZSwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgV0FTTU1vZHVs
ZVBhcnNlciBXQVNNTW9kdWxlUGFyc2VyKHNvdXJjZSk7Ci0gICAgcmV0dXJuIFdBU01Nb2R1bGVQ
YXJzZXIucGFyc2UoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBlcnJv
ck1lc3NhZ2UpOworICAgIFdBU01Nb2R1bGVQYXJzZXIgbW9kdWxlUGFyc2VyKGV4ZWMtPnZtKCks
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc291cmNlKTsKKyAgICByZXR1cm4gbW9kdWxl
UGFyc2VyLnBhcnNlKGVycm9yTWVzc2FnZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5oCmluZGV4IDMwZjFh
NTY1OTg4YzYwMTRiNTQ1ZmMxYzZjMjZjMDkzZDhmYjU0MGYuLmUyZjRmYjc1OGM5NTEzNTNmODYw
ODdkNTkwNGM1ZjM2MjYzZWVmYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dBU01Nb2R1bGVQYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
QVNNTW9kdWxlUGFyc2VyLmgKQEAgLTQyLDggKzQyLDggQEAgY2xhc3MgVk07CiAKIGNsYXNzIFdB
U01Nb2R1bGVQYXJzZXIgewogcHVibGljOgotICAgIFdBU01Nb2R1bGVQYXJzZXIoY29uc3QgU291
cmNlQ29kZSYpOwotICAgIEpTV0FTTU1vZHVsZSogcGFyc2UoVk0mLCBKU0dsb2JhbE9iamVjdCos
IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKKyAgICBXQVNNTW9kdWxlUGFyc2VyKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBjb25zdCBTb3VyY2VDb2RlJik7CisgICAgSlNXQVNNTW9kdWxlKiBwYXJzZShT
dHJpbmcmIGVycm9yTWVzc2FnZSk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZU1vZHVsZSgp
OwpAQCAtNTcsNiArNTcsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VGdW5jdGlvbkRlZmlu
aXRpb24oc2l6ZV90IGZ1bmN0aW9uSW5kZXgpOwogICAgIHZvaWQgcGFyc2VFeHBvcnRTZWN0aW9u
KCk7CiAKKyAgICBWTSYgbV92bTsKKyAgICBTdHJvbmc8SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFs
T2JqZWN0OwogICAgIGNvbnN0IFNvdXJjZUNvZGUmIG1fc291cmNlOwogICAgIFdBU01SZWFkZXIg
bV9yZWFkZXI7CiAgICAgU3Ryb25nPEpTV0FTTU1vZHVsZT4gbV9tb2R1bGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggOTgxMmYzYmMxYTc5NDE2MWM5ZGVkMjI1M2M2NDQ4
N2NhNGVmMWU4Yy4uMjhlNzZiMTgxMzg2ODIyYzNkYWYyNWJmNjk4NzQyZjQ4ODdjNGY2MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMTQ2Myw3ICsxNDYzLDcgQEAgU3Ry
aW5nIEludGVybmFsczo6cGFyc2VyTWV0YURhdGEoRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgdmFs
dWUpCiAgICAgICAgIEdldENhbGxlckNvZGVCbG9ja0Z1bmN0b3IgaXRlcjsKICAgICAgICAgZXhl
Yy0+aXRlcmF0ZShpdGVyKTsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBpdGVyLmNv
ZGVCbG9jaygpOwotICAgICAgICBleGVjdXRhYmxlID0gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKTsgCisgICAgICAgIGV4ZWN1dGFibGUgPSBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0
YWJsZSgpOwogICAgIH0gZWxzZSBpZiAoY29kZS5pc0Z1bmN0aW9uKCkpIHsKICAgICAgICAgSlNG
dW5jdGlvbiogZnVuY09iaiA9IEpTQzo6anNDYXN0PEpTRnVuY3Rpb24qPihjb2RlLnRvT2JqZWN0
KGV4ZWMpKTsKICAgICAgICAgZXhlY3V0YWJsZSA9IGZ1bmNPYmotPmpzRXhlY3V0YWJsZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260130</attachid>
            <date>2015-08-27 23:39:32 -0700</date>
            <delta_ts>2015-08-28 13:14:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148373-20150827233919.patch</filename>
            <type>text/plain</type>
            <size>66115</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg5MDg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
ZGY0NDQ4ZDcxZWIxZjU3ZmRhODE4YmQwN2Q0MThmMDM0YzYwMmNkLi5hZDU3NmYzYmU2NDE1YmNm
MTRiMjhmNmVhNmIzYzM1YzFmOTY5MzhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMjMgQEAKKzIwMTUtMDgtMjcgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0Bn
bWFpbC5jb20+CisKKyAgICAgICAgQ3JlYXRlIFdlYkFzc2VtYmx5IGZ1bmN0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4MzczCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3JlYXRlIGZ1bmN0aW9u
cyBmcm9tIFdlYkFzc2VtYmx5IGZpbGVzIGdlbmVyYXRlZCBieSBwYWNrLWFzbWpzCisgICAgICAg
IDxodHRwczovL2dpdGh1Yi5jb20vV2ViQXNzZW1ibHkvcG9seWZpbGwtcHJvdG90eXBlLTE+Lgor
ICAgICAgICBXZWJBc3NlbWJseSBmdW5jdGlvbnMgY3JlYXRlZCBieSB0aGlzIHBhdGNoIGNhbiBv
bmx5IHJldHVybiAwLgorICAgICAgICBBY3R1YWwgY29kZSBnZW5lcmF0aW9uIHdpbGwgYmUgaW1w
bGVtZW50ZWQgaW4gc3Vic2VxdWVudCBwYXRjaGVzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50
cm9kdWNlcyBXZWJBc3NlbWJseUV4ZWN1dGFibGUsIGEgbmV3IHN1YmNsYXNzIG9mCisgICAgICAg
IEV4ZWN1dGFibGVCYXNlIGZvciBXZWJBc3NlbWJseSBmdW5jdGlvbnMuIENvZGVCbG9ja3MgY2Fu
IG5vdyBoYXZlCisgICAgICAgIGFuIG93bmVyIHRoYXQgaXMgbm90IGEgU2NyaXB0RXhlY3V0YWJs
ZS4gVGhpcyBwYXRjaCBjaGFuZ2VzIHRoZQorICAgICAgICByZXR1cm4gdHlwZSBvZiBDb2RlQmxv
Y2s6Om93bmVyRXhlY3V0YWJsZSgpIGZyb20gU2NyaXB0RXhlY3V0YWJsZSoKKyAgICAgICAgdG8g
RXhlY3V0YWJsZUJhc2UqLiBJdCBhbHNvIGNoYW5nZXMgY29kZSB0aGF0IGNhbGxzIFNjcmlwdEV4
ZWN1dGFibGUncworICAgICAgICBtZXRob2RzIG9uIENvZGVCbG9jazo6b3duZXJFeGVjdXRhYmxl
KCkgdG8gdXNlCisgICAgICAgIENvZGVCbG9jazo6b3duZXJTY3JpcHRFeGVjdXRhYmxlKCksIHdo
aWNoIGRvZXMganNDYXN0PFNjcmlwdEV4ZWN1dGFibGUqPi4KKworICAgICAgICBTaW5jZSBvd25l
clNjcmlwdEV4ZWN1dGFibGUoKSBpcyBjYWxsZWQgZnJvbSBXZWJDb3JlIGFuZCBpdCB1c2VzCisg
ICAgICAgIGpzQ2FzdDxTY3JpcHRFeGVjdXRhYmxlKj4sIHRoaXMgcGF0Y2ggbmVlZHMgdG8gZXhw
b3J0CisgICAgICAgIFNjcmlwdEV4ZWN1dGFibGU6OmluZm8oKS4gVGhpcyBzaG91bGQgZml4IHRo
ZSBidWlsZCBlcnJvciBpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ4NTU1CisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6Omhhc2gpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNv
dXJjZUNvZGVGb3JUb29scyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEFzc3VtaW5n
SklUVHlwZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcFNvdXJjZSk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpm
aW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGluZU51
bWJlckZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpleHByZXNz
aW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aW5z
dGFsbCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bmV3UmVwbGFjZW1lbnQpOgorICAgICAg
ICAoSlNDOjpXZWJBc3NlbWJseUNvZGVCbG9jazo6cmVwbGFjZW1lbnQpOgorICAgICAgICAoSlND
OjpXZWJBc3NlbWJseUNvZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsSW50ZXJuYWwpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjppbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmllc0ZvckNvbnRyb2xGbG93UHJvZmls
ZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6Om93bmVyRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3duZXJT
Y3JpcHRFeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb2RlVHlwZSk6Cisg
ICAgICAgIChKU0M6OldlYkFzc2VtYmx5Q29kZUJsb2NrOjpXZWJBc3NlbWJseUNvZGVCbG9jayk6
CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuY3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dl
cjo6dG9nZ2xlQnJlYWtwb2ludCk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJDYWxsRnJh
bWUuY3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6c291cmNlSURGb3JDYWxs
RnJhbWUpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OmV4ZWN1dGFibGUpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjppbmxpbmluZ0Nvc3QpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFj
a0VudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxv
Y2spOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OmlzU3VwcG9ydGVkRm9ySW5saW5pbmcpOgorICAgICAgICAoSlNDOjpERkc6Om1pZ2h0Q29t
cGlsZUV2YWwpOgorICAgICAgICAoSlNDOjpERkc6Om1pZ2h0Q29tcGlsZVByb2dyYW0pOgorICAg
ICAgICAoSlNDOjpERkc6Om1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ2FsbCk6CisgICAgICAgIChK
U0M6OkRGRzo6bWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QpOgorICAgICAgICAqIGRm
Zy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpleGVjdXRhYmxlRm9yKToK
KyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBh
cmVPU1JFbnRyeSk6CisgICAgICAgICogaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3Rvcnku
Y3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpDcmVhdGVTY3JpcHRDYWxsU3RhY2tGdW5jdG9yOjpv
cGVyYXRvcigpKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAg
ICAgIChKU0M6OmV2YWwpOgorICAgICAgICAoSlNDOjppc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSk6
CisgICAgICAgIChKU0M6OkdldFN0YWNrVHJhY2VGdW5jdG9yOjpvcGVyYXRvcigpKToKKyAgICAg
ICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgICogaW50ZXJwcmV0
ZXIvU3RhY2tWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6
c291cmNlVVJMKToKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6Y29tcHV0ZUxp
bmVBbmRDb2x1bW4pOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGwpOgor
ICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpEYXRh
OjpwZXJmb3JtQXNzZXJ0aW9ucyk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
OgorICAgICAgICAoSlNDOjpMTEludDo6c2V0VXBDYWxsKToKKyAgICAgICAgKiBsbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0V4
ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4ZWN1dGFibGU6OldlYkFz
c2VtYmx5RXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6
ZGVzdHJveSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6dmlzaXRDaGls
ZHJlbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6Y2xlYXJDb2RlKToK
KyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aW9u
KToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0
YWJsZUJhc2U6OmlzRXZhbEV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFz
ZTo6aXNGdW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6
aXNQcm9ncmFtRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjppc1dl
YkFzc2VtYmx5RXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjpjbGVh
ckNvZGVWaXJ0dWFsKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAg
ICAoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlv
bi5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6SlNGdW5jdGlvbjo6SlNGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246Omlz
QnVpbHRpbkZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTVHlwZS5oOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRp
bWUvVk0uaDoKKyAgICAgICAgKiB3YXNtL0pTV0FTTU1vZHVsZS5oOgorICAgICAgICAoSlNDOjpK
U1dBU01Nb2R1bGU6OmZ1bmN0aW9ucyk6CisgICAgICAgICogd2FzbS9XQVNNRnVuY3Rpb25QYXJz
ZXIuY3BwOgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OmNvbXBpbGUpOgorICAg
ICAgICAqIHdhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmg6CisgICAgICAgICogd2FzbS9XQVNNTW9k
dWxlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6V0FTTU1vZHVs
ZVBhcnNlcik6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlKToKKyAgICAg
ICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uU2VjdGlv
bik6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWZpbml0
aW9uKToKKyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VFeHBvcnRTZWN0aW9u
KToKKyAgICAgICAgKEpTQzo6cGFyc2VXZWJBc3NlbWJseSk6CisgICAgICAgICogd2FzbS9XQVNN
TW9kdWxlUGFyc2VyLmg6CisKIDIwMTUtMDgtMjcgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUu
Y29tPgogCiAgICAgICAgIEFkZCBub0RGRygpIHRvIGpzYyB0byBwcmV2ZW50IERGRyBjb21waWxh
dGlvbiBvZiBhIHNwZWNpZmllZCBmdW5jdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4NDBlMjk1MGU2NWJl
MTJlNWM1ZGY1MjA4NTZlZjlmOTc1ZTYxYjcyLi5hMzIxNzM5NmEwMGNjNDc0NWMzMjk1NTdkYzZm
NmJkNDE4ODI0ZWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTUtMDgtMjcgIFN1
a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0BnbWFpbC5jb20+CisKKyAgICAgICAgQ3JlYXRl
IFdlYkFzc2VtYmx5IGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ4MzczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWNhdXNlIGl0IGlzIGEgZnVuY3Rpb24gcmVu
YW1lLgorCisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjpwYXJzZXJNZXRhRGF0YSk6CisKIDIwMTUtMDgtMjcgIE15bGVzIEMuIE1h
eGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIERyYXcgZm9u
dHMgYXQgdGhlaXIgbmF0aXZlIHNpemVzIGluc3RlYWQgb2Ygc2NhbGluZyBhIDFwdCBmb250CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDAxZjEx
ZGE3Yzc3MjBmZjgyYmJlYTkzNGNiMGFmZjBmYjNhMzAwYTMuLmY4YTBmNGJmYzg2OTRmZWFkMjhh
NmFiNTdjN2MyMzVmZjEzZDExOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCkBAIC0xMDcsNyArMTA3LDcgQEAgQ29kZUJsb2NrSGFzaCBDb2RlQmxv
Y2s6Omhhc2goKSBjb25zdAogewogICAgIGlmICghbV9oYXNoKSB7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGlzU2FmZVRvQ29tcHV0ZUhhc2goKSk7Ci0gICAgICAgIG1faGFzaCA9IENvZGVCbG9j
a0hhc2gob3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZSgpLCBzcGVjaWFsaXphdGlvbktpbmQoKSk7
CisgICAgICAgIG1faGFzaCA9IENvZGVCbG9ja0hhc2gob3duZXJTY3JpcHRFeGVjdXRhYmxlKCkt
PnNvdXJjZSgpLCBzcGVjaWFsaXphdGlvbktpbmQoKSk7CiAgICAgfQogICAgIHJldHVybiBtX2hh
c2g7CiB9CkBAIC0xMTUsNyArMTE1LDcgQEAgQ29kZUJsb2NrSGFzaCBDb2RlQmxvY2s6Omhhc2go
KSBjb25zdAogQ1N0cmluZyBDb2RlQmxvY2s6OnNvdXJjZUNvZGVGb3JUb29scygpIGNvbnN0CiB7
CiAgICAgaWYgKGNvZGVUeXBlKCkgIT0gRnVuY3Rpb25Db2RlKQotICAgICAgICByZXR1cm4gb3du
ZXJFeGVjdXRhYmxlKCktPnNvdXJjZSgpLnRvVVRGOCgpOworICAgICAgICByZXR1cm4gb3duZXJT
Y3JpcHRFeGVjdXRhYmxlKCktPnNvdXJjZSgpLnRvVVRGOCgpOwogICAgIAogICAgIFNvdXJjZVBy
b3ZpZGVyKiBwcm92aWRlciA9IHNvdXJjZSgpOwogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhl
Y3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSk7
CkBAIC0xNTUsMTMgKzE1NSwxMyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEFzc3VtaW5nSklUVHlw
ZShQcmludFN0cmVhbSYgb3V0LCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpCiAgICAgb3V0LnBy
aW50KCIsICIsIGluc3RydWN0aW9uQ291bnQoKSk7CiAgICAgaWYgKHRoaXMtPmppdFR5cGUoKSA9
PSBKSVRDb2RlOjpCYXNlbGluZUpJVCAmJiBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKICAgICAg
ICAgb3V0LnByaW50KCIgKFNob3VsZEFsd2F5c0JlSW5saW5lZCkiKTsKLSAgICBpZiAob3duZXJF
eGVjdXRhYmxlKCktPm5ldmVySW5saW5lKCkpCisgICAgaWYgKG93bmVyU2NyaXB0RXhlY3V0YWJs
ZSgpLT5uZXZlcklubGluZSgpKQogICAgICAgICBvdXQucHJpbnQoIiAoTmV2ZXJJbmxpbmUpIik7
Ci0gICAgaWYgKG93bmVyRXhlY3V0YWJsZSgpLT5uZXZlck9wdGltaXplKCkpCisgICAgaWYgKG93
bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5uZXZlck9wdGltaXplKCkpCiAgICAgICAgIG91dC5wcmlu
dCgiIChOZXZlck9wdGltaXplKSIpOwotICAgIGlmIChvd25lckV4ZWN1dGFibGUoKS0+ZGlkVHJ5
VG9FbnRlckluTG9vcCgpKQorICAgIGlmIChvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+ZGlkVHJ5
VG9FbnRlckluTG9vcCgpKQogICAgICAgICBvdXQucHJpbnQoIiAoRGlkVHJ5VG9FbnRlckluTG9v
cCkiKTsKLSAgICBpZiAob3duZXJFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpKQorICAgIGlm
IChvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpCiAgICAgICAgIG91dC5w
cmludCgiIChTdHJpY3RNb2RlKSIpOwogICAgIGlmICh0aGlzLT5qaXRUeXBlKCkgPT0gSklUQ29k
ZTo6QmFzZWxpbmVKSVQgJiYgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24pCiAgICAgICAgIG91dC5w
cmludCgiIChGVExGYWlsKSIpOwpAQCAtNTU0LDcgKzU1NCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpk
dW1wU291cmNlKCkKIAogdm9pZCBDb2RlQmxvY2s6OmR1bXBTb3VyY2UoUHJpbnRTdHJlYW0mIG91
dCkKIHsKLSAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gb3duZXJFeGVjdXRhYmxl
KCk7CisgICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG93bmVyU2NyaXB0RXhlY3V0
YWJsZSgpOwogICAgIGlmIChleGVjdXRhYmxlLT5pc0Z1bmN0aW9uRXhlY3V0YWJsZSgpKSB7CiAg
ICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gcmVpbnRlcnBy
ZXRfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKICAgICAgICAgU3RyaW5n
IHNvdXJjZSA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKS0+Z2V0UmFu
Z2UoCkBAIC0xNzUzLDcgKzE3NTMsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVj
dXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbgogICAgIHNl
dE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CiAKICAg
ICBpZiAodm0oKS0+dHlwZVByb2ZpbGVyKCkgfHwgdm0oKS0+Y29udHJvbEZsb3dQcm9maWxlcigp
KQotICAgICAgICB2bSgpLT5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+cmVtb3ZlVW5leGVj
dXRlZFJhbmdlKG1fb3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBtX293bmVyRXhlY3V0YWJs
ZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCksIG1fb3duZXJFeGVjdXRhYmxlLT50eXBlUHJv
ZmlsaW5nRW5kT2Zmc2V0KCkpOworICAgICAgICB2bSgpLT5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2Fj
aGUoKS0+cmVtb3ZlVW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwg
b3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgb3duZXJFeGVjdXRh
YmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwogCiAgICAgc2V0Q29uc3RhbnRSZWdpc3Rl
cnModW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXJzKCksIHVubGlua2VkQ29kZUJs
b2NrLT5jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSk7CiAgICAgaWYgKHVubGlu
a2VkQ29kZUJsb2NrLT51c2VzR2xvYmFsT2JqZWN0KCkpCkBAIC0xNzg3LDcgKzE3ODcsNyBAQCBD
b2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVu
bGlua2VkQ29kZUJsb2NrKiB1bmxpbgogICAgIGZvciAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRD
b2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNscygpLCBpID0gMDsgaSA8IGNvdW50OyArK2kp
IHsKICAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJs
ZSA9IHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkRlY2woaSk7CiAgICAgICAgIGlmICh2bSgp
LT50eXBlUHJvZmlsZXIoKSB8fCB2bSgpLT5jb250cm9sRmxvd1Byb2ZpbGVyKCkpCi0gICAgICAg
ICAgICB2bSgpLT5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+aW5zZXJ0VW5leGVjdXRlZFJh
bmdlKG1fb3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5
cGVQcm9maWxpbmdTdGFydE9mZnNldCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9maWxp
bmdFbmRPZmZzZXQoKSk7CisgICAgICAgICAgICB2bSgpLT5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2Fj
aGUoKS0+aW5zZXJ0VW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwg
dW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgdW5saW5rZWRF
eGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwogICAgICAgICBtX2Z1bmN0aW9u
RGVjbHNbaV0uc2V0KCptX3ZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkRXhlY3V0YWJsZS0+
bGluaygqbV92bSwgb3duZXJFeGVjdXRhYmxlLT5zb3VyY2UoKSkpOwogICAgIH0KIApAQCAtMTc5
NSw3ICsxNzk1LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3du
ZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW4KICAgICBmb3IgKHNpemVfdCBj
b3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRXhwcnMoKSwgaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1
bmxpbmtlZEV4ZWN1dGFibGUgPSB1bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGkpOwog
ICAgICAgICBpZiAodm0oKS0+dHlwZVByb2ZpbGVyKCkgfHwgdm0oKS0+Y29udHJvbEZsb3dQcm9m
aWxlcigpKQotICAgICAgICAgICAgdm0oKS0+ZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKCktPmlu
c2VydFVuZXhlY3V0ZWRSYW5nZShtX293bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgdW5saW5r
ZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgdW5saW5rZWRFeGVjdXRh
YmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOworICAgICAgICAgICAgdm0oKS0+ZnVuY3Rp
b25IYXNFeGVjdXRlZENhY2hlKCktPmluc2VydFVuZXhlY3V0ZWRSYW5nZShvd25lckV4ZWN1dGFi
bGUtPnNvdXJjZUlEKCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zm
c2V0KCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpKTsKICAg
ICAgICAgbV9mdW5jdGlvbkV4cHJzW2ldLnNldCgqbV92bSwgb3duZXJFeGVjdXRhYmxlLCB1bmxp
bmtlZEV4ZWN1dGFibGUtPmxpbmsoKm1fdm0sIG93bmVyRXhlY3V0YWJsZS0+c291cmNlKCkpKTsK
ICAgICB9CiAKQEAgLTE5MjcsNyArMTkyNyw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlw
dEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGluCiAK
ICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAxXSA9IG9iamVjdEFsbG9j
YXRpb25Qcm9maWxlOwogICAgICAgICAgICAgb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUtPmluaXRp
YWxpemUoKnZtKCksCi0gICAgICAgICAgICAgICAgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIG1f
Z2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSwgaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSk7
CisgICAgICAgICAgICAgICAgb3duZXJFeGVjdXRhYmxlLCBtX2dsb2JhbE9iamVjdC0+b2JqZWN0
UHJvdG90eXBlKCksIGluZmVycmVkSW5saW5lQ2FwYWNpdHkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KIApAQCAtMjEwOCw3ICsyMTA4LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2so
U2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5s
aW4KICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHVzZXIncyBwcm9ncmFtLCBnaXZlIHRoZSB0
eXBlIHByb2ZpbGVyIHNvbWUgcmFuZ2UgdG8gaWRlbnRpZnkgdGhlc2UgcmV0dXJuIHN0YXRlbWVu
dHMuCiAgICAgICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSwgdGhlIHRleHQgb2Zmc2V0IHRo
YXQgaXMgdXNlZCBhcyBpZGVudGlmaWNhdGlvbiBpcyAiZiIgaW4gdGhlIGZ1bmN0aW9uIGtleXdv
cmQKICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGlzIHN0b3JlZCBvbiBUeXBlTG9jYXRpb24n
cyBtX2Rpdm90Rm9yRnVuY3Rpb25PZmZzZXRJZlJldHVyblN0YXRlbWVudCBtZW1iZXIgdmFyaWFi
bGUuCi0gICAgICAgICAgICAgICAgICAgIGRpdm90U3RhcnQgPSBkaXZvdEVuZCA9IG1fb3duZXJF
eGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgZGl2b3RTdGFydCA9IGRpdm90RW5kID0gb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5n
U3RhcnRPZmZzZXQoKTsKICAgICAgICAgICAgICAgICAgICAgc2hvdWxkQW5hbHl6ZSA9IHRydWU7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjExNiwxMiAr
MjExNiwxMiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbgogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBzdGQ6OnBhaXI8VHlwZUxvY2F0aW9uKiwgYm9vbD4gbG9jYXRpb25QYWlyID0gdm0o
KS0+dHlwZVByb2ZpbGVyKCktPnR5cGVMb2NhdGlvbkNhY2hlKCktPmdldFR5cGVMb2NhdGlvbihn
bG9iYWxWYXJpYWJsZUlELAotICAgICAgICAgICAgICAgIG1fb3duZXJFeGVjdXRhYmxlLT5zb3Vy
Y2VJRCgpLCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCwgZ2xvYmFsVHlwZVNldCwgdm0oKSk7CisgICAg
ICAgICAgICAgICAgb3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBkaXZvdFN0YXJ0LCBkaXZv
dEVuZCwgZ2xvYmFsVHlwZVNldCwgdm0oKSk7CiAgICAgICAgICAgICBUeXBlTG9jYXRpb24qIGxv
Y2F0aW9uID0gbG9jYXRpb25QYWlyLmZpcnN0OwogICAgICAgICAgICAgYm9vbCBpc05ld0xvY2F0
aW9uID0gbG9jYXRpb25QYWlyLnNlY29uZDsKIAogICAgICAgICAgICAgaWYgKGZsYWcgPT0gUHJv
ZmlsZVR5cGVCeXRlY29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50KQotICAgICAgICAgICAgICAg
IGxvY2F0aW9uLT5tX2Rpdm90Rm9yRnVuY3Rpb25PZmZzZXRJZlJldHVyblN0YXRlbWVudCA9IG1f
b3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKTsKKyAgICAgICAgICAg
ICAgICBsb2NhdGlvbi0+bV9kaXZvdEZvckZ1bmN0aW9uT2Zmc2V0SWZSZXR1cm5TdGF0ZW1lbnQg
PSBvd25lckV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpOwogCiAgICAgICAg
ICAgICBpZiAoc2hvdWxkQW5hbHl6ZSAmJiBpc05ld0xvY2F0aW9uKQogICAgICAgICAgICAgICAg
IHZtKCktPnR5cGVQcm9maWxlcigpLT5pbnNlcnROZXdMb2NhdGlvbihsb2NhdGlvbik7CkBAIC0y
MTY1LDYgKzIxNjUsMzkgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSog
b3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW4KICAgICBtX2hlYXAtPnJl
cG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVvZihDb2RlQmxvY2spICsgbV9pbnN0cnVjdGlv
bnMuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSk7CiB9CiAKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCitDb2RlQmxvY2s6OkNvZGVCbG9jayhXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVy
RXhlY3V0YWJsZSwgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIDog
bV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIGdsb2Jh
bE9iamVjdCkKKyAgICAsIG1faGVhcCgmbV9nbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkKKyAgICAs
IG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKDApCisgICAgLCBtX251bVZhcnMoMCkKKyAgICAsIG1faXND
b25zdHJ1Y3RvcihmYWxzZSkKKyAgICAsIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKGZhbHNlKQor
ICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCisgICAgLCBtX2hhc0JlZW5Db21w
aWxlZFdpdGhGVEwoZmFsc2UpCisgICAgLCBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50KGZhbHNlKQor
ICAgICwgbV9zdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRGlzYWJsZWQpCisgICAgLCBtX251bUJy
ZWFrcG9pbnRzKDApCisgICAgLCBtX293bmVyRXhlY3V0YWJsZShtX2dsb2JhbE9iamVjdC0+dm0o
KSwgb3duZXJFeGVjdXRhYmxlLCBvd25lckV4ZWN1dGFibGUpCisgICAgLCBtX3ZtKCZ2bSkKKyAg
ICAsIG1faXNTdHJpY3RNb2RlKGZhbHNlKQorICAgICwgbV9uZWVkc0FjdGl2YXRpb24oZmFsc2Up
CisgICAgLCBtX21heUJlRXhlY3V0aW5nKGZhbHNlKQorICAgICwgbV9jb2RlVHlwZShGdW5jdGlv
bkNvZGUpCisgICAgLCBtX29zckV4aXRDb3VudGVyKDApCisgICAgLCBtX29wdGltaXphdGlvbkRl
bGF5Q291bnRlcigwKQorICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigwKQorI2lm
IEVOQUJMRShKSVQpCisgICAgLCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlKERGRzo6Q2Fubm90Q29t
cGlsZSkKKyNlbmRpZgoreworICAgIEFTU0VSVChtX2hlYXAtPmlzRGVmZXJyZWQoKSk7CisKKyAg
ICBtX2hlYXAtPm1fY29kZUJsb2Nrcy5hZGQodGhpcyk7CisgICAgbV9oZWFwLT5yZXBvcnRFeHRy
YU1lbW9yeUFsbG9jYXRlZChzaXplb2YoQ29kZUJsb2NrKSk7Cit9CisjZW5kaWYKKwogQ29kZUJs
b2NrOjp+Q29kZUJsb2NrKCkKIHsKICAgICBpZiAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
KQpAQCAtMjUxMCw3ICsyNTQzLDExIEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdFdlYWtSZWZlcmVu
Y2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25k
aXRpb25hbGx5KCkKIHsKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX3ZtLT5pbnRl
cnByZXRlcjsKLSAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkp
IHsKKyAgICBib29sIG93bmVkQnlXZWJBc3NlbWJseUV4ZWN1dGFibGUgPSBmYWxzZTsKKyNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCisgICAgb3duZWRCeVdlYkFzc2VtYmx5RXhlY3V0YWJsZSA9IG1f
b3duZXJFeGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpOworI2VuZGlmCisgICAg
aWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkpICYmICFvd25lZEJ5V2Vi
QXNzZW1ibHlFeGVjdXRhYmxlKSB7CiAgICAgICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHBy
b3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGUtPnByb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25zKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IHNpemUgPSBwcm9wZXJ0eUFjY2Vz
c0luc3RydWN0aW9ucy5zaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgICAg
ICBJbnN0cnVjdGlvbiogY3VySW5zdHJ1Y3Rpb24gPSAmaW5zdHJ1Y3Rpb25zKClbcHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbnNbaV1dOwpAQCAtMjkxNSw3ICsyOTUyLDcgQEAgSGFuZGxlckluZm8q
IENvZGVCbG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0LCBSZXF1aXIKIHVuc2lnbmVkIENvZGVCbG9jazo6bGluZU51bWJlckZvckJ5dGVjb2RlT2Zm
c2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQogewogICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVj
b2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLSAgICByZXR1cm4gbV9vd25lckV4
ZWN1dGFibGUtPmZpcnN0TGluZSgpICsgbV91bmxpbmtlZENvZGUtPmxpbmVOdW1iZXJGb3JCeXRl
Y29kZU9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAgcmV0dXJuIG93bmVyU2NyaXB0RXhlY3V0
YWJsZSgpLT5maXJzdExpbmUoKSArIG1fdW5saW5rZWRDb2RlLT5saW5lTnVtYmVyRm9yQnl0ZWNv
ZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOwogfQogCiB1bnNpZ25lZCBDb2RlQmxvY2s6OmNvbHVt
bk51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQpAQCAtMjkz
NCw3ICsyOTcxLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2Rl
T2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGQKICAgICBtX3VubGlua2VkQ29k
ZS0+ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIGRpdm90
LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBjb2x1bW4pOwogICAgIGRpdm90ICs9IG1f
c291cmNlT2Zmc2V0OwogICAgIGNvbHVtbiArPSBsaW5lID8gMSA6IGZpcnN0TGluZUNvbHVtbk9m
ZnNldCgpOwotICAgIGxpbmUgKz0gbV9vd25lckV4ZWN1dGFibGUtPmZpcnN0TGluZSgpOworICAg
IGxpbmUgKz0gb3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPmZpcnN0TGluZSgpOwogfQogCiBib29s
IENvZGVCbG9jazo6aGFzT3BEZWJ1Z0ZvckxpbmVBbmRDb2x1bW4odW5zaWduZWQgbGluZSwgdW5z
aWduZWQgY29sdW1uKQpAQCAtMzAxMSwxMiArMzA0OCwxMiBAQCB2b2lkIENvZGVCbG9jazo6bGlu
a0luY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBMTEludENhbGxMaW5rSW5mbyog
aW5jbwogCiB2b2lkIENvZGVCbG9jazo6aW5zdGFsbCgpCiB7Ci0gICAgb3duZXJFeGVjdXRhYmxl
KCktPmluc3RhbGxDb2RlKHRoaXMpOworICAgIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5pbnN0
YWxsQ29kZSh0aGlzKTsKIH0KIAogUGFzc1JlZlB0cjxDb2RlQmxvY2s+IENvZGVCbG9jazo6bmV3
UmVwbGFjZW1lbnQoKQogewotICAgIHJldHVybiBvd25lckV4ZWN1dGFibGUoKS0+bmV3UmVwbGFj
ZW1lbnRDb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKCkpOworICAgIHJldHVybiBvd25l
clNjcmlwdEV4ZWN1dGFibGUoKS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3Ioc3BlY2lhbGl6
YXRpb25LaW5kKCkpOwogfQogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTMwNTEsNiArMzA4OCwxOCBA
QCBERkc6OkNhcGFiaWxpdHlMZXZlbCBGdW5jdGlvbkNvZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVs
SW50ZXJuYWwoKQogICAgICAgICByZXR1cm4gREZHOjpmdW5jdGlvbkZvckNvbnN0cnVjdENhcGFi
aWxpdHlMZXZlbCh0aGlzKTsKICAgICByZXR1cm4gREZHOjpmdW5jdGlvbkZvckNhbGxDYXBhYmls
aXR5TGV2ZWwodGhpcyk7CiB9CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitDb2RlQmxvY2sq
IFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpyZXBsYWNlbWVudCgpCit7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK0RGRzo6Q2FwYWJpbGl0eUxldmVsIFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpjYXBh
YmlsaXR5TGV2ZWxJbnRlcm5hbCgpCit7CisgICAgcmV0dXJuIERGRzo6Q2Fubm90Q29tcGlsZTsK
K30KKyNlbmRpZgogI2VuZGlmCiAKIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6
SmV0dGlzb25SZWFzb24gcmVhc29uLCBSZW9wdGltaXphdGlvbk1vZGUgbW9kZSwgY29uc3QgRmly
ZURldGFpbCogZGV0YWlsKQpAQCAtMzYwMyw2ICszNjUyLDEwIEBAIHZvaWQgQ29kZUJsb2NrOjp1
cGRhdGVBbGxBcnJheVByZWRpY3Rpb25zKCkKIAogdm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFBy
ZWRpY3Rpb25zKCkKIHsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgaWYgKG1fb3duZXJF
eGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKQorICAgICAgICByZXR1cm47Cisj
ZW5kaWYKICAgICB1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9ucygpOwogICAgIHVwZGF0
ZUFsbEFycmF5UHJlZGljdGlvbnMoKTsKIH0KQEAgLTM5MjAsNyArMzk3Myw3IEBAIHZvaWQgQ29k
ZUJsb2NrOjppbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmllc0ZvckNvbnRyb2xGbG93UHJvZmlsZXIo
VmVjdG9yPEluc3RydWN0CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLT5pbnRlcnBy
ZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zW2VuZElkeF0udS5vcGNvZGUpID09IG9wX3By
b2ZpbGVfY29udHJvbF9mbG93KTsKICAgICAgICAgICAgIGJhc2ljQmxvY2tFbmRPZmZzZXQgPSBp
bnN0cnVjdGlvbnNbZW5kSWR4ICsgMV0udS5vcGVyYW5kIC0gMTsKICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGJhc2ljQmxvY2tFbmRPZmZzZXQgPSBtX3NvdXJjZU9mZnNldCArIG1fb3du
ZXJFeGVjdXRhYmxlLT5zb3VyY2UoKS5sZW5ndGgoKSAtIDE7IC8vIE9mZnNldCBiZWZvcmUgdGhl
IGNsb3NpbmcgYnJhY2UuCisgICAgICAgICAgICBiYXNpY0Jsb2NrRW5kT2Zmc2V0ID0gbV9zb3Vy
Y2VPZmZzZXQgKyBvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+c291cmNlKCkubGVuZ3RoKCkgLSAx
OyAvLyBPZmZzZXQgYmVmb3JlIHRoZSBjbG9zaW5nIGJyYWNlLgogICAgICAgICAgICAgYmFzaWNC
bG9ja1N0YXJ0T2Zmc2V0ID0gc3RkOjptaW4oYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0LCBiYXNpY0Js
b2NrRW5kT2Zmc2V0KTsgLy8gU29tZSBzdGFydCBvZmZzZXRzIG1heSBiZSBhdCB0aGUgY2xvc2lu
ZyBicmFjZSwgZW5zdXJlIGl0IGlzIHRoZSBvZmZzZXQgYmVmb3JlLgogICAgICAgICB9CiAKQEAg
LTM5NDgsNyArNDAwMSw3IEBAIHZvaWQgQ29kZUJsb2NrOjppbnNlcnRCYXNpY0Jsb2NrQm91bmRh
cmllc0ZvckNvbnRyb2xGbG93UHJvZmlsZXIoVmVjdG9yPEluc3RydWN0CiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIEJhc2ljQmxvY2tMb2NhdGlvbiogYmFzaWNC
bG9ja0xvY2F0aW9uID0gdm0oKS0+Y29udHJvbEZsb3dQcm9maWxlcigpLT5nZXRCYXNpY0Jsb2Nr
TG9jYXRpb24obV9vd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIGJhc2ljQmxvY2tTdGFydE9m
ZnNldCwgYmFzaWNCbG9ja0VuZE9mZnNldCk7CisgICAgICAgIEJhc2ljQmxvY2tMb2NhdGlvbiog
YmFzaWNCbG9ja0xvY2F0aW9uID0gdm0oKS0+Y29udHJvbEZsb3dQcm9maWxlcigpLT5nZXRCYXNp
Y0Jsb2NrTG9jYXRpb24ob3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPnNvdXJjZUlEKCksIGJhc2lj
QmxvY2tTdGFydE9mZnNldCwgYmFzaWNCbG9ja0VuZE9mZnNldCk7CiAKICAgICAgICAgLy8gRmlu
ZCBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIGVuY2xvc2VkIHdpdGhpbiB0aGUgcmFuZ2U6IFtiYXNp
Y0Jsb2NrU3RhcnRPZmZzZXQsIGJhc2ljQmxvY2tFbmRPZmZzZXRdCiAgICAgICAgIC8vIGFuZCBp
bnNlcnQgdGhlc2UgZnVuY3Rpb25zJyBzdGFydC9lbmQgb2Zmc2V0cyBhcyBnYXBzIGluIHRoZSBj
dXJyZW50IEJhc2ljQmxvY2tMb2NhdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAppbmRleCA5NDk5NDA1NjQzYWE5MTNkYzc4ZTc5OWFhMGNjNTY3MmViMzZl
ZjNjLi5jYjllYmQ2MWI1ZGRmZTBjYjNmNjdmMzEwZGY4ODE3N2RkNjM1NDliIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC05Niw2ICs5Niw5IEBAIHBy
b3RlY3RlZDoKICAgICBDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90
aGVyKTsKICAgICAgICAgCiAgICAgQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhl
Y3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqLCBKU1Njb3BlKiwgUGFzc1JlZlB0cjxTb3VyY2VQ
cm92aWRlcj4sIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1u
T2Zmc2V0KTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgQ29kZUJsb2NrKFdlYkFzc2Vt
Ymx5RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBWTSYsIEpTR2xvYmFsT2JqZWN0Kik7Cisj
ZW5kaWYKIAogICAgIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7
CiAgICAgSGVhcCogbV9oZWFwOwpAQCAtMzAzLDcgKzMwNiw4IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgamV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uUmVhc29uLCBSZW9wdGltaXphdGlvbk1vZGUg
PSBEb250Q291bnRSZW9wdGltaXphdGlvbiwgY29uc3QgRmlyZURldGFpbCogPSBudWxscHRyKTsK
ICAgICAKLSAgICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUoKSBjb25zdCB7IHJl
dHVybiBtX293bmVyRXhlY3V0YWJsZS5nZXQoKTsgfQorICAgIEV4ZWN1dGFibGVCYXNlKiBvd25l
ckV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBtX293bmVyRXhlY3V0YWJsZS5nZXQoKTsgfQor
ICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0
dXJuIGpzQ2FzdDxTY3JpcHRFeGVjdXRhYmxlKj4obV9vd25lckV4ZWN1dGFibGUuZ2V0KCkpOyB9
CiAKICAgICB2b2lkIHNldFZNKFZNKiB2bSkgeyBtX3ZtID0gdm07IH0KICAgICBWTSogdm0oKSB7
IHJldHVybiBtX3ZtOyB9CkBAIC0zNDYsNyArMzUwLDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIG1fbmVlZHNBY3RpdmF0aW9uOwogICAgIH0KICAgICAKLSAgICBDb2RlVHlwZSBjb2RlVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb2RlVHlwZSgpOyB9CisgICAgQ29k
ZVR5cGUgY29kZVR5cGUoKSBjb25zdAorICAgIHsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisg
ICAgICAgIGlmIChtX293bmVyRXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKSkK
KyAgICAgICAgICAgIHJldHVybiBGdW5jdGlvbkNvZGU7CisjZW5kaWYKKyAgICAgICAgcmV0dXJu
IG1fdW5saW5rZWRDb2RlLT5jb2RlVHlwZSgpOworICAgIH0KKwogICAgIFB1dFByb3BlcnR5U2xv
dDo6Q29udGV4dCBwdXRCeUlkQ29udGV4dCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoY29k
ZVR5cGUoKSA9PSBFdmFsQ29kZSkKQEAgLTk4Myw3ICs5OTUsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgdW5zaWduZWQgbV9udW1CcmVha3BvaW50cyA6IDMwOwogICAgICAgICB9OwogICAgIH07
Ci0gICAgV3JpdGVCYXJyaWVyPFNjcmlwdEV4ZWN1dGFibGU+IG1fb3duZXJFeGVjdXRhYmxlOwor
ICAgIFdyaXRlQmFycmllcjxFeGVjdXRhYmxlQmFzZT4gbV9vd25lckV4ZWN1dGFibGU7CiAgICAg
Vk0qIG1fdm07CiAKICAgICBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rp
b25zOwpAQCAtMTEzNCw2ICsxMTQ2LDI3IEBAIHByb3RlY3RlZDoKICNlbmRpZgogfTsKIAorI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKK2NsYXNzIFdlYkFzc2VtYmx5Q29kZUJsb2NrIDogcHVibGlj
IENvZGVCbG9jayB7CitwdWJsaWM6CisgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2soQ29weVBhcnNl
ZEJsb2NrVGFnLCBXZWJBc3NlbWJseUNvZGVCbG9jayYgb3RoZXIpCisgICAgICAgIDogQ29kZUJs
b2NrKENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCisgICAgeworICAgIH0KKworICAgIFdlYkFzc2Vt
Ymx5Q29kZUJsb2NrKFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgICAgIDogQ29kZUJsb2NrKG93
bmVyRXhlY3V0YWJsZSwgdm0sIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgfQorCisjaWYgRU5B
QkxFKEpJVCkKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQo
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlM
ZXZlbEludGVybmFsKCkgb3ZlcnJpZGU7CisjZW5kaWYKK307CisjZW5kaWYKKwogaW5saW5lIFJl
Z2lzdGVyJiBFeGVjU3RhdGU6OnIoaW50IGluZGV4KQogewogICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gdGhpcy0+Y29kZUJsb2NrKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGVidWdnZXIvRGVidWdnZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2Vy
L0RlYnVnZ2VyLmNwcAppbmRleCAzNTM4MzcyNzMwMzYwYzkzMGExZTZmN2Y2ODdlNWE5MzQwZGIx
YjQwLi5jNmYxNGE5NDE1ODBiYjRiZmM1MzU3OWFiNTM4NjA1OGYzOWNiODIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKQEAgLTIyNyw3ICsyMjcsNyBA
QCB2b2lkIERlYnVnZ2VyOjpyZWdpc3RlckNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykK
IAogdm9pZCBEZWJ1Z2dlcjo6dG9nZ2xlQnJlYWtwb2ludChDb2RlQmxvY2sqIGNvZGVCbG9jaywg
QnJlYWtwb2ludCYgYnJlYWtwb2ludCwgQnJlYWtwb2ludFN0YXRlIGVuYWJsZWRPck5vdCkKIHsK
LSAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKTsKKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gY29kZUJsb2NrLT5v
d25lclNjcmlwdEV4ZWN1dGFibGUoKTsKIAogICAgIFNvdXJjZUlEIHNvdXJjZUlEID0gc3RhdGlj
X2Nhc3Q8U291cmNlSUQ+KGV4ZWN1dGFibGUtPnNvdXJjZUlEKCkpOwogICAgIGlmIChicmVha3Bv
aW50LnNvdXJjZUlEICE9IHNvdXJjZUlEKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKaW5kZXggYmYwOTNlODliNDRiYWYzNTU2
MTE1MTE3NDYyNzdhMTAxYzdhNzI2Yi4uZDM4M2MzZmZkMDgyMGY4YTJiNzFlODdjNDU1MmRmNzdk
MDY1NGY3YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVn
Z2VyQ2FsbEZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXJDYWxsRnJhbWUuY3BwCkBAIC0yNDIsNyArMjQyLDcgQEAgU291cmNlSUQgRGVidWdnZXJD
YWxsRnJhbWU6OnNvdXJjZUlERm9yQ2FsbEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBpZiAo
IWNvZGVCbG9jaykKICAgICAgICAgcmV0dXJuIG5vU291cmNlSUQ7Ci0gICAgcmV0dXJuIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZUlEKCk7CisgICAgcmV0dXJuIGNvZGVCbG9j
ay0+b3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPnNvdXJjZUlEKCk7CiB9CiAKIEpTVmFsdWUgRGVi
dWdnZXJDYWxsRnJhbWU6OnRoaXNWYWx1ZUZvckNhbGxGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
aW5kZXggMGExNjI0ZTczMTE3NjRmMzc3MDZkYmI0MTlmNjNlZWI3NjJiYmI0Ny4uN2Y2NTA1MmRh
OGYyZjFmOTc0MzRjOGNiN2E2YTIwZmM0MjI2ZTUwNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTkzOSw3ICs5MzksNyBAQCBwcml2
YXRlOgogICAgICAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKICAgICAgICAgSW5saW5l
Q2FsbEZyYW1lKiBtX2lubGluZUNhbGxGcmFtZTsKICAgICAgICAgCi0gICAgICAgIFNjcmlwdEV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCk7IH0KKyAgICAgICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZSgpIHsgcmV0dXJu
IG1fY29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKTsgfQogICAgICAgICAKICAgICAg
ICAgUXVlcnlhYmxlRXhpdFByb2ZpbGUgbV9leGl0UHJvZmlsZTsKICAgICAgICAgCkBAIC0xMjUy
LDggKzEyNTIsOCBAQCB1bnNpZ25lZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5pbmdDb3N0KENhbGxW
YXJpYW50IGNhbGxlZSwgaW50IGFyZ3VtZW50Q291bnRJbmNsdQogICAgICAgICBkYXRhTG9nKCIg
ICAgTWlnaHQgaW5saW5lIGZ1bmN0aW9uOiAiLCBtaWdodElubGluZUZ1bmN0aW9uRm9yKGNvZGVC
bG9jaywga2luZCksICJcbiIpOwogICAgICAgICBkYXRhTG9nKCIgICAgTWlnaHQgY29tcGlsZSBm
dW5jdGlvbjogIiwgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3IoY29kZUJsb2NrLCBraW5kKSwgIlxu
Iik7CiAgICAgICAgIGRhdGFMb2coIiAgICBJcyBzdXBwb3J0ZWQgZm9yIGlubGluaW5nOiAiLCBp
c1N1cHBvcnRlZEZvcklubGluaW5nKGNvZGVCbG9jayksICJcbiIpOwotICAgICAgICBkYXRhTG9n
KCIgICAgTmVlZHMgYWN0aXZhdGlvbjogIiwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+
bmVlZHNBY3RpdmF0aW9uKCksICJcbiIpOwotICAgICAgICBkYXRhTG9nKCIgICAgSXMgaW5saW5p
bmcgY2FuZGlkYXRlOiAiLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pc0lubGluaW5n
Q2FuZGlkYXRlKCksICJcbiIpOworICAgICAgICBkYXRhTG9nKCIgICAgTmVlZHMgYWN0aXZhdGlv
bjogIiwgY29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+bmVlZHNBY3RpdmF0aW9u
KCksICJcbiIpOworICAgICAgICBkYXRhTG9nKCIgICAgSXMgaW5saW5pbmcgY2FuZGlkYXRlOiAi
LCBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5pc0lubGluaW5nQ2FuZGlkYXRl
KCksICJcbiIpOwogICAgIH0KICAgICBpZiAoIWNhbklubGluZShjYXBhYmlsaXR5TGV2ZWwpKSB7
CiAgICAgICAgIGlmICh2ZXJib3NlKQpAQCAtNDQzNiw3ICs0NDM2LDcgQEAgQnl0ZUNvZGVQYXJz
ZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkoCiAgICAgICAgIGJ5dGVDb2Rl
UGFyc2VyLT5tX2dyYXBoLmZyZWV6ZShjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKTsKICAg
ICAgICAgLy8gVGhlIG93bmVyIGlzIHRoZSBtYWNoaW5lIGNvZGUgYmxvY2ssIGFuZCB3ZSBhbHJl
YWR5IGhhdmUgYSBiYXJyaWVyIG9uIHRoYXQgd2hlbiB0aGUKICAgICAgICAgLy8gcGxhbiBmaW5p
c2hlcy4KLSAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuc2V0V2l0aG91dFdy
aXRlQmFycmllcihjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKTsKKyAgICAgICAgbV9pbmxp
bmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuc2V0V2l0aG91dFdyaXRlQmFycmllcihjb2RlQmxvY2st
Pm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpKTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPnNl
dFN0YWNrT2Zmc2V0KGlubGluZUNhbGxGcmFtZVN0YXJ0Lm9mZnNldCgpIC0gSlNTdGFjazo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZSk7CiAgICAgICAgIGlmIChjYWxsZWUpIHsKICAgICAgICAgICAgIG1f
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50
KGNhbGxlZSk7CkBAIC00NTI5LDcgKzQ1MjksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUNvZGVCbG9jaygpCiAgICAgICAgIH0KICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICI6
IG5lZWRzQWN0aXZhdGlvbiA9ICIsIGNvZGVCbG9jay0+bmVlZHNBY3RpdmF0aW9uKCksCi0gICAg
ICAgICAgICAiLCBpc1N0cmljdE1vZGUgPSAiLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LT5pc1N0cmljdE1vZGUoKSwgIlxuIik7CisgICAgICAgICAgICAiLCBpc1N0cmljdE1vZGUgPSAi
LCBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSwgIlxu
Iik7CiAgICAgICAgIGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCktPmR1bXBCeXRlY29kZSgp
OwogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0
aWVzLmNwcAppbmRleCA5MDQ0YTA3OWQ0ZjQ3NTEwZGY4MDAzODJmYWE0NmQ0MDJmMGY1YjJjLi5i
ZTYyYjlmMTViNjgxOTU3YjA3Y2FjNWE0Y2Q0NTZlNWQ1Mjc2MGQ0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCkBAIC00NCwzMiArNDQsMzYgQEAg
Ym9vbCBpc1N1cHBvcnRlZCgpCiAKIGJvb2wgaXNTdXBwb3J0ZWRGb3JJbmxpbmluZyhDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKIHsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KS0+aXNJbmxpbmluZ0NhbmRpZGF0ZSgpOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBp
ZiAoY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisgICAgcmV0dXJuIGNvZGVCbG9jay0+
b3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPmlzSW5saW5pbmdDYW5kaWRhdGUoKTsKIH0KIAogYm9v
bCBtaWdodENvbXBpbGVFdmFsKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIHJldHVybiBp
c1N1cHBvcnRlZCgpCiAgICAgICAgICYmIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9
IE9wdGlvbnM6Om1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCkK
LSAgICAgICAgJiYgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aXNPa1RvT3B0aW1pemUo
KTsKKyAgICAgICAgJiYgY29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+aXNPa1Rv
T3B0aW1pemUoKTsKIH0KIGJvb2wgbWlnaHRDb21waWxlUHJvZ3JhbShDb2RlQmxvY2sqIGNvZGVC
bG9jaykKIHsKICAgICByZXR1cm4gaXNTdXBwb3J0ZWQoKQogICAgICAgICAmJiBjb2RlQmxvY2st
Pmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25zOjptYXhpbXVtT3B0aW1pemF0aW9uQ2FuZGlk
YXRlSW5zdHJ1Y3Rpb25Db3VudCgpCi0gICAgICAgICYmIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCktPmlzT2tUb09wdGltaXplKCk7CisgICAgICAgICYmIGNvZGVCbG9jay0+b3duZXJTY3Jp
cHRFeGVjdXRhYmxlKCktPmlzT2tUb09wdGltaXplKCk7CiB9CiBib29sIG1pZ2h0Q29tcGlsZUZ1
bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICByZXR1cm4gaXNTdXBw
b3J0ZWQoKQogICAgICAgICAmJiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRp
b25zOjptYXhpbXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpCi0gICAg
ICAgICYmIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmlzT2tUb09wdGltaXplKCk7Cisg
ICAgICAgICYmIGNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPmlzT2tUb09wdGlt
aXplKCk7CiB9CiBib29sIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0KENvZGVCbG9j
ayogY29kZUJsb2NrKQogewogICAgIHJldHVybiBpc1N1cHBvcnRlZCgpCiAgICAgICAgICYmIGNv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1PcHRpbWl6YXRp
b25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCkKLSAgICAgICAgJiYgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKS0+aXNPa1RvT3B0aW1pemUoKTsKKyAgICAgICAgJiYgY29kZUJsb2NrLT5v
d25lclNjcmlwdEV4ZWN1dGFibGUoKS0+aXNPa1RvT3B0aW1pemUoKTsKIH0KIAogYm9vbCBtaWdo
dElubGluZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAppbmRleCA0ZGI0NzFiMWZkYTk1ZTgzZDk2OTk5OGJmNzYxY2Qy
MGY0NzNmOTE1Li40NjQ3NmQ0NzhiM2RmMTBkNzVkZmY0OWJhMzEwYzU5ZWE5ODdlMDQ3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCkBAIC0zNDUsNyArMzQ1LDcgQEAgcHVibGlj
OgogICAgIFNjcmlwdEV4ZWN1dGFibGUqIGV4ZWN1dGFibGVGb3IoSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUpCiAgICAgewogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKLSAg
ICAgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCk7CisgICAgICAg
ICAgICByZXR1cm4gbV9jb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOwogICAgICAg
ICAKICAgICAgICAgcmV0dXJuIGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKTsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCmluZGV4IDAyZGJl
NGZhNWRkMzQyNGVlZDNjNTEyZTg5YjYxNGFlZDJiODAyODAuLmQ4NTc2NWYwZjYwZjk1NDlhYzBm
MjI3NzAzOTMzYmI2N2I2NWNiN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuY3BwCkBAIC0xMTIsNyArMTEyLDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNT
dGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW4KICAg
ICBzYW5pdGl6ZVN0YWNrRm9yVk0odm0pOwogICAgIAogICAgIGlmIChieXRlY29kZUluZGV4KQot
ICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5zZXREaWRUcnlUb0VudGVySW5M
b29wKHRydWUpOworICAgICAgICBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5z
ZXREaWRUcnlUb0VudGVySW5Mb29wKHRydWUpOwogICAgIAogICAgIGlmIChjb2RlQmxvY2stPmpp
dFR5cGUoKSAhPSBKSVRDb2RlOjpERkdKSVQpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6RlRMSklUKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3Bw
CmluZGV4IGYzM2Q0MDVjYmFjZDY2MzFjYjI5NDZmMDVlZDliZjMzMWEyM2ZhNDkuLmZkNzEyNzRh
MzU2MTRiMmYwNzVmNTc1YWExNWIxOWIxYjI3ZmNiOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcApA
QCAtNjYsNiArNjYsMTAgQEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fcmVt
YWluaW5nQ2FwYWNpdHlGb3JGcmFtZUNhcHR1cmUpIHsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CisgICAgICAgICAgICBpZiAodmlzaXRvci0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgp
LT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBTdGFj
a1Zpc2l0b3I6OkNvbnRpbnVlOworI2VuZGlmCiAgICAgICAgICAgICB1bnNpZ25lZCBsaW5lOwog
ICAgICAgICAgICAgdW5zaWduZWQgY29sdW1uOwogICAgICAgICAgICAgdmlzaXRvci0+Y29tcHV0
ZUxpbmVBbmRDb2x1bW4obGluZSwgY29sdW1uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4IDEwNTAxYzFkMDE2YjE5ZWVlY2E0
ZDI4NWQyNjY1ZWNjYmFmODJiNGYuLjY2ZmE4ZWNmNTQwNjM1ODZjZDRhYWE4ZmI4NDk3YmM2MTUx
ZWIwMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcApAQCAtMTY4LDcgKzE2OCw3IEBAIEpTVmFsdWUgZXZhbChDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKICAgICAgICAgQVNTRVJUKCFjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uKCkpOwog
CiAgICAgICAgIFRoaXNURFpNb2RlIHRoaXNURFpNb2RlID0gY2FsbGVyQ29kZUJsb2NrLT51bmxp
bmtlZENvZGVCbG9jaygpLT5jb25zdHJ1Y3RvcktpbmQoKSA9PSBDb25zdHJ1Y3RvcktpbmQ6OkRl
cml2ZWQgPyBUaGlzVERaTW9kZTo6QWx3YXlzQ2hlY2sgOiBUaGlzVERaTW9kZTo6Q2hlY2tJZk5l
ZWRlZDsKLSAgICAgICAgZXZhbCA9IGNhbGxlckNvZGVCbG9jay0+ZXZhbENvZGVDYWNoZSgpLmdl
dFNsb3coY2FsbEZyYW1lLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxs
ZXJDb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpLCB0aGlzVERaTW9kZSwgcHJvZ3JhbVNvdXJjZSwg
Y2FsbGVyU2NvcGVDaGFpbik7CisgICAgICAgIGV2YWwgPSBjYWxsZXJDb2RlQmxvY2stPmV2YWxD
b2RlQ2FjaGUoKS5nZXRTbG93KGNhbGxGcmFtZSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lclNjcmlw
dEV4ZWN1dGFibGUoKSwgY2FsbGVyQ29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSwgdGhpc1REWk1v
ZGUsIHByb2dyYW1Tb3VyY2UsIGNhbGxlclNjb3BlQ2hhaW4pOwogICAgICAgICBpZiAoIWV2YWwp
CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CkBAIC01MTUsNiArNTE1
LDE2IEBAIFN0cmluZyBTdGFja0ZyYW1lOjp0b1N0cmluZyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
ICAgICByZXR1cm4gdHJhY2VCdWlsZC50b1N0cmluZygpLmltcGwoKTsKIH0KIAorc3RhdGljIGlu
bGluZSBib29sIGlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKEV4ZWN1dGFibGVCYXNlKiBleGVjdXRh
YmxlKQoreworI2lmICFFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgVU5VU0VEX1BBUkFNKGV4ZWN1
dGFibGUpOworICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCisgICAgcmV0dXJuIGV4ZWN1dGFibGUt
PmlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCk7CisjZW5kaWYKK30KKwogY2xhc3MgR2V0U3RhY2tU
cmFjZUZ1bmN0b3IgewogcHVibGljOgogICAgIEdldFN0YWNrVHJhY2VGdW5jdG9yKFZNJiB2bSwg
VmVjdG9yPFN0YWNrRnJhbWU+JiByZXN1bHRzLCBzaXplX3QgcmVtYWluaW5nQ2FwYWNpdHkpCkBA
IC01MjgsMTUgKzUzOCwxNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBWTSYgdm0gPSBtX3Zt
OwogICAgICAgICBpZiAobV9yZW1haW5pbmdDYXBhY2l0eUZvckZyYW1lQ2FwdHVyZSkgewotICAg
ICAgICAgICAgaWYgKHZpc2l0b3ItPmlzSlNGcmFtZSgpICYmICF2aXNpdG9yLT5jb2RlQmxvY2so
KS0+dW5saW5rZWRDb2RlQmxvY2soKS0+aXNCdWlsdGluRnVuY3Rpb24oKSkgeworICAgICAgICAg
ICAgaWYgKHZpc2l0b3ItPmlzSlNGcmFtZSgpCisgICAgICAgICAgICAgICAgJiYgIWlzV2ViQXNz
ZW1ibHlFeGVjdXRhYmxlKHZpc2l0b3ItPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSkK
KyAgICAgICAgICAgICAgICAmJiAhdmlzaXRvci0+Y29kZUJsb2NrKCktPnVubGlua2VkQ29kZUJs
b2NrKCktPmlzQnVpbHRpbkZ1bmN0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIFN0YWNr
RnJhbWUgcyA9IHsKICAgICAgICAgICAgICAgICAgICAgU3Ryb25nPEpTT2JqZWN0Pih2bSwgdmlz
aXRvci0+Y2FsbGVlKCkpLAogICAgICAgICAgICAgICAgICAgICBnZXRTdGFja0ZyYW1lQ29kZVR5
cGUodmlzaXRvciksCi0gICAgICAgICAgICAgICAgICAgIFN0cm9uZzxTY3JpcHRFeGVjdXRhYmxl
Pih2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSksCisgICAgICAgICAgICAgICAgICAg
IFN0cm9uZzxTY3JpcHRFeGVjdXRhYmxlPih2bSwgY29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1
dGFibGUoKSksCiAgICAgICAgICAgICAgICAgICAgIFN0cm9uZzxVbmxpbmtlZENvZGVCbG9jaz4o
dm0sIGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSksCiAgICAgICAgICAgICAgICAgICAg
IGNvZGVCbG9jay0+c291cmNlKCksCi0gICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCktPmZpcnN0TGluZSgpLAorICAgICAgICAgICAgICAgICAgICBjb2RlQmxv
Y2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5maXJzdExpbmUoKSwKICAgICAgICAgICAgICAg
ICAgICAgY29kZUJsb2NrLT5maXJzdExpbmVDb2x1bW5PZmZzZXQoKSwKICAgICAgICAgICAgICAg
ICAgICAgY29kZUJsb2NrLT5zb3VyY2VPZmZzZXQoKSwKICAgICAgICAgICAgICAgICAgICAgdmlz
aXRvci0+Ynl0ZWNvZGVPZmZzZXQoKSwKQEAgLTYyOSw3ICs2NDEsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fY29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJsb2NrKCk7CiAgICAgICAgIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0ID0gdmlzaXRvci0+Ynl0ZWNvZGVPZmZzZXQoKTsKIAotICAgICAgICBp
ZiAobV9pc1Rlcm1pbmF0aW9uIHx8ICEobV9oYW5kbGVyID0gbV9jb2RlQmxvY2sgPyBtX2NvZGVC
bG9jay0+aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSA6IG51bGxwdHIp
KSB7CisgICAgICAgIGlmIChtX2lzVGVybWluYXRpb24gfHwgIShtX2hhbmRsZXIgPSAobV9jb2Rl
QmxvY2sgJiYgIWlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKG1fY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSkpID8gbV9jb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29k
ZU9mZnNldCkgOiBudWxscHRyKSkgewogICAgICAgICAgICAgaWYgKCF1bndpbmRDYWxsRnJhbWUo
dmlzaXRvcikpIHsKICAgICAgICAgICAgICAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVy
ID0gdm0uZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVyLT5l
eGNlcHRpb25VbndpbmQobV9jYWxsRnJhbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAppbmRleCBkMzc2ZGI0MjE3ZmE2MWU2YzMy
ZWE5ZGEyN2E3NWJmYjAzMzBiM2I3Li4zZjJiOTE0MDQ1MWQ0ODgzNGE5ZjcxMDMzNDY0YTIxNDdk
MWJkYjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3Rh
Y2tWaXNpdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3Rh
Y2tWaXNpdG9yLmNwcApAQCAtMjIxLDcgKzIyMSw3IEBAIFN0cmluZyBTdGFja1Zpc2l0b3I6OkZy
YW1lOjpzb3VyY2VVUkwoKQogICAgIGNhc2UgQ29kZVR5cGU6OkV2YWw6CiAgICAgY2FzZSBDb2Rl
VHlwZTo6RnVuY3Rpb246CiAgICAgY2FzZSBDb2RlVHlwZTo6R2xvYmFsOiB7Ci0gICAgICAgIFN0
cmluZyBzb3VyY2VVUkwgPSBjb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZVVS
TCgpOworICAgICAgICBTdHJpbmcgc291cmNlVVJMID0gY29kZUJsb2NrKCktPm93bmVyU2NyaXB0
RXhlY3V0YWJsZSgpLT5zb3VyY2VVUkwoKTsKICAgICAgICAgaWYgKCFzb3VyY2VVUkwuaXNFbXB0
eSgpKQogICAgICAgICAgICAgdHJhY2VMaW5lID0gc291cmNlVVJMLmltcGwoKTsKICAgICAgICAg
YnJlYWs7CkBAIC0yOTIsMTEgKzI5MiwxMSBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6RnJhbWU6OmNv
bXB1dGVMaW5lQW5kQ29sdW1uKHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKQogICAg
IHVuc2lnbmVkIGRpdm90Q29sdW1uID0gMDsKICAgICByZXRyaWV2ZUV4cHJlc3Npb25JbmZvKGRp
dm90LCB1bnVzZWRTdGFydE9mZnNldCwgdW51c2VkRW5kT2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90
Q29sdW1uKTsKIAotICAgIGxpbmUgPSBkaXZvdExpbmUgKyBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLT5maXJzdExpbmUoKTsKKyAgICBsaW5lID0gZGl2b3RMaW5lICsgY29kZUJsb2NrLT5v
d25lclNjcmlwdEV4ZWN1dGFibGUoKS0+Zmlyc3RMaW5lKCk7CiAgICAgY29sdW1uID0gZGl2b3RD
b2x1bW4gKyAoZGl2b3RMaW5lID8gMSA6IGNvZGVCbG9jay0+Zmlyc3RMaW5lQ29sdW1uT2Zmc2V0
KCkpOwogCi0gICAgaWYgKGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmhhc092ZXJyaWRl
TGluZU51bWJlcigpKQotICAgICAgICBsaW5lID0gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KS0+b3ZlcnJpZGVMaW5lTnVtYmVyKCk7CisgICAgaWYgKGNvZGVCbG9jay0+b3duZXJTY3JpcHRF
eGVjdXRhYmxlKCktPmhhc092ZXJyaWRlTGluZU51bWJlcigpKQorICAgICAgICBsaW5lID0gY29k
ZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+b3ZlcnJpZGVMaW5lTnVtYmVyKCk7CiB9
CiAKIHZvaWQgU3RhY2tWaXNpdG9yOjpGcmFtZTo6cmV0cmlldmVFeHByZXNzaW9uSW5mbyhpbnQm
IGRpdm90LCBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCwgdW5zaWduZWQmIGxpbmUs
IHVuc2lnbmVkJiBjb2x1bW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcAppbmRleCBhMWY3NjU2MmJkNzBiN2ZlYWE2ZWJjOWRmMjE2OTJhMGVjODVlYzM1Li5j
YjdiYmY2MWM5MTk2MTYxMjRkYTYyZDFhYjk4Yzg1Zjc5MTFmMTUxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTg0OCw5ICs4NDgsMjIgQEAgY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUs
IENhbGxMaW5rSW5mbyogY2FsbEwKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRy
OwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gMDsKLSAgICBpZiAoZXhlY3V0YWJsZS0+aXNI
b3N0RnVuY3Rpb24oKSkKKyAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkgewog
ICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcigqdm0sIGtpbmQsIE11
c3RDaGVja0FyaXR5LCBjYWxsTGlua0luZm8tPnJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSgpKTsK
LSAgICBlbHNlIHsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgfSBlbHNlIGlmIChleGVj
dXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKSB7CisgICAgICAgIFdlYkFzc2VtYmx5
RXhlY3V0YWJsZSogd2ViQXNzZW1ibHlFeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8V2ViQXNzZW1i
bHlFeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CisgICAgICAgIHdlYkFzc2VtYmx5RXhlY3V0YWJs
ZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlKTsKKyAgICAgICAgY29kZUJsb2NrID0g
d2ViQXNzZW1ibHlFeGVjdXRhYmxlLT5jb2RlQmxvY2tGb3JDYWxsKCk7CisgICAgICAgIEFTU0VS
VChjb2RlQmxvY2spOworICAgICAgICBBcml0eUNoZWNrTW9kZSBhcml0eTsKKyAgICAgICAgaWYg
KGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxz
aXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkKKyAgICAgICAgICAgIGFyaXR5ID0g
TXVzdENoZWNrQXJpdHk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFyaXR5ID0gQXJpdHlD
aGVja05vdFJlcXVpcmVkOworICAgICAgICBjb2RlUHRyID0gd2ViQXNzZW1ibHlFeGVjdXRhYmxl
LT5lbnRyeXBvaW50Rm9yKCp2bSwga2luZCwgYXJpdHksIGNhbGxMaW5rSW5mby0+cmVnaXN0ZXJQ
cmVzZXJ2YXRpb25Nb2RlKCkpOworI2VuZGlmCisgICAgfSBlbHNlIHsKICAgICAgICAgRnVuY3Rp
b25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4
ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKIAogICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAmJiBm
dW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBDb25zdHJ1Y3RBYmlsaXR5
OjpDYW5ub3RDb25zdHJ1Y3QpIHsKQEAgLTg5NiwxNyArOTA5LDMzIEBAIGlubGluZSBjaGFyKiB2
aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKAogICAgIEpTU2NvcGUqIHNjb3BlID0gZnVuY3Rpb24tPnNj
b3BlVW5jaGVja2VkKCk7CiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBmdW5jdGlv
bi0+ZXhlY3V0YWJsZSgpOwogICAgIGlmIChVTkxJS0VMWSghZXhlY3V0YWJsZS0+aGFzSklUQ29k
ZUZvcihraW5kKSkpIHsKLSAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1
dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKKyAg
ICAgICAgYm9vbCBpc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSA9IGZhbHNlOworI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKKyAgICAgICAgaXNXZWJBc3NlbWJseUV4ZWN1dGFibGUgPSBleGVjdXRhYmxl
LT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpOworI2VuZGlmCisgICAgICAgIGlmICghaXNXZWJB
c3NlbWJseUV4ZWN1dGFibGUpIHsKKyAgICAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVu
Y3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0
YWJsZSk7CiAKLSAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxl
LT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0
KSB7Ci0gICAgICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5v
dEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMsIGZ1bmN0aW9uKSk7Ci0gICAgICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9t
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICghaXNDYWxsKGtpbmQpICYmIGZ1bmN0aW9uRXhlY3V0YWJs
ZS0+Y29uc3RydWN0QWJpbGl0eSgpID09IENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVj
dCkgeworICAgICAgICAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3Jl
YXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZXhlYywgZnVuY3Rpb24pKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmdldENUSVN0dWIodGhyb3dFeGNl
cHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25F
eGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWNDYWxsZWUsIGZ1bmN0aW9uLCBzY29w
ZSwga2luZCk7Ci0gICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgZXhlYy0+dm0oKS50
aHJvd0V4Y2VwdGlvbihleGVjLCBlcnJvcik7Ci0gICAgICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4odm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICBK
U09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24o
ZXhlY0NhbGxlZSwgZnVuY3Rpb24sIHNjb3BlLCBraW5kKTsKKyAgICAgICAgICAgIGlmIChlcnJv
cikgeworICAgICAgICAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXJy
b3IpOworICAgICAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih2bS0+
Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
KyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSkg
eworICAgICAgICAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRl
Tm90QUNvbnN0cnVjdG9yRXJyb3IoZXhlYywgZnVuY3Rpb24pKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRp
b25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogd2Vi
QXNzZW1ibHlFeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8V2ViQXNzZW1ibHlFeGVjdXRhYmxlKj4o
ZXhlY3V0YWJsZSk7CisgICAgICAgICAgICB3ZWJBc3NlbWJseUV4ZWN1dGFibGUtPnByZXBhcmVG
b3JFeGVjdXRpb24oZXhlY0NhbGxlZSk7CisjZW5kaWYKICAgICAgICAgfQogICAgIH0KICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcigK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCmluZGV4IDdjZjY3MDhhNGIzNmI2NTJm
ZDIyMGUwNzRjMGFjYjBmYTQ5YjU5MzQuLmFkNGZlNzI0MDRiZGY4MDU1YTY4ZWE2MTIwNWRkZWRh
YWU4ODlkNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcApAQCAtMTc0Miw4
ICsxNzQyLDEzIEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKICAgICAgICAgaWYgKHZhcmlh
bnQuZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlvbigpKQogICAgICAgICAgICAgY29kZUJsb2Nr
ID0gbnVsbHB0cjsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjb2RlQmxvY2sgPSBqc0Nh
c3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4odmFyaWFudC5leGVjdXRhYmxlKCkpLT5jb2RlQmxvY2tG
b3JDYWxsKCk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIEV4ZWN1dGFibGVCYXNlKiBleGVj
dXRhYmxlID0gdmFyaWFudC5leGVjdXRhYmxlKCk7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
ICAgICAgICAgICAgaWYgKGV4ZWN1dGFibGUtPmlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCkpCisg
ICAgICAgICAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PFdlYkFzc2VtYmx5RXhlY3V0YWJsZSo+
KGV4ZWN1dGFibGUpLT5jb2RlQmxvY2tGb3JDYWxsKCk7CisgICAgICAgICAgICBlbHNlCisjZW5k
aWYKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2sgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxl
Kj4oZXhlY3V0YWJsZSktPmNvZGVCbG9ja0ZvckNhbGwoKTsKICAgICAgICAgICAgIC8vIElmIHdl
IGNhbm5vdCBoYW5kbGUgYSBjYWxsZWUsIGFzc3VtZSB0aGF0IGl0J3MgYmV0dGVyIGZvciB0aGlz
IHdob2xlIHRoaW5nIHRvIGJlIGEKICAgICAgICAgICAgIC8vIHZpcnR1YWwgY2FsbC4KICAgICAg
ICAgICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nh
c3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZvLmNh
bGxUeXBlKCkgPT0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJncyB8fCBjYWxsTGlua0luZm8uY2Fs
bFR5cGUoKSA9PSBDYWxsTGlua0luZm86OkNvbnN0cnVjdFZhcmFyZ3MpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKaW5kZXggZTkyNmY1MmRjNzZkOWVkZTJmMGUz
YTViM2RjMjZiMzM2YTkyZjg1ZC4uNzMxM2ZjZTI0MjAwY2M5MTYxNjllODE0YTBhMDU5MzBhYWJh
YTUzZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKQEAgLTEz
Miw4ICsxMzIsOCBAQCB2b2lkIERhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKFZNJiB2bSkKICAgICBB
U1NFUlQobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwgPT0gNjQpOwogI2VuZGlmCiAgICAg
QVNTRVJUKFN0cmluZ1R5cGUgPT0gNik7Ci0gICAgQVNTRVJUKE9iamVjdFR5cGUgPT0gMTgpOwot
ICAgIEFTU0VSVChGaW5hbE9iamVjdFR5cGUgPT0gMTkpOworICAgIEFTU0VSVChPYmplY3RUeXBl
ID09IDE5KTsKKyAgICBBU1NFUlQoRmluYWxPYmplY3RUeXBlID09IDIwKTsKICAgICBBU1NFUlQo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9PSAxKTsKICAgICBBU1NFUlQoSW1wbGVtZW50c0hhc0lu
c3RhbmNlID09IDIpOwogICAgIEFTU0VSVChJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlID09
IDgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAK
aW5kZXggMmEyNDg4M2MyOTgzNTRlNGRhMGQ2NjBkMDNlYzNhYTYzOGNjNDFmMy4uMjdjYmNjNWQ5
OTI4YjYzNDQxYTRkMDdkYjU3MDUwZTBmOGRhNDBiNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCkBAIC0xMTE2LDkgKzExMTYsMTQgQEAgaW5s
aW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBJ
bnN0cnVjdGlvbiogcGMsIENvZGUKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRy
OwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gMDsKLSAgICBpZiAoZXhlY3V0YWJsZS0+aXNI
b3N0RnVuY3Rpb24oKSkKKyAgICBib29sIGlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlID0gZmFsc2U7
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlID0g
ZXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKTsKKyNlbmRpZgorCisgICAgaWYg
KGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpIHsKICAgICAgICAgY29kZVB0ciA9IGV4ZWN1
dGFibGUtPmVudHJ5cG9pbnRGb3Iodm0sIGtpbmQsIE11c3RDaGVja0FyaXR5LCBSZWdpc3RlclBy
ZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKLSAgICBlbHNlIHsKKyAgICB9IGVsc2UgaWYgKCFpc1dl
YkFzc2VtYmx5RXhlY3V0YWJsZSkgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0
aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFi
bGUpOwogCiAgICAgICAgIGlmICghaXNDYWxsKGtpbmQpICYmIGZ1bmN0aW9uRXhlY3V0YWJsZS0+
Y29uc3RydWN0QWJpbGl0eSgpID09IENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdCkK
QEAgLTExMzUsNiArMTE0MCwxOSBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2Fs
bChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEluc3RydWN0aW9uKiBwYywgQ29kZQogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBhcml0eSA9IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDsKICAgICAgICAg
Y29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcih2bSwga2luZCwgYXJp
dHksIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOworICAgIH0gZWxzZSB7CisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAgICBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIHdlYkFz
c2VtYmx5RXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PFdlYkFzc2VtYmx5RXhlY3V0YWJsZSo+KGV4
ZWN1dGFibGUpOworICAgICAgICB3ZWJBc3NlbWJseUV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVj
dXRpb24oZXhlY0NhbGxlZSk7CisgICAgICAgIGNvZGVCbG9jayA9IHdlYkFzc2VtYmx5RXhlY3V0
YWJsZS0+Y29kZUJsb2NrRm9yQ2FsbCgpOworICAgICAgICBBU1NFUlQoY29kZUJsb2NrKTsKKyAg
ICAgICAgQXJpdHlDaGVja01vZGUgYXJpdHk7CisgICAgICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSkpCisgICAgICAgICAgICBhcml0eSA9IE11c3RDaGVja0FyaXR5Owor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBhcml0eSA9IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDsK
KyAgICAgICAgY29kZVB0ciA9IHdlYkFzc2VtYmx5RXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcih2
bSwga2luZCwgYXJpdHksIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOworI2VuZGlm
CiAgICAgfQogICAgIAogICAgIEFTU0VSVCghIWNvZGVQdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCmluZGV4IDVhZDgzNDY1
Y2QxYTRlOGY0ZTk2NGE2N2VkMDhhMTU3ZTdmYTM3NWEuLjEzNmM5MTY2MWYyMmQyZDgwOTNjMTk4
YzljNWJkNjY0NDM4ZjU0OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KQEAgLTE2MSw4ICsxNjEsOCBAQCBjb25zdCBTbG93
UHV0QXJyYXlTdG9yYWdlU2hhcGUgPSAzMAogCiAjIFR5cGUgY29uc3RhbnRzLgogY29uc3QgU3Ry
aW5nVHlwZSA9IDYKLWNvbnN0IE9iamVjdFR5cGUgPSAxOAotY29uc3QgRmluYWxPYmplY3RUeXBl
ID0gMTkKK2NvbnN0IE9iamVjdFR5cGUgPSAxOQorY29uc3QgRmluYWxPYmplY3RUeXBlID0gMjAK
IAogIyBUeXBlIGZsYWdzIGNvbnN0YW50cy4KIGNvbnN0IE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93
UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcAppbmRleCBhY2JlMTQ2MjlkMjg0ZWU4MjUxMWY3M2M1NjgwOTFkZWRmM2I0NDRmLi43NTgw
ODMzMmU0ZGQ0MDg0NDJhMDM0MzdkNTVjMTA1YWNjMjk1YWIxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKQEAgLTUyNSw3ICs1MjUs
NyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdG9fcHJpbWl0aXZlKQogU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX2VudGVyKQogewogICAgIEJFR0lOKCk7Ci0gICAgU2NyaXB0RXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlID0gZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgp
OworICAgIEV4ZWN1dGFibGVCYXNlKiBvd25lckV4ZWN1dGFibGUgPSBleGVjLT5jb2RlQmxvY2so
KS0+b3duZXJFeGVjdXRhYmxlKCk7CiAgICAgSGVhcDo6aGVhcChvd25lckV4ZWN1dGFibGUpLT53
cml0ZUJhcnJpZXIob3duZXJFeGVjdXRhYmxlKTsKICAgICBFTkQoKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKaW5kZXggMWI5YTczZDc5MzM4YWEz
OTE0ZjNlNDU0NTFiYjZmOWEwMGNjOTA5Ny4uZTQ4NTQ3OTc1NjdkZThjZGJlOTY2MTU3MDJmYjZl
NzUxYjYzYzVmZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5jcHAKQEAgLTMxLDEwICszMSwxMiBAQAogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1
ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU1dBU01Nb2R1
bGUuaCIKICNpbmNsdWRlICJMTEludEVudHJ5cG9pbnQuaCIKICNpbmNsdWRlICJQYXJzZXIuaCIK
ICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgi
CisjaW5jbHVkZSAiV0FTTUZ1bmN0aW9uUGFyc2VyLmgiCiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJp
bnRlci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CkBAIC01NjIsNiArNTY0LDYyIEBAIEZ1bmN0aW9uRXhlY3V0YWJsZSogRnVu
Y3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZSgKICAgICByZXR1cm4gdW5saW5rZWRFeGVj
dXRhYmxlLT5saW5rKGV4ZWMudm0oKSwgc291cmNlLCBvdmVycmlkZUxpbmVOdW1iZXIpOwogfQog
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5RXhl
Y3V0YWJsZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHlFeGVjdXRhYmxlIiwgJkV4ZWN1dGFibGVC
YXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoV2ViQXNzZW1ibHlFeGVjdXRhYmxl
KSB9OworCitXZWJBc3NlbWJseUV4ZWN1dGFibGU6OldlYkFzc2VtYmx5RXhlY3V0YWJsZShWTSYg
dm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNXQVNNTW9kdWxlKiBtb2R1bGUsIHVuc2ln
bmVkIGZ1bmN0aW9uSW5kZXgpCisgICAgOiBFeGVjdXRhYmxlQmFzZSh2bSwgdm0ud2ViQXNzZW1i
bHlFeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQp
CisgICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAgLCBtX21vZHVsZSh2bSwgdGhpcywgbW9kdWxl
KQorICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCit7Cit9CisKK3ZvaWQgV2Vi
QXNzZW1ibHlFeGVjdXRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBzdGF0aWNf
Y2FzdDxXZWJBc3NlbWJseUV4ZWN1dGFibGUqPihjZWxsKS0+V2ViQXNzZW1ibHlFeGVjdXRhYmxl
Ojp+V2ViQXNzZW1ibHlFeGVjdXRhYmxlKCk7Cit9CisKK3ZvaWQgV2ViQXNzZW1ibHlFeGVjdXRh
YmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7
CisgICAgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2Vt
Ymx5RXhlY3V0YWJsZSo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKKyAgICBFeGVjdXRhYmxlQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKKyAgICBpZiAodGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDYWxs
KQorICAgICAgICB0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja0ZvckNhbGwtPnZpc2l0QWdncmVnYXRl
KHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21vZHVsZSk7Cit9
CisKK3ZvaWQgV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpjbGVhckNvZGUoKQoreworICAgIG1fY29k
ZUJsb2NrRm9yQ2FsbCA9IG51bGxwdHI7CisgICAgQmFzZTo6Y2xlYXJDb2RlKCk7Cit9CisKK3Zv
aWQgV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aW9uKEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICBpZiAoaGFzSklUQ29kZUZvckNhbGwoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7
CisKKyAgICBSZWZQdHI8V2ViQXNzZW1ibHlDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGFkb3B0UmVm
KG5ldyBXZWJBc3NlbWJseUNvZGVCbG9jaygKKyAgICAgICAgdGhpcywgdm0sIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSkpOworCisgICAgV0FTTUZ1bmN0aW9uUGFyc2VyOjpjb21waWxlKHZt
LCBjb2RlQmxvY2suZ2V0KCksIG1fbW9kdWxlLmdldCgpLCBtX3NvdXJjZSwgbV9mdW5jdGlvbklu
ZGV4KTsKKworICAgIG1faml0Q29kZUZvckNhbGwgPSBjb2RlQmxvY2stPmppdENvZGUoKTsKKyAg
ICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIo
KTsKKyAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZVJlZ3MgPSBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICBtX251bVBhcmFtZXRlcnNGb3JDYWxsID0gY29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CisKKyAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBjb2Rl
QmxvY2s7CisKKyAgICBIZWFwOjpoZWFwKHRoaXMpLT53cml0ZUJhcnJpZXIodGhpcyk7Cit9Cisj
ZW5kaWYKKwogdm9pZCBFeGVjdXRhYmxlQmFzZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAogewogICAgIEV4ZWN1dGFibGVCYXNlKiByZWFsVGhpcyA9IGNvbnN0X2Nhc3Q8RXhlY3V0YWJs
ZUJhc2UqPih0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
aAppbmRleCAyMzRmMmNkN2VlMzg2MjAyNDMzYWNjNjZjNTFlMmM1MTI0YWRiMzA5Li5hOWM0MWM0
NTIxNjAzZDcwMjMzZGMyMDJjOTczZGRkNjVlMGQ5YTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCkBAIC01MCw5ICs1MCwxMSBAQCBjbGFzcyBDb2RlQmxv
Y2s7CiBjbGFzcyBEZWJ1Z2dlcjsKIGNsYXNzIEV2YWxDb2RlQmxvY2s7CiBjbGFzcyBGdW5jdGlv
bkNvZGVCbG9jazsKK2NsYXNzIEpTU2NvcGU7CitjbGFzcyBKU1dBU01Nb2R1bGU7CiBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBQcm9ncmFtQ29kZUJsb2NrOwotY2xhc3MgSlNT
Y29wZTsKK2NsYXNzIFdlYkFzc2VtYmx5Q29kZUJsb2NrOwogICAgIAogZW51bSBDb21waWxhdGlv
bktpbmQgeyBGaXJzdENvbXBpbGF0aW9uLCBPcHRpbWl6aW5nQ29tcGlsYXRpb24gfTsKIApAQCAt
OTIsMTUgKzk0LDE1IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgQ29kZUJsb2NrSGFzaCBoYXNo
Rm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpIGNvbnN0OwogCi0gICAgYm9vbCBpc0V2YWxFeGVj
dXRhYmxlKCkKKyAgICBib29sIGlzRXZhbEV4ZWN1dGFibGUoKSBjb25zdAogICAgIHsKICAgICAg
ICAgcmV0dXJuIHR5cGUoKSA9PSBFdmFsRXhlY3V0YWJsZVR5cGU7CiAgICAgfQotICAgIGJvb2wg
aXNGdW5jdGlvbkV4ZWN1dGFibGUoKQorICAgIGJvb2wgaXNGdW5jdGlvbkV4ZWN1dGFibGUoKSBj
b25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGUoKSA9PSBGdW5jdGlvbkV4ZWN1dGFibGVU
eXBlOwogICAgIH0KLSAgICBib29sIGlzUHJvZ3JhbUV4ZWN1dGFibGUoKQorICAgIGJvb2wgaXNQ
cm9ncmFtRXhlY3V0YWJsZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gdHlwZSgpID09
IFByb2dyYW1FeGVjdXRhYmxlVHlwZTsKICAgICB9CkBAIC0xMTEsNiArMTEzLDEzIEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwgPT0gTlVNX1BBUkFNRVRF
UlNfSVNfSE9TVDsKICAgICB9CiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgYm9vbCBp
c1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdHlw
ZSgpID09IFdlYkFzc2VtYmx5RXhlY3V0YWJsZVR5cGU7CisgICAgfQorI2VuZGlmCisKICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsgfQogICAgICAgICAKICAgICB2b2lkIGNsZWFyQ29kZSgpOwpAQCAtMzg2LDcg
KzM5NSw3IEBAIHB1YmxpYzoKIAogICAgIENvZGVGZWF0dXJlcyBmZWF0dXJlcygpIGNvbnN0IHsg
cmV0dXJuIG1fZmVhdHVyZXM7IH0KICAgICAgICAgCi0gICAgREVDTEFSRV9JTkZPOworICAgIERF
Q0xBUkVfRVhQT1JUX0lORk87CiAKICAgICB2b2lkIHJlY29yZFBhcnNlKENvZGVGZWF0dXJlcyBm
ZWF0dXJlcywgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcywgaW50IGZpcnN0TGluZSwgaW50IGxh
c3RMaW5lLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uKQogICAgIHsK
QEAgLTU2Miw3ICs1NzEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpT
Q2VsbCopOwogICAgICAgICAKLSAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5r
ZWRFeGVjdXRhYmxlKCkKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRF
eGVjdXRhYmxlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3VubGlua2VkRXhlY3V0
YWJsZS5nZXQoKTsKICAgICB9CkBAIC02NzYsNiArNjg1LDUwIEBAIHByaXZhdGU6CiAgICAgV3Jp
dGVCYXJyaWVyPEluZmVycmVkVmFsdWU+IG1fc2luZ2xldG9uRnVuY3Rpb247CiB9OwogCisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQorY2xhc3MgV2ViQXNzZW1ibHlFeGVjdXRhYmxlIGZpbmFsIDog
cHVibGljIEV4ZWN1dGFibGVCYXNlIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEV4ZWN1dGFibGVC
YXNlIEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOworCisgICAgc3RhdGljIFdl
YkFzc2VtYmx5RXhlY3V0YWJsZSogY3JlYXRlKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291
cmNlLCBKU1dBU01Nb2R1bGUqIG1vZHVsZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCkKKyAgICB7
CisgICAgICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5RXhlY3V0YWJsZT4odm0uaGVhcCkpIFdlYkFzc2Vt
Ymx5RXhlY3V0YWJsZSh2bSwgc291cmNlLCBtb2R1bGUsIGZ1bmN0aW9uSW5kZXgpOworICAgICAg
ICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBleGVjdXRh
YmxlOworICAgIH0KKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCisgICAgewor
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8s
IFR5cGVJbmZvKFdlYkFzc2VtYmx5RXhlY3V0YWJsZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAg
REVDTEFSRV9JTkZPOworCisgICAgdm9pZCBjbGVhckNvZGUoKTsKKworICAgIHZvaWQgcHJlcGFy
ZUZvckV4ZWN1dGlvbihFeGVjU3RhdGUqKTsKKworICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBj
b2RlQmxvY2tGb3JDYWxsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNh
bGwuZ2V0KCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZShW
TSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1dBU01Nb2R1bGUqLCB1bnNpZ25lZCBmdW5jdGlvbklu
ZGV4KTsKKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKworICAgIFNvdXJjZUNvZGUgbV9zb3VyY2U7CisgICAgV3JpdGVCYXJyaWVyPEpTV0FT
TU1vZHVsZT4gbV9tb2R1bGU7CisgICAgdW5zaWduZWQgbV9mdW5jdGlvbkluZGV4OworCisgICAg
UmVmUHRyPFdlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNhbGw7Cit9OworI2Vu
ZGlmCisKIGlubGluZSB2b2lkIEV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGVWaXJ0dWFsKEV4ZWN1
dGFibGVCYXNlKiBleGVjdXRhYmxlKQogewogICAgIHN3aXRjaCAoZXhlY3V0YWJsZS0+dHlwZSgp
KSB7CkBAIC02ODUsNiArNzM4LDEwIEBAIGlubGluZSB2b2lkIEV4ZWN1dGFibGVCYXNlOjpjbGVh
ckNvZGVWaXJ0dWFsKEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKQogICAgICAgICByZXR1cm4g
anNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNsZWFyQ29kZSgpOwogICAg
IGNhc2UgRnVuY3Rpb25FeGVjdXRhYmxlVHlwZToKICAgICAgICAgcmV0dXJuIGpzQ2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Y2xlYXJDb2RlKCk7CisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorICAgIGNhc2UgV2ViQXNzZW1ibHlFeGVjdXRhYmxlVHlwZToKKyAgICAgICAg
cmV0dXJuIGpzQ2FzdDxXZWJBc3NlbWJseUV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Y2xlYXJD
b2RlKCk7CisjZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4ganNDYXN0PE5hdGl2
ZUV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Y2xlYXJDb2RlKCk7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAppbmRleCAwZjczNTRlZDdhNmJk
MWUzZTY0YjE4NTg1OWMxNGYxNTAzMjZkNDU4Li5mODNhZGY4NWQxYWU3ZWUzMWNkYjM0MmY3MTUx
NDE3OTNkZjdlYTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0
aW9uLmNwcApAQCAtNjcsNiArNjcsMTYgQEAgSlNGdW5jdGlvbiogSlNGdW5jdGlvbjo6Y3JlYXRl
KFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKgogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitKU0Z1bmN0aW9uKiBK
U0Z1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIGV4ZWN1dGFi
bGUsIEpTU2NvcGUqIHNjb3BlKQoreworICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNGdW5jdGlvbj4odm0uaGVhcCkpIEpTRnVuY3Rpb24odm0s
IGV4ZWN1dGFibGUsIHNjb3BlKTsKKyAgICBBU1NFUlQoZnVuY3Rpb24tPnN0cnVjdHVyZSgpLT5n
bG9iYWxPYmplY3QoKSk7CisgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBy
ZXR1cm4gZnVuY3Rpb247Cit9CisjZW5kaWYKKwogc3RhdGljIGlubGluZSBOYXRpdmVFeGVjdXRh
YmxlKiBnZXROYXRpdmVFeGVjdXRhYmxlKFZNJiB2bSwgTmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVu
Y3Rpb24sIEludHJpbnNpYyBpbnRyaW5zaWMsIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUNvbnN0cnVj
dG9yKQogewogI2lmICFFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbi5oCmluZGV4IDkyODM1MGUyNDc4YzQ1ZjdiZjdlOGFhODRjOWVjM2E0ZTI1MmE4
NmUuLjAxY2UzNmE1ZTI3ZTRmMjRlZWY4ZjM5MTA4NDgxYWNjZWVhZDgzNTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKQEAgLTQwLDYgKzQwLDcgQEAgY2xh
c3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBO
YXRpdmVFeGVjdXRhYmxlOwogY2xhc3MgU291cmNlQ29kZTsKK2NsYXNzIFdlYkFzc2VtYmx5RXhl
Y3V0YWJsZTsKIG5hbWVzcGFjZSBERkcgewogY2xhc3MgU3BlY3VsYXRpdmVKSVQ7CiBjbGFzcyBK
SVRDb21waWxlcjsKQEAgLTczLDYgKzc0LDkgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIGludCBs
ZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgTmF0aXZlU3RkRnVuY3Rpb24mJiwgSW50cmluc2lj
ID0gTm9JbnRyaW5zaWMsIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUNvbnN0cnVjdG9yID0gY2FsbEhv
c3RGdW5jdGlvbkFzQ29uc3RydWN0b3IpOwogCiAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0
ZShWTSYsIEZ1bmN0aW9uRXhlY3V0YWJsZSosIEpTU2NvcGUqKTsKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShWTSYsIFdlYkFzc2VtYmx5RXhl
Y3V0YWJsZSosIEpTU2NvcGUqKTsKKyNlbmRpZgogCiAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNy
ZWF0ZUJ1aWx0aW5GdW5jdGlvbihWTSYsIEZ1bmN0aW9uRXhlY3V0YWJsZSosIEpTR2xvYmFsT2Jq
ZWN0Kik7CiAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZUJ1aWx0aW5GdW5jdGlvbihWTSYs
IEZ1bmN0aW9uRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1l
KTsKQEAgLTE0Myw2ICsxNDcsMTAgQEAgcHJvdGVjdGVkOgogICAgIEpTRnVuY3Rpb24oVk0mLCBG
dW5jdGlvbkV4ZWN1dGFibGUqLCBKU1Njb3BlKik7CiAgICAgSlNGdW5jdGlvbihWTSYsIEZ1bmN0
aW9uRXhlY3V0YWJsZSosIEpTU2NvcGUqLCBTdHJ1Y3R1cmUqKTsKIAorI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKKyAgICBKU0Z1bmN0aW9uKFZNJiwgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiwgSlNT
Y29wZSopOworI2VuZGlmCisKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhl
Y3V0YWJsZSosIGludCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgdXNpbmcgQmFz
ZTo6ZmluaXNoQ3JlYXRpb247CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uSW5saW5lcy5oCmluZGV4IGYwNTk1ODRjZjA3ZDdmZDY5ZWEyZGNmZTI3YjYz
YjY0NGE4ODQ0MTMuLjRmNzVhYjk3MDM1ODZmYjRmYmYzNjQzODFiNjVmNWVkOGVmNTcxYTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMu
aApAQCAtNTIsNiArNTIsMTUgQEAgaW5saW5lIEpTRnVuY3Rpb246OkpTRnVuY3Rpb24oVk0mIHZt
LCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHMKIHsKIH0KIAorI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKK2lubGluZSBKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKFZNJiB2
bSwgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSkKKyAg
ICA6IEJhc2Uodm0sIHNjb3BlLCBzY29wZS0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0
dXJlKCkpCisgICAgLCBtX2V4ZWN1dGFibGUodm0sIHRoaXMsIGV4ZWN1dGFibGUpCisgICAgLCBt
X3JhcmVEYXRhKCkKK3sKK30KKyNlbmRpZgorCiBpbmxpbmUgRnVuY3Rpb25FeGVjdXRhYmxlKiBK
U0Z1bmN0aW9uOjpqc0V4ZWN1dGFibGUoKSBjb25zdAogewogICAgIEFTU0VSVCghaXNIb3N0RnVu
Y3Rpb25Ob25JbmxpbmUoKSk7CkBAIC02Niw2ICs3NSwxMCBAQCBpbmxpbmUgYm9vbCBKU0Z1bmN0
aW9uOjppc0hvc3RGdW5jdGlvbigpIGNvbnN0CiAKIGlubGluZSBib29sIEpTRnVuY3Rpb246Omlz
QnVpbHRpbkZ1bmN0aW9uKCkgY29uc3QKIHsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAg
aWYgKG1fZXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworI2VuZGlmCiAgICAgcmV0dXJuICFpc0hvc3RGdW5jdGlvbigpICYmIGpzRXhl
Y3V0YWJsZSgpLT5pc0J1aWx0aW5GdW5jdGlvbigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVHlwZS5oCmluZGV4IDQwMzI2Y2UwZjMyOWZhN2M3YmJjOTlmNDQ2NDI4ZmU5NmM5
MTI0YjMuLjE1OTZlNjU4NGM4YWViOGI3YzBjY2I0ZGEzMDMwMjAwOThlNjk1ZmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5oCkBAIC00Miw2ICs0Miw3IEBAIGVudW0gSlNU
eXBlIDogdWludDhfdCB7CiAgICAgRXZhbEV4ZWN1dGFibGVUeXBlLAogICAgIFByb2dyYW1FeGVj
dXRhYmxlVHlwZSwKICAgICBGdW5jdGlvbkV4ZWN1dGFibGVUeXBlLAorICAgIFdlYkFzc2VtYmx5
RXhlY3V0YWJsZVR5cGUsCiAKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGUsCiAg
ICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrVHlwZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAppbmRleCA1YWY2Y2FmMjdkMzU5ZDkxZjQ3YzExNTY0NzU4NDIwOGI3ZjA0OTc2Li5j
NjM3ZTU2ZWJhMTdjZDk2ZGZmYmY4MTI1MDM1NTUwZmFkZTFmZmUzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0yMjEsNiArMjIxLDkgQEAgVk06OlZNKFZNVHlwZSB2bVR5
cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIGV2YWxFeGVjdXRhYmxlU3RydWN0dXJlLnNldCgq
dGhpcywgRXZhbEV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkp
KTsKICAgICBwcm9ncmFtRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFByb2dyYW1FeGVj
dXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgZnVuY3Rp
b25FeGVjdXRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVh
dGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQorICAgIHdlYkFzc2VtYmx5RXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFdlYkFzc2Vt
Ymx5RXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworI2Vu
ZGlmCiAgICAgcmVnRXhwU3RydWN0dXJlLnNldCgqdGhpcywgUmVnRXhwOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgc3ltYm9sU3RydWN0dXJlLnNldCgqdGhpcywg
U3ltYm9sOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgc3ltYm9s
VGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTeW1ib2xUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzLCAwLCBqc051bGwoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggYmY5
MjViNTk1ZjkyMzkzNjJlZjg3OTE3MDNjM2U1MGEyNzJhYzI4Mi4uZWEzZjg1NmEyZmMxZmM0YmFm
NDkxNjAxZTg5ZDVmMGU4YzZkYmMzNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBA
IC0yNzksNiArMjc5LDkgQEAgcHVibGljOgogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGV2YWxFeGVj
dXRhYmxlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb2dyYW1FeGVjdXRhYmxl
U3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVj
dHVyZTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2Vi
QXNzZW1ibHlFeGVjdXRhYmxlU3RydWN0dXJlOworI2VuZGlmCiAgICAgU3Ryb25nPFN0cnVjdHVy
ZT4gcmVnRXhwU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN5bWJvbFN0cnVjdHVy
ZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBzeW1ib2xUYWJsZVN0cnVjdHVyZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV0FTTU1vZHVsZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmgKaW5kZXggYTcyNjZiNTdkYThkMzdlNzA2
ZWFjZjA3ODBjMmJkN2MwYmUxZjhkMy4uNDY3YjNlNmExMWY2NTg0YWNlOGFkN2M0NDIwNzM4MGQx
Mzc4MjU4ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9k
dWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmgKQEAg
LTY0LDYgKzY0LDggQEAgcHVibGljOgogICAgIFZlY3RvcjxXQVNNRnVuY3Rpb25EZWNsYXJhdGlv
bj4mIGZ1bmN0aW9uRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xhcmF0aW9u
czsgfQogICAgIFZlY3RvcjxXQVNNRnVuY3Rpb25Qb2ludGVyVGFibGU+JiBmdW5jdGlvblBvaW50
ZXJUYWJsZXMoKSB7IHJldHVybiBtX2Z1bmN0aW9uUG9pbnRlclRhYmxlczsgfQogCisgICAgVmVj
dG9yPFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPj4mIGZ1bmN0aW9ucygpIHsgcmV0dXJuIG1fZnVu
Y3Rpb25zOyB9CisKIHByaXZhdGU6CiAgICAgSlNXQVNNTW9kdWxlKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5jcHAKaW5kZXggZDY4OWY1
NmIxY2I4MGZjNzE5MGJiNDk3YzA1Y2RlZDZiN2M0MzgzMi4uNzhhMWExOTJjZWM4ODQ3YWQxMTAz
ODg4MDJiYTMwY2ZjOTU3Y2ZhOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNRnVuY3Rpb25QYXJzZXIuY3BwCkBAIC0yOCw3ICsyOCw5IEBACiAKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCiAKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJKU1dB
U01Nb2R1bGUuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiV0FTTUZ1bmN0
aW9uU3ludGF4Q2hlY2tlci5oIgogCiAjZGVmaW5lIFBST1BBR0FURV9FUlJPUigpIGRvIHsgaWYg
KCFtX2Vycm9yTWVzc2FnZS5pc051bGwoKSkgcmV0dXJuIDA7IH0gd2hpbGUgKDApCkBAIC01OSw2
ICs2MSwyNyBAQCBib29sIFdBU01GdW5jdGlvblBhcnNlcjo6Y2hlY2tTeW50YXgoSlNXQVNNTW9k
dWxlKiBtb2R1bGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdQogICAgIHJldHVybiB0cnVlOwogfQog
Cit2b2lkIFdBU01GdW5jdGlvblBhcnNlcjo6Y29tcGlsZShWTSYgdm0sIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKU1dBU01Nb2R1bGUqIG1vZHVsZSwgY29uc3QgU291cmNlQ29kZSYsIHNpemVfdCBm
dW5jdGlvbkluZGV4KQoreworICAgIC8vIEZJWE1FOiBBY3R1YWxseSBjb21waWxlIHRoZSBjb2Rl
LgorICAgIENDYWxsSGVscGVycyBqaXQoJnZtLCBjb2RlQmxvY2spOworICAgIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBiZWdpbkxhYmVsID0gaml0LmxhYmVsKCk7CisgICAgaml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIGppdC5yZXQoKTsKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgYXJpdHlDaGVjayA9IGppdC5sYWJlbCgpOworICAgIGppdC5qdW1wKGJlZ2luTGFi
ZWwpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih2bSwgaml0LCBjb2RlQmxvY2ssIEpJ
VENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3aXRo
QXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYXJpdHlDaGVjayk7CisgICAgTWFj
cm9Bc3NlbWJsZXI6OkNvZGVSZWYgcmVzdWx0ID0gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
KCJCYXNlbGluZSBKSVQgY29kZSBmb3IgV2ViQXNzZW1ibHkiKSk7CisgICAgY29kZUJsb2NrLT5z
ZXRKSVRDb2RlKGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hl
Y2ssIEpJVENvZGU6OkJhc2VsaW5lSklUKSkpOworICAgIGNvZGVCbG9jay0+Y2FwYWJpbGl0eUxl
dmVsKCk7CisKKyAgICB1aW50MzJfdCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS0+ZnVuY3Rpb25E
ZWNsYXJhdGlvbnMoKVtmdW5jdGlvbkluZGV4XS5zaWduYXR1cmVJbmRleDsKKyAgICBjb25zdCBX
QVNNU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBtb2R1bGUtPnNpZ25hdHVyZXMoKVtzaWduYXR1cmVJ
bmRleF07CisgICAgY29kZUJsb2NrLT5zZXROdW1QYXJhbWV0ZXJzKDEgKyBzaWduYXR1cmUuYXJn
dW1lbnRzLnNpemUoKSk7Cit9CisKIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgogYm9vbCBXQVNN
RnVuY3Rpb25QYXJzZXI6OnBhcnNlRnVuY3Rpb24oQ29udGV4dCYgY29udGV4dCkKIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmgKaW5kZXggNGQ2
MzEzYWZkNzhjODBjNTc0MmVkMmY3MWFiNjVhNWZlNzVjNWI5My4uNzA0YzQ2YzlkOTRkNDA2NGFj
ZTdiNGY3Y2MxY2M4ZjM2MzgxYzU0MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV0FTTUZ1bmN0aW9uUGFyc2VyLmgKQEAgLTM2LDExICszNiwxNCBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAorY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSlNXQVNNTW9kdWxlOworY2xhc3MgVk07
CiAKIGNsYXNzIFdBU01GdW5jdGlvblBhcnNlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wg
Y2hlY2tTeW50YXgoSlNXQVNNTW9kdWxlKiwgY29uc3QgU291cmNlQ29kZSYsIHNpemVfdCBmdW5j
dGlvbkluZGV4LCB1bnNpZ25lZCBzdGFydE9mZnNldEluU291cmNlLCB1bnNpZ25lZCYgZW5kT2Zm
c2V0SW5Tb3VyY2UsIFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKKyAgICBzdGF0aWMgdm9pZCBjb21w
aWxlKFZNJiwgQ29kZUJsb2NrKiwgSlNXQVNNTW9kdWxlKiwgY29uc3QgU291cmNlQ29kZSYsIHNp
emVfdCBmdW5jdGlvbkluZGV4KTsKIAogcHJpdmF0ZToKICAgICBXQVNNRnVuY3Rpb25QYXJzZXIo
SlNXQVNNTW9kdWxlKiBtb2R1bGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgc2l6ZV90IGZ1
bmN0aW9uSW5kZXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNN
TW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQ
YXJzZXIuY3BwCmluZGV4IDUwZGJiOGU1MDliNmM3ZjQ1N2QxZDc2ZDYxNmNhODA0NTc1Y2E4YWYu
LjY3ZTNhYTY0NmNlNmZkOTQ3ZmU5OGY0YzY1ZWVkMWRjN2ZkNTE5MjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuY3BwCkBAIC00OSwxNSArNDks
MTcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLVdBU01Nb2R1bGVQYXJzZXI6OldBU01Nb2R1bGVQ
YXJzZXIoY29uc3QgU291cmNlQ29kZSYgc291cmNlKQotICAgIDogbV9zb3VyY2Uoc291cmNlKQor
V0FTTU1vZHVsZVBhcnNlcjo6V0FTTU1vZHVsZVBhcnNlcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKKyAgICA6IG1fdm0odm0p
CisgICAgLCBtX2dsb2JhbE9iamVjdCh2bSwgZ2xvYmFsT2JqZWN0KQorICAgICwgbV9zb3VyY2Uo
c291cmNlKQogICAgICwgbV9yZWFkZXIoc3RhdGljX2Nhc3Q8V2ViQXNzZW1ibHlTb3VyY2VQcm92
aWRlcio+KHNvdXJjZS5wcm92aWRlcigpKS0+ZGF0YSgpKQogewogfQogCi1KU1dBU01Nb2R1bGUq
IFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCitKU1dBU01Nb2R1bGUqIFdBU01Nb2R1bGVQYXJz
ZXI6OnBhcnNlKFN0cmluZyYgZXJyb3JNZXNzYWdlKQogewotICAgIG1fbW9kdWxlLnNldCh2bSwg
SlNXQVNNTW9kdWxlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+d2FzbU1vZHVsZVN0cnVjdHVy
ZSgpKSk7CisgICAgbV9tb2R1bGUuc2V0KG1fdm0sIEpTV0FTTU1vZHVsZTo6Y3JlYXRlKG1fdm0s
IG1fZ2xvYmFsT2JqZWN0LT53YXNtTW9kdWxlU3RydWN0dXJlKCkpKTsKICAgICBwYXJzZU1vZHVs
ZSgpOwogICAgIGlmICghbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkpIHsKICAgICAgICAgZXJyb3JN
ZXNzYWdlID0gbV9lcnJvck1lc3NhZ2U7CkBAIC0yMTcsNiArMjE5LDcgQEAgdm9pZCBXQVNNTW9k
dWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKCkKICAgICB1aW50MzJf
dCBudW1iZXJPZkZ1bmN0aW9uRGVjbGFyYXRpb25zOwogICAgIFJFQURfQ09NUEFDVF9VSU5UMzJf
T1JfRkFJTChudW1iZXJPZkZ1bmN0aW9uRGVjbGFyYXRpb25zLCAiQ2Fubm90IHJlYWQgdGhlIG51
bWJlciBvZiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuIik7CiAgICAgbV9tb2R1bGUtPmZ1bmN0aW9u
RGVjbGFyYXRpb25zKCkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkZ1bmN0aW9uRGVj
bGFyYXRpb25zKTsKKyAgICBtX21vZHVsZS0+ZnVuY3Rpb25zKCkucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShudW1iZXJPZkZ1bmN0aW9uRGVjbGFyYXRpb25zKTsKICAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgbnVtYmVyT2ZGdW5jdGlvbkRlY2xhcmF0aW9uczsgKytpKSB7CiAgICAgICAgIFdB
U01GdW5jdGlvbkRlY2xhcmF0aW9uIGZ1bmN0aW9uRGVjbGFyYXRpb247CiAgICAgICAgIFJFQURf
Q09NUEFDVF9VSU5UMzJfT1JfRkFJTChmdW5jdGlvbkRlY2xhcmF0aW9uLnNpZ25hdHVyZUluZGV4
LCAiQ2Fubm90IHJlYWQgdGhlIHNpZ25hdHVyZSBpbmRleC4iKTsKQEAgLTI2NSw2ICsyNjgsMTAg
QEAgdm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbihzaXplX3Qg
ZnVuY3Rpb25JbmRleCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX3JlYWRlci5zZXRP
ZmZzZXQoZW5kT2Zmc2V0SW5Tb3VyY2UpOworCisgICAgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiB3
ZWJBc3NlbWJseUV4ZWN1dGFibGUgPSBXZWJBc3NlbWJseUV4ZWN1dGFibGU6OmNyZWF0ZShtX3Zt
LCBtX3NvdXJjZSwgbV9tb2R1bGUuZ2V0KCksIGZ1bmN0aW9uSW5kZXgpOworICAgIEpTRnVuY3Rp
b24qIGZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKG1fdm0sIHdlYkFzc2VtYmx5RXhlY3V0
YWJsZSwgbV9nbG9iYWxPYmplY3QuZ2V0KCkpOworICAgIG1fbW9kdWxlLT5mdW5jdGlvbnMoKS51
bmNoZWNrZWRBcHBlbmQoV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+KG1fdm0sIG1fbW9kdWxlLmdl
dCgpLCBmdW5jdGlvbikpOwogfQogCiB2b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0
U2VjdGlvbigpCkBAIC0yODUsMTEgKzI5MiwxMSBAQCB2b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBh
cnNlRXhwb3J0U2VjdGlvbigpCiAgICAgICAgIGZvciAodWludDMyX3QgZXhwb3J0SW5kZXggPSAw
OyBleHBvcnRJbmRleCA8IG51bWJlck9mRXhwb3J0czsgKytleHBvcnRJbmRleCkgewogICAgICAg
ICAgICAgU3RyaW5nIGV4cG9ydE5hbWU7CiAgICAgICAgICAgICBSRUFEX1NUUklOR19PUl9GQUlM
KGV4cG9ydE5hbWUsICJDYW5ub3QgcmVhZCB0aGUgZnVuY3Rpb24gZXhwb3J0IG5hbWUuIik7Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogQ2hlY2sgdGhhdCBleHBvcnROYW1lIGlzIGxlZ2FsLgogICAg
ICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleDsKICAgICAgICAgICAgIFJFQURfQ09NUEFD
VF9VSU5UMzJfT1JfRkFJTChmdW5jdGlvbkluZGV4LCAiQ2Fubm90IHJlYWQgdGhlIGZ1bmN0aW9u
IGluZGV4LiIpOwogICAgICAgICAgICAgRkFJTF9JRl9GQUxTRShmdW5jdGlvbkluZGV4IDwgbV9t
b2R1bGUtPmZ1bmN0aW9uRGVjbGFyYXRpb25zKCkuc2l6ZSgpLCAiVGhlIGZ1bmN0aW9uIGluZGV4
IGlzIGluY29ycmVjdC4iKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBFeHBvcnQgdGhlIGZ1bmN0
aW9uLgorICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmbV92bSwgZXhwb3J0TmFtZSk7CisgICAgICAgICAgICBtX21vZHVsZS0+cHV0RGly
ZWN0KG1fdm0sIGlkZW50aWZpZXIsIG1fbW9kdWxlLT5mdW5jdGlvbnMoKVtmdW5jdGlvbkluZGV4
XS5nZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzAwLDggKzMw
Nyw4IEBAIHZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VFeHBvcnRTZWN0aW9uKCkKIAogSlNX
QVNNTW9kdWxlKiBwYXJzZVdlYkFzc2VtYmx5KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNl
Q29kZSYgc291cmNlLCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKIHsKLSAgICBXQVNNTW9kdWxlUGFy
c2VyIFdBU01Nb2R1bGVQYXJzZXIoc291cmNlKTsKLSAgICByZXR1cm4gV0FTTU1vZHVsZVBhcnNl
ci5wYXJzZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGVycm9yTWVz
c2FnZSk7CisgICAgV0FTTU1vZHVsZVBhcnNlciBtb2R1bGVQYXJzZXIoZXhlYy0+dm0oKSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzb3VyY2UpOworICAgIHJldHVybiBtb2R1bGVQYXJz
ZXIucGFyc2UoZXJyb3JNZXNzYWdlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmgKaW5kZXggMzBmMWE1NjU5
ODhjNjAxNGI1NDVmYzFjNmMyNmMwOTNkOGZiNTQwZi4uZTJmNGZiNzU4Yzk1MTM1M2Y4NjA4N2Q1
OTA0YzVmMzYyNjNlZWZhYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V0FTTU1vZHVsZVBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01N
b2R1bGVQYXJzZXIuaApAQCAtNDIsOCArNDIsOCBAQCBjbGFzcyBWTTsKIAogY2xhc3MgV0FTTU1v
ZHVsZVBhcnNlciB7CiBwdWJsaWM6Ci0gICAgV0FTTU1vZHVsZVBhcnNlcihjb25zdCBTb3VyY2VD
b2RlJik7Ci0gICAgSlNXQVNNTW9kdWxlKiBwYXJzZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UpOworICAgIFdBU01Nb2R1bGVQYXJzZXIoVk0mLCBKU0dsb2JhbE9i
amVjdCosIGNvbnN0IFNvdXJjZUNvZGUmKTsKKyAgICBKU1dBU01Nb2R1bGUqIHBhcnNlKFN0cmlu
ZyYgZXJyb3JNZXNzYWdlKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlTW9kdWxlKCk7CkBA
IC01Nyw2ICs1Nyw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlv
bihzaXplX3QgZnVuY3Rpb25JbmRleCk7CiAgICAgdm9pZCBwYXJzZUV4cG9ydFNlY3Rpb24oKTsK
IAorICAgIFZNJiBtX3ZtOworICAgIFN0cm9uZzxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmpl
Y3Q7CiAgICAgY29uc3QgU291cmNlQ29kZSYgbV9zb3VyY2U7CiAgICAgV0FTTVJlYWRlciBtX3Jl
YWRlcjsKICAgICBTdHJvbmc8SlNXQVNNTW9kdWxlPiBtX21vZHVsZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcAppbmRleCA5ODEyZjNiYzFhNzk0MTYxYzlkZWQyMjUzYzY0NDg3Y2E0
ZWYxZThjLi4yOGU3NmIxODEzODY4MjJjM2RhZjI1YmY2OTg3NDJmNDg4N2M0ZjYzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0xNDYzLDcgKzE0NjMsNyBAQCBTdHJpbmcg
SW50ZXJuYWxzOjpwYXJzZXJNZXRhRGF0YShEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSB2YWx1ZSkK
ICAgICAgICAgR2V0Q2FsbGVyQ29kZUJsb2NrRnVuY3RvciBpdGVyOwogICAgICAgICBleGVjLT5p
dGVyYXRlKGl0ZXIpOwogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGl0ZXIuY29kZUJs
b2NrKCk7Ci0gICAgICAgIGV4ZWN1dGFibGUgPSBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
OyAKKyAgICAgICAgZXhlY3V0YWJsZSA9IGNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRhYmxl
KCk7CiAgICAgfSBlbHNlIGlmIChjb2RlLmlzRnVuY3Rpb24oKSkgewogICAgICAgICBKU0Z1bmN0
aW9uKiBmdW5jT2JqID0gSlNDOjpqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvZGUudG9PYmplY3QoZXhl
YykpOwogICAgICAgICBleGVjdXRhYmxlID0gZnVuY09iai0+anNFeGVjdXRhYmxlKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260171</attachid>
            <date>2015-08-28 13:14:42 -0700</date>
            <delta_ts>2015-08-28 14:07:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148373-20150828131428.patch</filename>
            <type>text/plain</type>
            <size>66795</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg5MTIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ZjlkODNmYjViZThkNzAyZGYzMzk3NGQxNzkxNjYzZGMyZDc1ZTg3Li5jYTA0ZDc3ZjBlMzg0OGJk
MmJkZDhhZDdmZDNjZmU5OTRhNDNhMzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMjMgQEAKKzIwMTUtMDgtMjggIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0Bn
bWFpbC5jb20+CisKKyAgICAgICAgQ3JlYXRlIFdlYkFzc2VtYmx5IGZ1bmN0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4MzczCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3JlYXRlIGZ1bmN0aW9u
cyBmcm9tIFdlYkFzc2VtYmx5IGZpbGVzIGdlbmVyYXRlZCBieSBwYWNrLWFzbWpzCisgICAgICAg
IDxodHRwczovL2dpdGh1Yi5jb20vV2ViQXNzZW1ibHkvcG9seWZpbGwtcHJvdG90eXBlLTE+Lgor
ICAgICAgICBXZWJBc3NlbWJseSBmdW5jdGlvbnMgY3JlYXRlZCBieSB0aGlzIHBhdGNoIGNhbiBv
bmx5IHJldHVybiAwLgorICAgICAgICBBY3R1YWwgY29kZSBnZW5lcmF0aW9uIHdpbGwgYmUgaW1w
bGVtZW50ZWQgaW4gc3Vic2VxdWVudCBwYXRjaGVzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50
cm9kdWNlcyBXZWJBc3NlbWJseUV4ZWN1dGFibGUsIGEgbmV3IHN1YmNsYXNzIG9mCisgICAgICAg
IEV4ZWN1dGFibGVCYXNlIGZvciBXZWJBc3NlbWJseSBmdW5jdGlvbnMuIENvZGVCbG9ja3MgY2Fu
IG5vdyBoYXZlCisgICAgICAgIGFuIG93bmVyIHRoYXQgaXMgbm90IGEgU2NyaXB0RXhlY3V0YWJs
ZS4gVGhpcyBwYXRjaCBjaGFuZ2VzIHRoZQorICAgICAgICByZXR1cm4gdHlwZSBvZiBDb2RlQmxv
Y2s6Om93bmVyRXhlY3V0YWJsZSgpIGZyb20gU2NyaXB0RXhlY3V0YWJsZSoKKyAgICAgICAgdG8g
RXhlY3V0YWJsZUJhc2UqLiBJdCBhbHNvIGNoYW5nZXMgY29kZSB0aGF0IGNhbGxzIFNjcmlwdEV4
ZWN1dGFibGUncworICAgICAgICBtZXRob2RzIG9uIENvZGVCbG9jazo6b3duZXJFeGVjdXRhYmxl
KCkgdG8gdXNlCisgICAgICAgIENvZGVCbG9jazo6b3duZXJTY3JpcHRFeGVjdXRhYmxlKCksIHdo
aWNoIGRvZXMganNDYXN0PFNjcmlwdEV4ZWN1dGFibGUqPi4KKworICAgICAgICBTaW5jZSBvd25l
clNjcmlwdEV4ZWN1dGFibGUoKSBpcyBjYWxsZWQgZnJvbSBXZWJDb3JlIGFuZCBpdCB1c2VzCisg
ICAgICAgIGpzQ2FzdDxTY3JpcHRFeGVjdXRhYmxlKj4sIHRoaXMgcGF0Y2ggbmVlZHMgdG8gZXhw
b3J0CisgICAgICAgIFNjcmlwdEV4ZWN1dGFibGU6OmluZm8oKS4gVGhpcyBzaG91bGQgZml4IHRo
ZSBidWlsZCBlcnJvciBpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ4NTU1CisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6Omhhc2gpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNv
dXJjZUNvZGVGb3JUb29scyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEFzc3VtaW5n
SklUVHlwZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcFNvdXJjZSk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpm
aW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGluZU51
bWJlckZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpleHByZXNz
aW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aW5z
dGFsbCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bmV3UmVwbGFjZW1lbnQpOgorICAgICAg
ICAoSlNDOjpXZWJBc3NlbWJseUNvZGVCbG9jazo6cmVwbGFjZW1lbnQpOgorICAgICAgICAoSlND
OjpXZWJBc3NlbWJseUNvZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsSW50ZXJuYWwpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjppbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmllc0ZvckNvbnRyb2xGbG93UHJvZmls
ZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6Om93bmVyRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3duZXJT
Y3JpcHRFeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb2RlVHlwZSk6Cisg
ICAgICAgIChKU0M6OldlYkFzc2VtYmx5Q29kZUJsb2NrOjpXZWJBc3NlbWJseUNvZGVCbG9jayk6
CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuY3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dl
cjo6dG9nZ2xlQnJlYWtwb2ludCk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJDYWxsRnJh
bWUuY3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6c291cmNlSURGb3JDYWxs
RnJhbWUpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OmV4ZWN1dGFibGUpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjppbmxpbmluZ0Nvc3QpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFj
a0VudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxv
Y2spOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OmlzU3VwcG9ydGVkRm9ySW5saW5pbmcpOgorICAgICAgICAoSlNDOjpERkc6Om1pZ2h0Q29t
cGlsZUV2YWwpOgorICAgICAgICAoSlNDOjpERkc6Om1pZ2h0Q29tcGlsZVByb2dyYW0pOgorICAg
ICAgICAoSlNDOjpERkc6Om1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ2FsbCk6CisgICAgICAgIChK
U0M6OkRGRzo6bWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QpOgorICAgICAgICAqIGRm
Zy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpleGVjdXRhYmxlRm9yKToK
KyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBh
cmVPU1JFbnRyeSk6CisgICAgICAgICogaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3Rvcnku
Y3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpDcmVhdGVTY3JpcHRDYWxsU3RhY2tGdW5jdG9yOjpv
cGVyYXRvcigpKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAg
ICAgIChKU0M6OmV2YWwpOgorICAgICAgICAoSlNDOjppc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSk6
CisgICAgICAgIChKU0M6OkdldFN0YWNrVHJhY2VGdW5jdG9yOjpvcGVyYXRvcigpKToKKyAgICAg
ICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgICogaW50ZXJwcmV0
ZXIvU3RhY2tWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6
c291cmNlVVJMKToKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6Y29tcHV0ZUxp
bmVBbmRDb2x1bW4pOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGwpOgor
ICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpEYXRh
OjpwZXJmb3JtQXNzZXJ0aW9ucyk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
OgorICAgICAgICAoSlNDOjpMTEludDo6c2V0VXBDYWxsKToKKyAgICAgICAgKiBsbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0V4
ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4ZWN1dGFibGU6OldlYkFz
c2VtYmx5RXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6
ZGVzdHJveSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6dmlzaXRDaGls
ZHJlbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6Y2xlYXJDb2RlKToK
KyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aW9u
KToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0
YWJsZUJhc2U6OmlzRXZhbEV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFz
ZTo6aXNGdW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6
aXNQcm9ncmFtRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjppc1dl
YkFzc2VtYmx5RXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjpjbGVh
ckNvZGVWaXJ0dWFsKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAg
ICAoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlv
bi5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6SlNGdW5jdGlvbjo6SlNGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246Omlz
QnVpbHRpbkZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTVHlwZS5oOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRp
bWUvVk0uaDoKKyAgICAgICAgKiB3YXNtL0pTV0FTTU1vZHVsZS5oOgorICAgICAgICAoSlNDOjpK
U1dBU01Nb2R1bGU6OmZ1bmN0aW9ucyk6CisgICAgICAgICogd2FzbS9XQVNNRnVuY3Rpb25QYXJz
ZXIuY3BwOgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OmNvbXBpbGUpOgorICAg
ICAgICAqIHdhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmg6CisgICAgICAgICogd2FzbS9XQVNNTW9k
dWxlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6V0FTTU1vZHVs
ZVBhcnNlcik6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlKToKKyAgICAg
ICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uU2VjdGlv
bik6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWZpbml0
aW9uKToKKyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VFeHBvcnRTZWN0aW9u
KToKKyAgICAgICAgKEpTQzo6cGFyc2VXZWJBc3NlbWJseSk6CisgICAgICAgICogd2FzbS9XQVNN
TW9kdWxlUGFyc2VyLmg6CisKIDIwMTUtMDgtMjggIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUu
Y29tPgogCiAgICAgICAgIFtGb2xsb3cgdXBdIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJl
c2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoKSBzaG91bGQgYWxsb3cgcm9vbSBmb3IgQyBo
ZWxwZXIgY2FsbHMgYW5kIGtlZXAgc3AgcHJvcGVybHkgYWxpZ25lZC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAw
MDY0YTU3YmVjNGM2YzNkYzlkZDliNTcxZjk3ODc1YjQ3Mjk5NDMyLi40MGQyYzMwNzY3ZGRlYjAw
N2VjZmQ0NThjOGMzZTZmZTVhNWZiODQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MTUtMDgtMjggIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0BnbWFpbC5jb20+CisKKyAg
ICAgICAgQ3JlYXRlIFdlYkFzc2VtYmx5IGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4MzczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWNhdXNlIGl0IGlzIGEg
ZnVuY3Rpb24gcmVuYW1lLgorCisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpwYXJzZXJNZXRhRGF0YSk6CisKIDIwMTUtMDgtMjgg
IEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gTWFrZSB0
aGUgQWxsb3dzSW5saW5lTWVkaWFQbGF5YmFjayBwcmVmZXJlbmNlIHdvcmsgaW4gV2ViS2l0IC8g
V2ViS2l0Mi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAK
aW5kZXggMDFmMTFkYTdjNzcyMGZmODJiYmVhOTM0Y2IwYWZmMGZiM2EzMDBhMy4uZjhhMGY0YmZj
ODY5NGZlYWQyOGE2YWI1N2M3YzIzNWZmMTNkMTE4ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTEwNyw3ICsxMDcsNyBAQCBDb2RlQmxvY2tI
YXNoIENvZGVCbG9jazo6aGFzaCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2hhc2gpIHsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaXNTYWZlVG9Db21wdXRlSGFzaCgpKTsKLSAgICAgICAgbV9oYXNo
ID0gQ29kZUJsb2NrSGFzaChvd25lckV4ZWN1dGFibGUoKS0+c291cmNlKCksIHNwZWNpYWxpemF0
aW9uS2luZCgpKTsKKyAgICAgICAgbV9oYXNoID0gQ29kZUJsb2NrSGFzaChvd25lclNjcmlwdEV4
ZWN1dGFibGUoKS0+c291cmNlKCksIHNwZWNpYWxpemF0aW9uS2luZCgpKTsKICAgICB9CiAgICAg
cmV0dXJuIG1faGFzaDsKIH0KQEAgLTExNSw3ICsxMTUsNyBAQCBDb2RlQmxvY2tIYXNoIENvZGVC
bG9jazo6aGFzaCgpIGNvbnN0CiBDU3RyaW5nIENvZGVCbG9jazo6c291cmNlQ29kZUZvclRvb2xz
KCkgY29uc3QKIHsKICAgICBpZiAoY29kZVR5cGUoKSAhPSBGdW5jdGlvbkNvZGUpCi0gICAgICAg
IHJldHVybiBvd25lckV4ZWN1dGFibGUoKS0+c291cmNlKCkudG9VVEY4KCk7CisgICAgICAgIHJl
dHVybiBvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+c291cmNlKCkudG9VVEY4KCk7CiAgICAgCiAg
ICAgU291cmNlUHJvdmlkZXIqIHByb3ZpZGVyID0gc291cmNlKCk7CiAgICAgRnVuY3Rpb25FeGVj
dXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhl
Y3V0YWJsZSgpKTsKQEAgLTE1NSwxMyArMTU1LDEzIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQXNz
dW1pbmdKSVRUeXBlKFByaW50U3RyZWFtJiBvdXQsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkK
ICAgICBvdXQucHJpbnQoIiwgIiwgaW5zdHJ1Y3Rpb25Db3VudCgpKTsKICAgICBpZiAodGhpcy0+
aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUICYmIG1fc2hvdWxkQWx3YXlzQmVJbmxp
bmVkKQogICAgICAgICBvdXQucHJpbnQoIiAoU2hvdWxkQWx3YXlzQmVJbmxpbmVkKSIpOwotICAg
IGlmIChvd25lckV4ZWN1dGFibGUoKS0+bmV2ZXJJbmxpbmUoKSkKKyAgICBpZiAob3duZXJTY3Jp
cHRFeGVjdXRhYmxlKCktPm5ldmVySW5saW5lKCkpCiAgICAgICAgIG91dC5wcmludCgiIChOZXZl
cklubGluZSkiKTsKLSAgICBpZiAob3duZXJFeGVjdXRhYmxlKCktPm5ldmVyT3B0aW1pemUoKSkK
KyAgICBpZiAob3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPm5ldmVyT3B0aW1pemUoKSkKICAgICAg
ICAgb3V0LnByaW50KCIgKE5ldmVyT3B0aW1pemUpIik7Ci0gICAgaWYgKG93bmVyRXhlY3V0YWJs
ZSgpLT5kaWRUcnlUb0VudGVySW5Mb29wKCkpCisgICAgaWYgKG93bmVyU2NyaXB0RXhlY3V0YWJs
ZSgpLT5kaWRUcnlUb0VudGVySW5Mb29wKCkpCiAgICAgICAgIG91dC5wcmludCgiIChEaWRUcnlU
b0VudGVySW5Mb29wKSIpOwotICAgIGlmIChvd25lckV4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2Rl
KCkpCisgICAgaWYgKG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSkKICAg
ICAgICAgb3V0LnByaW50KCIgKFN0cmljdE1vZGUpIik7CiAgICAgaWYgKHRoaXMtPmppdFR5cGUo
KSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCAmJiBtX2RpZEZhaWxGVExDb21waWxhdGlvbikKICAg
ICAgICAgb3V0LnByaW50KCIgKEZUTEZhaWwpIik7CkBAIC01NTQsNyArNTU0LDcgQEAgdm9pZCBD
b2RlQmxvY2s6OmR1bXBTb3VyY2UoKQogCiB2b2lkIENvZGVCbG9jazo6ZHVtcFNvdXJjZShQcmlu
dFN0cmVhbSYgb3V0KQogewotICAgIFNjcmlwdEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBvd25l
ckV4ZWN1dGFibGUoKTsKKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gb3duZXJT
Y3JpcHRFeGVjdXRhYmxlKCk7CiAgICAgaWYgKGV4ZWN1dGFibGUtPmlzRnVuY3Rpb25FeGVjdXRh
YmxlKCkpIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUg
PSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogICAg
ICAgICBTdHJpbmcgc291cmNlID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5zb3VyY2UoKS5wcm92aWRl
cigpLT5nZXRSYW5nZSgKQEAgLTE3NTMsNyArMTc1Myw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2Nr
KFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVu
bGluCiAgICAgc2V0TnVtUGFyYW1ldGVycyh1bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpKTsKIAogICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSB8fCB2bSgpLT5jb250cm9sRmxv
d1Byb2ZpbGVyKCkpCi0gICAgICAgIHZtKCktPmZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSgpLT5y
ZW1vdmVVbmV4ZWN1dGVkUmFuZ2UobV9vd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIG1fb3du
ZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgbV9vd25lckV4ZWN1dGFi
bGUtPnR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7CisgICAgICAgIHZtKCktPmZ1bmN0aW9uSGFz
RXhlY3V0ZWRDYWNoZSgpLT5yZW1vdmVVbmV4ZWN1dGVkUmFuZ2Uob3duZXJFeGVjdXRhYmxlLT5z
b3VyY2VJRCgpLCBvd25lckV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpLCBv
d25lckV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7CiAKICAgICBzZXRDb25z
dGFudFJlZ2lzdGVycyh1bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcnMoKSwgdW5s
aW5rZWRDb2RlQmxvY2stPmNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpKTsKICAg
ICBpZiAodW5saW5rZWRDb2RlQmxvY2stPnVzZXNHbG9iYWxPYmplY3QoKSkKQEAgLTE3ODcsNyAr
MTc4Nyw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhl
Y3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGluCiAgICAgZm9yIChzaXplX3QgY291bnQg
PSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCksIGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkgewogICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5r
ZWRFeGVjdXRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChpKTsKICAgICAg
ICAgaWYgKHZtKCktPnR5cGVQcm9maWxlcigpIHx8IHZtKCktPmNvbnRyb2xGbG93UHJvZmlsZXIo
KSkKLSAgICAgICAgICAgIHZtKCktPmZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSgpLT5pbnNlcnRV
bmV4ZWN1dGVkUmFuZ2UobV9vd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIHVubGlua2VkRXhl
Y3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCksIHVubGlua2VkRXhlY3V0YWJsZS0+
dHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpKTsKKyAgICAgICAgICAgIHZtKCktPmZ1bmN0aW9uSGFz
RXhlY3V0ZWRDYWNoZSgpLT5pbnNlcnRVbmV4ZWN1dGVkUmFuZ2Uob3duZXJFeGVjdXRhYmxlLT5z
b3VyY2VJRCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgp
LCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7CiAgICAgICAg
IG1fZnVuY3Rpb25EZWNsc1tpXS5zZXQoKm1fdm0sIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRF
eGVjdXRhYmxlLT5saW5rKCptX3ZtLCBvd25lckV4ZWN1dGFibGUtPnNvdXJjZSgpKSk7CiAgICAg
fQogCkBAIC0xNzk1LDcgKzE3OTUsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVj
dXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbgogICAgIGZv
ciAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25FeHBy
cygpLCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlv
bkV4cHIoaSk7CiAgICAgICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSB8fCB2bSgpLT5jb250
cm9sRmxvd1Byb2ZpbGVyKCkpCi0gICAgICAgICAgICB2bSgpLT5mdW5jdGlvbkhhc0V4ZWN1dGVk
Q2FjaGUoKS0+aW5zZXJ0VW5leGVjdXRlZFJhbmdlKG1fb3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJ
RCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpLCB1bmxp
bmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7CisgICAgICAgICAgICB2
bSgpLT5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+aW5zZXJ0VW5leGVjdXRlZFJhbmdlKG93
bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmls
aW5nU3RhcnRPZmZzZXQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zm
c2V0KCkpOwogICAgICAgICBtX2Z1bmN0aW9uRXhwcnNbaV0uc2V0KCptX3ZtLCBvd25lckV4ZWN1
dGFibGUsIHVubGlua2VkRXhlY3V0YWJsZS0+bGluaygqbV92bSwgb3duZXJFeGVjdXRhYmxlLT5z
b3VyY2UoKSkpOwogICAgIH0KIApAQCAtMTkyNyw3ICsxOTI3LDcgQEAgQ29kZUJsb2NrOjpDb2Rl
QmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9j
ayogdW5saW4KIAogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDFdID0g
b2JqZWN0QWxsb2NhdGlvblByb2ZpbGU7CiAgICAgICAgICAgICBvYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZS0+aW5pdGlhbGl6ZSgqdm0oKSwKLSAgICAgICAgICAgICAgICBtX293bmVyRXhlY3V0YWJs
ZS5nZXQoKSwgbV9nbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLCBpbmZlcnJlZElubGlu
ZUNhcGFjaXR5KTsKKyAgICAgICAgICAgICAgICBvd25lckV4ZWN1dGFibGUsIG1fZ2xvYmFsT2Jq
ZWN0LT5vYmplY3RQcm90b3R5cGUoKSwgaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0yMTA4LDcgKzIxMDgsNyBAQCBDb2RlQmxvY2s6
OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29k
ZUJsb2NrKiB1bmxpbgogICAgICAgICAgICAgICAgICAgICAvLyB0aGUgdXNlcidzIHByb2dyYW0s
IGdpdmUgdGhlIHR5cGUgcHJvZmlsZXIgc29tZSByYW5nZSB0byBpZGVudGlmeSB0aGVzZSByZXR1
cm4gc3RhdGVtZW50cy4KICAgICAgICAgICAgICAgICAgICAgLy8gQ3VycmVudGx5LCB0aGUgdGV4
dCBvZmZzZXQgdGhhdCBpcyB1c2VkIGFzIGlkZW50aWZpY2F0aW9uIGlzICJmIiBpbiB0aGUgZnVu
Y3Rpb24ga2V5d29yZAogICAgICAgICAgICAgICAgICAgICAvLyBhbmQgaXMgc3RvcmVkIG9uIFR5
cGVMb2NhdGlvbidzIG1fZGl2b3RGb3JGdW5jdGlvbk9mZnNldElmUmV0dXJuU3RhdGVtZW50IG1l
bWJlciB2YXJpYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgZGl2b3RTdGFydCA9IGRpdm90RW5k
ID0gbV9vd25lckV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpOworICAgICAg
ICAgICAgICAgICAgICBkaXZvdFN0YXJ0ID0gZGl2b3RFbmQgPSBvd25lckV4ZWN1dGFibGUtPnR5
cGVQcm9maWxpbmdTdGFydE9mZnNldCgpOwogICAgICAgICAgICAgICAgICAgICBzaG91bGRBbmFs
eXplID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC0yMTE2LDEyICsyMTE2LDEyIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFi
bGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGluCiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIHN0ZDo6cGFpcjxUeXBlTG9jYXRpb24qLCBib29sPiBsb2NhdGlv
blBhaXIgPSB2bSgpLT50eXBlUHJvZmlsZXIoKS0+dHlwZUxvY2F0aW9uQ2FjaGUoKS0+Z2V0VHlw
ZUxvY2F0aW9uKGdsb2JhbFZhcmlhYmxlSUQsCi0gICAgICAgICAgICAgICAgbV9vd25lckV4ZWN1
dGFibGUtPnNvdXJjZUlEKCksIGRpdm90U3RhcnQsIGRpdm90RW5kLCBnbG9iYWxUeXBlU2V0LCB2
bSgpKTsKKyAgICAgICAgICAgICAgICBvd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIGRpdm90
U3RhcnQsIGRpdm90RW5kLCBnbG9iYWxUeXBlU2V0LCB2bSgpKTsKICAgICAgICAgICAgIFR5cGVM
b2NhdGlvbiogbG9jYXRpb24gPSBsb2NhdGlvblBhaXIuZmlyc3Q7CiAgICAgICAgICAgICBib29s
IGlzTmV3TG9jYXRpb24gPSBsb2NhdGlvblBhaXIuc2Vjb25kOwogCiAgICAgICAgICAgICBpZiAo
ZmxhZyA9PSBQcm9maWxlVHlwZUJ5dGVjb2RlRnVuY3Rpb25SZXR1cm5TdGF0ZW1lbnQpCi0gICAg
ICAgICAgICAgICAgbG9jYXRpb24tPm1fZGl2b3RGb3JGdW5jdGlvbk9mZnNldElmUmV0dXJuU3Rh
dGVtZW50ID0gbV9vd25lckV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpOwor
ICAgICAgICAgICAgICAgIGxvY2F0aW9uLT5tX2Rpdm90Rm9yRnVuY3Rpb25PZmZzZXRJZlJldHVy
blN0YXRlbWVudCA9IG93bmVyRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCk7
CiAKICAgICAgICAgICAgIGlmIChzaG91bGRBbmFseXplICYmIGlzTmV3TG9jYXRpb24pCiAgICAg
ICAgICAgICAgICAgdm0oKS0+dHlwZVByb2ZpbGVyKCktPmluc2VydE5ld0xvY2F0aW9uKGxvY2F0
aW9uKTsKQEAgLTIxNjUsNiArMjE2NSwzOSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRF
eGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbgogICAg
IG1faGVhcC0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoc2l6ZW9mKENvZGVCbG9jaykgKyBt
X2luc3RydWN0aW9ucy5zaXplKCkgKiBzaXplb2YoSW5zdHJ1Y3Rpb24pKTsKIH0KIAorI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKK0NvZGVCbG9jazo6Q29kZUJsb2NrKFdlYkFzc2VtYmx5RXhlY3V0
YWJsZSogb3duZXJFeGVjdXRhYmxlLCBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCisgICAgOiBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPnZtKCksIG93bmVyRXhlY3V0
YWJsZSwgZ2xvYmFsT2JqZWN0KQorICAgICwgbV9oZWFwKCZtX2dsb2JhbE9iamVjdC0+dm0oKS5o
ZWFwKQorICAgICwgbV9udW1DYWxsZWVSZWdpc3RlcnMoMCkKKyAgICAsIG1fbnVtVmFycygwKQor
ICAgICwgbV9pc0NvbnN0cnVjdG9yKGZhbHNlKQorICAgICwgbV9zaG91bGRBbHdheXNCZUlubGlu
ZWQoZmFsc2UpCisgICAgLCBtX2RpZEZhaWxGVExDb21waWxhdGlvbihmYWxzZSkKKyAgICAsIG1f
aGFzQmVlbkNvbXBpbGVkV2l0aEZUTChmYWxzZSkKKyAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1l
bnQoZmFsc2UpCisgICAgLCBtX3N0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVEaXNhYmxlZCkKKyAg
ICAsIG1fbnVtQnJlYWtwb2ludHMoMCkKKyAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xvYmFs
T2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIG93bmVyRXhlY3V0YWJsZSkKKyAgICAsIG1f
dm0oJnZtKQorICAgICwgbV9pc1N0cmljdE1vZGUoZmFsc2UpCisgICAgLCBtX25lZWRzQWN0aXZh
dGlvbihmYWxzZSkKKyAgICAsIG1fbWF5QmVFeGVjdXRpbmcoZmFsc2UpCisgICAgLCBtX2NvZGVU
eXBlKEZ1bmN0aW9uQ29kZSkKKyAgICAsIG1fb3NyRXhpdENvdW50ZXIoMCkKKyAgICAsIG1fb3B0
aW1pemF0aW9uRGVsYXlDb3VudGVyKDApCisgICAgLCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyKDApCisjaWYgRU5BQkxFKEpJVCkKKyAgICAsIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUoREZH
OjpDYW5ub3RDb21waWxlKQorI2VuZGlmCit7CisgICAgQVNTRVJUKG1faGVhcC0+aXNEZWZlcnJl
ZCgpKTsKKworICAgIG1faGVhcC0+bV9jb2RlQmxvY2tzLmFkZCh0aGlzKTsKKyAgICBtX2hlYXAt
PnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVvZihDb2RlQmxvY2spKTsKK30KKyNlbmRp
ZgorCiBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogewogICAgIGlmIChtX3ZtLT5tX3BlckJ5dGVj
b2RlUHJvZmlsZXIpCkBAIC0yNTEwLDcgKzI1NDMsMTEgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0
V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB2b2lkIENvZGVCbG9jazo6Zmlu
YWxpemVVbmNvbmRpdGlvbmFsbHkoKQogewogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9
IG1fdm0tPmludGVycHJldGVyOwotICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQo
aml0VHlwZSgpKSkgeworICAgIGJvb2wgb3duZWRCeVdlYkFzc2VtYmx5RXhlY3V0YWJsZSA9IGZh
bHNlOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBvd25lZEJ5V2ViQXNzZW1ibHlFeGVj
dXRhYmxlID0gbV9vd25lckV4ZWN1dGFibGUtPmlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCk7Cisj
ZW5kaWYKKyAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkgJiYg
IW93bmVkQnlXZWJBc3NlbWJseUV4ZWN1dGFibGUpIHsKICAgICAgICAgY29uc3QgVmVjdG9yPHVu
c2lnbmVkPiYgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMgPSBtX3VubGlua2VkQ29kZS0+cHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMoKTsKICAgICAgICAgZm9yIChzaXplX3Qgc2l6ZSA9IHBy
b3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsK
ICAgICAgICAgICAgIEluc3RydWN0aW9uKiBjdXJJbnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnMo
KVtwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tpXV07CkBAIC0yOTE1LDcgKzI5NTIsNyBAQCBI
YW5kbGVySW5mbyogQ29kZUJsb2NrOjpoYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQsIFJlcXVpcgogdW5zaWduZWQgQ29kZUJsb2NrOjpsaW5lTnVtYmVyRm9y
Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwotICAgIHJldHVy
biBtX293bmVyRXhlY3V0YWJsZS0+Zmlyc3RMaW5lKCkgKyBtX3VubGlua2VkQ29kZS0+bGluZU51
bWJlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICByZXR1cm4gb3duZXJT
Y3JpcHRFeGVjdXRhYmxlKCktPmZpcnN0TGluZSgpICsgbV91bmxpbmtlZENvZGUtPmxpbmVOdW1i
ZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCk7CiB9CiAKIHVuc2lnbmVkIENvZGVC
bG9jazo6Y29sdW1uTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQpCkBAIC0yOTM0LDcgKzI5NzEsNyBAQCB2b2lkIENvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdl
Rm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCYgZAogICAgIG1f
dW5saW5rZWRDb2RlLT5leHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9m
ZnNldCwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNvbHVtbik7CiAgICAg
ZGl2b3QgKz0gbV9zb3VyY2VPZmZzZXQ7CiAgICAgY29sdW1uICs9IGxpbmUgPyAxIDogZmlyc3RM
aW5lQ29sdW1uT2Zmc2V0KCk7Ci0gICAgbGluZSArPSBtX293bmVyRXhlY3V0YWJsZS0+Zmlyc3RM
aW5lKCk7CisgICAgbGluZSArPSBvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+Zmlyc3RMaW5lKCk7
CiB9CiAKIGJvb2wgQ29kZUJsb2NrOjpoYXNPcERlYnVnRm9yTGluZUFuZENvbHVtbih1bnNpZ25l
ZCBsaW5lLCB1bnNpZ25lZCBjb2x1bW4pCkBAIC0zMDExLDEyICszMDQ4LDEyIEBAIHZvaWQgQ29k
ZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIExMSW50Q2Fs
bExpbmtJbmZvKiBpbmNvCiAKIHZvaWQgQ29kZUJsb2NrOjppbnN0YWxsKCkKIHsKLSAgICBvd25l
ckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUodGhpcyk7CisgICAgb3duZXJTY3JpcHRFeGVjdXRh
YmxlKCktPmluc3RhbGxDb2RlKHRoaXMpOwogfQogCiBQYXNzUmVmUHRyPENvZGVCbG9jaz4gQ29k
ZUJsb2NrOjpuZXdSZXBsYWNlbWVudCgpCiB7Ci0gICAgcmV0dXJuIG93bmVyRXhlY3V0YWJsZSgp
LT5uZXdSZXBsYWNlbWVudENvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQoKSk7CisgICAg
cmV0dXJuIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5uZXdSZXBsYWNlbWVudENvZGVCbG9ja0Zv
cihzcGVjaWFsaXphdGlvbktpbmQoKSk7CiB9CiAKICNpZiBFTkFCTEUoSklUKQpAQCAtMzA1MSw2
ICszMDg4LDE4IEBAIERGRzo6Q2FwYWJpbGl0eUxldmVsIEZ1bmN0aW9uQ29kZUJsb2NrOjpjYXBh
YmlsaXR5TGV2ZWxJbnRlcm5hbCgpCiAgICAgICAgIHJldHVybiBERkc6OmZ1bmN0aW9uRm9yQ29u
c3RydWN0Q2FwYWJpbGl0eUxldmVsKHRoaXMpOwogICAgIHJldHVybiBERkc6OmZ1bmN0aW9uRm9y
Q2FsbENhcGFiaWxpdHlMZXZlbCh0aGlzKTsKIH0KKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
K0NvZGVCbG9jayogV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnJlcGxhY2VtZW50KCkKK3sKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKworREZHOjpDYXBhYmlsaXR5TGV2ZWwgV2ViQXNzZW1ibHlDb2Rl
QmxvY2s6OmNhcGFiaWxpdHlMZXZlbEludGVybmFsKCkKK3sKKyAgICByZXR1cm4gREZHOjpDYW5u
b3RDb21waWxlOworfQorI2VuZGlmCiAjZW5kaWYKIAogdm9pZCBDb2RlQmxvY2s6OmpldHRpc29u
KFByb2ZpbGVyOjpKZXR0aXNvblJlYXNvbiByZWFzb24sIFJlb3B0aW1pemF0aW9uTW9kZSBtb2Rl
LCBjb25zdCBGaXJlRGV0YWlsKiBkZXRhaWwpCkBAIC0zNjAzLDYgKzM2NTIsMTAgQEAgdm9pZCBD
b2RlQmxvY2s6OnVwZGF0ZUFsbEFycmF5UHJlZGljdGlvbnMoKQogCiB2b2lkIENvZGVCbG9jazo6
dXBkYXRlQWxsUHJlZGljdGlvbnMoKQogeworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBp
ZiAobV9vd25lckV4ZWN1dGFibGUtPmlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCkpCisgICAgICAg
IHJldHVybjsKKyNlbmRpZgogICAgIHVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zKCk7
CiAgICAgdXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucygpOwogfQpAQCAtMzkyMCw3ICszOTczLDcg
QEAgdm9pZCBDb2RlQmxvY2s6Omluc2VydEJhc2ljQmxvY2tCb3VuZGFyaWVzRm9yQ29udHJvbEZs
b3dQcm9maWxlcihWZWN0b3I8SW5zdHJ1Y3QKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZt
KCktPmludGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbnNbZW5kSWR4XS51Lm9wY29k
ZSkgPT0gb3BfcHJvZmlsZV9jb250cm9sX2Zsb3cpOwogICAgICAgICAgICAgYmFzaWNCbG9ja0Vu
ZE9mZnNldCA9IGluc3RydWN0aW9uc1tlbmRJZHggKyAxXS51Lm9wZXJhbmQgLSAxOwogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgYmFzaWNCbG9ja0VuZE9mZnNldCA9IG1fc291cmNlT2Zm
c2V0ICsgbV9vd25lckV4ZWN1dGFibGUtPnNvdXJjZSgpLmxlbmd0aCgpIC0gMTsgLy8gT2Zmc2V0
IGJlZm9yZSB0aGUgY2xvc2luZyBicmFjZS4KKyAgICAgICAgICAgIGJhc2ljQmxvY2tFbmRPZmZz
ZXQgPSBtX3NvdXJjZU9mZnNldCArIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5zb3VyY2UoKS5s
ZW5ndGgoKSAtIDE7IC8vIE9mZnNldCBiZWZvcmUgdGhlIGNsb3NpbmcgYnJhY2UuCiAgICAgICAg
ICAgICBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQgPSBzdGQ6Om1pbihiYXNpY0Jsb2NrU3RhcnRPZmZz
ZXQsIGJhc2ljQmxvY2tFbmRPZmZzZXQpOyAvLyBTb21lIHN0YXJ0IG9mZnNldHMgbWF5IGJlIGF0
IHRoZSBjbG9zaW5nIGJyYWNlLCBlbnN1cmUgaXQgaXMgdGhlIG9mZnNldCBiZWZvcmUuCiAgICAg
ICAgIH0KIApAQCAtMzk0OCw3ICs0MDAxLDcgQEAgdm9pZCBDb2RlQmxvY2s6Omluc2VydEJhc2lj
QmxvY2tCb3VuZGFyaWVzRm9yQ29udHJvbEZsb3dQcm9maWxlcihWZWN0b3I8SW5zdHJ1Y3QKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgQmFzaWNCbG9ja0xvY2F0
aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSB2bSgpLT5jb250cm9sRmxvd1Byb2ZpbGVyKCktPmdl
dEJhc2ljQmxvY2tMb2NhdGlvbihtX293bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgYmFzaWNC
bG9ja1N0YXJ0T2Zmc2V0LCBiYXNpY0Jsb2NrRW5kT2Zmc2V0KTsKKyAgICAgICAgQmFzaWNCbG9j
a0xvY2F0aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSB2bSgpLT5jb250cm9sRmxvd1Byb2ZpbGVy
KCktPmdldEJhc2ljQmxvY2tMb2NhdGlvbihvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+c291cmNl
SUQoKSwgYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0LCBiYXNpY0Jsb2NrRW5kT2Zmc2V0KTsKIAogICAg
ICAgICAvLyBGaW5kIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgZW5jbG9zZWQgd2l0aGluIHRoZSBy
YW5nZTogW2Jhc2ljQmxvY2tTdGFydE9mZnNldCwgYmFzaWNCbG9ja0VuZE9mZnNldF0KICAgICAg
ICAgLy8gYW5kIGluc2VydCB0aGVzZSBmdW5jdGlvbnMnIHN0YXJ0L2VuZCBvZmZzZXRzIGFzIGdh
cHMgaW4gdGhlIGN1cnJlbnQgQmFzaWNCbG9ja0xvY2F0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4IDk0OTk0MDU2NDNhYTkxM2RjNzhlNzk5YWEw
Y2M1NjcyZWIzNmVmM2MuLmNiOWViZDYxYjVkZGZlMGNiM2Y2N2YzMTBkZjg4MTc3ZGQ2MzU0OWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKQEAgLTk2LDYg
Kzk2LDkgQEAgcHJvdGVjdGVkOgogICAgIENvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsIENv
ZGVCbG9jayYgb3RoZXIpOwogICAgICAgICAKICAgICBDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayosIEpTU2NvcGUqLCBQYXNzUmVm
UHRyPFNvdXJjZVByb3ZpZGVyPiwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBmaXJz
dExpbmVDb2x1bW5PZmZzZXQpOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBDb2RlQmxv
Y2soV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFZNJiwgSlNHbG9iYWxP
YmplY3QqKTsKKyNlbmRpZgogCiAgICAgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0PiBtX2ds
b2JhbE9iamVjdDsKICAgICBIZWFwKiBtX2hlYXA7CkBAIC0zMDMsNyArMzA2LDggQEAgcHVibGlj
OgogCiAgICAgdm9pZCBqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25SZWFzb24sIFJlb3B0aW1p
emF0aW9uTW9kZSA9IERvbnRDb3VudFJlb3B0aW1pemF0aW9uLCBjb25zdCBGaXJlRGV0YWlsKiA9
IG51bGxwdHIpOwogICAgIAotICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpOyB9CisgICAgRXhlY3V0YWJs
ZUJhc2UqIG93bmVyRXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJFeGVjdXRhYmxl
LmdldCgpOyB9CisgICAgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJTY3JpcHRFeGVjdXRhYmxlKCkg
Y29uc3QgeyByZXR1cm4ganNDYXN0PFNjcmlwdEV4ZWN1dGFibGUqPihtX293bmVyRXhlY3V0YWJs
ZS5nZXQoKSk7IH0KIAogICAgIHZvaWQgc2V0Vk0oVk0qIHZtKSB7IG1fdm0gPSB2bTsgfQogICAg
IFZNKiB2bSgpIHsgcmV0dXJuIG1fdm07IH0KQEAgLTM0Niw3ICszNTAsMTUgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9uZWVkc0FjdGl2YXRpb247CiAgICAgfQogICAgIAotICAgIENvZGVU
eXBlIGNvZGVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvZGVUeXBlKCk7
IH0KKyAgICBDb2RlVHlwZSBjb2RlVHlwZSgpIGNvbnN0CisgICAgeworI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKKyAgICAgICAgaWYgKG1fb3duZXJFeGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhl
Y3V0YWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uQ29kZTsKKyNlbmRpZgorICAg
ICAgICByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvZGVUeXBlKCk7CisgICAgfQorCiAgICAgUHV0
UHJvcGVydHlTbG90OjpDb250ZXh0IHB1dEJ5SWRDb250ZXh0KCkgY29uc3QKICAgICB7CiAgICAg
ICAgIGlmIChjb2RlVHlwZSgpID09IEV2YWxDb2RlKQpAQCAtOTgzLDcgKzk5NSw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICB1bnNpZ25lZCBtX251bUJyZWFrcG9pbnRzIDogMzA7CiAgICAgICAg
IH07CiAgICAgfTsKLSAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhlY3V0YWJsZT4gbV9vd25lckV4
ZWN1dGFibGU7CisgICAgV3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVCYXNlPiBtX293bmVyRXhlY3V0
YWJsZTsKICAgICBWTSogbV92bTsKIAogICAgIFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4g
bV9pbnN0cnVjdGlvbnM7CkBAIC0xMTM0LDYgKzExNDYsMjcgQEAgcHJvdGVjdGVkOgogI2VuZGlm
CiB9OwogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorY2xhc3MgV2ViQXNzZW1ibHlDb2RlQmxv
Y2sgOiBwdWJsaWMgQ29kZUJsb2NrIHsKK3B1YmxpYzoKKyAgICBXZWJBc3NlbWJseUNvZGVCbG9j
ayhDb3B5UGFyc2VkQmxvY2tUYWcsIFdlYkFzc2VtYmx5Q29kZUJsb2NrJiBvdGhlcikKKyAgICAg
ICAgOiBDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKKyAgICB7CisgICAgfQorCisg
ICAgV2ViQXNzZW1ibHlDb2RlQmxvY2soV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBvd25lckV4ZWN1
dGFibGUsIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICAgICAgOiBD
b2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCB2bSwgZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICB9
CisKKyNpZiBFTkFCTEUoSklUKQorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgQ29kZUJsb2NrKiBy
ZXBsYWNlbWVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgREZHOjpDYXBhYmlsaXR5TGV2ZWwg
Y2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKSBvdmVycmlkZTsKKyNlbmRpZgorfTsKKyNlbmRpZgor
CiBpbmxpbmUgUmVnaXN0ZXImIEV4ZWNTdGF0ZTo6cihpbnQgaW5kZXgpCiB7CiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2soKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCmluZGV4IDM1MzgzNzI3MzAzNjBjOTMwYTFlNmY3ZjY4
N2U1YTkzNDBkYjFiNDAuLmM2ZjE0YTk0MTU4MGJiNGJmYzUzNTc5YWI1Mzg2MDU4ZjM5Y2I4MjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcApAQCAtMjI3
LDcgKzIyNyw3IEBAIHZvaWQgRGVidWdnZXI6OnJlZ2lzdGVyQ29kZUJsb2NrKENvZGVCbG9jayog
Y29kZUJsb2NrKQogCiB2b2lkIERlYnVnZ2VyOjp0b2dnbGVCcmVha3BvaW50KENvZGVCbG9jayog
Y29kZUJsb2NrLCBCcmVha3BvaW50JiBicmVha3BvaW50LCBCcmVha3BvaW50U3RhdGUgZW5hYmxl
ZE9yTm90KQogewotICAgIFNjcmlwdEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpOworICAgIFNjcmlwdEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBj
b2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOwogCiAgICAgU291cmNlSUQgc291cmNl
SUQgPSBzdGF0aWNfY2FzdDxTb3VyY2VJRD4oZXhlY3V0YWJsZS0+c291cmNlSUQoKSk7CiAgICAg
aWYgKGJyZWFrcG9pbnQuc291cmNlSUQgIT0gc291cmNlSUQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAppbmRleCBiZjA5M2U4
OWI0NGJhZjM1NTYxMTUxMTc0NjI3N2ExMDFjN2E3MjZiLi5kMzgzYzNmZmQwODIwZjhhMmI3MWU4
N2M0NTUyZGY3N2QwNjU0ZjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKQEAgLTI0Miw3ICsyNDIsNyBAQCBTb3VyY2VJ
RCBEZWJ1Z2dlckNhbGxGcmFtZTo6c291cmNlSURGb3JDYWxsRnJhbWUoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
OwogICAgIGlmICghY29kZUJsb2NrKQogICAgICAgICByZXR1cm4gbm9Tb3VyY2VJRDsKLSAgICBy
ZXR1cm4gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+c291cmNlSUQoKTsKKyAgICByZXR1
cm4gY29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+c291cmNlSUQoKTsKIH0KIAog
SlNWYWx1ZSBEZWJ1Z2dlckNhbGxGcmFtZTo6dGhpc1ZhbHVlRm9yQ2FsbEZyYW1lKENhbGxGcmFt
ZSogY2FsbEZyYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAppbmRleCAwYTE2MjRlNzMxMTc2NGYzNzcwNmRiYjQxOWY2M2VlYjc2MmJiYjQ3
Li43ZjY1MDUyZGE4ZjJmMWY5NzQzNGM4Y2I3YTZhMjBmYzQyMjZlNTA3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtOTM5LDcgKzkz
OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIENvZGVCbG9jayogbV9wcm9maWxlZEJsb2NrOwogICAg
ICAgICBJbmxpbmVDYWxsRnJhbWUqIG1faW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAKLSAgICAg
ICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKTsgfQorICAgICAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxl
KCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOyB9CiAgICAg
ICAgIAogICAgICAgICBRdWVyeWFibGVFeGl0UHJvZmlsZSBtX2V4aXRQcm9maWxlOwogICAgICAg
ICAKQEAgLTEyNTIsOCArMTI1Miw4IEBAIHVuc2lnbmVkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmlu
Z0Nvc3QoQ2FsbFZhcmlhbnQgY2FsbGVlLCBpbnQgYXJndW1lbnRDb3VudEluY2x1CiAgICAgICAg
IGRhdGFMb2coIiAgICBNaWdodCBpbmxpbmUgZnVuY3Rpb246ICIsIG1pZ2h0SW5saW5lRnVuY3Rp
b25Gb3IoY29kZUJsb2NrLCBraW5kKSwgIlxuIik7CiAgICAgICAgIGRhdGFMb2coIiAgICBNaWdo
dCBjb21waWxlIGZ1bmN0aW9uOiAiLCBtaWdodENvbXBpbGVGdW5jdGlvbkZvcihjb2RlQmxvY2ss
IGtpbmQpLCAiXG4iKTsKICAgICAgICAgZGF0YUxvZygiICAgIElzIHN1cHBvcnRlZCBmb3IgaW5s
aW5pbmc6ICIsIGlzU3VwcG9ydGVkRm9ySW5saW5pbmcoY29kZUJsb2NrKSwgIlxuIik7Ci0gICAg
ICAgIGRhdGFMb2coIiAgICBOZWVkcyBhY3RpdmF0aW9uOiAiLCBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLT5uZWVkc0FjdGl2YXRpb24oKSwgIlxuIik7Ci0gICAgICAgIGRhdGFMb2coIiAg
ICBJcyBpbmxpbmluZyBjYW5kaWRhdGU6ICIsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkt
PmlzSW5saW5pbmdDYW5kaWRhdGUoKSwgIlxuIik7CisgICAgICAgIGRhdGFMb2coIiAgICBOZWVk
cyBhY3RpdmF0aW9uOiAiLCBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5uZWVk
c0FjdGl2YXRpb24oKSwgIlxuIik7CisgICAgICAgIGRhdGFMb2coIiAgICBJcyBpbmxpbmluZyBj
YW5kaWRhdGU6ICIsIGNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPmlzSW5saW5p
bmdDYW5kaWRhdGUoKSwgIlxuIik7CiAgICAgfQogICAgIGlmICghY2FuSW5saW5lKGNhcGFiaWxp
dHlMZXZlbCkpIHsKICAgICAgICAgaWYgKHZlcmJvc2UpCkBAIC00NDM2LDcgKzQ0MzYsNyBAQCBC
eXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSgKICAgICAg
ICAgYnl0ZUNvZGVQYXJzZXItPm1fZ3JhcGguZnJlZXplKGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCkpOwogICAgICAgICAvLyBUaGUgb3duZXIgaXMgdGhlIG1hY2hpbmUgY29kZSBibG9jaywg
YW5kIHdlIGFscmVhZHkgaGF2ZSBhIGJhcnJpZXIgb24gdGhhdCB3aGVuIHRoZQogICAgICAgICAv
LyBwbGFuIGZpbmlzaGVzLgotICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpOworICAg
ICAgICBtX2lubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVy
KGNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRhYmxlKCkpOwogICAgICAgICBtX2lubGluZUNh
bGxGcmFtZS0+c2V0U3RhY2tPZmZzZXQoaW5saW5lQ2FsbEZyYW1lU3RhcnQub2Zmc2V0KCkgLSBK
U1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplKTsKICAgICAgICAgaWYgKGNhbGxlZSkgewogICAg
ICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5ID0gVmFsdWVSZWNvdmVy
eTo6Y29uc3RhbnQoY2FsbGVlKTsKQEAgLTQ1MjksNyArNDUyOSw3IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkKICAgICAgICAgfQogICAgICAgICBkYXRhTG9nKAogICAg
ICAgICAgICAgIjogbmVlZHNBY3RpdmF0aW9uID0gIiwgY29kZUJsb2NrLT5uZWVkc0FjdGl2YXRp
b24oKSwKLSAgICAgICAgICAgICIsIGlzU3RyaWN0TW9kZSA9ICIsIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpLCAiXG4iKTsKKyAgICAgICAgICAgICIsIGlzU3Ry
aWN0TW9kZSA9ICIsIGNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPmlzU3RyaWN0
TW9kZSgpLCAiXG4iKTsKICAgICAgICAgY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKS0+ZHVt
cEJ5dGVjb2RlKCk7CiAgICAgfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDYXBhYmlsaXRpZXMuY3BwCmluZGV4IDkwNDRhMDc5ZDRmNDc1MTBkZjgwMDM4MmZhYTQ2ZDQw
MmYwZjViMmMuLmJlNjJiOWYxNWI2ODE5NTdiMDdjYWM1YTRjZDQ1NmU1ZDUyNzYwZDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKQEAgLTQ0LDMy
ICs0NCwzNiBAQCBib29sIGlzU3VwcG9ydGVkKCkKIAogYm9vbCBpc1N1cHBvcnRlZEZvcklubGlu
aW5nKENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIHJldHVybiBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLT5pc0lubGluaW5nQ2FuZGlkYXRlKCk7CisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorICAgIGlmIChjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pc1dlYkFzc2VtYmx5
RXhlY3V0YWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICByZXR1cm4g
Y29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+aXNJbmxpbmluZ0NhbmRpZGF0ZSgp
OwogfQogCiBib29sIG1pZ2h0Q29tcGlsZUV2YWwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAg
ICAgcmV0dXJuIGlzU3VwcG9ydGVkKCkKICAgICAgICAgJiYgY29kZUJsb2NrLT5pbnN0cnVjdGlv
bkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0
aW9uQ291bnQoKQotICAgICAgICAmJiBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pc09r
VG9PcHRpbWl6ZSgpOworICAgICAgICAmJiBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJs
ZSgpLT5pc09rVG9PcHRpbWl6ZSgpOwogfQogYm9vbCBtaWdodENvbXBpbGVQcm9ncmFtKENvZGVC
bG9jayogY29kZUJsb2NrKQogewogICAgIHJldHVybiBpc1N1cHBvcnRlZCgpCiAgICAgICAgICYm
IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1PcHRpbWl6
YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCkKLSAgICAgICAgJiYgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKS0+aXNPa1RvT3B0aW1pemUoKTsKKyAgICAgICAgJiYgY29kZUJsb2Nr
LT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+aXNPa1RvT3B0aW1pemUoKTsKIH0KIGJvb2wgbWln
aHRDb21waWxlRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIHJl
dHVybiBpc1N1cHBvcnRlZCgpCiAgICAgICAgICYmIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3Vu
dCgpIDw9IE9wdGlvbnM6Om1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNv
dW50KCkKLSAgICAgICAgJiYgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aXNPa1RvT3B0
aW1pemUoKTsKKyAgICAgICAgJiYgY29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+
aXNPa1RvT3B0aW1pemUoKTsKIH0KIGJvb2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1
Y3QoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgcmV0dXJuIGlzU3VwcG9ydGVkKCkKICAg
ICAgICAgJiYgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11
bU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKQotICAgICAgICAmJiBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pc09rVG9PcHRpbWl6ZSgpOworICAgICAgICAmJiBj
b2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5pc09rVG9PcHRpbWl6ZSgpOwogfQog
CiBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayogY29kZUJsb2NrKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCmluZGV4IDRkYjQ3MWIxZmRhOTVlODNkOTY5
OTk4YmY3NjFjZDIwZjQ3M2Y5MTUuLjQ2NDc2ZDQ3OGIzZGYxMGQ3NWRmZjQ5YmEzMTBjNTllYTk4
N2UwNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKQEAgLTM0NSw3ICszNDUs
NyBAQCBwdWJsaWM6CiAgICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZUZvcihJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKICAgICB7CiAgICAgICAgIGlmICghaW5saW5lQ2Fs
bEZyYW1lKQotICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KTsKKyAgICAgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRhYmxl
KCk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxl
LmdldCgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAK
aW5kZXggMDJkYmU0ZmE1ZGQzNDI0ZWVkM2M1MTJlODliNjE0YWVkMmI4MDI4MC4uZDg1NzY1ZjBm
NjBmOTU0OWFjMGYyMjc3MDM5MzNiYjY3YjY1Y2I3ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAKQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkKiBwcmVwYXJlT1NS
RW50cnkoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0
ZWNvZGVJbgogICAgIHNhbml0aXplU3RhY2tGb3JWTSh2bSk7CiAgICAgCiAgICAgaWYgKGJ5dGVj
b2RlSW5kZXgpCi0gICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPnNldERpZFRy
eVRvRW50ZXJJbkxvb3AodHJ1ZSk7CisgICAgICAgIGNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVj
dXRhYmxlKCktPnNldERpZFRyeVRvRW50ZXJJbkxvb3AodHJ1ZSk7CiAgICAgCiAgICAgaWYgKGNv
ZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVENvZGU6OkRGR0pJVCkgewogICAgICAgICBSRUxFQVNF
X0FTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0
b3J5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNr
RmFjdG9yeS5jcHAKaW5kZXggZjMzZDQwNWNiYWNkNjYzMWNiMjk0NmYwNWVkOWJmMzMxYTIzZmE0
OS4uZmQ3MTI3NGEzNTYxNGIyZjA3NWY1NzVhYTE1YjE5YjFiMjdmY2I5ZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0Zh
Y3RvcnkuY3BwCkBAIC02Niw2ICs2NiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAobV9yZW1haW5pbmdDYXBhY2l0eUZvckZyYW1lQ2FwdHVyZSkgeworI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKKyAgICAgICAgICAgIGlmICh2aXNpdG9yLT5jb2RlQmxvY2soKS0+b3duZXJF
eGVjdXRhYmxlKCktPmlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CisjZW5kaWYKICAgICAgICAgICAgIHVuc2ln
bmVkIGxpbmU7CiAgICAgICAgICAgICB1bnNpZ25lZCBjb2x1bW47CiAgICAgICAgICAgICB2aXNp
dG9yLT5jb21wdXRlTGluZUFuZENvbHVtbihsaW5lLCBjb2x1bW4pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggMTA1MDFjMWQw
MTZiMTllZWVjYTRkMjg1ZDI2NjVlY2NiYWY4MmI0Zi4uNjZmYThlY2Y1NDA2MzU4NmNkNGFhYThm
Yjg0OTdiYzYxNTFlYjAzNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0xNjgsNyArMTY4LDcgQEAgSlNWYWx1ZSBldmFsKENh
bGxGcmFtZSogY2FsbEZyYW1lKQogICAgICAgICBBU1NFUlQoIWNhbGxGcmFtZS0+dm0oKS5leGNl
cHRpb24oKSk7CiAKICAgICAgICAgVGhpc1REWk1vZGUgdGhpc1REWk1vZGUgPSBjYWxsZXJDb2Rl
QmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPmNvbnN0cnVjdG9yS2luZCgpID09IENvbnN0cnVj
dG9yS2luZDo6RGVyaXZlZCA/IFRoaXNURFpNb2RlOjpBbHdheXNDaGVjayA6IFRoaXNURFpNb2Rl
OjpDaGVja0lmTmVlZGVkOwotICAgICAgICBldmFsID0gY2FsbGVyQ29kZUJsb2NrLT5ldmFsQ29k
ZUNhY2hlKCkuZ2V0U2xvdyhjYWxsRnJhbWUsIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIGNhbGxlckNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCksIHRoaXNURFpNb2RlLCBwcm9n
cmFtU291cmNlLCBjYWxsZXJTY29wZUNoYWluKTsKKyAgICAgICAgZXZhbCA9IGNhbGxlckNvZGVC
bG9jay0+ZXZhbENvZGVDYWNoZSgpLmdldFNsb3coY2FsbEZyYW1lLCBjYWxsZXJDb2RlQmxvY2st
Pm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLCBjYWxsZXJDb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgp
LCB0aGlzVERaTW9kZSwgcHJvZ3JhbVNvdXJjZSwgY2FsbGVyU2NvcGVDaGFpbik7CiAgICAgICAg
IGlmICghZXZhbCkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KQEAg
LTUxNSw2ICs1MTUsMTYgQEAgU3RyaW5nIFN0YWNrRnJhbWU6OnRvU3RyaW5nKENhbGxGcmFtZSog
Y2FsbEZyYW1lKQogICAgIHJldHVybiB0cmFjZUJ1aWxkLnRvU3RyaW5nKCkuaW1wbCgpOwogfQog
CitzdGF0aWMgaW5saW5lIGJvb2wgaXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoRXhlY3V0YWJsZUJh
c2UqIGV4ZWN1dGFibGUpCit7CisjaWYgIUVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBVTlVTRURf
UEFSQU0oZXhlY3V0YWJsZSk7CisgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKKyAgICByZXR1cm4g
ZXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKTsKKyNlbmRpZgorfQorCiBjbGFz
cyBHZXRTdGFja1RyYWNlRnVuY3RvciB7CiBwdWJsaWM6CiAgICAgR2V0U3RhY2tUcmFjZUZ1bmN0
b3IoVk0mIHZtLCBWZWN0b3I8U3RhY2tGcmFtZT4mIHJlc3VsdHMsIHNpemVfdCByZW1haW5pbmdD
YXBhY2l0eSkKQEAgLTUyOCwxNSArNTM4LDE3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIFZN
JiB2bSA9IG1fdm07CiAgICAgICAgIGlmIChtX3JlbWFpbmluZ0NhcGFjaXR5Rm9yRnJhbWVDYXB0
dXJlKSB7Ci0gICAgICAgICAgICBpZiAodmlzaXRvci0+aXNKU0ZyYW1lKCkgJiYgIXZpc2l0b3It
PmNvZGVCbG9jaygpLT51bmxpbmtlZENvZGVCbG9jaygpLT5pc0J1aWx0aW5GdW5jdGlvbigpKSB7
CisgICAgICAgICAgICBpZiAodmlzaXRvci0+aXNKU0ZyYW1lKCkKKyAgICAgICAgICAgICAgICAm
JiAhaXNXZWJBc3NlbWJseUV4ZWN1dGFibGUodmlzaXRvci0+Y29kZUJsb2NrKCktPm93bmVyRXhl
Y3V0YWJsZSgpKQorICAgICAgICAgICAgICAgICYmICF2aXNpdG9yLT5jb2RlQmxvY2soKS0+dW5s
aW5rZWRDb2RlQmxvY2soKS0+aXNCdWlsdGluRnVuY3Rpb24oKSkgewogICAgICAgICAgICAgICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJsb2NrKCk7CiAgICAgICAgICAg
ICAgICAgU3RhY2tGcmFtZSBzID0gewogICAgICAgICAgICAgICAgICAgICBTdHJvbmc8SlNPYmpl
Y3Q+KHZtLCB2aXNpdG9yLT5jYWxsZWUoKSksCiAgICAgICAgICAgICAgICAgICAgIGdldFN0YWNr
RnJhbWVDb2RlVHlwZSh2aXNpdG9yKSwKLSAgICAgICAgICAgICAgICAgICAgU3Ryb25nPFNjcmlw
dEV4ZWN1dGFibGU+KHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSwKKyAgICAgICAg
ICAgICAgICAgICAgU3Ryb25nPFNjcmlwdEV4ZWN1dGFibGU+KHZtLCBjb2RlQmxvY2stPm93bmVy
U2NyaXB0RXhlY3V0YWJsZSgpKSwKICAgICAgICAgICAgICAgICAgICAgU3Ryb25nPFVubGlua2Vk
Q29kZUJsb2NrPih2bSwgY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpKSwKICAgICAgICAg
ICAgICAgICAgICAgY29kZUJsb2NrLT5zb3VyY2UoKSwKLSAgICAgICAgICAgICAgICAgICAgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+Zmlyc3RMaW5lKCksCisgICAgICAgICAgICAgICAg
ICAgIGNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPmZpcnN0TGluZSgpLAogICAg
ICAgICAgICAgICAgICAgICBjb2RlQmxvY2stPmZpcnN0TGluZUNvbHVtbk9mZnNldCgpLAogICAg
ICAgICAgICAgICAgICAgICBjb2RlQmxvY2stPnNvdXJjZU9mZnNldCgpLAogICAgICAgICAgICAg
ICAgICAgICB2aXNpdG9yLT5ieXRlY29kZU9mZnNldCgpLApAQCAtNjI5LDcgKzY0MSw3IEBAIHB1
YmxpYzoKICAgICAgICAgbV9jb2RlQmxvY2sgPSB2aXNpdG9yLT5jb2RlQmxvY2soKTsKICAgICAg
ICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSB2aXNpdG9yLT5ieXRlY29kZU9mZnNldCgpOwog
Ci0gICAgICAgIGlmIChtX2lzVGVybWluYXRpb24gfHwgIShtX2hhbmRsZXIgPSBtX2NvZGVCbG9j
ayA/IG1fY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQp
IDogbnVsbHB0cikpIHsKKyAgICAgICAgaWYgKG1faXNUZXJtaW5hdGlvbiB8fCAhKG1faGFuZGxl
ciA9IChtX2NvZGVCbG9jayAmJiAhaXNXZWJBc3NlbWJseUV4ZWN1dGFibGUobV9jb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpKSkgPyBtX2NvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlT2Zm
c2V0KGJ5dGVjb2RlT2Zmc2V0KSA6IG51bGxwdHIpKSB7CiAgICAgICAgICAgICBpZiAoIXVud2lu
ZENhbGxGcmFtZSh2aXNpdG9yKSkgewogICAgICAgICAgICAgICAgIGlmIChMZWdhY3lQcm9maWxl
ciogcHJvZmlsZXIgPSB2bS5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgICAgICAgICAgICAg
cHJvZmlsZXItPmV4Y2VwdGlvblVud2luZChtX2NhbGxGcmFtZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCmluZGV4IGQzNzZkYjQy
MTdmYTYxZTZjMzJlYTlkYTI3YTc1YmZiMDMzMGIzYjcuLjNmMmI5MTQwNDUxZDQ4ODM0YTlmNzEw
MzM0NjRhMjE0N2QxYmRiNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCkBAIC0yMjEsNyArMjIxLDcgQEAgU3RyaW5nIFN0YWNr
VmlzaXRvcjo6RnJhbWU6OnNvdXJjZVVSTCgpCiAgICAgY2FzZSBDb2RlVHlwZTo6RXZhbDoKICAg
ICBjYXNlIENvZGVUeXBlOjpGdW5jdGlvbjoKICAgICBjYXNlIENvZGVUeXBlOjpHbG9iYWw6IHsK
LSAgICAgICAgU3RyaW5nIHNvdXJjZVVSTCA9IGNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUo
KS0+c291cmNlVVJMKCk7CisgICAgICAgIFN0cmluZyBzb3VyY2VVUkwgPSBjb2RlQmxvY2soKS0+
b3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPnNvdXJjZVVSTCgpOwogICAgICAgICBpZiAoIXNvdXJj
ZVVSTC5pc0VtcHR5KCkpCiAgICAgICAgICAgICB0cmFjZUxpbmUgPSBzb3VyY2VVUkwuaW1wbCgp
OwogICAgICAgICBicmVhazsKQEAgLTI5MiwxMSArMjkyLDExIEBAIHZvaWQgU3RhY2tWaXNpdG9y
OjpGcmFtZTo6Y29tcHV0ZUxpbmVBbmRDb2x1bW4odW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBj
b2x1bW4pCiAgICAgdW5zaWduZWQgZGl2b3RDb2x1bW4gPSAwOwogICAgIHJldHJpZXZlRXhwcmVz
c2lvbkluZm8oZGl2b3QsIHVudXNlZFN0YXJ0T2Zmc2V0LCB1bnVzZWRFbmRPZmZzZXQsIGRpdm90
TGluZSwgZGl2b3RDb2x1bW4pOwogCi0gICAgbGluZSA9IGRpdm90TGluZSArIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCktPmZpcnN0TGluZSgpOworICAgIGxpbmUgPSBkaXZvdExpbmUgKyBj
b2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5maXJzdExpbmUoKTsKICAgICBjb2x1
bW4gPSBkaXZvdENvbHVtbiArIChkaXZvdExpbmUgPyAxIDogY29kZUJsb2NrLT5maXJzdExpbmVD
b2x1bW5PZmZzZXQoKSk7CiAKLSAgICBpZiAoY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+
aGFzT3ZlcnJpZGVMaW5lTnVtYmVyKCkpCi0gICAgICAgIGxpbmUgPSBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLT5vdmVycmlkZUxpbmVOdW1iZXIoKTsKKyAgICBpZiAoY29kZUJsb2NrLT5v
d25lclNjcmlwdEV4ZWN1dGFibGUoKS0+aGFzT3ZlcnJpZGVMaW5lTnVtYmVyKCkpCisgICAgICAg
IGxpbmUgPSBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5vdmVycmlkZUxpbmVO
dW1iZXIoKTsKIH0KIAogdm9pZCBTdGFja1Zpc2l0b3I6OkZyYW1lOjpyZXRyaWV2ZUV4cHJlc3Np
b25JbmZvKGludCYgZGl2b3QsIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNp
Z25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IGExZjc2NTYyYmQ3MGI3ZmVhYTZlYmM5ZGYyMTY5MmEw
ZWM4NWVjMzUuLmNiN2JiZjYxYzkxOTYxNjEyNGRhNjJkMWFiOThjODVmNzkxMWYxNTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtODQ4LDkgKzg0
OCwyMiBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0ZSog
ZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTAogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGNvZGVQdHI7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAwOwotICAgIGlmIChleGVj
dXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQorICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5j
dGlvbigpKSB7CiAgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKCp2
bSwga2luZCwgTXVzdENoZWNrQXJpdHksIGNhbGxMaW5rSW5mby0+cmVnaXN0ZXJQcmVzZXJ2YXRp
b25Nb2RlKCkpOwotICAgIGVsc2UgeworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICB9IGVs
c2UgaWYgKGV4ZWN1dGFibGUtPmlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCkpIHsKKyAgICAgICAg
V2ViQXNzZW1ibHlFeGVjdXRhYmxlKiB3ZWJBc3NlbWJseUV4ZWN1dGFibGUgPSBzdGF0aWNfY2Fz
dDxXZWJBc3NlbWJseUV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKKyAgICAgICAgd2ViQXNzZW1i
bHlFeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWNDYWxsZWUpOworICAgICAgICBj
b2RlQmxvY2sgPSB3ZWJBc3NlbWJseUV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvckNhbGwoKTsKKyAg
ICAgICAgQVNTRVJUKGNvZGVCbG9jayk7CisgICAgICAgIEFyaXR5Q2hlY2tNb2RlIGFyaXR5Owor
ICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0
YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKQorICAgICAgICAg
ICAgYXJpdHkgPSBNdXN0Q2hlY2tBcml0eTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXJp
dHkgPSBBcml0eUNoZWNrTm90UmVxdWlyZWQ7CisgICAgICAgIGNvZGVQdHIgPSB3ZWJBc3NlbWJs
eUV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3IoKnZtLCBraW5kLCBhcml0eSwgY2FsbExpbmtJbmZv
LT5yZWdpc3RlclByZXNlcnZhdGlvbk1vZGUoKSk7CisjZW5kaWYKKyAgICB9IGVsc2UgewogICAg
ICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogCiAgICAgICAgIGlmICghaXNDYWxs
KGtpbmQpICYmIGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29uc3RydWN0QWJpbGl0eSgpID09IENvbnN0
cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdCkgewpAQCAtODk2LDE3ICs5MDksMzMgQEAgaW5s
aW5lIGNoYXIqIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oCiAgICAgSlNTY29wZSogc2NvcGUgPSBm
dW5jdGlvbi0+c2NvcGVVbmNoZWNrZWQoKTsKICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJs
ZSA9IGZ1bmN0aW9uLT5leGVjdXRhYmxlKCk7CiAgICAgaWYgKFVOTElLRUxZKCFleGVjdXRhYmxl
LT5oYXNKSVRDb2RlRm9yKGtpbmQpKSkgewotICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1
bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1
dGFibGUpOworICAgICAgICBib29sIGlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlID0gZmFsc2U7Cisj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAgICBpc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSA9
IGV4ZWN1dGFibGUtPmlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCk7CisjZW5kaWYKKyAgICAgICAg
aWYgKCFpc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSkgeworICAgICAgICAgICAgRnVuY3Rpb25FeGVj
dXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFi
bGUqPihleGVjdXRhYmxlKTsKIAotICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAmJiBmdW5jdGlv
bkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5u
b3RDb25zdHJ1Y3QpIHsKLSAgICAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhl
YywgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZXhlYywgZnVuY3Rpb24pKTsKLSAgICAgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4
Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpKTsKLSAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkgJiYgZnVuY3Rp
b25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0QWJpbGl0eTo6Q2Fu
bm90Q29uc3RydWN0KSB7CisgICAgICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlv
bihleGVjLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihleGVjLCBmdW5jdGlvbikpOworICAg
ICAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih2bS0+Z2V0Q1RJU3R1
Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICBKU09iamVjdCogZXJyb3Ig
PSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSwgZnVu
Y3Rpb24sIHNjb3BlLCBraW5kKTsKLSAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBl
eGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGVycm9yKTsKLSAgICAgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PGNoYXIqPih2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZy
b21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAg
ICAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZv
ckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBmdW5jdGlvbiwgc2NvcGUsIGtpbmQpOworICAgICAgICAg
ICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlv
bihleGVjLCBlcnJvcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVy
YXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICAgICAgICAgIGlmICghaXND
YWxsKGtpbmQpKSB7CisgICAgICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihl
eGVjLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihleGVjLCBmdW5jdGlvbikpOworICAgICAg
ICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih2bS0+Z2V0Q1RJU3R1Yih0
aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgV2ViQXNzZW1ibHlFeGVj
dXRhYmxlKiB3ZWJBc3NlbWJseUV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxXZWJBc3NlbWJseUV4
ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKKyAgICAgICAgICAgIHdlYkFzc2VtYmx5RXhlY3V0YWJs
ZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlKTsKKyNlbmRpZgogICAgICAgICB9CiAg
ICAgfQogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihleGVjdXRhYmxlLT5lbnRy
eXBvaW50Rm9yKApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNo
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKaW5kZXggM2Q3Y2Ji
M2QzMzI2NmUzMmNkZjEyYWYzMTBhYTRiY2ZiNmRmNWRhMS4uYzVkYjUzYmUwNjIyNDBmNGRiY2Zk
MGIwM2I1MDNjMTc5MmMwNjc2NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3Bw
CkBAIC0xNzQyLDggKzE3NDIsMTMgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogICAgICAg
ICBpZiAodmFyaWFudC5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgICAg
ICBjb2RlQmxvY2sgPSBudWxscHRyOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNvZGVC
bG9jayA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih2YXJpYW50LmV4ZWN1dGFibGUoKSkt
PmNvZGVCbG9ja0ZvckNhbGwoKTsKLSAgICAgICAgICAgIAorICAgICAgICAgICAgRXhlY3V0YWJs
ZUJhc2UqIGV4ZWN1dGFibGUgPSB2YXJpYW50LmV4ZWN1dGFibGUoKTsKKyNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCisgICAgICAgICAgICBpZiAoZXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseUV4ZWN1
dGFibGUoKSkKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2sgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlF
eGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNvZGVCbG9ja0ZvckNhbGwoKTsKKyAgICAgICAgICAg
IGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxGdW5jdGlv
bkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Y29kZUJsb2NrRm9yQ2FsbCgpOwogICAgICAgICAg
ICAgLy8gSWYgd2UgY2Fubm90IGhhbmRsZSBhIGNhbGxlZSwgYXNzdW1lIHRoYXQgaXQncyBiZXR0
ZXIgZm9yIHRoaXMgd2hvbGUgdGhpbmcgdG8gYmUgYQogICAgICAgICAgICAgLy8gdmlydHVhbCBj
YWxsLgogICAgICAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkg
PCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSB8fCBjYWxs
TGlua0luZm8uY2FsbFR5cGUoKSA9PSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzIHx8IGNhbGxM
aW5rSW5mby5jYWxsVHlwZSgpID09IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0VmFyYXJncykgewpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAppbmRleCBlOTI2ZjUyZGM3
NmQ5ZWRlMmYwZTNhNWIzZGMyNmIzMzZhOTJmODVkLi43MzEzZmNlMjQyMDBjYzkxNjE2OWU4MTRh
MGEwNTkzMGFhYmFhNTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnREYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRh
LmNwcApAQCAtMTMyLDggKzEzMiw4IEBAIHZvaWQgRGF0YTo6cGVyZm9ybUFzc2VydGlvbnMoVk0m
IHZtKQogICAgIEFTU0VSVChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCA9PSA2NCk7CiAj
ZW5kaWYKICAgICBBU1NFUlQoU3RyaW5nVHlwZSA9PSA2KTsKLSAgICBBU1NFUlQoT2JqZWN0VHlw
ZSA9PSAxOCk7Ci0gICAgQVNTRVJUKEZpbmFsT2JqZWN0VHlwZSA9PSAxOSk7CisgICAgQVNTRVJU
KE9iamVjdFR5cGUgPT0gMTkpOworICAgIEFTU0VSVChGaW5hbE9iamVjdFR5cGUgPT0gMjApOwog
ICAgIEFTU0VSVChNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID09IDEpOwogICAgIEFTU0VSVChJbXBs
ZW1lbnRzSGFzSW5zdGFuY2UgPT0gMik7CiAgICAgQVNTRVJUKEltcGxlbWVudHNEZWZhdWx0SGFz
SW5zdGFuY2UgPT0gOCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xv
d1BhdGhzLmNwcAppbmRleCAyYTI0ODgzYzI5ODM1NGU0ZGEwZDY2MGQwM2VjM2FhNjM4Y2M0MWYz
Li4yN2NiY2M1ZDk5MjhiNjM0NDFhNGQwN2RiNTcwNTBlMGY4ZGE0MGI2IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKQEAgLTExMTYsOSArMTEx
NiwxNCBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChFeGVjU3RhdGUqIGV4
ZWNDYWxsZWUsIEluc3RydWN0aW9uKiBwYywgQ29kZQogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGNvZGVQdHI7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAwOwotICAgIGlmIChleGVj
dXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQorICAgIGJvb2wgaXNXZWJBc3NlbWJseUV4ZWN1dGFi
bGUgPSBmYWxzZTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgaXNXZWJBc3NlbWJseUV4
ZWN1dGFibGUgPSBleGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpOworI2VuZGlm
CisKKyAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkgewogICAgICAgICBjb2Rl
UHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcih2bSwga2luZCwgTXVzdENoZWNrQXJpdHks
IFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOwotICAgIGVsc2UgeworICAgIH0gZWxz
ZSBpZiAoIWlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKSB7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0
YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxl
Kj4oZXhlY3V0YWJsZSk7CiAKICAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkgJiYgZnVuY3Rpb25F
eGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0QWJpbGl0eTo6Q2Fubm90
Q29uc3RydWN0KQpAQCAtMTEzNSw2ICsxMTQwLDE5IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5
cGUgc2V0VXBDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSW5zdHJ1Y3Rpb24qIHBjLCBDb2Rl
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFyaXR5ID0gQXJpdHlDaGVja05vdFJlcXVpcmVk
OwogICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKHZt
LCBraW5kLCBhcml0eSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CisgICAgfSBl
bHNlIHsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAgIFdlYkFzc2VtYmx5RXhlY3V0
YWJsZSogd2ViQXNzZW1ibHlFeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8V2ViQXNzZW1ibHlFeGVj
dXRhYmxlKj4oZXhlY3V0YWJsZSk7CisgICAgICAgIHdlYkFzc2VtYmx5RXhlY3V0YWJsZS0+cHJl
cGFyZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlKTsKKyAgICAgICAgY29kZUJsb2NrID0gd2ViQXNz
ZW1ibHlFeGVjdXRhYmxlLT5jb2RlQmxvY2tGb3JDYWxsKCk7CisgICAgICAgIEFTU0VSVChjb2Rl
QmxvY2spOworICAgICAgICBBcml0eUNoZWNrTW9kZSBhcml0eTsKKyAgICAgICAgaWYgKGV4ZWND
YWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+
KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkKKyAgICAgICAgICAgIGFyaXR5ID0gTXVzdENo
ZWNrQXJpdHk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFyaXR5ID0gQXJpdHlDaGVja05v
dFJlcXVpcmVkOworICAgICAgICBjb2RlUHRyID0gd2ViQXNzZW1ibHlFeGVjdXRhYmxlLT5lbnRy
eXBvaW50Rm9yKHZtLCBraW5kLCBhcml0eSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJl
ZCk7CisjZW5kaWYKICAgICB9CiAgICAgCiAgICAgQVNTRVJUKCEhY29kZVB0cik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KaW5k
ZXggNWFkODM0NjVjZDFhNGU4ZjRlOTY0YTY3ZWQwOGExNTdlN2ZhMzc1YS4uMTM2YzkxNjYxZjIy
ZDJkODA5M2MxOThjOWM1YmQ2NjQ0MzhmNTQ5NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQpAQCAtMTYxLDggKzE2MSw4IEBA
IGNvbnN0IFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZSA9IDMwCiAKICMgVHlwZSBjb25zdGFudHMu
CiBjb25zdCBTdHJpbmdUeXBlID0gNgotY29uc3QgT2JqZWN0VHlwZSA9IDE4Ci1jb25zdCBGaW5h
bE9iamVjdFR5cGUgPSAxOQorY29uc3QgT2JqZWN0VHlwZSA9IDE5Citjb25zdCBGaW5hbE9iamVj
dFR5cGUgPSAyMAogCiAjIFR5cGUgZmxhZ3MgY29uc3RhbnRzLgogY29uc3QgTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IDEKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25TbG93UGF0aHMuY3BwCmluZGV4IGFjYmUxNDYyOWQyODRlZTgyNTExZjczYzU2ODA5MWRlZGYz
YjQ0NGYuLjc1ODA4MzMyZTRkZDQwODQ0MmEwMzQzN2Q1NWMxMDVhY2MyOTVhYjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcApAQCAt
NTI1LDcgKzUyNSw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90b19wcmltaXRpdmUpCiBT
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfZW50ZXIpCiB7CiAgICAgQkVHSU4oKTsKLSAgICBTY3Jp
cHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUgPSBleGVjLT5jb2RlQmxvY2soKS0+b3duZXJF
eGVjdXRhYmxlKCk7CisgICAgRXhlY3V0YWJsZUJhc2UqIG93bmVyRXhlY3V0YWJsZSA9IGV4ZWMt
PmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKTsKICAgICBIZWFwOjpoZWFwKG93bmVyRXhl
Y3V0YWJsZSktPndyaXRlQmFycmllcihvd25lckV4ZWN1dGFibGUpOwogICAgIEVORCgpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAppbmRleCAxYjlh
NzNkNzkzMzhhYTM5MTRmM2U0NTQ1MWJiNmY5YTAwY2M5MDk3Li5lNDg1NDc5NzU2N2RlOGNkYmU5
NjYxNTcwMmZiNmU3NTFiNjNjNWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlLmNwcApAQCAtMzEsMTAgKzMxLDEyIEBACiAjaW5jbHVkZSAiREZHRHJpdmVy
LmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUg
IkpTV0FTTU1vZHVsZS5oIgogI2luY2x1ZGUgIkxMSW50RW50cnlwb2ludC5oIgogI2luY2x1ZGUg
IlBhcnNlci5oIgogI2luY2x1ZGUgIlByb2ZpbGVyRGF0YWJhc2UuaCIKICNpbmNsdWRlICJUeXBl
UHJvZmlsZXIuaCIKKyNpbmNsdWRlICJXQVNNRnVuY3Rpb25QYXJzZXIuaCIKICNpbmNsdWRlIDx3
dGYvQ29tbWFQcmludGVyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTU2Miw2ICs1NjQsNjIgQEAgRnVuY3Rpb25FeGVj
dXRhYmxlKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2RlKAogICAgIHJldHVybiB1
bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmsoZXhlYy52bSgpLCBzb3VyY2UsIG92ZXJyaWRlTGluZU51
bWJlcik7CiB9CiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitjb25zdCBDbGFzc0luZm8gV2Vi
QXNzZW1ibHlFeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseUV4ZWN1dGFibGUiLCAm
RXhlY3V0YWJsZUJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJs
eUV4ZWN1dGFibGUpIH07CisKK1dlYkFzc2VtYmx5RXhlY3V0YWJsZTo6V2ViQXNzZW1ibHlFeGVj
dXRhYmxlKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1dBU01Nb2R1bGUqIG1v
ZHVsZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCkKKyAgICA6IEV4ZWN1dGFibGVCYXNlKHZtLCB2
bS53ZWJBc3NlbWJseUV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIE5VTV9QQVJBTUVURVJTX05P
VF9DT01QSUxFRCkKKyAgICAsIG1fc291cmNlKHNvdXJjZSkKKyAgICAsIG1fbW9kdWxlKHZtLCB0
aGlzLCBtb2R1bGUpCisgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKK3sKK30K
Kwordm9pZCBXZWJBc3NlbWJseUV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQorewor
ICAgIHN0YXRpY19jYXN0PFdlYkFzc2VtYmx5RXhlY3V0YWJsZSo+KGNlbGwpLT5XZWJBc3NlbWJs
eUV4ZWN1dGFibGU6On5XZWJBc3NlbWJseUV4ZWN1dGFibGUoKTsKK30KKwordm9pZCBXZWJBc3Nl
bWJseUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8V2ViQXNzZW1ibHlFeGVjdXRhYmxlKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEV4ZWN1dGFibGVCYXNlOjp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIGlmICh0aGlzT2JqZWN0LT5tX2NvZGVC
bG9ja0ZvckNhbGwpCisgICAgICAgIHRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9yQ2FsbC0+dmlz
aXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1f
bW9kdWxlKTsKK30KKwordm9pZCBXZWJBc3NlbWJseUV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCit7
CisgICAgbV9jb2RlQmxvY2tGb3JDYWxsID0gbnVsbHB0cjsKKyAgICBCYXNlOjpjbGVhckNvZGUo
KTsKK30KKwordm9pZCBXZWJBc3NlbWJseUV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb24o
RXhlY1N0YXRlKiBleGVjKQoreworICAgIGlmIChoYXNKSVRDb2RlRm9yQ2FsbCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIERlZmVyR0MgZGVmZXJH
Qyh2bS5oZWFwKTsKKworICAgIFJlZlB0cjxXZWJBc3NlbWJseUNvZGVCbG9jaz4gY29kZUJsb2Nr
ID0gYWRvcHRSZWYobmV3IFdlYkFzc2VtYmx5Q29kZUJsb2NrKAorICAgICAgICB0aGlzLCB2bSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSk7CisKKyAgICBXQVNNRnVuY3Rpb25QYXJzZXI6
OmNvbXBpbGUodm0sIGNvZGVCbG9jay5nZXQoKSwgbV9tb2R1bGUuZ2V0KCksIG1fc291cmNlLCBt
X2Z1bmN0aW9uSW5kZXgpOworCisgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IGNvZGVCbG9jay0+aml0
Q29kZSgpOworICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9IE1hY3JvQXNzZW1i
bGVyQ29kZVB0cigpOworICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVja0FuZFByZXNl
cnZlUmVncyA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworICAgIG1fbnVtUGFyYW1ldGVyc0Zv
ckNhbGwgPSBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKKworICAgIG1fY29kZUJsb2NrRm9y
Q2FsbCA9IGNvZGVCbG9jazsKKworICAgIEhlYXA6OmhlYXAodGhpcyktPndyaXRlQmFycmllcih0
aGlzKTsKK30KKyNlbmRpZgorCiB2b2lkIEV4ZWN1dGFibGVCYXNlOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CiB7CiAgICAgRXhlY3V0YWJsZUJhc2UqIHJlYWxUaGlzID0gY29uc3RfY2Fz
dDxFeGVjdXRhYmxlQmFzZSo+KHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5oCmluZGV4IDIzNGYyY2Q3ZWUzODYyMDI0MzNhY2M2NmM1MWUyYzUxMjRhZGIz
MDkuLmE5YzQxYzQ1MjE2MDNkNzAyMzNkYzIwMmM5NzNkZGQ2NWUwZDlhMzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKQEAgLTUwLDkgKzUwLDExIEBAIGNs
YXNzIENvZGVCbG9jazsKIGNsYXNzIERlYnVnZ2VyOwogY2xhc3MgRXZhbENvZGVCbG9jazsKIGNs
YXNzIEZ1bmN0aW9uQ29kZUJsb2NrOworY2xhc3MgSlNTY29wZTsKK2NsYXNzIEpTV0FTTU1vZHVs
ZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFByb2dyYW1Db2RlQmxvY2s7
Ci1jbGFzcyBKU1Njb3BlOworY2xhc3MgV2ViQXNzZW1ibHlDb2RlQmxvY2s7CiAgICAgCiBlbnVt
IENvbXBpbGF0aW9uS2luZCB7IEZpcnN0Q29tcGlsYXRpb24sIE9wdGltaXppbmdDb21waWxhdGlv
biB9OwogCkBAIC05MiwxNSArOTQsMTUgQEAgcHVibGljOgogICAgICAgICAKICAgICBDb2RlQmxv
Y2tIYXNoIGhhc2hGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCkgY29uc3Q7CiAKLSAgICBib29s
IGlzRXZhbEV4ZWN1dGFibGUoKQorICAgIGJvb2wgaXNFdmFsRXhlY3V0YWJsZSgpIGNvbnN0CiAg
ICAgewogICAgICAgICByZXR1cm4gdHlwZSgpID09IEV2YWxFeGVjdXRhYmxlVHlwZTsKICAgICB9
Ci0gICAgYm9vbCBpc0Z1bmN0aW9uRXhlY3V0YWJsZSgpCisgICAgYm9vbCBpc0Z1bmN0aW9uRXhl
Y3V0YWJsZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gdHlwZSgpID09IEZ1bmN0aW9u
RXhlY3V0YWJsZVR5cGU7CiAgICAgfQotICAgIGJvb2wgaXNQcm9ncmFtRXhlY3V0YWJsZSgpCisg
ICAgYm9vbCBpc1Byb2dyYW1FeGVjdXRhYmxlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVy
biB0eXBlKCkgPT0gUHJvZ3JhbUV4ZWN1dGFibGVUeXBlOwogICAgIH0KQEAgLTExMSw2ICsxMTMs
MTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCA9PSBO
VU1fUEFSQU1FVEVSU19JU19IT1NUOwogICAgIH0KIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
KyAgICBib29sIGlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiB0eXBlKCkgPT0gV2ViQXNzZW1ibHlFeGVjdXRhYmxlVHlwZTsKKyAgICB9CisjZW5k
aWYKKwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOyB9CiAgICAgICAgIAogICAgIHZvaWQgY2xlYXJDb2RlKCk7
CkBAIC0zODYsNyArMzk1LDcgQEAgcHVibGljOgogCiAgICAgQ29kZUZlYXR1cmVzIGZlYXR1cmVz
KCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlczsgfQogICAgICAgICAKLSAgICBERUNMQVJFX0lO
Rk87CisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogICAgIHZvaWQgcmVjb3JkUGFyc2UoQ29k
ZUZlYXR1cmVzIGZlYXR1cmVzLCBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzLCBpbnQgZmlyc3RM
aW5lLCBpbnQgbGFzdExpbmUsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1
bW4pCiAgICAgewpAQCAtNTYyLDcgKzU3MSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDZWxsKik7CiAgICAgICAgIAotICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUoKQorICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KiB1bmxpbmtlZEV4ZWN1dGFibGUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdW5s
aW5rZWRFeGVjdXRhYmxlLmdldCgpOwogICAgIH0KQEAgLTY3Niw2ICs2ODUsNTAgQEAgcHJpdmF0
ZToKICAgICBXcml0ZUJhcnJpZXI8SW5mZXJyZWRWYWx1ZT4gbV9zaW5nbGV0b25GdW5jdGlvbjsK
IH07CiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitjbGFzcyBXZWJBc3NlbWJseUV4ZWN1dGFi
bGUgZmluYWwgOiBwdWJsaWMgRXhlY3V0YWJsZUJhc2UgeworcHVibGljOgorICAgIHR5cGVkZWYg
RXhlY3V0YWJsZUJhc2UgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CisKKyAg
ICBzdGF0aWMgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBjcmVhdGUoVk0mIHZtLCBjb25zdCBTb3Vy
Y2VDb2RlJiBzb3VyY2UsIEpTV0FTTU1vZHVsZSogbW9kdWxlLCB1bnNpZ25lZCBmdW5jdGlvbklu
ZGV4KQorICAgIHsKKyAgICAgICAgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlFeGVjdXRhYmxlPih2bS5oZWFw
KSkgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKHZtLCBzb3VyY2UsIG1vZHVsZSwgZnVuY3Rpb25JbmRl
eCk7CisgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0
dXJuIGV4ZWN1dGFibGU7CisgICAgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
bykKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90bywgVHlwZUluZm8oV2ViQXNzZW1ibHlFeGVjdXRhYmxlVHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxs
Kik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICB2b2lkIGNsZWFyQ29kZSgpOworCisgICAg
dm9pZCBwcmVwYXJlRm9yRXhlY3V0aW9uKEV4ZWNTdGF0ZSopOworCisgICAgV2ViQXNzZW1ibHlD
b2RlQmxvY2sqIGNvZGVCbG9ja0ZvckNhbGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29k
ZUJsb2NrRm9yQ2FsbC5nZXQoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgV2ViQXNzZW1ibHlF
eGVjdXRhYmxlKFZNJiwgY29uc3QgU291cmNlQ29kZSYsIEpTV0FTTU1vZHVsZSosIHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXgpOworCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworCisgICAgU291cmNlQ29kZSBtX3NvdXJjZTsKKyAgICBXcml0ZUJh
cnJpZXI8SlNXQVNNTW9kdWxlPiBtX21vZHVsZTsKKyAgICB1bnNpZ25lZCBtX2Z1bmN0aW9uSW5k
ZXg7CisKKyAgICBSZWZQdHI8V2ViQXNzZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2Fs
bDsKK307CisjZW5kaWYKKwogaW5saW5lIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZVZp
cnR1YWwoRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUpCiB7CiAgICAgc3dpdGNoIChleGVjdXRh
YmxlLT50eXBlKCkpIHsKQEAgLTY4NSw2ICs3MzgsMTAgQEAgaW5saW5lIHZvaWQgRXhlY3V0YWJs
ZUJhc2U6OmNsZWFyQ29kZVZpcnR1YWwoRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUpCiAgICAg
ICAgIHJldHVybiBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Y2xlYXJD
b2RlKCk7CiAgICAgY2FzZSBGdW5jdGlvbkV4ZWN1dGFibGVUeXBlOgogICAgICAgICByZXR1cm4g
anNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5jbGVhckNvZGUoKTsKKyNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgY2FzZSBXZWJBc3NlbWJseUV4ZWN1dGFibGVUeXBl
OgorICAgICAgICByZXR1cm4ganNDYXN0PFdlYkFzc2VtYmx5RXhlY3V0YWJsZSo+KGV4ZWN1dGFi
bGUpLT5jbGVhckNvZGUoKTsKKyNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBq
c0Nhc3Q8TmF0aXZlRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5jbGVhckNvZGUoKTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCmluZGV4IDBm
NzM1NGVkN2E2YmQxZTNlNjRiMTg1ODU5YzE0ZjE1MDMyNmQ0NTguLmY4M2FkZjg1ZDFhZTdlZTMx
Y2RiMzQyZjcxNTE0MTc5M2RmN2VhNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uY3BwCkBAIC02Nyw2ICs2NywxNiBAQCBKU0Z1bmN0aW9uKiBKU0Z1bmN0
aW9uOjpjcmVhdGUoVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2Nv
cGUqCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKK0pT
RnVuY3Rpb24qIEpTRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIFdlYkFzc2VtYmx5RXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUpCit7CisgICAgSlNGdW5jdGlvbiogZnVuY3Rp
b24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0Z1bmN0aW9uPih2bS5oZWFwKSkgSlNG
dW5jdGlvbih2bSwgZXhlY3V0YWJsZSwgc2NvcGUpOworICAgIEFTU0VSVChmdW5jdGlvbi0+c3Ry
dWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKTsKKyAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24o
dm0pOworICAgIHJldHVybiBmdW5jdGlvbjsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW5saW5lIE5h
dGl2ZUV4ZWN1dGFibGUqIGdldE5hdGl2ZUV4ZWN1dGFibGUoVk0mIHZtLCBOYXRpdmVGdW5jdGlv
biBuYXRpdmVGdW5jdGlvbiwgSW50cmluc2ljIGludHJpbnNpYywgTmF0aXZlRnVuY3Rpb24gbmF0
aXZlQ29uc3RydWN0b3IpCiB7CiAjaWYgIUVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKaW5kZXggOTI4MzUwZTI0NzhjNDVmN2JmN2U4YWE4NGM5
ZWMzYTRlMjUyYTg2ZS4uMDFjZTM2YTVlMjdlNGYyNGVlZjhmMzkxMDg0ODFhY2NlZWFkODM1NyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaApAQCAtNDAsNiAr
NDAsNyBAQCBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKIGNsYXNzIE5hdGl2ZUV4ZWN1dGFibGU7CiBjbGFzcyBTb3VyY2VDb2RlOworY2xhc3MgV2Vi
QXNzZW1ibHlFeGVjdXRhYmxlOwogbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBTcGVjdWxhdGl2ZUpJ
VDsKIGNsYXNzIEpJVENvbXBpbGVyOwpAQCAtNzMsNiArNzQsOSBAQCBwdWJsaWM6CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgaW50IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBOYXRpdmVTdGRGdW5jdGlvbiYm
LCBJbnRyaW5zaWMgPSBOb0ludHJpbnNpYywgTmF0aXZlRnVuY3Rpb24gbmF0aXZlQ29uc3RydWN0
b3IgPSBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rvcik7CiAKICAgICBzdGF0aWMgSlNGdW5j
dGlvbiogY3JlYXRlKFZNJiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwgSlNTY29wZSopOworI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKKyAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlKFZNJiwgV2Vi
QXNzZW1ibHlFeGVjdXRhYmxlKiwgSlNTY29wZSopOworI2VuZGlmCiAKICAgICBzdGF0aWMgSlNG
dW5jdGlvbiogY3JlYXRlQnVpbHRpbkZ1bmN0aW9uKFZNJiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwg
SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlQnVpbHRpbkZ1
bmN0aW9uKFZNJiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBT
dHJpbmcmIG5hbWUpOwpAQCAtMTQzLDYgKzE0NywxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNGdW5j
dGlvbihWTSYsIEZ1bmN0aW9uRXhlY3V0YWJsZSosIEpTU2NvcGUqKTsKICAgICBKU0Z1bmN0aW9u
KFZNJiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwgSlNTY29wZSosIFN0cnVjdHVyZSopOwogCisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIEpTRnVuY3Rpb24oVk0mLCBXZWJBc3NlbWJseUV4ZWN1
dGFibGUqLCBKU1Njb3BlKik7CisjZW5kaWYKKwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
LCBOYXRpdmVFeGVjdXRhYmxlKiwgaW50IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKICAg
ICB1c2luZyBCYXNlOjpmaW5pc2hDcmVhdGlvbjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmgKaW5kZXggZjA1OTU4NGNmMDdkN2ZkNjll
YTJkY2ZlMjdiNjNiNjQ0YTg4NDQxMy4uNGY3NWFiOTcwMzU4NmZiNGZiZjM2NDM4MWI2NWY1ZWQ4
ZWY1NzFhMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5j
dGlvbklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0
aW9uSW5saW5lcy5oCkBAIC01Miw2ICs1MiwxNSBAQCBpbmxpbmUgSlNGdW5jdGlvbjo6SlNGdW5j
dGlvbihWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogcwog
ewogfQogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQoraW5saW5lIEpTRnVuY3Rpb246OkpTRnVu
Y3Rpb24oVk0mIHZtLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUq
IHNjb3BlKQorICAgIDogQmFzZSh2bSwgc2NvcGUsIHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+ZnVu
Y3Rpb25TdHJ1Y3R1cmUoKSkKKyAgICAsIG1fZXhlY3V0YWJsZSh2bSwgdGhpcywgZXhlY3V0YWJs
ZSkKKyAgICAsIG1fcmFyZURhdGEoKQoreworfQorI2VuZGlmCisKIGlubGluZSBGdW5jdGlvbkV4
ZWN1dGFibGUqIEpTRnVuY3Rpb246OmpzRXhlY3V0YWJsZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KCFpc0hvc3RGdW5jdGlvbk5vbklubGluZSgpKTsKQEAgLTY2LDYgKzc1LDEwIEBAIGlubGluZSBi
b29sIEpTRnVuY3Rpb246OmlzSG9zdEZ1bmN0aW9uKCkgY29uc3QKIAogaW5saW5lIGJvb2wgSlNG
dW5jdGlvbjo6aXNCdWlsdGluRnVuY3Rpb24oKSBjb25zdAogeworI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKKyAgICBpZiAobV9leGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKICAgICByZXR1cm4gIWlzSG9zdEZ1bmN0aW9u
KCkgJiYganNFeGVjdXRhYmxlKCktPmlzQnVpbHRpbkZ1bmN0aW9uKCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgKaW5kZXggNDAzMjZjZTBmMzI5ZmE3YzdiYmM5OWY0
NDY0MjhmZTk2YzkxMjRiMy4uMTU5NmU2NTg0YzhhZWI4YjdjMGNjYjRkYTMwMzAyMDA5OGU2OTVm
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgKQEAgLTQyLDYgKzQyLDcg
QEAgZW51bSBKU1R5cGUgOiB1aW50OF90IHsKICAgICBFdmFsRXhlY3V0YWJsZVR5cGUsCiAgICAg
UHJvZ3JhbUV4ZWN1dGFibGVUeXBlLAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGUsCisgICAg
V2ViQXNzZW1ibHlFeGVjdXRhYmxlVHlwZSwKIAogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlVHlwZSwKICAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2tUeXBlLApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IDVhZjZjYWYyN2QzNTlkOTFmNDdjMTE1NjQ3NTg0MjA4
YjdmMDQ5NzYuLmM2MzdlNTZlYmExN2NkOTZkZmZiZjgxMjUwMzU1NTBmYWRlMWZmZTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTIyMSw2ICsyMjEsOSBAQCBWTTo6Vk0o
Vk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgZXZhbEV4ZWN1dGFibGVTdHJ1
Y3R1cmUuc2V0KCp0aGlzLCBFdmFsRXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAw
LCBqc051bGwoKSkpOwogICAgIHByb2dyYW1FeGVjdXRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywg
UHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
ICAgICBmdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBGdW5jdGlvbkV4ZWN1
dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCisgICAgd2ViQXNzZW1ibHlFeGVjdXRhYmxlU3RydWN0dXJlLnNldCgqdGhp
cywgV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVs
bCgpKSk7CisjZW5kaWYKICAgICByZWdFeHBTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBSZWdFeHA6OmNy
ZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBzeW1ib2xTdHJ1Y3R1cmUu
c2V0KCp0aGlzLCBTeW1ib2w6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
ICAgICBzeW1ib2xUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFN5bWJvbFRhYmxlOjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAppbmRleCBiZjkyNWI1OTVmOTIzOTM2MmVmODc5MTcwM2MzZTUwYTI3MmFjMjgyLi5lYTNmODU2
YTJmYzFmYzRiYWY0OTE2MDFlODlkNWYwZThjNmRiYzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKQEAgLTI3OSw2ICsyNzksOSBAQCBwdWJsaWM6CiAgICAgU3Ryb25nPFN0cnVjdHVy
ZT4gZXZhbEV4ZWN1dGFibGVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvZ3Jh
bUV4ZWN1dGFibGVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZnVuY3Rpb25FeGVj
dXRhYmxlU3RydWN0dXJlOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBTdHJvbmc8U3Ry
dWN0dXJlPiB3ZWJBc3NlbWJseUV4ZWN1dGFibGVTdHJ1Y3R1cmU7CisjZW5kaWYKICAgICBTdHJv
bmc8U3RydWN0dXJlPiByZWdFeHBTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3lt
Ym9sU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN5bWJvbFRhYmxlU3RydWN0dXJl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dBU01Nb2R1bGUuaAppbmRleCBhNzI2NmI1
N2RhOGQzN2U3MDZlYWNmMDc4MGMyYmQ3YzBiZTFmOGQzLi40NjdiM2U2YTExZjY1ODRhY2U4YWQ3
YzQ0MjA3MzgwZDEzNzgyNThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9KU1dBU01Nb2R1bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dBU01N
b2R1bGUuaApAQCAtNjQsNiArNjQsOCBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFdBU01GdW5jdGlv
bkRlY2xhcmF0aW9uPiYgZnVuY3Rpb25EZWNsYXJhdGlvbnMoKSB7IHJldHVybiBtX2Z1bmN0aW9u
RGVjbGFyYXRpb25zOyB9CiAgICAgVmVjdG9yPFdBU01GdW5jdGlvblBvaW50ZXJUYWJsZT4mIGZ1
bmN0aW9uUG9pbnRlclRhYmxlcygpIHsgcmV0dXJuIG1fZnVuY3Rpb25Qb2ludGVyVGFibGVzOyB9
CiAKKyAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+PiYgZnVuY3Rpb25zKCkgeyBy
ZXR1cm4gbV9mdW5jdGlvbnM7IH0KKwogcHJpdmF0ZToKICAgICBKU1dBU01Nb2R1bGUoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcApp
bmRleCBkNjg5ZjU2YjFjYjgwZmM3MTkwYmI0OTdjMDVjZGVkNmI3YzQzODMyLi43OGExYTE5MmNl
Yzg4NDdhZDExMDM4ODgwMmJhMzBjZmM5NTdjZmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5jcHAKQEAgLTI4LDcgKzI4LDkgQEAKIAog
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2lu
Y2x1ZGUgIkpTV0FTTU1vZHVsZS5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRl
ICJXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyLmgiCiAKICNkZWZpbmUgUFJPUEFHQVRFX0VSUk9S
KCkgZG8geyBpZiAoIW1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpKSByZXR1cm4gMDsgfSB3aGlsZSAo
MCkKQEAgLTU5LDYgKzYxLDI3IEBAIGJvb2wgV0FTTUZ1bmN0aW9uUGFyc2VyOjpjaGVja1N5bnRh
eChKU1dBU01Nb2R1bGUqIG1vZHVsZSwgY29uc3QgU291cmNlQ29kZSYgc291CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKK3ZvaWQgV0FTTUZ1bmN0aW9uUGFyc2VyOjpjb21waWxlKFZNJiB2bSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpTV0FTTU1vZHVsZSogbW9kdWxlLCBjb25zdCBTb3VyY2VDb2Rl
Jiwgc2l6ZV90IGZ1bmN0aW9uSW5kZXgpCit7CisgICAgLy8gRklYTUU6IEFjdHVhbGx5IGNvbXBp
bGUgdGhlIGNvZGUuCisgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0sIGNvZGVCbG9jayk7CisgICAg
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGJlZ2luTGFiZWwgPSBqaXQubGFiZWwoKTsKKyAgICBqaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJl
cigwKSkpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgaml0LnJldCgpOworICAgIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbCBhcml0eUNoZWNrID0gaml0LmxhYmVsKCk7CisgICAgaml0Lmp1
bXAoYmVnaW5MYWJlbCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHZtLCBqaXQsIGNv
ZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCk7CisgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihhcml0eUNoZWNr
KTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q29kZVJlZiByZXN1bHQgPSBGSU5BTElaRV9DT0RFKHBh
dGNoQnVmZmVyLCAoIkJhc2VsaW5lIEpJVCBjb2RlIGZvciBXZWJBc3NlbWJseSIpKTsKKyAgICBj
b2RlQmxvY2stPnNldEpJVENvZGUoYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3
aXRoQXJpdHlDaGVjaywgSklUQ29kZTo6QmFzZWxpbmVKSVQpKSk7CisgICAgY29kZUJsb2NrLT5j
YXBhYmlsaXR5TGV2ZWwoKTsKKworICAgIHVpbnQzMl90IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxl
LT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpW2Z1bmN0aW9uSW5kZXhdLnNpZ25hdHVyZUluZGV4Owor
ICAgIGNvbnN0IFdBU01TaWduYXR1cmUmIHNpZ25hdHVyZSA9IG1vZHVsZS0+c2lnbmF0dXJlcygp
W3NpZ25hdHVyZUluZGV4XTsKKyAgICBjb2RlQmxvY2stPnNldE51bVBhcmFtZXRlcnMoMSArIHNp
Z25hdHVyZS5hcmd1bWVudHMuc2l6ZSgpKTsKK30KKwogdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+
CiBib29sIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VGdW5jdGlvbihDb250ZXh0JiBjb250ZXh0
KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9u
UGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIu
aAppbmRleCA0ZDYzMTNhZmQ3OGM4MGM1NzQyZWQyZjcxYWI2NWE1ZmU3NWM1YjkzLi43MDRjNDZj
OWQ5NGQ0MDY0YWNlN2I0ZjdjYzFjYzhmMzYzODFjNTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuaApAQCAtMzYsMTEgKzM2LDE0IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBKU1dBU01Nb2R1bGU7
CitjbGFzcyBWTTsKIAogY2xhc3MgV0FTTUZ1bmN0aW9uUGFyc2VyIHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgYm9vbCBjaGVja1N5bnRheChKU1dBU01Nb2R1bGUqLCBjb25zdCBTb3VyY2VDb2RlJiwg
c2l6ZV90IGZ1bmN0aW9uSW5kZXgsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0SW5Tb3VyY2UsIHVuc2ln
bmVkJiBlbmRPZmZzZXRJblNvdXJjZSwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOworICAgIHN0YXRp
YyB2b2lkIGNvbXBpbGUoVk0mLCBDb2RlQmxvY2sqLCBKU1dBU01Nb2R1bGUqLCBjb25zdCBTb3Vy
Y2VDb2RlJiwgc2l6ZV90IGZ1bmN0aW9uSW5kZXgpOwogCiBwcml2YXRlOgogICAgIFdBU01GdW5j
dGlvblBhcnNlcihKU1dBU01Nb2R1bGUqIG1vZHVsZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNl
LCBzaXplX3QgZnVuY3Rpb25JbmRleCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V0FTTU1vZHVsZVBhcnNlci5jcHAKaW5kZXggNTBkYmI4ZTUwOWI2YzdmNDU3ZDFkNzZkNjE2Y2E4
MDQ1NzVjYThhZi4uNjdlM2FhNjQ2Y2U2ZmQ5NDdmZTk4ZjRjNjVlZWQxZGM3ZmQ1MTkyMCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5jcHAKQEAg
LTQ5LDE1ICs0OSwxNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotV0FTTU1vZHVsZVBhcnNlcjo6
V0FTTU1vZHVsZVBhcnNlcihjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCi0gICAgOiBtX3NvdXJj
ZShzb3VyY2UpCitXQVNNTW9kdWxlUGFyc2VyOjpXQVNNTW9kdWxlUGFyc2VyKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQorICAg
IDogbV92bSh2bSkKKyAgICAsIG1fZ2xvYmFsT2JqZWN0KHZtLCBnbG9iYWxPYmplY3QpCisgICAg
LCBtX3NvdXJjZShzb3VyY2UpCiAgICAgLCBtX3JlYWRlcihzdGF0aWNfY2FzdDxXZWJBc3NlbWJs
eVNvdXJjZVByb3ZpZGVyKj4oc291cmNlLnByb3ZpZGVyKCkpLT5kYXRhKCkpCiB7CiB9CiAKLUpT
V0FTTU1vZHVsZSogV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2UoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKK0pTV0FTTU1vZHVsZSogV0FT
TU1vZHVsZVBhcnNlcjo6cGFyc2UoU3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgbV9tb2R1
bGUuc2V0KHZtLCBKU1dBU01Nb2R1bGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT53YXNtTW9k
dWxlU3RydWN0dXJlKCkpKTsKKyAgICBtX21vZHVsZS5zZXQobV92bSwgSlNXQVNNTW9kdWxlOjpj
cmVhdGUobV92bSwgbV9nbG9iYWxPYmplY3QtPndhc21Nb2R1bGVTdHJ1Y3R1cmUoKSkpOwogICAg
IHBhcnNlTW9kdWxlKCk7CiAgICAgaWYgKCFtX2Vycm9yTWVzc2FnZS5pc051bGwoKSkgewogICAg
ICAgICBlcnJvck1lc3NhZ2UgPSBtX2Vycm9yTWVzc2FnZTsKQEAgLTIxNyw2ICsyMTksNyBAQCB2
b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvblNlY3Rpb24oKQog
ICAgIHVpbnQzMl90IG51bWJlck9mRnVuY3Rpb25EZWNsYXJhdGlvbnM7CiAgICAgUkVBRF9DT01Q
QUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mRnVuY3Rpb25EZWNsYXJhdGlvbnMsICJDYW5ub3Qg
cmVhZCB0aGUgbnVtYmVyIG9mIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4iKTsKICAgICBtX21vZHVs
ZS0+ZnVuY3Rpb25EZWNsYXJhdGlvbnMoKS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9m
RnVuY3Rpb25EZWNsYXJhdGlvbnMpOworICAgIG1fbW9kdWxlLT5mdW5jdGlvbnMoKS5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KG51bWJlck9mRnVuY3Rpb25EZWNsYXJhdGlvbnMpOwogICAgIGZvciAo
dWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkZ1bmN0aW9uRGVjbGFyYXRpb25zOyArK2kpIHsK
ICAgICAgICAgV0FTTUZ1bmN0aW9uRGVjbGFyYXRpb24gZnVuY3Rpb25EZWNsYXJhdGlvbjsKICAg
ICAgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGZ1bmN0aW9uRGVjbGFyYXRpb24uc2ln
bmF0dXJlSW5kZXgsICJDYW5ub3QgcmVhZCB0aGUgc2lnbmF0dXJlIGluZGV4LiIpOwpAQCAtMjY1
LDYgKzI2OCwxMCBAQCB2b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWZpbml0
aW9uKHNpemVfdCBmdW5jdGlvbkluZGV4KQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1f
cmVhZGVyLnNldE9mZnNldChlbmRPZmZzZXRJblNvdXJjZSk7CisKKyAgICBXZWJBc3NlbWJseUV4
ZWN1dGFibGUqIHdlYkFzc2VtYmx5RXhlY3V0YWJsZSA9IFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6
Y3JlYXRlKG1fdm0sIG1fc291cmNlLCBtX21vZHVsZS5nZXQoKSwgZnVuY3Rpb25JbmRleCk7Cisg
ICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUobV92bSwgd2ViQXNz
ZW1ibHlFeGVjdXRhYmxlLCBtX2dsb2JhbE9iamVjdC5nZXQoKSk7CisgICAgbV9tb2R1bGUtPmZ1
bmN0aW9ucygpLnVuY2hlY2tlZEFwcGVuZChXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4obV92bSwg
bV9tb2R1bGUuZ2V0KCksIGZ1bmN0aW9uKSk7CiB9CiAKIHZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6
cGFyc2VFeHBvcnRTZWN0aW9uKCkKQEAgLTI4NSwxMSArMjkyLDExIEBAIHZvaWQgV0FTTU1vZHVs
ZVBhcnNlcjo6cGFyc2VFeHBvcnRTZWN0aW9uKCkKICAgICAgICAgZm9yICh1aW50MzJfdCBleHBv
cnRJbmRleCA9IDA7IGV4cG9ydEluZGV4IDwgbnVtYmVyT2ZFeHBvcnRzOyArK2V4cG9ydEluZGV4
KSB7CiAgICAgICAgICAgICBTdHJpbmcgZXhwb3J0TmFtZTsKICAgICAgICAgICAgIFJFQURfU1RS
SU5HX09SX0ZBSUwoZXhwb3J0TmFtZSwgIkNhbm5vdCByZWFkIHRoZSBmdW5jdGlvbiBleHBvcnQg
bmFtZS4iKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBDaGVjayB0aGF0IGV4cG9ydE5hbWUgaXMg
bGVnYWwuCiAgICAgICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwogICAgICAgICAgICAg
UkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGZ1bmN0aW9uSW5kZXgsICJDYW5ub3QgcmVhZCB0
aGUgZnVuY3Rpb24gaW5kZXguIik7CiAgICAgICAgICAgICBGQUlMX0lGX0ZBTFNFKGZ1bmN0aW9u
SW5kZXggPCBtX21vZHVsZS0+ZnVuY3Rpb25EZWNsYXJhdGlvbnMoKS5zaXplKCksICJUaGUgZnVu
Y3Rpb24gaW5kZXggaXMgaW5jb3JyZWN0LiIpOwotICAgICAgICAgICAgLy8gRklYTUU6IEV4cG9y
dCB0aGUgZnVuY3Rpb24uCisgICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZtX3ZtLCBleHBvcnROYW1lKTsKKyAgICAgICAgICAgIG1fbW9k
dWxlLT5wdXREaXJlY3QobV92bSwgaWRlbnRpZmllciwgbV9tb2R1bGUtPmZ1bmN0aW9ucygpW2Z1
bmN0aW9uSW5kZXhdLmdldCgpKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBA
IC0zMDAsOCArMzA3LDggQEAgdm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydFNlY3Rp
b24oKQogCiBKU1dBU01Nb2R1bGUqIHBhcnNlV2ViQXNzZW1ibHkoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQogewotICAgIFdB
U01Nb2R1bGVQYXJzZXIgV0FTTU1vZHVsZVBhcnNlcihzb3VyY2UpOwotICAgIHJldHVybiBXQVNN
TW9kdWxlUGFyc2VyLnBhcnNlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwgZXJyb3JNZXNzYWdlKTsKKyAgICBXQVNNTW9kdWxlUGFyc2VyIG1vZHVsZVBhcnNlcihleGVj
LT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHNvdXJjZSk7CisgICAgcmV0dXJu
IG1vZHVsZVBhcnNlci5wYXJzZShlcnJvck1lc3NhZ2UpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJz
ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuaAppbmRl
eCAzMGYxYTU2NTk4OGM2MDE0YjU0NWZjMWM2YzI2YzA5M2Q4ZmI1NDBmLi5lMmY0ZmI3NThjOTUx
MzUzZjg2MDg3ZDU5MDRjNWYzNjI2M2VlZmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV0FTTU1vZHVsZVBhcnNlci5oCkBAIC00Miw4ICs0Miw4IEBAIGNsYXNzIFZNOwogCiBj
bGFzcyBXQVNNTW9kdWxlUGFyc2VyIHsKIHB1YmxpYzoKLSAgICBXQVNNTW9kdWxlUGFyc2VyKGNv
bnN0IFNvdXJjZUNvZGUmKTsKLSAgICBKU1dBU01Nb2R1bGUqIHBhcnNlKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CisgICAgV0FTTU1vZHVsZVBhcnNlcihWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU291cmNlQ29kZSYpOworICAgIEpTV0FTTU1vZHVsZSog
cGFyc2UoU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogCiBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VN
b2R1bGUoKTsKQEAgLTU3LDYgKzU3LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlRnVuY3Rp
b25EZWZpbml0aW9uKHNpemVfdCBmdW5jdGlvbkluZGV4KTsKICAgICB2b2lkIHBhcnNlRXhwb3J0
U2VjdGlvbigpOwogCisgICAgVk0mIG1fdm07CisgICAgU3Ryb25nPEpTR2xvYmFsT2JqZWN0PiBt
X2dsb2JhbE9iamVjdDsKICAgICBjb25zdCBTb3VyY2VDb2RlJiBtX3NvdXJjZTsKICAgICBXQVNN
UmVhZGVyIG1fcmVhZGVyOwogICAgIFN0cm9uZzxKU1dBU01Nb2R1bGU+IG1fbW9kdWxlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDk4MTJmM2JjMWE3OTQxNjFjOWRlZDIy
NTNjNjQ0ODdjYTRlZjFlOGMuLjhmMmFjMDk1MGU2YTliYWIxOTNhZDBlOGQyNjMwOWYxYzRkM2U2
MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTE0NjMsNyArMTQ2Myw3
IEBAIFN0cmluZyBJbnRlcm5hbHM6OnBhcnNlck1ldGFEYXRhKERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlIHZhbHVlKQogICAgICAgICBHZXRDYWxsZXJDb2RlQmxvY2tGdW5jdG9yIGl0ZXI7CiAgICAg
ICAgIGV4ZWMtPml0ZXJhdGUoaXRlcik7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
aXRlci5jb2RlQmxvY2soKTsKLSAgICAgICAgZXhlY3V0YWJsZSA9IGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCk7IAorICAgICAgICBleGVjdXRhYmxlID0gY29kZUJsb2NrLT5vd25lclNjcmlw
dEV4ZWN1dGFibGUoKTsKICAgICB9IGVsc2UgaWYgKGNvZGUuaXNGdW5jdGlvbigpKSB7CiAgICAg
ICAgIEpTRnVuY3Rpb24qIGZ1bmNPYmogPSBKU0M6OmpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29kZS50
b09iamVjdChleGVjKSk7CiAgICAgICAgIGV4ZWN1dGFibGUgPSBmdW5jT2JqLT5qc0V4ZWN1dGFi
bGUoKTsKQEAgLTE0ODUsMTAgKzE0ODUsMTQgQEAgU3RyaW5nIEludGVybmFsczo6cGFyc2VyTWV0
YURhdGEoRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgdmFsdWUpCiAgICAgICAgIHJlc3VsdC5hcHBl
bmQoJyInKTsKICAgICB9IGVsc2UgaWYgKGV4ZWN1dGFibGUtPmlzRXZhbEV4ZWN1dGFibGUoKSkK
ICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoImV2YWwiKTsKLSAgICBlbHNlIHsKLSAgICAg
ICAgQVNTRVJUKGV4ZWN1dGFibGUtPmlzUHJvZ3JhbUV4ZWN1dGFibGUoKSk7CisgICAgZWxzZSBp
ZiAoZXhlY3V0YWJsZS0+aXNQcm9ncmFtRXhlY3V0YWJsZSgpKQogICAgICAgICByZXN1bHQuYXBw
ZW5kTGl0ZXJhbCgicHJvZ3JhbSIpOwotICAgIH0KKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisg
ICAgZWxzZSBpZiAoZXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKSkKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIldlYkFzc2VtYmx5Iik7CisjZW5kaWYKKyAgICBlbHNl
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCiAgICAgcmVzdWx0LmFwcGVuZExpdGVy
YWwoIiB7ICIpOwogICAgIHJlc3VsdC5hcHBlbmROdW1iZXIoc3RhcnRMaW5lKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>