<?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>121336</bug_id>
          
          <creation_ts>2013-09-13 18:08:24 -0700</creation_ts>
          <short_desc>Replace ScriptState with JSC::ExecState</short_desc>
          <delta_ts>2013-09-13 18:33:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>alecflett</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>jsbell</cc>
    
    <cc>kangil.han</cc>
    
    <cc>mkwst</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>929087</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-09-13 18:08:24 -0700</bug_when>
    <thetext>Replace ScriptState with JSC::ExecState</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>929089</commentid>
    <comment_count>1</comment_count>
      <attachid>211609</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-09-13 18:13:35 -0700</bug_when>
    <thetext>Created attachment 211609
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>929090</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-13 18:14:51 -0700</bug_when>
    <thetext>Attachment 211609 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBCursor.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBObjectStore.h&apos;, u&apos;Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSInjectedScriptManager.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSNodeCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSNodeFilterCondition.h&apos;, u&apos;Source/WebCore/bindings/js/ScriptController.cpp&apos;, u&apos;Source/WebCore/bindings/js/ScriptDebugServer.cpp&apos;, u&apos;Source/WebCore/bindings/js/ScriptDebugServer.h&apos;, u&apos;Source/WebCore/bindings/js/ScriptEventListener.cpp&apos;, u&apos;Source/WebCore/bindings/js/ScriptEventListener.h&apos;, u&apos;Source/WebCore/bindings/js/ScriptFunctionCall.cpp&apos;, u&apos;Source/WebCore/bindings/js/ScriptFunctionCall.h&apos;, u&apos;Source/WebCore/bindings/js/ScriptObject.cpp&apos;, u&apos;Source/WebCore/bindings/js/ScriptObject.h&apos;, u&apos;Source/WebCore/bindings/js/ScriptProfiler.cpp&apos;, u&apos;Source/WebCore/bindings/js/ScriptProfiler.h&apos;, u&apos;Source/WebCore/bindings/js/ScriptState.cpp&apos;, u&apos;Source/WebCore/bindings/js/ScriptState.h&apos;, u&apos;Source/WebCore/bindings/js/ScriptValue.cpp&apos;, u&apos;Source/WebCore/bindings/js/ScriptValue.h&apos;, u&apos;Source/WebCore/bindings/js/SerializedScriptValue.cpp&apos;, u&apos;Source/WebCore/bindings/js/SerializedScriptValue.h&apos;, u&apos;Source/WebCore/dom/Document.cpp&apos;, u&apos;Source/WebCore/dom/Document.h&apos;, u&apos;Source/WebCore/dom/NodeFilter.cpp&apos;, u&apos;Source/WebCore/dom/NodeFilter.h&apos;, u&apos;Source/WebCore/dom/NodeFilterCondition.cpp&apos;, u&apos;Source/WebCore/dom/NodeFilterCondition.h&apos;, u&apos;Source/WebCore/dom/NodeIterator.cpp&apos;, u&apos;Source/WebCore/dom/NodeIterator.h&apos;, u&apos;Source/WebCore/dom/ScriptExecutionContext.cpp&apos;, u&apos;Source/WebCore/dom/ScriptExecutionContext.h&apos;, u&apos;Source/WebCore/dom/Traversal.cpp&apos;, u&apos;Source/WebCore/dom/Traversal.h&apos;, u&apos;Source/WebCore/dom/TreeWalker.cpp&apos;, u&apos;Source/WebCore/dom/TreeWalker.h&apos;, u&apos;Source/WebCore/inspector/ConsoleMessage.cpp&apos;, u&apos;Source/WebCore/inspector/ConsoleMessage.h&apos;, u&apos;Source/WebCore/inspector/InjectedScript.h&apos;, u&apos;Source/WebCore/inspector/InjectedScriptBase.cpp&apos;, u&apos;Source/WebCore/inspector/InjectedScriptBase.h&apos;, u&apos;Source/WebCore/inspector/InjectedScriptCanvasModule.cpp&apos;, u&apos;Source/WebCore/inspector/InjectedScriptCanvasModule.h&apos;, u&apos;Source/WebCore/inspector/InjectedScriptHost.cpp&apos;, u&apos;Source/WebCore/inspector/InjectedScriptHost.h&apos;, u&apos;Source/WebCore/inspector/InjectedScriptManager.cpp&apos;, u&apos;Source/WebCore/inspector/InjectedScriptManager.h&apos;, u&apos;Source/WebCore/inspector/InjectedScriptModule.cpp&apos;, u&apos;Source/WebCore/inspector/InjectedScriptModule.h&apos;, u&apos;Source/WebCore/inspector/InspectorAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorCanvasAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorCanvasAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorConsoleAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorConsoleAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorConsoleInstrumentation.h&apos;, u&apos;Source/WebCore/inspector/InspectorDOMAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorDebuggerAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorDebuggerAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorFrontendClientLocal.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorFrontendHost.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorIndexedDBAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorInstrumentation.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorInstrumentation.h&apos;, u&apos;Source/WebCore/inspector/PageConsoleAgent.cpp&apos;, u&apos;Source/WebCore/inspector/PageDebuggerAgent.cpp&apos;, u&apos;Source/WebCore/inspector/PageRuntimeAgent.cpp&apos;, u&apos;Source/WebCore/inspector/PageRuntimeAgent.h&apos;, u&apos;Source/WebCore/inspector/ScriptArguments.cpp&apos;, u&apos;Source/WebCore/inspector/ScriptArguments.h&apos;, u&apos;Source/WebCore/inspector/ScriptDebugListener.h&apos;, u&apos;Source/WebCore/inspector/WorkerDebuggerAgent.cpp&apos;, u&apos;Source/WebCore/inspector/WorkerRuntimeAgent.cpp&apos;, u&apos;Source/WebCore/page/Console.cpp&apos;, u&apos;Source/WebCore/page/Console.h&apos;, u&apos;Source/WebCore/page/ContentSecurityPolicy.cpp&apos;, u&apos;Source/WebCore/page/ContentSecurityPolicy.h&apos;, u&apos;Source/WebCore/page/PageConsole.cpp&apos;, u&apos;Source/WebCore/page/PageConsole.h&apos;, u&apos;Source/WebCore/workers/WorkerGlobalScope.cpp&apos;, u&apos;Source/WebCore/workers/WorkerGlobalScope.h&apos;]&quot; exit_code: 1
Source/WebCore/bindings/js/ScriptProfiler.h:62:  The parameter name &quot;state&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/bindings/js/ScriptProfiler.h:67:  The parameter name &quot;state&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 82 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>929094</commentid>
    <comment_count>3</comment_count>
      <attachid>211609</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-09-13 18:19:05 -0700</bug_when>
    <thetext>Comment on attachment 211609
Patch

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

&gt;&gt; Source/WebCore/bindings/js/ScriptProfiler.h:62
&gt;&gt; +    static void start(JSC::ExecState* state, const String&amp; title);
&gt; 
&gt; The parameter name &quot;state&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

Yes please.

&gt;&gt; Source/WebCore/bindings/js/ScriptProfiler.h:67
&gt;&gt; +    static PassRefPtr&lt;ScriptProfile&gt; stop(JSC::ExecState* state, const String&amp; title);
&gt; 
&gt; The parameter name &quot;state&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>929095</commentid>
    <comment_count>4</comment_count>
      <attachid>211610</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-09-13 18:21:38 -0700</bug_when>
    <thetext>Created attachment 211610
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>929097</commentid>
    <comment_count>5</comment_count>
      <attachid>211610</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-13 18:27:05 -0700</bug_when>
    <thetext>Comment on attachment 211610
Patch

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

&gt; Source/WebCore/dom/Document.cpp:862
&gt; +PassRefPtr&lt;CustomElementConstructor&gt; Document::registerElement(WebCore::JSC::ExecState* state, const AtomicString&amp; name, ExceptionCode&amp; ec)

WebCore::JSC? No!

&gt; Source/WebCore/dom/Document.cpp:867
&gt; +PassRefPtr&lt;CustomElementConstructor&gt; Document::registerElement(WebCore::JSC::ExecState* state, const AtomicString&amp; name, const Dictionary&amp; options, ExceptionCode&amp; ec)

Ditto.

&gt; Source/WebCore/dom/Document.h:1142
&gt; +    PassRefPtr&lt;CustomElementConstructor&gt; registerElement(WebCore::JSC::ExecState*, const AtomicString&amp; name, ExceptionCode&amp;);
&gt; +    PassRefPtr&lt;CustomElementConstructor&gt; registerElement(WebCore::JSC::ExecState*, const AtomicString&amp; name, const Dictionary&amp; options, ExceptionCode&amp;);

WebCore::JSC? No!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>929098</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-09-13 18:28:28 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 211610 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=211610&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:862
&gt; &gt; +PassRefPtr&lt;CustomElementConstructor&gt; Document::registerElement(WebCore::JSC::ExecState* state, const AtomicString&amp; name, ExceptionCode&amp; ec)
&gt; 
&gt; WebCore::JSC? No!
&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:867
&gt; &gt; +PassRefPtr&lt;CustomElementConstructor&gt; Document::registerElement(WebCore::JSC::ExecState* state, const AtomicString&amp; name, const Dictionary&amp; options, ExceptionCode&amp; ec)
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/dom/Document.h:1142
&gt; &gt; +    PassRefPtr&lt;CustomElementConstructor&gt; registerElement(WebCore::JSC::ExecState*, const AtomicString&amp; name, ExceptionCode&amp;);
&gt; &gt; +    PassRefPtr&lt;CustomElementConstructor&gt; registerElement(WebCore::JSC::ExecState*, const AtomicString&amp; name, const Dictionary&amp; options, ExceptionCode&amp;);
&gt; 
&gt; WebCore::JSC? No!

I wonder if anyone compiles with ENABLE(CUSTOM_ELEMENTS) on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>929100</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-09-13 18:33:15 -0700</bug_when>
    <thetext>Committed r155736: &lt;http://trac.webkit.org/changeset/155736&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211609</attachid>
            <date>2013-09-13 18:13:35 -0700</date>
            <delta_ts>2013-09-13 18:21:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121336-20130913181335.patch</filename>
            <type>text/plain</type>
            <size>133386</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NTczNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkyIEBACisyMDEzLTA5LTEzICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBTY3JpcHRTdGF0ZSB3aXRo
IEpTQzo6RXhlY1N0YXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjEzMzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJ
bmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVDdXN0
b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5oOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9T
Y3JpcHREZWJ1Z1NlcnZlci5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlz
dGVuZXIuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuaDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NjcmlwdE9iamVjdC5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0Lmg6
CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmg6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0
U3RhdGUuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmg6CisgICAgICAg
ICogYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Nj
cmlwdFZhbHVlLmg6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaDoKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAg
ICAgICAqIGRvbS9Ob2RlRmlsdGVyLmNwcDoKKyAgICAgICAgKiBkb20vTm9kZUZpbHRlci5oOgor
ICAgICAgICAqIGRvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmNwcDoKKyAgICAgICAgKiBkb20vTm9k
ZUZpbHRlckNvbmRpdGlvbi5oOgorICAgICAgICAqIGRvbS9Ob2RlSXRlcmF0b3IuY3BwOgorICAg
ICAgICAqIGRvbS9Ob2RlSXRlcmF0b3IuaDoKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5jcHA6CisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaDoKKyAg
ICAgICAgKiBkb20vVHJhdmVyc2FsLmNwcDoKKyAgICAgICAgKiBkb20vVHJhdmVyc2FsLmg6Cisg
ICAgICAgICogZG9tL1RyZWVXYWxrZXIuY3BwOgorICAgICAgICAqIGRvbS9UcmVlV2Fsa2VyLmg6
CisgICAgICAgICogaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvQ29uc29sZU1lc3NhZ2UuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmg6CisgICAgICAgICogaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRIb3N0LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHA6CisgICAgICAg
ICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5oOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdE1vZHVsZS5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0TW9kdWxlLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JD
b25zb2xlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUluc3Ry
dW1lbnRhdGlvbi5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JJbmRleGVkREJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5oOgorICAgICAgICAqIGluc3BlY3Rvci9QYWdlQ29uc29sZUFnZW50LmNwcDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rv
ci9QYWdlUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvUGFnZVJ1bnRpbWVB
Z2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHRBcmd1bWVudHMuY3BwOgorICAgICAg
ICAqIGluc3BlY3Rvci9TY3JpcHRBcmd1bWVudHMuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvU2Ny
aXB0RGVidWdMaXN0ZW5lci5oOgorICAgICAgICAqIGluc3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlckFn
ZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvV29ya2VyUnVudGltZUFnZW50LmNwcDoKKyAg
ICAgICAgKiBwYWdlL0NvbnNvbGUuY3BwOgorICAgICAgICAqIHBhZ2UvQ29uc29sZS5oOgorICAg
ICAgICAqIHBhZ2UvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcDoKKyAgICAgICAgKiBwYWdlL0Nv
bnRlbnRTZWN1cml0eVBvbGljeS5oOgorICAgICAgICAqIHBhZ2UvUGFnZUNvbnNvbGUuY3BwOgor
ICAgICAgICAqIHBhZ2UvUGFnZUNvbnNvbGUuaDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckds
b2JhbFNjb3BlLmNwcDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmg6CisK
IDIwMTMtMDktMTMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBDaHJv
bWUsIERyYWdDb250cm9sbGVyIGFuZCBGb2N1c0NvbnRyb2xsZXIgc2hvdWxkIGhvbGQgb250byBh
IFBhZ2UmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJz
b3IuaAkocmV2aXNpb24gMTU1NzMwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgog
ICAgIGNvbnN0IFNjcmlwdFZhbHVlJiB2YWx1ZSgpIGNvbnN0OwogICAgIElEQkFueSogc291cmNl
KCkgY29uc3Q7CiAKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHVwZGF0ZShTY3JpcHRTdGF0
ZSosIFNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gdXBkYXRlKEpTQzo6RXhlY1N0YXRlKiwgU2NyaXB0VmFsdWUmLCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIGxvbmcsIEV4Y2VwdGlvbkNvZGUmKTsKICAg
ICAvLyBGSVhNRTogVHJ5IHRvIG1vZGlmeSB0aGUgY29kZSBnZW5lcmF0b3Igc28gdGhpcyBvdmVy
bG9hZCBpcyB1bm5lZWRlZC4KICAgICB2b2lkIGNvbnRpbnVlRnVuY3Rpb24oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IGNvbnRpbnVlRnVuY3Rpb24oc3RhdGlj
X2Nhc3Q8SURCS2V5Kj4oMCksIGVjKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCShyZXZpc2lvbiAxNTU3MzApCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC02NSw4ICs2NSw4IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uPiB0cmFuc2FjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb247IH0KICAg
ICBib29sIGF1dG9JbmNyZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmF1dG9JbmNy
ZW1lbnQ7IH0KIAotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gYWRkKFNjcmlwdFN0YXRlKiwg
U2NyaXB0VmFsdWUmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBwdXQoU2NyaXB0U3RhdGUqLCBTY3JpcHRWYWx1ZSYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IGFkZChKU0M6OkV4ZWNTdGF0ZSosIFNjcmlwdFZhbHVlJiwg
RXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gcHV0KEpTQzo6RXhl
Y1N0YXRlKiwgU2NyaXB0VmFsdWUmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4
Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIHN0YXRpY19jYXN0
PElEQktleVJhbmdlKj4oMCksIGVjKTsgfQogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3Bl
bkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3Io
Y29udGV4dCwga2V5UmFuZ2UsIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0KICAg
ICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgY29uc3QgU2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsg
cmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwga2V5LCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQo
KSwgZWMpOyB9CkBAIC03Niw4ICs3Niw4IEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTY3JpcHRWYWx1ZSYg
a2V5LCBFeGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBhZGQoU2NyaXB0U3RhdGUqLCBTY3Jp
cHRWYWx1ZSYsIGNvbnN0IFNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChTY3JpcHRTdGF0ZSosIFNjcmlwdFZhbHVlJiwgY29u
c3QgU2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gYWRkKEpTQzo6RXhlY1N0YXRlKiwgU2NyaXB0VmFsdWUmLCBjb25zdCBTY3JpcHRW
YWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBw
dXQoSlNDOjpFeGVjU3RhdGUqLCBTY3JpcHRWYWx1ZSYsIGNvbnN0IFNjcmlwdFZhbHVlJiBrZXks
IEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0
aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhj
ZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlv
bkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNsZWFyKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7CkBAIC05NCw4ICs5NCw4IEBAIHB1YmxpYzoKICAg
ICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFNjcmlwdFZh
bHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4g
cHV0KElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSwgUGFzc1JlZlB0cjxJREJB
bnk+IHNvdXJjZSwgU2NyaXB0U3RhdGUqLCBTY3JpcHRWYWx1ZSYsIGNvbnN0IFNjcmlwdFZhbHVl
JiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChJ
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQW55PiBz
b3VyY2UsIFNjcmlwdFN0YXRlKiwgU2NyaXB0VmFsdWUmLCBQYXNzUmVmUHRyPElEQktleT4sIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChJREJEYXRhYmFz
ZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIEpT
Qzo6RXhlY1N0YXRlKiwgU2NyaXB0VmFsdWUmLCBjb25zdCBTY3JpcHRWYWx1ZSYga2V5LCBFeGNl
cHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBKU0M6
OkV4ZWNTdGF0ZSosIFNjcmlwdFZhbHVlJiwgUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRpb25D
b2RlJik7CiAgICAgdm9pZCBtYXJrRGVsZXRlZCgpIHsgbV9kZWxldGVkID0gdHJ1ZTsgfQogICAg
IHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCShy
ZXZpc2lvbiAxNTU3MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVk
U2NyaXB0SG9zdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgTm9k
ZSogSW5qZWN0ZWRTY3JpcHRIb3N0OjpzY3JpcHRWYWx1ZUFzTgogICAgIHJldHVybiB0b05vZGUo
dmFsdWUuanNWYWx1ZSgpKTsKIH0KIAotU2NyaXB0VmFsdWUgSW5qZWN0ZWRTY3JpcHRIb3N0Ojpu
b2RlQXNTY3JpcHRWYWx1ZShTY3JpcHRTdGF0ZSogc3RhdGUsIE5vZGUqIG5vZGUpCitTY3JpcHRW
YWx1ZSBJbmplY3RlZFNjcmlwdEhvc3Q6Om5vZGVBc1NjcmlwdFZhbHVlKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIXNob3VsZEFsbG93QWNjZXNzVG9Ob2Rl
KHN0YXRlLCBub2RlKSkKICAgICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKHN0YXRlLT52bSgpLCBq
c051bGwoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2Ny
aXB0TWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNTU3MzApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUwLDcgKzUwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1TY3JpcHRPYmplY3QgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjcmVhdGVJ
bmplY3RlZFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZSwgU2NyaXB0U3RhdGUqIHNjcmlwdFN0
YXRlLCBpbnQgaWQpCitTY3JpcHRPYmplY3QgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjcmVhdGVJ
bmplY3RlZFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZSwgSlNDOjpFeGVjU3RhdGUqIHNjcmlw
dFN0YXRlLCBpbnQgaWQpCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0U3RhdGUpOwog
CkBAIC04Niw3ICs4Niw3IEBAIFNjcmlwdE9iamVjdCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNy
ZWEKICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KCk7CiB9CiAKLWJvb2wgSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyOjpjYW5BY2Nlc3NJbnNwZWN0ZWRXaW5kb3coU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRl
KQorYm9vbCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNhbkFjY2Vzc0luc3BlY3RlZFdpbmRvdyhK
U0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUpCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soc2Ny
aXB0U3RhdGUpOwogICAgIEpTRE9NV2luZG93KiBpbnNwZWN0ZWRXaW5kb3cgPSB0b0pTRE9NV2lu
ZG93KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCShyZXZpc2lvbiAxNTU3MzApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNzYsNyArMjc2LDcgQEAgSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEV4ZWNTdGF0
ZSogZXhlYwogCiB2b2lkIHdpbGxDcmVhdGVQb3NzaWJseU9ycGhhbmVkVHJlZUJ5UmVtb3ZhbFNs
b3dDYXNlKE5vZGUqIHJvb3QpCiB7Ci0gICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gbWFp
bldvcmxkU2NyaXB0U3RhdGUocm9vdC0+ZG9jdW1lbnQoKS5mcmFtZSgpKTsKKyAgICBKU0M6OkV4
ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSBtYWluV29ybGRFeGVjU3RhdGUocm9vdC0+ZG9jdW1lbnQo
KS5mcmFtZSgpKTsKICAgICBpZiAoIXNjcmlwdFN0YXRlKQogICAgICAgICByZXR1cm47CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRp
dGlvbi5oCShyZXZpc2lvbiAxNTU3MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U05vZGVGaWx0ZXJDb25kaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgSlNOb2RlRmlsdGVyQ29u
ZGl0aW9uKEpTQzo6Vk0mLCBOb2RlRmlsdGVyKiBvd25lciwgSlNDOjpKU1ZhbHVlIGZpbHRlcik7
CiAKLSAgICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKFNjcmlwdFN0YXRlKiwgTm9kZSop
IGNvbnN0OworICAgICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoSlNDOjpFeGVjU3RhdGUq
LCBOb2RlKikgY29uc3Q7CiAKICAgICAgICAgY2xhc3MgV2Vha093bmVyIDogcHVibGljIEpTQzo6
V2Vha0hhbmRsZU93bmVyIHsKICAgICAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBK
U0M6OlNsb3RWaXNpdG9yJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTU1NzMwKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
OCw3ICszMzgsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNvbGxlY3RJc29sYXRlZENvCiAg
ICAgZm9yIChTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmJlZ2luKCk7
IGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCk7ICsraXRlcikgewogICAgICAgICBKU0M6OkV4
ZWNTdGF0ZSogZXhlYyA9IGl0ZXItPnZhbHVlLT53aW5kb3coKS0+Z2xvYmFsRXhlYygpOwogICAg
ICAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gaXRlci0+dmFsdWUtPndpbmRvdygpLT5pbXBs
KCktPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQo
c3RkOjpwYWlyPFNjcmlwdFN0YXRlKiwgU2VjdXJpdHlPcmlnaW4qPihleGVjLCBvcmlnaW4pKTsK
KyAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6OnBhaXI8SlNDOjpFeGVjU3RhdGUqLCBTZWN1cml0
eU9yaWdpbio+KGV4ZWMsIG9yaWdpbikpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNpb24gMTU1
NzMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMDQsNyArMzA0LDcgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZl
cjo6ZGlzcGF0Y2hEaWRQYXVzZQogewogICAgIEFTU0VSVChtX3BhdXNlZCk7CiAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fY3VycmVudENhbGxGcmFtZS0+c2NvcGVDaGFpbigp
LT5nbG9iYWxPYmplY3QoKTsKLSAgICBTY3JpcHRTdGF0ZSogc3RhdGUgPSBnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUgPSBnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKTsKICAgICBKU1ZhbHVlIGpzQ2FsbEZyYW1lOwogICAgIHsKICAgICAgICAg
aWYgKG1fY3VycmVudENhbGxGcmFtZS0+aXNWYWxpZCgpICYmIGdsb2JhbE9iamVjdC0+aW5oZXJp
dHMoSlNET01HbG9iYWxPYmplY3Q6OmluZm8oKSkpIHsKQEAgLTU3NCw3ICs1NzQsNyBAQCB2b2lk
IFNjcmlwdERlYnVnU2VydmVyOjpyZWNvbXBpbGVBbGxKU0Z1CiAgICAgbV9yZWNvbXBpbGVUaW1l
ci5zdGFydE9uZVNob3QoMCk7CiB9CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmNvbXBpbGVT
Y3JpcHQoU2NyaXB0U3RhdGUqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBTdHJpbmcq
LCBTdHJpbmcqKQordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6Y29tcGlsZVNjcmlwdChKU0M6OkV4
ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIFN0cmluZyosIFN0cmluZyop
CiB7CiAgICAgLy8gRklYTUUoODk2NTIpOiBpbXBsZW1lbnQgdGhpcy4KIH0KQEAgLTU4NCw3ICs1
ODQsNyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpjbGVhckNvbXBpbGVkU2NyCiAgICAgLy8g
RklYTUUoODk2NTIpOiBpbXBsZW1lbnQgdGhpcy4KIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZl
cjo6cnVuU2NyaXB0KFNjcmlwdFN0YXRlKiwgY29uc3QgU3RyaW5nJiwgU2NyaXB0VmFsdWUqLCBi
b29sKiwgU3RyaW5nKikKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJ1blNjcmlwdChKU0M6OkV4
ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYsIFNjcmlwdFZhbHVlKiwgYm9vbCosIFN0cmluZyopCiB7
CiAgICAgLy8gRklYTUUoODk2NTIpOiBpbXBsZW1lbnQgdGhpcy4KIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaAkocmV2aXNpb24gMTU1
NzMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtOTgsOSArOTgsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1BhdXNl
ZCgpIHsgcmV0dXJuIG1fcGF1c2VkOyB9CiAgICAgYm9vbCBydW5uaW5nTmVzdGVkTWVzc2FnZUxv
b3AoKSB7IHJldHVybiBtX3J1bm5pbmdOZXN0ZWRNZXNzYWdlTG9vcDsgfQogCi0gICAgdm9pZCBj
b21waWxlU2NyaXB0KFNjcmlwdFN0YXRlKiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCwgU3RyaW5nKiBzY3JpcHRJZCwgU3RyaW5nKiBleGNlcHRpb25N
ZXNzYWdlKTsKKyAgICB2b2lkIGNvbXBpbGVTY3JpcHQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBT
dHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBTdHJpbmcqIHNjcmlw
dElkLCBTdHJpbmcqIGV4Y2VwdGlvbk1lc3NhZ2UpOwogICAgIHZvaWQgY2xlYXJDb21waWxlZFNj
cmlwdHMoKTsKLSAgICB2b2lkIHJ1blNjcmlwdChTY3JpcHRTdGF0ZSosIGNvbnN0IFN0cmluZyYg
c2NyaXB0SWQsIFNjcmlwdFZhbHVlKiByZXN1bHQsIGJvb2wqIHdhc1Rocm93biwgU3RyaW5nKiBl
eGNlcHRpb25NZXNzYWdlKTsKKyAgICB2b2lkIHJ1blNjcmlwdChKU0M6OkV4ZWNTdGF0ZSosIGNv
bnN0IFN0cmluZyYgc2NyaXB0SWQsIFNjcmlwdFZhbHVlKiByZXN1bHQsIGJvb2wqIHdhc1Rocm93
biwgU3RyaW5nKiBleGNlcHRpb25NZXNzYWdlKTsKIAogICAgIGNsYXNzIFRhc2sgewogICAgICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAxNTU3MzApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRFdmVudExpc3RlbmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIFN0cmluZyBldmVudExpc3RlbmVySGFuZGxl
ckJvZHkoRG9jdW1lbnQKICAgICBKU0M6OkpTT2JqZWN0KiBqc0Z1bmN0aW9uID0ganNMaXN0ZW5l
ci0+anNGdW5jdGlvbihkb2N1bWVudCk7CiAgICAgaWYgKCFqc0Z1bmN0aW9uKQogICAgICAgICBy
ZXR1cm4gIiI7Ci0gICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gc2NyaXB0U3RhdGVGcm9t
Tm9kZShqc0xpc3RlbmVyLT5pc29sYXRlZFdvcmxkKCksIGRvY3VtZW50KTsKKyAgICBKU0M6OkV4
ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSBleGVjU3RhdGVGcm9tTm9kZShqc0xpc3RlbmVyLT5pc29s
YXRlZFdvcmxkKCksIGRvY3VtZW50KTsKICAgICByZXR1cm4ganNGdW5jdGlvbi0+dG9TdHJpbmco
c2NyaXB0U3RhdGUpLT52YWx1ZShzY3JpcHRTdGF0ZSk7CiB9CiAKQEAgLTEyMCw3ICsxMjAsNyBA
QCBTY3JpcHRWYWx1ZSBldmVudExpc3RlbmVySGFuZGxlcihEb2N1bWVuCiAgICAgcmV0dXJuIFNj
cmlwdFZhbHVlKCpqc0xpc3RlbmVyLT5pc29sYXRlZFdvcmxkKCktPnZtKCksIGpzRnVuY3Rpb24p
OwogfQogCi1TY3JpcHRTdGF0ZSogZXZlbnRMaXN0ZW5lckhhbmRsZXJTY3JpcHRTdGF0ZShGcmFt
ZSogZnJhbWUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIpCitKU0M6OkV4ZWNTdGF0ZSog
ZXZlbnRMaXN0ZW5lckhhbmRsZXJTY3JpcHRTdGF0ZShGcmFtZSogZnJhbWUsIEV2ZW50TGlzdGVu
ZXIqIGV2ZW50TGlzdGVuZXIpCiB7CiAgICAgY29uc3QgSlNFdmVudExpc3RlbmVyKiBqc0xpc3Rl
bmVyID0gSlNFdmVudExpc3RlbmVyOjpjYXN0KGV2ZW50TGlzdGVuZXIpOwogICAgIEFTU0VSVChq
c0xpc3RlbmVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEV2ZW50
TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRFdmVudExpc3RlbmVyLmgJKHJldmlzaW9uIDE1NTczMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyAr
NDksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgUGFzc1JlZlB0cjxKU0xhenlFdmVudExp
c3RlbmVyPiBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEZyYW1lKiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpOwogICAgIFN0cmluZyBldmVudExp
c3RlbmVySGFuZGxlckJvZHkoRG9jdW1lbnQqLCBFdmVudExpc3RlbmVyKik7CiAgICAgU2NyaXB0
VmFsdWUgZXZlbnRMaXN0ZW5lckhhbmRsZXIoRG9jdW1lbnQqLCBFdmVudExpc3RlbmVyKik7Ci0g
ICAgU2NyaXB0U3RhdGUqIGV2ZW50TGlzdGVuZXJIYW5kbGVyU2NyaXB0U3RhdGUoRnJhbWUqLCBF
dmVudExpc3RlbmVyKik7CisgICAgSlNDOjpFeGVjU3RhdGUqIGV2ZW50TGlzdGVuZXJIYW5kbGVy
U2NyaXB0U3RhdGUoRnJhbWUqLCBFdmVudExpc3RlbmVyKik7CiAgICAgYm9vbCBldmVudExpc3Rl
bmVySGFuZGxlckxvY2F0aW9uKERvY3VtZW50KiwgRXZlbnRMaXN0ZW5lciosIFN0cmluZyYgc291
cmNlTmFtZSwgU3RyaW5nJiBzY3JpcHRJZCwgaW50JiBsaW5lTnVtYmVyKTsKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVu
Y3Rpb25DYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRGdW5jdGlvbkNhbGwuY3BwCShyZXZpc2lvbiAxNTU3MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTAsNyArMTkwLDcgQEAgU2NyaXB0T2JqZWN0IFNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y29uc3RydQog
ICAgIHJldHVybiBTY3JpcHRPYmplY3QobV9leGVjLCBhc09iamVjdChyZXN1bHQpKTsKIH0KIAot
U2NyaXB0Q2FsbGJhY2s6OlNjcmlwdENhbGxiYWNrKFNjcmlwdFN0YXRlKiBzdGF0ZSwgY29uc3Qg
U2NyaXB0VmFsdWUmIGZ1bmN0aW9uKQorU2NyaXB0Q2FsbGJhY2s6OlNjcmlwdENhbGxiYWNrKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgY29uc3QgU2NyaXB0VmFsdWUmIGZ1bmN0aW9uKQogICAgIDog
U2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcihzdGF0ZSkKICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rp
b24pCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNh
bGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5j
dGlvbkNhbGwuaAkocmV2aXNpb24gMTU1NzMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0RnVuY3Rpb25DYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxl
ciB7CiAgICAgcHVibGljOgotICAgICAgICBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyKFNjcmlw
dFN0YXRlKiBzdGF0ZSkgOiBtX2V4ZWMoc3RhdGUpIHsgfQorICAgICAgICBTY3JpcHRDYWxsQXJn
dW1lbnRIYW5kbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkgOiBtX2V4ZWMoc3RhdGUpIHsgfQog
CiAgICAgICAgIHZvaWQgYXBwZW5kQXJndW1lbnQoY29uc3QgU2NyaXB0T2JqZWN0Jik7CiAgICAg
ICAgIHZvaWQgYXBwZW5kQXJndW1lbnQoY29uc3QgU2NyaXB0VmFsdWUmKTsKQEAgLTYyLDcgKzYy
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBKU0M6
Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIG1fYXJndW1lbnRzOwotICAgICAgICBTY3JpcHRTdGF0ZSog
bV9leGVjOworICAgICAgICBKU0M6OkV4ZWNTdGF0ZSogbV9leGVjOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgLy8gTWFya2VkQXJndW1lbnRCdWZmZXIgbXVzdCBiZSBzdGFjayBhbGxvY2F0ZWQs
IHNvIHByZXZlbnQgaGVhcApAQCAtODUsNyArODUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICBjbGFzcyBTY3JpcHRDYWxsYmFjayA6IHB1YmxpYyBTY3JpcHRDYWxsQXJndW1lbnRIYW5k
bGVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFNjcmlwdENhbGxiYWNrKFNjcmlwdFN0YXRlKiwg
Y29uc3QgU2NyaXB0VmFsdWUmKTsKKyAgICAgICAgU2NyaXB0Q2FsbGJhY2soSlNDOjpFeGVjU3Rh
dGUqLCBjb25zdCBTY3JpcHRWYWx1ZSYpOwogCiAgICAgICAgIFNjcmlwdFZhbHVlIGNhbGwoKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuY3BwCShy
ZXZpc2lvbiAxNTU3MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxOSArNDQsMTkgQEAgdXNpbmcgbmFtZXNwYWNl
IEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TY3JpcHRPYmplY3Q6OlNjcmlwdE9iamVj
dChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIEpTT2JqZWN0KiBvYmplY3QpCitTY3JpcHRPYmpl
Y3Q6OlNjcmlwdE9iamVjdChKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIEpTT2JqZWN0KiBv
YmplY3QpCiAgICAgOiBTY3JpcHRWYWx1ZShzY3JpcHRTdGF0ZS0+dm0oKSwgb2JqZWN0KQogICAg
ICwgbV9zY3JpcHRTdGF0ZShzY3JpcHRTdGF0ZSkKIHsKIH0KIAotU2NyaXB0T2JqZWN0OjpTY3Jp
cHRPYmplY3QoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBTY3JpcHRWYWx1ZSYgc2Ny
aXB0VmFsdWUpCitTY3JpcHRPYmplY3Q6OlNjcmlwdE9iamVjdChKU0M6OkV4ZWNTdGF0ZSogc2Ny
aXB0U3RhdGUsIGNvbnN0IFNjcmlwdFZhbHVlJiBzY3JpcHRWYWx1ZSkKICAgICA6IFNjcmlwdFZh
bHVlKHNjcmlwdFN0YXRlLT52bSgpLCBzY3JpcHRWYWx1ZS5qc1ZhbHVlKCkpCiAgICAgLCBtX3Nj
cmlwdFN0YXRlKHNjcmlwdFN0YXRlKQogewogfQogCi1zdGF0aWMgYm9vbCBoYW5kbGVFeGNlcHRp
b24oU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKQorc3RhdGljIGJvb2wgaGFuZGxlRXhjZXB0aW9u
KEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSkKIHsKICAgICBpZiAoIXNjcmlwdFN0YXRlLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC02NSw3ICs2NSw3IEBAIHN0
YXRpYyBib29sIGhhbmRsZUV4Y2VwdGlvbihTY3JpcHRTdGF0ZSoKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLWJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0
YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBTY3JpcHRPYmplY3QmIHZhbHVlKQorYm9vbCBT
Y3JpcHRHbG9iYWxPYmplY3Q6OnNldChKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0
IGNoYXIqIG5hbWUsIGNvbnN0IFNjcmlwdE9iamVjdCYgdmFsdWUpCiB7CiAgICAgSlNMb2NrSG9s
ZGVyIGxvY2soc2NyaXB0U3RhdGUpOwogICAgIHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPnB1dERpcmVjdChzY3JpcHRTdGF0ZS0+dm0oKSwgSWRlbnRpZmllcihzY3JpcHRTdGF0
ZSwgbmFtZSksIHZhbHVlLmpzT2JqZWN0KCkpOwpAQCAtNzMsNyArNzMsNyBAQCBib29sIFNjcmlw
dEdsb2JhbE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlCiB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9S
KQotYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUs
IGNvbnN0IGNoYXIqIG5hbWUsIEluc3BlY3RvckZyb250ZW5kSG9zdCogdmFsdWUpCitib29sIFNj
cmlwdEdsb2JhbE9iamVjdDo6c2V0KEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3Qg
Y2hhciogbmFtZSwgSW5zcGVjdG9yRnJvbnRlbmRIb3N0KiB2YWx1ZSkKIHsKICAgICBKU0xvY2tI
b2xkZXIgbG9jayhzY3JpcHRTdGF0ZSk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpOwpAQCAtODEsNyArODEsNyBAQCBib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6
c2V0KFNjcmlwdFN0YXRlCiAgICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlvbihzY3JpcHRTdGF0ZSk7
CiB9CiAKLWJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0
YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBJbmplY3RlZFNjcmlwdEhvc3QqIHZhbHVlKQorYm9vbCBT
Y3JpcHRHbG9iYWxPYmplY3Q6OnNldChKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0
IGNoYXIqIG5hbWUsIEluamVjdGVkU2NyaXB0SG9zdCogdmFsdWUpCiB7CiAgICAgSlNMb2NrSG9s
ZGVyIGxvY2soc2NyaXB0U3RhdGUpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpKTsKQEAgLTkwLDcgKzkwLDcgQEAgYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNl
dChTY3JpcHRTdGF0ZQogfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCiAKLWJvb2wgU2Ny
aXB0R2xvYmFsT2JqZWN0OjpnZXQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFy
KiBuYW1lLCBTY3JpcHRPYmplY3QmIHZhbHVlKQorYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6Omdl
dChKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIFNjcmlwdE9i
amVjdCYgdmFsdWUpCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0U3RhdGUpOwogICAg
IEpTVmFsdWUganNWYWx1ZSA9IHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmdl
dChzY3JpcHRTdGF0ZSwgSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFtZSkpOwpAQCAtMTA0LDcg
KzEwNCw3IEBAIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpnZXQoU2NyaXB0U3RhdGUKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnJlbW92ZShTY3JpcHRT
dGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUpCitib29sIFNjcmlwdEdsb2JhbE9i
amVjdDo6cmVtb3ZlKEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFt
ZSkKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhzY3JpcHRTdGF0ZSk7CiAgICAgc2NyaXB0U3Rh
dGUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHko
c2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc2NyaXB0U3RhdGUsIElkZW50aWZp
ZXIoc2NyaXB0U3RhdGUsIG5hbWUpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdE9iamVjdC5oCShyZXZpc2lvbiAxNTU3MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMjUgKzQzLDI1IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFNjcmlwdE9iamVjdCA6IHB1YmxpYyBT
Y3JpcHRWYWx1ZSB7CiAgICAgcHVibGljOgotICAgICAgICBTY3JpcHRPYmplY3QoU2NyaXB0U3Rh
dGUqLCBKU0M6OkpTT2JqZWN0Kik7Ci0gICAgICAgIFNjcmlwdE9iamVjdChTY3JpcHRTdGF0ZSos
IGNvbnN0IFNjcmlwdFZhbHVlJik7CisgICAgICAgIFNjcmlwdE9iamVjdChKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNPYmplY3QqKTsKKyAgICAgICAgU2NyaXB0T2JqZWN0KEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgU2NyaXB0VmFsdWUmKTsKICAgICAgICAgU2NyaXB0T2JqZWN0KCkgOiBtX3Njcmlw
dFN0YXRlKDApIHsgfQogICAgICAgICBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCgpIGNvbnN0IHsg
cmV0dXJuIGFzT2JqZWN0KGpzVmFsdWUoKSk7IH0KLSAgICAgICAgU2NyaXB0U3RhdGUqIHNjcmlw
dFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHRTdGF0ZTsgfQorICAgICAgICBKU0M6OkV4
ZWNTdGF0ZSogc2NyaXB0U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3NjcmlwdFN0YXRlOyB9CiAK
ICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFNjcmlwdFN0YXRlKiBtX3NjcmlwdFN0YXRlOworICAg
ICAgICBKU0M6OkV4ZWNTdGF0ZSogbV9zY3JpcHRTdGF0ZTsKICAgICB9OwogCiAgICAgY2xhc3Mg
U2NyaXB0R2xvYmFsT2JqZWN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBib29sIHNl
dChTY3JpcHRTdGF0ZSosIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFNjcmlwdE9iamVjdCYpOwor
ICAgICAgICBzdGF0aWMgYm9vbCBzZXQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBjaGFyKiBuYW1l
LCBjb25zdCBTY3JpcHRPYmplY3QmKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgICAgICBz
dGF0aWMgYm9vbCBzZXQoU2NyaXB0U3RhdGUqLCBjb25zdCBjaGFyKiBuYW1lLCBJbnNwZWN0b3JG
cm9udGVuZEhvc3QqKTsKLSAgICAgICAgc3RhdGljIGJvb2wgc2V0KFNjcmlwdFN0YXRlKiwgY29u
c3QgY2hhciogbmFtZSwgSW5qZWN0ZWRTY3JpcHRIb3N0Kik7CisgICAgICAgIHN0YXRpYyBib29s
IHNldChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IGNoYXIqIG5hbWUsIEluc3BlY3RvckZyb250ZW5k
SG9zdCopOworICAgICAgICBzdGF0aWMgYm9vbCBzZXQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBj
aGFyKiBuYW1lLCBJbmplY3RlZFNjcmlwdEhvc3QqKTsKICNlbmRpZgotICAgICAgICBzdGF0aWMg
Ym9vbCBnZXQoU2NyaXB0U3RhdGUqLCBjb25zdCBjaGFyKiBuYW1lLCBTY3JpcHRPYmplY3QmKTsK
LSAgICAgICAgc3RhdGljIGJvb2wgcmVtb3ZlKFNjcmlwdFN0YXRlKiwgY29uc3QgY2hhciogbmFt
ZSk7CisgICAgICAgIHN0YXRpYyBib29sIGdldChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IGNoYXIq
IG5hbWUsIFNjcmlwdE9iamVjdCYpOworICAgICAgICBzdGF0aWMgYm9vbCByZW1vdmUoSlNDOjpF
eGVjU3RhdGUqLCBjb25zdCBjaGFyKiBuYW1lKTsKICAgICBwcml2YXRlOgogICAgICAgICBTY3Jp
cHRHbG9iYWxPYmplY3QoKSB7IH0KICAgICB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0UHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmNwcAkocmV2aXNpb24gMTU1NzMwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Nyw3ICs1Nyw3IEBAIHVuc2lnbmVkIFNjcmlwdFByb2ZpbGVyOjpnZXRIZWFwT2JqZWN0SWQK
ICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBTY3JpcHRQcm9maWxlcjo6c3RhcnQoU2NyaXB0U3Rh
dGUqIHN0YXRlLCBjb25zdCBTdHJpbmcmIHRpdGxlKQordm9pZCBTY3JpcHRQcm9maWxlcjo6c3Rh
cnQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBjb25zdCBTdHJpbmcmIHRpdGxlKQogewogICAgIEpT
Qzo6TGVnYWN5UHJvZmlsZXI6OnByb2ZpbGVyKCktPnN0YXJ0UHJvZmlsaW5nKHN0YXRlLCB0aXRs
ZSk7CiB9CkBAIC03MSwxMSArNzEsMTEgQEAgdm9pZCBTY3JpcHRQcm9maWxlcjo6c3RhcnRGb3JQ
YWdlKFBhZ2UqIAogI2lmIEVOQUJMRShXT1JLRVJTKQogdm9pZCBTY3JpcHRQcm9maWxlcjo6c3Rh
cnRGb3JXb3JrZXJHbG9iYWxTY29wZShXb3JrZXJHbG9iYWxTY29wZSogY29udGV4dCwgY29uc3Qg
U3RyaW5nJiB0aXRsZSkKIHsKLSAgICBzdGFydChzY3JpcHRTdGF0ZUZyb21Xb3JrZXJHbG9iYWxT
Y29wZShjb250ZXh0KSwgdGl0bGUpOworICAgIHN0YXJ0KGV4ZWNTdGF0ZUZyb21Xb3JrZXJHbG9i
YWxTY29wZShjb250ZXh0KSwgdGl0bGUpOwogfQogI2VuZGlmCiAKLVBhc3NSZWZQdHI8U2NyaXB0
UHJvZmlsZT4gU2NyaXB0UHJvZmlsZXI6OnN0b3AoU2NyaXB0U3RhdGUqIHN0YXRlLCBjb25zdCBT
dHJpbmcmIHRpdGxlKQorUGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiBTY3JpcHRQcm9maWxlcjo6
c3RvcChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7CiAgICAg
UmVmUHRyPEpTQzo6UHJvZmlsZT4gcHJvZmlsZSA9IEpTQzo6TGVnYWN5UHJvZmlsZXI6OnByb2Zp
bGVyKCktPnN0b3BQcm9maWxpbmcoc3RhdGUsIHRpdGxlKTsKICAgICByZXR1cm4gU2NyaXB0UHJv
ZmlsZTo6Y3JlYXRlKHByb2ZpbGUpOwpAQCAtOTAsNyArOTAsNyBAQCBQYXNzUmVmUHRyPFNjcmlw
dFByb2ZpbGU+IFNjcmlwdFByb2ZpbGVyCiAjaWYgRU5BQkxFKFdPUktFUlMpCiBQYXNzUmVmUHRy
PFNjcmlwdFByb2ZpbGU+IFNjcmlwdFByb2ZpbGVyOjpzdG9wRm9yV29ya2VyR2xvYmFsU2NvcGUo
V29ya2VyR2xvYmFsU2NvcGUqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7Ci0gICAg
cmV0dXJuIHN0b3Aoc2NyaXB0U3RhdGVGcm9tV29ya2VyR2xvYmFsU2NvcGUoY29udGV4dCksIHRp
dGxlKTsKKyAgICByZXR1cm4gc3RvcChleGVjU3RhdGVGcm9tV29ya2VyR2xvYmFsU2NvcGUoY29u
dGV4dCksIHRpdGxlKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRQcm9maWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdFByb2ZpbGVyLmgJKHJldmlzaW9uIDE1NTczMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDEy
ICs1OSwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgY29sbGVjdEdhcmJhZ2UoKTsKICAg
ICBzdGF0aWMgU2NyaXB0T2JqZWN0IG9iamVjdEJ5SGVhcE9iamVjdElkKHVuc2lnbmVkIGlkKTsK
ICAgICBzdGF0aWMgdW5zaWduZWQgZ2V0SGVhcE9iamVjdElkKGNvbnN0IFNjcmlwdFZhbHVlJik7
Ci0gICAgc3RhdGljIHZvaWQgc3RhcnQoU2NyaXB0U3RhdGUqIHN0YXRlLCBjb25zdCBTdHJpbmcm
IHRpdGxlKTsKKyAgICBzdGF0aWMgdm9pZCBzdGFydChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIGNv
bnN0IFN0cmluZyYgdGl0bGUpOwogICAgIHN0YXRpYyB2b2lkIHN0YXJ0Rm9yUGFnZShQYWdlKiwg
Y29uc3QgU3RyaW5nJiB0aXRsZSk7CiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgc3RhdGljIHZv
aWQgc3RhcnRGb3JXb3JrZXJHbG9iYWxTY29wZShXb3JrZXJHbG9iYWxTY29wZSosIGNvbnN0IFN0
cmluZyYgdGl0bGUpOwogI2VuZGlmCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8U2NyaXB0UHJvZmls
ZT4gc3RvcChTY3JpcHRTdGF0ZSogc3RhdGUsIGNvbnN0IFN0cmluZyYgdGl0bGUpOworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHN0b3AoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTY3JpcHRQcm9m
aWxlPiBzdG9wRm9yUGFnZShQYWdlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CiAjaWYgRU5BQkxF
KFdPUktFUlMpCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2NyaXB0UHJvZmlsZT4gc3RvcEZvcldv
cmtlckdsb2JhbFNjb3BlKFdvcmtlckdsb2JhbFNjb3BlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RhdGUuY3BwCShyZXZp
c2lvbiAxNTU3MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1ET01XaW5kb3cqIGRvbVdpbmRvd0Zyb21TY3JpcHRTdGF0ZShTY3JpcHRTdGF0ZSogc2Ny
aXB0U3RhdGUpCitET01XaW5kb3cqIGRvbVdpbmRvd0Zyb21FeGVjU3RhdGUoSlNDOjpFeGVjU3Rh
dGUqIHNjcmlwdFN0YXRlKQogewogICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgaWYgKCFnbG9iYWxP
YmplY3QtPmluaGVyaXRzKEpTRE9NV2luZG93QmFzZTo6aW5mbygpKSkKQEAgLTU3LDcgKzU3LDcg
QEAgRE9NV2luZG93KiBkb21XaW5kb3dGcm9tU2NyaXB0U3RhdGUoU2NyaQogICAgIHJldHVybiBK
U0M6OmpzQ2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihnbG9iYWxPYmplY3QpLT5pbXBsKCk7CiB9CiAK
LVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHRGcm9tU2NyaXB0
U3RhdGUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKQorU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dEZyb21FeGVjU3RhdGUoSlNDOjpFeGVjU3RhdGUqIHNjcmlw
dFN0YXRlKQogewogICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjcmlw
dFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlu
aGVyaXRzKEpTRE9NR2xvYmFsT2JqZWN0OjppbmZvKCkpKQpAQCAtNjUsNyArNjUsNyBAQCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25DCiAgICAgcmV0dXJuIEpTQzo6anND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOwogfQogCi1TY3JpcHRTdGF0ZSogbWFpbldvcmxkU2NyaXB0U3RhdGUoRnJhbWUqIGZy
YW1lKQorSlNDOjpFeGVjU3RhdGUqIG1haW5Xb3JsZEV4ZWNTdGF0ZShGcmFtZSogZnJhbWUpCiB7
CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC03Myw3ICs3Myw3IEBAIFNj
cmlwdFN0YXRlKiBtYWluV29ybGRTY3JpcHRTdGF0ZShGcmFtZSoKICAgICByZXR1cm4gc2hlbGwt
PndpbmRvdygpLT5nbG9iYWxFeGVjKCk7CiB9CiAKLVNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZUZy
b21Ob2RlKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIE5vZGUqIG5vZGUpCitKU0M6OkV4ZWNTdGF0
ZSogZXhlY1N0YXRlRnJvbU5vZGUoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgTm9kZSogbm9kZSkK
IHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiAwOwpAQCAtODUsMTMgKzg1LDEzIEBA
IFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZUZyb21Ob2RlKERPTVdyYXAKICAgICByZXR1cm4gZnJh
bWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdCh3b3JsZCktPmdsb2JhbEV4ZWMoKTsKIH0KIAotU2Ny
aXB0U3RhdGUqIHNjcmlwdFN0YXRlRnJvbVBhZ2UoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgUGFn
ZSogcGFnZSkKK0pTQzo6RXhlY1N0YXRlKiBleGVjU3RhdGVGcm9tUGFnZShET01XcmFwcGVyV29y
bGQqIHdvcmxkLCBQYWdlKiBwYWdlKQogewogICAgIHJldHVybiBwYWdlLT5tYWluRnJhbWUoKS5z
Y3JpcHQoKS5nbG9iYWxPYmplY3Qod29ybGQpLT5nbG9iYWxFeGVjKCk7CiB9CiAKICNpZiBFTkFC
TEUoV09SS0VSUykKLVNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZUZyb21Xb3JrZXJHbG9iYWxTY29w
ZShXb3JrZXJHbG9iYWxTY29wZSogd29ya2VyR2xvYmFsU2NvcGUpCitKU0M6OkV4ZWNTdGF0ZSog
ZXhlY1N0YXRlRnJvbVdvcmtlckdsb2JhbFNjb3BlKFdvcmtlckdsb2JhbFNjb3BlKiB3b3JrZXJH
bG9iYWxTY29wZSkKIHsKICAgICByZXR1cm4gd29ya2VyR2xvYmFsU2NvcGUtPnNjcmlwdCgpLT53
b3JrZXJHbG9iYWxTY29wZVdyYXBwZXIoKS0+Z2xvYmFsRXhlYygpOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5oCShyZXZpc2lvbiAxNTU3MzApCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MiwxNiArNTIsMTYgQEAgY2xhc3MgV29ya2VyR2xvYmFsU2NvcGU7CiAvLyBGb3Igbm93LCB0
aGUgc2VwYXJhdGlvbiBpcyBwdXJlbHkgYnkgY29udmVudGlvbi4KIHR5cGVkZWYgSlNDOjpFeGVj
U3RhdGUgU2NyaXB0U3RhdGU7CiAKLURPTVdpbmRvdyogZG9tV2luZG93RnJvbVNjcmlwdFN0YXRl
KFNjcmlwdFN0YXRlKik7Ci1TY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0RnJvbVNjcmlwdFN0YXRlKFNjcmlwdFN0YXRlKik7CitET01XaW5kb3cqIGRvbVdpbmRv
d0Zyb21FeGVjU3RhdGUoU2NyaXB0U3RhdGUqKTsKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRGcm9tRXhlY1N0YXRlKEpTQzo6RXhlY1N0YXRlKik7CiAKLVNj
cmlwdFN0YXRlKiBtYWluV29ybGRTY3JpcHRTdGF0ZShGcmFtZSopOworSlNDOjpFeGVjU3RhdGUq
IG1haW5Xb3JsZEV4ZWNTdGF0ZShGcmFtZSopOwogCi1TY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGVG
cm9tTm9kZShET01XcmFwcGVyV29ybGQqLCBOb2RlKik7Ci1TY3JpcHRTdGF0ZSogc2NyaXB0U3Rh
dGVGcm9tUGFnZShET01XcmFwcGVyV29ybGQqLCBQYWdlKik7CitKU0M6OkV4ZWNTdGF0ZSogZXhl
Y1N0YXRlRnJvbU5vZGUoRE9NV3JhcHBlcldvcmxkKiwgTm9kZSopOworSlNDOjpFeGVjU3RhdGUq
IGV4ZWNTdGF0ZUZyb21QYWdlKERPTVdyYXBwZXJXb3JsZCosIFBhZ2UqKTsKIAogI2lmIEVOQUJM
RShXT1JLRVJTKQotU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlRnJvbVdvcmtlckdsb2JhbFNjb3Bl
KFdvcmtlckdsb2JhbFNjb3BlKik7CitKU0M6OkV4ZWNTdGF0ZSogZXhlY1N0YXRlRnJvbVdvcmtl
ckdsb2JhbFNjb3BlKFdvcmtlckdsb2JhbFNjb3BlKik7CiAjZW5kaWYKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVl
LmNwcAkocmV2aXNpb24gMTU1NzMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBTY3JpcHRWYWx1ZTo6Z2V0
U3RyaW5nKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgU3RyaW5nJiByZXN1bHQpIGNvbnN0Citi
b29sIFNjcmlwdFZhbHVlOjpnZXRTdHJpbmcoSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLCBT
dHJpbmcmIHJlc3VsdCkgY29uc3QKIHsKICAgICBpZiAoIW1fdmFsdWUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTU0LDcgKzU0LDcgQEAgYm9vbCBTY3JpcHRWYWx1ZTo6Z2V0U3RyaW5nKFNj
cmlwdFN0YXRlKgogICAgIHJldHVybiB0cnVlOwogfQogCi1TdHJpbmcgU2NyaXB0VmFsdWU6OnRv
U3RyaW5nKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkgY29uc3QKK1N0cmluZyBTY3JpcHRWYWx1
ZTo6dG9TdHJpbmcoSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlKSBjb25zdAogewogICAgIFN0
cmluZyByZXN1bHQgPSBtX3ZhbHVlLmdldCgpLnRvU3RyaW5nKHNjcmlwdFN0YXRlKS0+dmFsdWUo
c2NyaXB0U3RhdGUpOwogICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhbiBleGNlcHRpb24g
aXMgdGhyb3duIGFzIHBhcnQgb2YgaW52b2tpbmcgdG9TdHJpbmcgb24gdGhlIG9iamVjdC4KQEAg
LTYzLDcgKzYzLDcgQEAgU3RyaW5nIFNjcmlwdFZhbHVlOjp0b1N0cmluZyhTY3JpcHRTdGF0ZQog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgU2NyaXB0VmFsdWU6OmlzRXF1YWwoU2NyaXB0
U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBTY3JpcHRWYWx1ZSYgYW5vdGhlclZhbHVlKSBjb25z
dAorYm9vbCBTY3JpcHRWYWx1ZTo6aXNFcXVhbChKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUs
IGNvbnN0IFNjcmlwdFZhbHVlJiBhbm90aGVyVmFsdWUpIGNvbnN0CiB7CiAgICAgaWYgKGhhc05v
VmFsdWUoKSkKICAgICAgICAgcmV0dXJuIGFub3RoZXJWYWx1ZS5oYXNOb1ZhbHVlKCk7CkBAIC05
OCwyNSArOTgsMjUgQEAgYm9vbCBTY3JpcHRWYWx1ZTo6aXNGdW5jdGlvbigpIGNvbnN0CiAgICAg
cmV0dXJuIGdldENhbGxEYXRhKG1fdmFsdWUuZ2V0KCksIGNhbGxEYXRhKSAhPSBDYWxsVHlwZU5v
bmU7CiB9CiAKLVBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTY3JpcHRWYWx1ZTo6
c2VyaWFsaXplKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgU2VyaWFsaXphdGlvbkVycm9yTW9k
ZSB0aHJvd0V4Y2VwdGlvbnMpCitQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2Ny
aXB0VmFsdWU6OnNlcmlhbGl6ZShKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIFNlcmlhbGl6
YXRpb25FcnJvck1vZGUgdGhyb3dFeGNlcHRpb25zKQogewogICAgIHJldHVybiBTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OmNyZWF0ZShzY3JpcHRTdGF0ZSwganNWYWx1ZSgpLCAwLCAwLCB0aHJvd0V4
Y2VwdGlvbnMpOwogfQogCi1QYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2NyaXB0
VmFsdWU6OnNlcmlhbGl6ZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIE1lc3NhZ2VQb3J0QXJy
YXkqIG1lc3NhZ2VQb3J0cywgQXJyYXlCdWZmZXJBcnJheSogYXJyYXlCdWZmZXJzLCBib29sJiBk
aWRUaHJvdykKK1Bhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTY3JpcHRWYWx1ZTo6
c2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSwgTWVzc2FnZVBvcnRBcnJheSog
bWVzc2FnZVBvcnRzLCBBcnJheUJ1ZmZlckFycmF5KiBhcnJheUJ1ZmZlcnMsIGJvb2wmIGRpZFRo
cm93KQogewogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1
ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKHNjcmlwdFN0YXRlLCBqc1ZhbHVlKCks
IG1lc3NhZ2VQb3J0cywgYXJyYXlCdWZmZXJzKTsKICAgICBkaWRUaHJvdyA9IHNjcmlwdFN0YXRl
LT5oYWRFeGNlcHRpb24oKTsKICAgICByZXR1cm4gc2VyaWFsaXplZFZhbHVlLnJlbGVhc2UoKTsK
IH0KIAotU2NyaXB0VmFsdWUgU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKFNjcmlwdFN0YXRlKiBz
Y3JpcHRTdGF0ZSwgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiB2YWx1ZSwgU2VyaWFsaXphdGlvbkVy
cm9yTW9kZSB0aHJvd0V4Y2VwdGlvbnMpCitTY3JpcHRWYWx1ZSBTY3JpcHRWYWx1ZTo6ZGVzZXJp
YWxpemUoSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLCBTZXJpYWxpemVkU2NyaXB0VmFsdWUq
IHZhbHVlLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlIHRocm93RXhjZXB0aW9ucykKIHsKICAgICBy
ZXR1cm4gU2NyaXB0VmFsdWUoc2NyaXB0U3RhdGUtPnZtKCksIHZhbHVlLT5kZXNlcmlhbGl6ZShz
Y3JpcHRTdGF0ZSwgc2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgMCwgdGhyb3dF
eGNlcHRpb25zKSk7CiB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IGpzVG9JbnNwZWN0b3JWYWx1ZShTY3JpcHRTdGF0ZSogc2NyaXB0
U3RhdGUsIEpTVmFsdWUgdmFsdWUsIGludCBtYXhEZXB0aCkKK3N0YXRpYyBQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiBqc1RvSW5zcGVjdG9yVmFsdWUoSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0
YXRlLCBKU1ZhbHVlIHZhbHVlLCBpbnQgbWF4RGVwdGgpCiB7CiAgICAgaWYgKCF2YWx1ZSkgewog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE2OSw3ICsxNjksNyBAQCBzdGF0aWMg
UGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4ganNUb0luCiAgICAgcmV0dXJuIDA7CiB9CiAKLVBh
c3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IFNjcmlwdFZhbHVlOjp0b0luc3BlY3RvclZhbHVlKFNj
cmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkgY29uc3QKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IFNjcmlwdFZhbHVlOjp0b0luc3BlY3RvclZhbHVlKEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0
ZSkgY29uc3QKIHsKICAgICBKU0M6OkpTTG9ja0hvbGRlciBob2xkZXIoc2NyaXB0U3RhdGUpOwog
ICAgIHJldHVybiBqc1RvSW5zcGVjdG9yVmFsdWUoc2NyaXB0U3RhdGUsIG1fdmFsdWUuZ2V0KCks
IEluc3BlY3RvclZhbHVlOjptYXhEZXB0aCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdFZhbHVlLmgJKHJldmlzaW9uIDE1NTczMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDkgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgflNjcmlwdFZhbHVlKCkge30KIAogICAgIEpTQzo6SlNWYWx1
ZSBqc1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5nZXQoKTsgfQotICAgIGJvb2wgZ2V0
U3RyaW5nKFNjcmlwdFN0YXRlKiwgU3RyaW5nJiByZXN1bHQpIGNvbnN0OwotICAgIFN0cmluZyB0
b1N0cmluZyhTY3JpcHRTdGF0ZSopIGNvbnN0OwotICAgIGJvb2wgaXNFcXVhbChTY3JpcHRTdGF0
ZSosIGNvbnN0IFNjcmlwdFZhbHVlJikgY29uc3Q7CisgICAgYm9vbCBnZXRTdHJpbmcoSlNDOjpF
eGVjU3RhdGUqLCBTdHJpbmcmIHJlc3VsdCkgY29uc3Q7CisgICAgU3RyaW5nIHRvU3RyaW5nKEpT
Qzo6RXhlY1N0YXRlKikgY29uc3Q7CisgICAgYm9vbCBpc0VxdWFsKEpTQzo6RXhlY1N0YXRlKiwg
Y29uc3QgU2NyaXB0VmFsdWUmKSBjb25zdDsKICAgICBib29sIGlzTnVsbCgpIGNvbnN0OwogICAg
IGJvb2wgaXNVbmRlZmluZWQoKSBjb25zdDsKICAgICBib29sIGlzT2JqZWN0KCkgY29uc3Q7CkBA
IC02NSwxMiArNjUsMTIgQEAgcHVibGljOgogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNj
cmlwdFZhbHVlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVl
OyB9CiAKLSAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplKFNj
cmlwdFN0YXRlKiwgU2VyaWFsaXphdGlvbkVycm9yTW9kZSA9IFRocm93aW5nKTsKLSAgICBQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplKFNjcmlwdFN0YXRlKiwgTWVz
c2FnZVBvcnRBcnJheSosIEFycmF5QnVmZmVyQXJyYXkqLCBib29sJik7Ci0gICAgc3RhdGljIFNj
cmlwdFZhbHVlIGRlc2VyaWFsaXplKFNjcmlwdFN0YXRlKiwgU2VyaWFsaXplZFNjcmlwdFZhbHVl
KiwgU2VyaWFsaXphdGlvbkVycm9yTW9kZSA9IFRocm93aW5nKTsKKyAgICBQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlKiwgU2VyaWFsaXph
dGlvbkVycm9yTW9kZSA9IFRocm93aW5nKTsKKyAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlKiwgTWVzc2FnZVBvcnRBcnJheSosIEFy
cmF5QnVmZmVyQXJyYXkqLCBib29sJik7CisgICAgc3RhdGljIFNjcmlwdFZhbHVlIGRlc2VyaWFs
aXplKEpTQzo6RXhlY1N0YXRlKiwgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiwgU2VyaWFsaXphdGlv
bkVycm9yTW9kZSA9IFRocm93aW5nKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgUGFz
c1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdG9JbnNwZWN0b3JWYWx1ZShTY3JpcHRTdGF0ZSopIGNv
bnN0OworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHRvSW5zcGVjdG9yVmFsdWUoSlND
OjpFeGVjU3RhdGUqKSBjb25zdDsKICNlbmRpZgogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShy
ZXZpc2lvbiAxNTU3MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDA1LDcgKzIwMDUsNyBAQCBKU1Zh
bHVlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpCiB9CiAKICNpZiBFTkFCTEUoSU5T
UEVDVE9SKQotU2NyaXB0VmFsdWUgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZUZv
ckluc3BlY3RvcihTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpCitTY3JpcHRWYWx1ZSBTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplRm9ySW5zcGVjdG9yKEpTQzo6RXhlY1N0YXRlKiBz
Y3JpcHRTdGF0ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gZGVzZXJpYWxpemUoc2NyaXB0U3Rh
dGUsIHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIDApOwogICAgIHJldHVybiBT
Y3JpcHRWYWx1ZShzY3JpcHRTdGF0ZS0+dm0oKSwgdmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgJKHJldmlzaW9u
IDE1NTczMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICBKU1Zh
bHVlUmVmIGRlc2VyaWFsaXplKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsK
IAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgU2NyaXB0VmFsdWUgZGVzZXJpYWxpemVGb3JJ
bnNwZWN0b3IoU2NyaXB0U3RhdGUqKTsKKyAgICBTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUZvcklu
c3BlY3RvcihKU0M6OkV4ZWNTdGF0ZSopOwogI2VuZGlmCiAKICAgICBjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGRhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAkocmV2aXNpb24gMTU1NzMwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODU5LDEyICs4NTksMTIgQEAgUGFzc1JlZlB0cjxFbGVtZW50
PiBEb2N1bWVudDo6Y3JlYXRlRWxlbQogICAgIHJldHVybiBzZXRUeXBlRXh0ZW5zaW9uKGNyZWF0
ZUVsZW1lbnROUyhuYW1lc3BhY2VVUkksIHF1YWxpZmllZE5hbWUsIGVjKSwgdHlwZUV4dGVuc2lv
bik7CiB9CiAKLVBhc3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBEb2N1bWVudDo6
cmVnaXN0ZXJFbGVtZW50KFdlYkNvcmU6OlNjcmlwdFN0YXRlKiBzdGF0ZSwgY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8Q3VzdG9tRWxlbWVu
dENvbnN0cnVjdG9yPiBEb2N1bWVudDo6cmVnaXN0ZXJFbGVtZW50KFdlYkNvcmU6OkpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICByZXR1cm4gcmVnaXN0ZXJFbGVtZW50KHN0YXRlLCBuYW1lLCBEaWN0aW9uYXJ5
KCksIGVjKTsKIH0KIAotUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IERvY3Vt
ZW50OjpyZWdpc3RlckVsZW1lbnQoV2ViQ29yZTo6U2NyaXB0U3RhdGUqIHN0YXRlLCBjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQorUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IERvY3VtZW50Ojpy
ZWdpc3RlckVsZW1lbnQoV2ViQ29yZTo6SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIGlmICghaXNIVE1MRG9jdW1lbnQoKSAmJiAhaXNYSFRNTERvY3VtZW50KCkp
IHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKQEAgLTQ4MTUsNyArNDgxNSw3IEBA
IHZvaWQgRG9jdW1lbnQ6OmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2UKICAgICAgICAgcGFnZS0+
Y29uc29sZSgpLmFkZE1lc3NhZ2Uoc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgcmVxdWVzdElkZW50
aWZpZXIsIHRoaXMpOwogfQogCi12b2lkIERvY3VtZW50OjphZGRNZXNzYWdlKE1lc3NhZ2VTb3Vy
Y2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29u
c3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVt
bk51bWJlciwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaywgU2NyaXB0U3Rh
dGUqIHN0YXRlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQordm9pZCBEb2N1bWVu
dDo6YWRkTWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNpZ25lZCBs
aW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0
YWNrPiBjYWxsU3RhY2ssIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgbG9uZyByZXF1
ZXN0SWRlbnRpZmllcikKIHsKICAgICBpZiAoIWlzQ29udGV4dFRocmVhZCgpKSB7CiAgICAgICAg
IHBvc3RUYXNrKEFkZENvbnNvbGVNZXNzYWdlVGFzazo6Y3JlYXRlKHNvdXJjZSwgbGV2ZWwsIG1l
c3NhZ2UpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxNTU3MzApCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTEzOCw4ICsx
MTM4LDggQEAgcHVibGljOgogI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCiAgICAgUGFzc1Jl
ZlB0cjxFbGVtZW50PiBjcmVhdGVFbGVtZW50KGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1l
LCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGVFeHRlbnNpb24sIEV4Y2VwdGlvbkNvZGUmKTsKICAg
ICBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnROUyhjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBxdWFsaWZpZWROYW1lLCBjb25zdCBBdG9taWNT
dHJpbmcmIHR5cGVFeHRlbnNpb24sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPEN1
c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gcmVnaXN0ZXJFbGVtZW50KFdlYkNvcmU6OlNjcmlwdFN0
YXRlKiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFz
c1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+IHJlZ2lzdGVyRWxlbWVudChXZWJDb3Jl
OjpTY3JpcHRTdGF0ZSosIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgRGljdGlvbmFy
eSYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8Q3VzdG9tRWxlbWVu
dENvbnN0cnVjdG9yPiByZWdpc3RlckVsZW1lbnQoV2ViQ29yZTo6SlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRy
PEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gcmVnaXN0ZXJFbGVtZW50KFdlYkNvcmU6OkpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBEaWN0aW9uYXJ5JiBv
cHRpb25zLCBFeGNlcHRpb25Db2RlJik7CiAgICAgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5KiByZWdp
c3RyeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0cnkuZ2V0KCk7IH0KICAgICB2b2lkIGRpZENy
ZWF0ZUN1c3RvbUVsZW1lbnQoRWxlbWVudCosIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvciopOwog
I2VuZGlmCkBAIC0xMjIwLDcgKzEyMjAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBy
ZWZTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgeyByZWYoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBk
ZXJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSB7IGRlcmVmKCk7IH0KIAotICAgIHZpcnR1YWwg
dm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwg
dW5zaWduZWQgY29sdW1uTnVtYmVyLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4sIFNjcmlw
dFN0YXRlKiA9IDAsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsKKyAgICB2
aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVO
dW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+
LCBKU0M6OkV4ZWNTdGF0ZSogPSAwLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0g
MCk7CiAKICAgICB2aXJ0dWFsIGRvdWJsZSBtaW5pbXVtVGltZXJJbnRlcnZhbCgpIGNvbnN0Owog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZUZpbHRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuY3BwCShyZXZpc2lvbiAxNTU3MzApCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZUZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcg
KzI5LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zaG9ydCBOb2RlRmlsdGVyOjphY2Nl
cHROb2RlKFNjcmlwdFN0YXRlKiBzdGF0ZSwgTm9kZSogbm9kZSkgY29uc3QKK3Nob3J0IE5vZGVG
aWx0ZXI6OmFjY2VwdE5vZGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBOb2RlKiBub2RlKSBjb25z
dAogewogICAgIC8vIGNhc3QgdG8gc2hvcnQgc2lsZW5jZXMgImVudW1lcmFsIGFuZCBub24tZW51
bWVyYWwgdHlwZXMgaW4gcmV0dXJuIiB3YXJuaW5nCiAgICAgcmV0dXJuIG1fY29uZGl0aW9uID8g
bV9jb25kaXRpb24tPmFjY2VwdE5vZGUoc3RhdGUsIG5vZGUpIDogc3RhdGljX2Nhc3Q8c2hvcnQ+
KEZJTFRFUl9BQ0NFUFQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZUZpbHRlci5oCShyZXZpc2lvbiAx
NTU3MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZUZpbHRlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC03NSwxMSArNzUsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBOb2RlRmlsdGVyKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgc2hv
cnQgYWNjZXB0Tm9kZShTY3JpcHRTdGF0ZSosIE5vZGUqKSBjb25zdDsKKyAgICAgICAgc2hvcnQg
YWNjZXB0Tm9kZShKU0M6OkV4ZWNTdGF0ZSosIE5vZGUqKSBjb25zdDsKIAogICAgICAgICAvLyBE
byBub3QgY2FsbCB0aGVzZSBmdW5jdGlvbnMuIFRoZXkgYXJlIGp1c3Qgc2NhZmZvbGRpbmcgdG8g
c3VwcG9ydCB0aGUgT2JqZWN0aXZlLUMgYmluZGluZ3MuCiAgICAgICAgIC8vIFRoZXkgb3BlcmF0
ZSBpbiB0aGUgbWFpbiB0aHJlYWQgbm9ybWFsIHdvcmxkLCBhbmQgdGhleSBzd2FsbG93IEpTIGV4
Y2VwdGlvbnMuCi0gICAgICAgIHNob3J0IGFjY2VwdE5vZGUoTm9kZSogbm9kZSkgY29uc3QgeyBy
ZXR1cm4gYWNjZXB0Tm9kZShzY3JpcHRTdGF0ZUZyb21Ob2RlKG1haW5UaHJlYWROb3JtYWxXb3Js
ZCgpLCBub2RlKSwgbm9kZSk7IH0KKyAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZShOb2RlKiBub2Rl
KSBjb25zdCB7IHJldHVybiBhY2NlcHROb2RlKGV4ZWNTdGF0ZUZyb21Ob2RlKG1haW5UaHJlYWRO
b3JtYWxXb3JsZCgpLCBub2RlKSwgbm9kZSk7IH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgc2V0
Q29uZGl0aW9uKFBhc3NSZWZQdHI8Tm9kZUZpbHRlckNvbmRpdGlvbj4gY29uZGl0aW9uKSB7IEFT
U0VSVCghbV9jb25kaXRpb24pOyBtX2NvbmRpdGlvbiA9IGNvbmRpdGlvbjsgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCShyZXZpc2lvbiAxNTU3
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zaG9y
dCBOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKFNjcmlwdFN0YXRlKiwgTm9kZSopIGNv
bnN0CitzaG9ydCBOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRl
KiwgTm9kZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQ7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmgJKHJldmlz
aW9uIDE1NTczMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IGNsYXNzIE5vZGVGaWx0ZXJDb25kaXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxOb2RlRmlsdGVy
Q29uZGl0aW9uPiB7CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5Ob2RlRmlsdGVyQ29u
ZGl0aW9uKCkgeyB9Ci0gICAgICAgIHZpcnR1YWwgc2hvcnQgYWNjZXB0Tm9kZShTY3JpcHRTdGF0
ZSosIE5vZGUqKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgc2hvcnQgYWNjZXB0Tm9kZShK
U0M6OkV4ZWNTdGF0ZSosIE5vZGUqKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB2
aXNpdEFnZ3JlZ2F0ZShKU0M6OlNsb3RWaXNpdG9yJikgeyB9CiAgICAgfTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL05vZGVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDE1NTczMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3
IEBAIE5vZGVJdGVyYXRvcjo6fk5vZGVJdGVyYXRvcigpCiAgICAgcm9vdCgpLT5kb2N1bWVudCgp
LmRldGFjaE5vZGVJdGVyYXRvcih0aGlzKTsKIH0KIAotUGFzc1JlZlB0cjxOb2RlPiBOb2RlSXRl
cmF0b3I6Om5leHROb2RlKFNjcmlwdFN0YXRlKiBzdGF0ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQ
YXNzUmVmUHRyPE5vZGU+IE5vZGVJdGVyYXRvcjo6bmV4dE5vZGUoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAobV9kZXRhY2hlZCkgewogICAgICAg
ICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwpAQCAtMTE0LDcgKzExNCw3IEBAIFBhc3NSZWZQdHI8
Tm9kZT4gTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZSgKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2Uo
KTsKIH0KIAotUGFzc1JlZlB0cjxOb2RlPiBOb2RlSXRlcmF0b3I6OnByZXZpb3VzTm9kZShTY3Jp
cHRTdGF0ZSogc3RhdGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxOb2RlPiBOb2Rl
SXRlcmF0b3I6OnByZXZpb3VzTm9kZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIGlmIChtX2RldGFjaGVkKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9T
VEFURV9FUlI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5oCShyZXZpc2lvbiAxNTU3
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDggKzQzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB9CiAgICAgICAg
IH5Ob2RlSXRlcmF0b3IoKTsKIAotICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IG5leHROb2RlKFNj
cmlwdFN0YXRlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IHBy
ZXZpb3VzTm9kZShTY3JpcHRTdGF0ZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgUGFzc1Jl
ZlB0cjxOb2RlPiBuZXh0Tm9kZShKU0M6OkV4ZWNTdGF0ZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICAgICAgUGFzc1JlZlB0cjxOb2RlPiBwcmV2aW91c05vZGUoSlNDOjpFeGVjU3RhdGUqLCBFeGNl
cHRpb25Db2RlJik7CiAgICAgICAgIHZvaWQgZGV0YWNoKCk7CiAKICAgICAgICAgTm9kZSogcmVm
ZXJlbmNlTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVmZXJlbmNlTm9kZS5ub2RlLmdldCgpOyB9
CkBAIC01NSw4ICs1NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICAvLyBEbyBu
b3QgY2FsbCB0aGVzZSBmdW5jdGlvbnMuIFRoZXkgYXJlIGp1c3Qgc2NhZmZvbGRpbmcgdG8gc3Vw
cG9ydCB0aGUgT2JqZWN0aXZlLUMgYmluZGluZ3MuCiAgICAgICAgIC8vIFRoZXkgb3BlcmF0ZSBp
biB0aGUgbWFpbiB0aHJlYWQgbm9ybWFsIHdvcmxkLCBhbmQgdGhleSBzd2FsbG93IEpTIGV4Y2Vw
dGlvbnMuCi0gICAgICAgIFBhc3NSZWZQdHI8Tm9kZT4gbmV4dE5vZGUoRXhjZXB0aW9uQ29kZSYg
ZWMpIHsgcmV0dXJuIG5leHROb2RlKHNjcmlwdFN0YXRlRnJvbU5vZGUobWFpblRocmVhZE5vcm1h
bFdvcmxkKCksIHJlZmVyZW5jZU5vZGUoKSksIGVjKTsgfQotICAgICAgICBQYXNzUmVmUHRyPE5v
ZGU+IHByZXZpb3VzTm9kZShFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gcHJldmlvdXNOb2Rl
KHNjcmlwdFN0YXRlRnJvbU5vZGUobWFpblRocmVhZE5vcm1hbFdvcmxkKCksIHJlZmVyZW5jZU5v
ZGUoKSksIGVjKTsgfQorICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IG5leHROb2RlKEV4Y2VwdGlv
bkNvZGUmIGVjKSB7IHJldHVybiBuZXh0Tm9kZShleGVjU3RhdGVGcm9tTm9kZShtYWluVGhyZWFk
Tm9ybWFsV29ybGQoKSwgcmVmZXJlbmNlTm9kZSgpKSwgZWMpOyB9CisgICAgICAgIFBhc3NSZWZQ
dHI8Tm9kZT4gcHJldmlvdXNOb2RlKEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBwcmV2aW91
c05vZGUoZXhlY1N0YXRlRnJvbU5vZGUobWFpblRocmVhZE5vcm1hbFdvcmxkKCksIHJlZmVyZW5j
ZU5vZGUoKSksIGVjKTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgTm9kZUl0ZXJhdG9yKFBh
c3NSZWZQdHI8Tm9kZT4sIHVuc2lnbmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRl
cj4sIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCShyZXZpc2lvbiAxNTU3MzApCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxMyw3ICszMTMsNyBAQCB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJlcG9y
dEV4Y2VwCiAgICAgbV9wZW5kaW5nRXhjZXB0aW9ucy5jbGVhcigpOwogfQogCi12b2lkIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNl
LCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5n
JiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwg
U2NyaXB0U3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQordm9p
ZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjphZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNl
IHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0
IFN0cmluZyYgc291cmNlVVJMLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5O
dW1iZXIsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRp
ZmllcikKIHsKICAgICBhZGRNZXNzYWdlKHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIHNvdXJjZVVS
TCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCAwLCBzdGF0ZSwgcmVxdWVzdElkZW50aWZpZXIp
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
CShyZXZpc2lvbiAxNTU3MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw4ICs1MSw2IEBAIGNsYXNzIEV2ZW50VGFy
Z2V0OwogY2xhc3MgTWVzc2FnZVBvcnQ7CiBjbGFzcyBTY3JpcHRDYWxsU3RhY2s7CiAKLXR5cGVk
ZWYgSlNDOjpFeGVjU3RhdGUgU2NyaXB0U3RhdGU7Ci0KICNpZiBFTkFCTEUoQkxPQikKIGNsYXNz
IFB1YmxpY1VSTE1hbmFnZXI7CiAjZW5kaWYKQEAgLTc5LDcgKzc3LDcgQEAgcHVibGljOgogICAg
IC8vIEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMTQzMTU+IFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQgbG9nIGV4Y2VwdGlvbiBzaG91bGQgaW5jbHVkZSBhIGNvbHVtbiBudW1iZXIKICAgICB2
b2lkIHJlcG9ydEV4Y2VwdGlvbihjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVO
dW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBQYXNzUmVm
UHRyPFNjcmlwdENhbGxTdGFjaz4sIENhY2hlZFNjcmlwdCogPSAwKTsKIAotICAgIHZvaWQgYWRk
Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1
bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFNjcmlwdFN0YXRlKiA9IDAsIHVuc2lnbmVkIGxvbmcgcmVx
dWVzdElkZW50aWZpZXIgPSAwKTsKKyAgICB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VT
b3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcm
IHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBK
U0M6OkV4ZWNTdGF0ZSogPSAwLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7
CiAgICAgdmlydHVhbCB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3Nh
Z2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVu
dGlmaWVyID0gMCkgPSAwOwogCiAgICAgdmlydHVhbCBTZWN1cml0eU9yaWdpbiogdG9wT3JpZ2lu
KCkgY29uc3QgPSAwOwpAQCAtMTc5LDcgKzE3Nyw3IEBAIHByb3RlY3RlZDoKICAgICBBY3RpdmVE
T01PYmplY3Q6OlJlYXNvbkZvclN1c3BlbnNpb24gcmVhc29uRm9yU3VzcGVuZGluZ0FjdGl2ZURP
TU9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX3JlYXNvbkZvclN1c3BlbmRpbmdBY3RpdmVET01P
YmplY3RzOyB9CiAKIHByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIGFkZE1lc3NhZ2UoTWVzc2Fn
ZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmlu
ZyYgc291cmNlVVJMLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIs
IFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiwgU2NyaXB0U3RhdGUqID0gMCwgdW5zaWduZWQg
bG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkTWVz
c2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
Y29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNv
bHVtbk51bWJlciwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+LCBKU0M6OkV4ZWNTdGF0ZSog
PSAwLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCkgPSAwOwogICAgIHZpcnR1
YWwgRXZlbnRUYXJnZXQqIGVycm9yRXZlbnRUYXJnZXQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IGxvZ0V4Y2VwdGlvblRvQ29uc29sZShjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBQYXNz
UmVmUHRyPFNjcmlwdENhbGxTdGFjaz4pID0gMDsKICAgICBib29sIGRpc3BhdGNoRXJyb3JFdmVu
dChjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5O
dW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBDYWNoZWRTY3JpcHQqKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9UcmF2ZXJzYWwuY3BwCShyZXZpc2lvbiAxNTU3MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vVHJhdmVyc2FsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBOb2Rl
SXRlcmF0b3JCYXNlOjpOb2RlSXRlcmF0b3JCYXNlKFBhc3NSCiB7CiB9CiAKLXNob3J0IE5vZGVJ
dGVyYXRvckJhc2U6OmFjY2VwdE5vZGUoU2NyaXB0U3RhdGUqIHN0YXRlLCBOb2RlKiBub2RlKSBj
b25zdAorc2hvcnQgTm9kZUl0ZXJhdG9yQmFzZTo6YWNjZXB0Tm9kZShKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIE5vZGUqIG5vZGUpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFRvIGhhbmRsZSBYTUwg
cHJvcGVybHkgd2Ugd291bGQgaGF2ZSB0byBjaGVjayBtX2V4cGFuZEVudGl0eVJlZmVyZW5jZXMu
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vVHJhdmVyc2FsLmgJKHJldmlzaW9uIDE1NTczMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIE5vZGVJdGVy
YXRvckJhc2UoUGFzc1JlZlB0cjxOb2RlPiwgdW5zaWduZWQgd2hhdFRvU2hvdywgUGFzc1JlZlB0
cjxOb2RlRmlsdGVyPiwgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKTsKLSAgICAgICAgc2hv
cnQgYWNjZXB0Tm9kZShTY3JpcHRTdGF0ZSosIE5vZGUqKSBjb25zdDsKKyAgICAgICAgc2hvcnQg
YWNjZXB0Tm9kZShKU0M6OkV4ZWNTdGF0ZSosIE5vZGUqKSBjb25zdDsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIFJlZlB0cjxOb2RlPiBtX3Jvb3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
VHJlZVdhbGtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RyZWVXYWxr
ZXIuY3BwCShyZXZpc2lvbiAxNTU3MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVdhbGtl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgaW5saW5lIE5vZGUqIFRyZWVX
YWxrZXI6OnNldEN1cnJlbnQoUGFzcwogICAgIHJldHVybiBtX2N1cnJlbnQuZ2V0KCk7CiB9CiAK
LU5vZGUqIFRyZWVXYWxrZXI6OnBhcmVudE5vZGUoU2NyaXB0U3RhdGUqIHN0YXRlKQorTm9kZSog
VHJlZVdhbGtlcjo6cGFyZW50Tm9kZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgUmVm
UHRyPE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQ7CiAgICAgd2hpbGUgKG5vZGUgIT0gcm9vdCgpKSB7
CkBAIC03MSw3ICs3MSw3IEBAIE5vZGUqIFRyZWVXYWxrZXI6OnBhcmVudE5vZGUoU2NyaXB0U3Rh
dGUKICAgICByZXR1cm4gMDsKIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6Zmlyc3RDaGlsZChTY3Jp
cHRTdGF0ZSogc3RhdGUpCitOb2RlKiBUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSkKIHsKICAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gbV9jdXJyZW50LT5m
aXJzdENoaWxkKCk7IG5vZGU7ICkgewogICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0g
YWNjZXB0Tm9kZShzdGF0ZSwgbm9kZS5nZXQoKSk7CkBAIC0xMDQsNyArMTA0LDcgQEAgTm9kZSog
VHJlZVdhbGtlcjo6Zmlyc3RDaGlsZChTY3JpcHRTdGF0ZQogICAgIHJldHVybiAwOwogfQogCi1O
b2RlKiBUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQoU2NyaXB0U3RhdGUqIHN0YXRlKQorTm9kZSogVHJl
ZVdhbGtlcjo6bGFzdENoaWxkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBmb3IgKFJl
ZlB0cjxOb2RlPiBub2RlID0gbV9jdXJyZW50LT5sYXN0Q2hpbGQoKTsgbm9kZTsgKSB7CiAgICAg
ICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKHN0YXRlLCBub2RlLmdldCgp
KTsKQEAgLTEzNyw3ICsxMzcsNyBAQCBOb2RlKiBUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQoU2NyaXB0
U3RhdGUqCiAgICAgcmV0dXJuIDA7CiB9CiAKLU5vZGUqIFRyZWVXYWxrZXI6OnByZXZpb3VzU2li
bGluZyhTY3JpcHRTdGF0ZSogc3RhdGUpCitOb2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxp
bmcoSlNDOjpFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbV9j
dXJyZW50OwogICAgIGlmIChub2RlID09IHJvb3QoKSkKQEAgLTE3NCw3ICsxNzQsNyBAQCBOb2Rl
KiBUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmcoU2NyaXB0CiAgICAgfQogfQogCi1Ob2RlKiBU
cmVlV2Fsa2VyOjpuZXh0U2libGluZyhTY3JpcHRTdGF0ZSogc3RhdGUpCitOb2RlKiBUcmVlV2Fs
a2VyOjpuZXh0U2libGluZyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgUmVmUHRyPE5v
ZGU+IG5vZGUgPSBtX2N1cnJlbnQ7CiAgICAgaWYgKG5vZGUgPT0gcm9vdCgpKQpAQCAtMjExLDcg
KzIxMSw3IEBAIE5vZGUqIFRyZWVXYWxrZXI6Om5leHRTaWJsaW5nKFNjcmlwdFN0YXQKICAgICB9
CiB9CiAKLU5vZGUqIFRyZWVXYWxrZXI6OnByZXZpb3VzTm9kZShTY3JpcHRTdGF0ZSogc3RhdGUp
CitOb2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c05vZGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlKQog
ewogICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbV9jdXJyZW50OwogICAgIHdoaWxlIChub2RlICE9
IHJvb3QoKSkgewpAQCAtMjUwLDcgKzI1MCw3IEBAIE5vZGUqIFRyZWVXYWxrZXI6OnByZXZpb3Vz
Tm9kZShTY3JpcHRTdGEKICAgICByZXR1cm4gMDsKIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6bmV4
dE5vZGUoU2NyaXB0U3RhdGUqIHN0YXRlKQorTm9kZSogVHJlZVdhbGtlcjo6bmV4dE5vZGUoSlND
OjpFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbV9jdXJyZW50
OwogQ2hpbGRyZW46CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmgJKHJldmlzaW9uIDE1NTcz
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDIzICs0NSwyMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIE5vZGUqIGN1cnJl
bnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50LmdldCgpOyB9CiAgICAgICAgIHZvaWQg
c2V0Q3VycmVudE5vZGUoUGFzc1JlZlB0cjxOb2RlPiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAg
ICAgIE5vZGUqIHBhcmVudE5vZGUoU2NyaXB0U3RhdGUqKTsKLSAgICAgICAgTm9kZSogZmlyc3RD
aGlsZChTY3JpcHRTdGF0ZSopOwotICAgICAgICBOb2RlKiBsYXN0Q2hpbGQoU2NyaXB0U3RhdGUq
KTsKLSAgICAgICAgTm9kZSogcHJldmlvdXNTaWJsaW5nKFNjcmlwdFN0YXRlKik7Ci0gICAgICAg
IE5vZGUqIG5leHRTaWJsaW5nKFNjcmlwdFN0YXRlKik7Ci0gICAgICAgIE5vZGUqIHByZXZpb3Vz
Tm9kZShTY3JpcHRTdGF0ZSopOwotICAgICAgICBOb2RlKiBuZXh0Tm9kZShTY3JpcHRTdGF0ZSop
OworICAgICAgICBOb2RlKiBwYXJlbnROb2RlKEpTQzo6RXhlY1N0YXRlKik7CisgICAgICAgIE5v
ZGUqIGZpcnN0Q2hpbGQoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICAgICAgTm9kZSogbGFzdENoaWxk
KEpTQzo6RXhlY1N0YXRlKik7CisgICAgICAgIE5vZGUqIHByZXZpb3VzU2libGluZyhKU0M6OkV4
ZWNTdGF0ZSopOworICAgICAgICBOb2RlKiBuZXh0U2libGluZyhKU0M6OkV4ZWNTdGF0ZSopOwor
ICAgICAgICBOb2RlKiBwcmV2aW91c05vZGUoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICAgICAgTm9k
ZSogbmV4dE5vZGUoSlNDOjpFeGVjU3RhdGUqKTsKIAogICAgICAgICAvLyBEbyBub3QgY2FsbCB0
aGVzZSBmdW5jdGlvbnMuIFRoZXkgYXJlIGp1c3Qgc2NhZmZvbGRpbmcgdG8gc3VwcG9ydCB0aGUg
T2JqZWN0aXZlLUMgYmluZGluZ3MuCiAgICAgICAgIC8vIFRoZXkgb3BlcmF0ZSBpbiB0aGUgbWFp
biB0aHJlYWQgbm9ybWFsIHdvcmxkLCBhbmQgdGhleSBzd2FsbG93IEpTIGV4Y2VwdGlvbnMuCi0g
ICAgICAgIE5vZGUqIHBhcmVudE5vZGUoKSB7IHJldHVybiBwYXJlbnROb2RlKHNjcmlwdFN0YXRl
RnJvbU5vZGUobWFpblRocmVhZE5vcm1hbFdvcmxkKCksIG1fY3VycmVudC5nZXQoKSkpOyB9Ci0g
ICAgICAgIE5vZGUqIGZpcnN0Q2hpbGQoKSB7IHJldHVybiBmaXJzdENoaWxkKHNjcmlwdFN0YXRl
RnJvbU5vZGUobWFpblRocmVhZE5vcm1hbFdvcmxkKCksIG1fY3VycmVudC5nZXQoKSkpOyB9Ci0g
ICAgICAgIE5vZGUqIGxhc3RDaGlsZCgpIHsgcmV0dXJuIGxhc3RDaGlsZChzY3JpcHRTdGF0ZUZy
b21Ob2RlKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpLCBtX2N1cnJlbnQuZ2V0KCkpKTsgfQotICAg
ICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcoKSB7IHJldHVybiBwcmV2aW91c1NpYmxpbmcoc2Ny
aXB0U3RhdGVGcm9tTm9kZShtYWluVGhyZWFkTm9ybWFsV29ybGQoKSwgbV9jdXJyZW50LmdldCgp
KSk7IH0KLSAgICAgICAgTm9kZSogbmV4dFNpYmxpbmcoKSB7IHJldHVybiBuZXh0U2libGluZyhz
Y3JpcHRTdGF0ZUZyb21Ob2RlKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpLCBtX2N1cnJlbnQuZ2V0
KCkpKTsgfQotICAgICAgICBOb2RlKiBwcmV2aW91c05vZGUoKSB7IHJldHVybiBwcmV2aW91c05v
ZGUoc2NyaXB0U3RhdGVGcm9tTm9kZShtYWluVGhyZWFkTm9ybWFsV29ybGQoKSwgbV9jdXJyZW50
LmdldCgpKSk7IH0KLSAgICAgICAgTm9kZSogbmV4dE5vZGUoKSB7IHJldHVybiBuZXh0Tm9kZShz
Y3JpcHRTdGF0ZUZyb21Ob2RlKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpLCBtX2N1cnJlbnQuZ2V0
KCkpKTsgfQorICAgICAgICBOb2RlKiBwYXJlbnROb2RlKCkgeyByZXR1cm4gcGFyZW50Tm9kZShl
eGVjU3RhdGVGcm9tTm9kZShtYWluVGhyZWFkTm9ybWFsV29ybGQoKSwgbV9jdXJyZW50LmdldCgp
KSk7IH0KKyAgICAgICAgTm9kZSogZmlyc3RDaGlsZCgpIHsgcmV0dXJuIGZpcnN0Q2hpbGQoZXhl
Y1N0YXRlRnJvbU5vZGUobWFpblRocmVhZE5vcm1hbFdvcmxkKCksIG1fY3VycmVudC5nZXQoKSkp
OyB9CisgICAgICAgIE5vZGUqIGxhc3RDaGlsZCgpIHsgcmV0dXJuIGxhc3RDaGlsZChleGVjU3Rh
dGVGcm9tTm9kZShtYWluVGhyZWFkTm9ybWFsV29ybGQoKSwgbV9jdXJyZW50LmdldCgpKSk7IH0K
KyAgICAgICAgTm9kZSogcHJldmlvdXNTaWJsaW5nKCkgeyByZXR1cm4gcHJldmlvdXNTaWJsaW5n
KGV4ZWNTdGF0ZUZyb21Ob2RlKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpLCBtX2N1cnJlbnQuZ2V0
KCkpKTsgfQorICAgICAgICBOb2RlKiBuZXh0U2libGluZygpIHsgcmV0dXJuIG5leHRTaWJsaW5n
KGV4ZWNTdGF0ZUZyb21Ob2RlKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpLCBtX2N1cnJlbnQuZ2V0
KCkpKTsgfQorICAgICAgICBOb2RlKiBwcmV2aW91c05vZGUoKSB7IHJldHVybiBwcmV2aW91c05v
ZGUoZXhlY1N0YXRlRnJvbU5vZGUobWFpblRocmVhZE5vcm1hbFdvcmxkKCksIG1fY3VycmVudC5n
ZXQoKSkpOyB9CisgICAgICAgIE5vZGUqIG5leHROb2RlKCkgeyByZXR1cm4gbmV4dE5vZGUoZXhl
Y1N0YXRlRnJvbU5vZGUobWFpblRocmVhZE5vcm1hbFdvcmxkKCksIG1fY3VycmVudC5nZXQoKSkp
OyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBUcmVlV2Fsa2VyKFBhc3NSZWZQdHI8Tm9kZT4s
IHVuc2lnbmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4sIGJvb2wgZXhwYW5k
RW50aXR5UmVmZXJlbmNlcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29uc29s
ZU1lc3NhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db25z
b2xlTWVzc2FnZS5jcHAJKHJldmlzaW9uIDE1NTczMCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9Db25zb2xlTWVzc2FnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAg
Q29uc29sZU1lc3NhZ2U6OkNvbnNvbGVNZXNzYWdlKGJvb2wgY2FuRwogICAgIGF1dG9nZW5lcmF0
ZU1ldGFkYXRhKGNhbkdlbmVyYXRlQ2FsbFN0YWNrKTsKIH0KIAotQ29uc29sZU1lc3NhZ2U6OkNv
bnNvbGVNZXNzYWdlKGJvb2wgY2FuR2VuZXJhdGVDYWxsU3RhY2ssIE1lc3NhZ2VTb3VyY2Ugc291
cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgY29uc3QgU3RyaW5nJiB1cmwsIHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGNvbHVt
biwgU2NyaXB0U3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQor
Q29uc29sZU1lc3NhZ2U6OkNvbnNvbGVNZXNzYWdlKGJvb2wgY2FuR2VuZXJhdGVDYWxsU3RhY2ss
IE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2
ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiB1cmwsIHVuc2lnbmVkIGxp
bmUsIHVuc2lnbmVkIGNvbHVtbiwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBsb25n
IHJlcXVlc3RJZGVudGlmaWVyKQogICAgIDogbV9zb3VyY2Uoc291cmNlKQogICAgICwgbV90eXBl
KHR5cGUpCiAgICAgLCBtX2xldmVsKGxldmVsKQpAQCAtOTcsNyArOTcsNyBAQCBDb25zb2xlTWVz
c2FnZTo6Q29uc29sZU1lc3NhZ2UoYm9vbCwgTWVzCiAgICAgbV9jYWxsU3RhY2sgPSBjYWxsU3Rh
Y2s7CiB9CiAKLUNvbnNvbGVNZXNzYWdlOjpDb25zb2xlTWVzc2FnZShib29sIGNhbkdlbmVyYXRl
Q2FsbFN0YWNrLCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2Fn
ZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8U2NyaXB0QXJn
dW1lbnRzPiBhcmd1bWVudHMsIFNjcmlwdFN0YXRlKiBzdGF0ZSwgdW5zaWduZWQgbG9uZyByZXF1
ZXN0SWRlbnRpZmllcikKK0NvbnNvbGVNZXNzYWdlOjpDb25zb2xlTWVzc2FnZShib29sIGNhbkdl
bmVyYXRlQ2FsbFN0YWNrLCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwg
TWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8U2Ny
aXB0QXJndW1lbnRzPiBhcmd1bWVudHMsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQg
bG9uZyByZXF1ZXN0SWRlbnRpZmllcikKICAgICA6IG1fc291cmNlKHNvdXJjZSkKICAgICAsIG1f
dHlwZSh0eXBlKQogICAgICwgbV9sZXZlbChsZXZlbCkKQEAgLTExNiw3ICsxMTYsNyBAQCBDb25z
b2xlTWVzc2FnZTo6fkNvbnNvbGVNZXNzYWdlKCkKIHsKIH0KIAotdm9pZCBDb25zb2xlTWVzc2Fn
ZTo6YXV0b2dlbmVyYXRlTWV0YWRhdGEoYm9vbCBjYW5HZW5lcmF0ZUNhbGxTdGFjaywgU2NyaXB0
U3RhdGUqIHN0YXRlKQordm9pZCBDb25zb2xlTWVzc2FnZTo6YXV0b2dlbmVyYXRlTWV0YWRhdGEo
Ym9vbCBjYW5HZW5lcmF0ZUNhbGxTdGFjaywgSlNDOjpFeGVjU3RhdGUqIHN0YXRlKQogewogICAg
IGlmIChtX3R5cGUgPT0gRW5kR3JvdXBNZXNzYWdlVHlwZSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MjcxLDcgKzI3MSw3IEBAIHZvaWQgQ29uc29sZU1lc3NhZ2U6OndpbmRvd0NsZWFyZWQoRE9NV2kK
IHsKICAgICBpZiAoIW1fYXJndW1lbnRzKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKGRvbVdp
bmRvd0Zyb21TY3JpcHRTdGF0ZShtX2FyZ3VtZW50cy0+Z2xvYmFsU3RhdGUoKSkgIT0gd2luZG93
KQorICAgIGlmIChkb21XaW5kb3dGcm9tRXhlY1N0YXRlKG1fYXJndW1lbnRzLT5nbG9iYWxTdGF0
ZSgpKSAhPSB3aW5kb3cpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1fbWVzc2FnZSkKICAg
ICAgICAgbV9tZXNzYWdlID0gIjxtZXNzYWdlIGNvbGxlY3RlZD4iOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmgJKHJldmlzaW9uIDE1NTczMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Myw5ICs1Myw5IEBAIGNsYXNzIENvbnNvbGVNZXNzYWdlIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShDb25zb2xlTWVzc2FnZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgogICAgIENvbnNvbGVNZXNzYWdlKGJvb2wgY2FuR2VuZXJhdGVDYWxsU3RhY2ssIE1lc3NhZ2VT
b3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
dW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOwotICAgIENvbnNvbGVNZXNzYWdl
KGJvb2wgY2FuR2VuZXJhdGVDYWxsU3RhY2ssIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBN
ZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiB1cmwsIHVu
c2lnbmVkIGxpbmUsIHVuc2lnbmVkIGNvbHVtbiwgU2NyaXB0U3RhdGUqID0gMCwgdW5zaWduZWQg
bG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOworICAgIENvbnNvbGVNZXNzYWdlKGJvb2wgY2Fu
R2VuZXJhdGVDYWxsU3RhY2ssIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2
ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiB1cmwsIHVuc2lnbmVkIGxp
bmUsIHVuc2lnbmVkIGNvbHVtbiwgSlNDOjpFeGVjU3RhdGUqID0gMCwgdW5zaWduZWQgbG9uZyBy
ZXF1ZXN0SWRlbnRpZmllciA9IDApOwogICAgIENvbnNvbGVNZXNzYWdlKGJvb2wgY2FuR2VuZXJh
dGVDYWxsU3RhY2ssIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+LCB1bnNpZ25l
ZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7Ci0gICAgQ29uc29sZU1lc3NhZ2UoYm9vbCBj
YW5HZW5lcmF0ZUNhbGxTdGFjaywgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VM
ZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4s
IFNjcmlwdFN0YXRlKiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOworICAg
IENvbnNvbGVNZXNzYWdlKGJvb2wgY2FuR2VuZXJhdGVDYWxsU3RhY2ssIE1lc3NhZ2VTb3VyY2Us
IE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1Jl
ZlB0cjxTY3JpcHRBcmd1bWVudHM+LCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIGxvbmcgcmVx
dWVzdElkZW50aWZpZXIgPSAwKTsKICAgICB+Q29uc29sZU1lc3NhZ2UoKTsKIAogICAgIHZvaWQg
YWRkVG9Gcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZDo6Q29uc29sZSosIEluamVjdGVkU2NyaXB0
TWFuYWdlciosIGJvb2wgZ2VuZXJhdGVQcmV2aWV3KTsKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGlj
OgogICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnQoKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGF1
dG9nZW5lcmF0ZU1ldGFkYXRhKGJvb2wgY2FuR2VuZXJhdGVDYWxsU3RhY2ssIFNjcmlwdFN0YXRl
KiA9IDApOworICAgIHZvaWQgYXV0b2dlbmVyYXRlTWV0YWRhdGEoYm9vbCBjYW5HZW5lcmF0ZUNh
bGxTdGFjaywgSlNDOjpFeGVjU3RhdGUqID0gMCk7CiAKICAgICBNZXNzYWdlU291cmNlIG1fc291
cmNlOwogICAgIE1lc3NhZ2VUeXBlIG1fdHlwZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdC5oCShyZXZpc2lvbiAxNTU3MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEw
MCw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSW5qZWN0ZWRTY3Jp
cHRNb2R1bGU7Ci0gICAgZnJpZW5kIEluamVjdGVkU2NyaXB0IEluamVjdGVkU2NyaXB0TWFuYWdl
cjo6aW5qZWN0ZWRTY3JpcHRGb3IoU2NyaXB0U3RhdGUqKTsKKyAgICBmcmllbmQgSW5qZWN0ZWRT
Y3JpcHQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjcmlwdEZvcihKU0M6OkV4ZWNT
dGF0ZSopOwogICAgIEluamVjdGVkU2NyaXB0KFNjcmlwdE9iamVjdCwgSW5zcGVjdGVkU3RhdGVB
Y2Nlc3NDaGVjayk7CiAKICAgICBTY3JpcHRWYWx1ZSBub2RlQXNTY3JpcHRWYWx1ZShOb2RlKik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNl
LmNwcAkocmV2aXNpb24gMTU1NzMwKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDEwICs3NSwxMCBAQCBjb25z
dCBTY3JpcHRPYmplY3QmIEluamVjdGVkU2NyaXB0QmFzZTo6CiAKIFNjcmlwdFZhbHVlIEluamVj
dGVkU2NyaXB0QmFzZTo6Y2FsbEZ1bmN0aW9uV2l0aEV2YWxFbmFibGVkKFNjcmlwdEZ1bmN0aW9u
Q2FsbCYgZnVuY3Rpb24sIGJvb2wmIGhhZEV4Y2VwdGlvbikgY29uc3QKIHsKLSAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gc2NyaXB0RXhlY3V0aW9u
Q29udGV4dEZyb21TY3JpcHRTdGF0ZShtX2luamVjdGVkU2NyaXB0T2JqZWN0LnNjcmlwdFN0YXRl
KCkpOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQg
PSBzY3JpcHRFeGVjdXRpb25Db250ZXh0RnJvbUV4ZWNTdGF0ZShtX2luamVjdGVkU2NyaXB0T2Jq
ZWN0LnNjcmlwdFN0YXRlKCkpOwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBj
b29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxDYWxsRnVuY3Rpb24oc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCwgbmFtZSgpLCAxKTsKIAotICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRT
dGF0ZSA9IG1faW5qZWN0ZWRTY3JpcHRPYmplY3Quc2NyaXB0U3RhdGUoKTsKKyAgICBKU0M6OkV4
ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSBtX2luamVjdGVkU2NyaXB0T2JqZWN0LnNjcmlwdFN0YXRl
KCk7CiAgICAgYm9vbCBldmFsSXNEaXNhYmxlZCA9IGZhbHNlOwogICAgIGlmIChzY3JpcHRTdGF0
ZSkgewogICAgICAgICBldmFsSXNEaXNhYmxlZCA9ICFzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5ldmFsRW5hYmxlZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuaAkocmV2aXNpb24gMTU1NzMwKQorKysgU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MSwxMCArNTEsMTAgQEAgcHVibGljOgogCiAgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9uYW1lOyB9CiAgICAgYm9vbCBoYXNOb1ZhbHVlKCkgY29uc3QgeyByZXR1cm4g
bV9pbmplY3RlZFNjcmlwdE9iamVjdC5oYXNOb1ZhbHVlKCk7IH0KLSAgICBTY3JpcHRTdGF0ZSog
c2NyaXB0U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0T2JqZWN0LnNjcmlw
dFN0YXRlKCk7IH0KKyAgICBKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUoKSBjb25zdCB7IHJl
dHVybiBtX2luamVjdGVkU2NyaXB0T2JqZWN0LnNjcmlwdFN0YXRlKCk7IH0KIAogcHJvdGVjdGVk
OgotICAgIHR5cGVkZWYgYm9vbCAoKkluc3BlY3RlZFN0YXRlQWNjZXNzQ2hlY2spKFNjcmlwdFN0
YXRlKik7CisgICAgdHlwZWRlZiBib29sICgqSW5zcGVjdGVkU3RhdGVBY2Nlc3NDaGVjaykoSlND
OjpFeGVjU3RhdGUqKTsKICAgICBJbmplY3RlZFNjcmlwdEJhc2UoY29uc3QgU3RyaW5nJiBuYW1l
KTsKICAgICBJbmplY3RlZFNjcmlwdEJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBTY3JpcHRPYmpl
Y3QsIEluc3BlY3RlZFN0YXRlQWNjZXNzQ2hlY2spOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5jcHAJKHJl
dmlzaW9uIDE1NTczMCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dENhbnZhc01vZHVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgSW5qZWN0
ZWRTY3JpcHRDYW52YXNNb2R1bGU6OkluamVjdGVkU2NyaQogewogfQogCi1JbmplY3RlZFNjcmlw
dENhbnZhc01vZHVsZSBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZTo6bW9kdWxlRm9yU3RhdGUo
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIFNjcmlwdFN0YXRl
KiBzY3JpcHRTdGF0ZSkKK0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlIEluamVjdGVkU2NyaXB0
Q2FudmFzTW9kdWxlOjptb2R1bGVGb3JTdGF0ZShJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVj
dGVkU2NyaXB0TWFuYWdlciwgSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlKQogewogICAgIElu
amVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlIHJlc3VsdDsKICAgICByZXN1bHQuZW5zdXJlSW5qZWN0
ZWQoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBzY3JpcHRTdGF0ZSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUuaAko
cmV2aXNpb24gMTU1NzMwKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0Q2FudmFzTW9kdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGlj
OgogICAgIAogICAgIHZpcnR1YWwgU3RyaW5nIHNvdXJjZSgpIGNvbnN0OwogCi0gICAgc3RhdGlj
IEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlIG1vZHVsZUZvclN0YXRlKEluamVjdGVkU2NyaXB0
TWFuYWdlciosIFNjcmlwdFN0YXRlKik7CisgICAgc3RhdGljIEluamVjdGVkU2NyaXB0Q2FudmFz
TW9kdWxlIG1vZHVsZUZvclN0YXRlKEluamVjdGVkU2NyaXB0TWFuYWdlciosIEpTQzo6RXhlY1N0
YXRlKik7CiAKICAgICBTY3JpcHRPYmplY3Qgd3JhcENhbnZhczJEQ29udGV4dChjb25zdCBTY3Jp
cHRPYmplY3QmKTsKICNpZiBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAkocmV2aXNpb24gMTU1NzMwKQorKysg
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lkIEluamVjdGVkU2NyaXB0SG9zdDo6Y29weVRl
eHQoY29uc3QgCiAgICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCktPndyaXRl
UGxhaW5UZXh0KHRleHQsIFBhc3RlYm9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFjZSk7CiB9CiAKLVNj
cmlwdFZhbHVlIEluamVjdGVkU2NyaXB0SG9zdDo6SW5zcGVjdGFibGVPYmplY3Q6OmdldChTY3Jp
cHRTdGF0ZSopCitTY3JpcHRWYWx1ZSBJbmplY3RlZFNjcmlwdEhvc3Q6Okluc3BlY3RhYmxlT2Jq
ZWN0OjpnZXQoSlNDOjpFeGVjU3RhdGUqKQogewogICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOwog
fTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0
LmgJKHJldmlzaW9uIDE1NTczMCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3Rl
ZFNjcmlwdEhvc3QuaAkod29ya2luZyBjb3B5KQpAQCAtODcsMTQgKzg3LDE0IEBAIHB1YmxpYzoK
ICAgICB9CiAKICAgICBzdGF0aWMgTm9kZSogc2NyaXB0VmFsdWVBc05vZGUoU2NyaXB0VmFsdWUp
OwotICAgIHN0YXRpYyBTY3JpcHRWYWx1ZSBub2RlQXNTY3JpcHRWYWx1ZShTY3JpcHRTdGF0ZSos
IE5vZGUqKTsKKyAgICBzdGF0aWMgU2NyaXB0VmFsdWUgbm9kZUFzU2NyaXB0VmFsdWUoSlNDOjpF
eGVjU3RhdGUqLCBOb2RlKik7CiAKICAgICB2b2lkIGRpc2Nvbm5lY3QoKTsKIAogICAgIGNsYXNz
IEluc3BlY3RhYmxlT2JqZWN0IHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAg
ICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIFNjcmlwdFZhbHVlIGdldChTY3JpcHRTdGF0ZSop
OworICAgICAgICB2aXJ0dWFsIFNjcmlwdFZhbHVlIGdldChKU0M6OkV4ZWNTdGF0ZSopOwogICAg
ICAgICB2aXJ0dWFsIH5JbnNwZWN0YWJsZU9iamVjdCgpIHsgfQogICAgIH07CiAgICAgdm9pZCBh
ZGRJbnNwZWN0ZWRPYmplY3QoUGFzc093blB0cjxJbnNwZWN0YWJsZU9iamVjdD4pOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5j
cHAJKHJldmlzaW9uIDE1NTczMCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3Rl
ZFNjcmlwdE1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCwxNiArODAsMTYgQEAgSW5q
ZWN0ZWRTY3JpcHQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbgogICAgIElkVG9JbmplY3RlZFNj
cmlwdE1hcDo6aXRlcmF0b3IgaXQgPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5maW5kKGlkKTsKICAg
ICBpZiAoaXQgIT0gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuZW5kKCkpCiAgICAgICAgIHJldHVybiBp
dC0+dmFsdWU7Ci0gICAgZm9yIChTY3JpcHRTdGF0ZVRvSWQ6Oml0ZXJhdG9yIGl0ID0gbV9zY3Jp
cHRTdGF0ZVRvSWQuYmVnaW4oKTsgaXQgIT0gbV9zY3JpcHRTdGF0ZVRvSWQuZW5kKCk7ICsraXQp
IHsKKyAgICBmb3IgKEV4ZWNTdGF0ZVRvSWQ6Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRTdGF0ZVRv
SWQuYmVnaW4oKTsgaXQgIT0gbV9zY3JpcHRTdGF0ZVRvSWQuZW5kKCk7ICsraXQpIHsKICAgICAg
ICAgaWYgKGl0LT52YWx1ZSA9PSBpZCkKICAgICAgICAgICAgIHJldHVybiBpbmplY3RlZFNjcmlw
dEZvcihpdC0+a2V5KTsKICAgICB9CiAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0KCk7CiB9CiAK
LWludCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0SWRGb3IoU2NyaXB0U3Rh
dGUqIHNjcmlwdFN0YXRlKQoraW50IEluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3Jp
cHRJZEZvcihKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUpCiB7Ci0gICAgU2NyaXB0U3RhdGVU
b0lkOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0U3RhdGVUb0lkLmZpbmQoc2NyaXB0U3RhdGUpOwor
ICAgIEV4ZWNTdGF0ZVRvSWQ6Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRTdGF0ZVRvSWQuZmluZChz
Y3JpcHRTdGF0ZSk7CiAgICAgaWYgKGl0ICE9IG1fc2NyaXB0U3RhdGVUb0lkLmVuZCgpKQogICAg
ICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgIGludCBpZCA9IG1fbmV4dEluamVjdGVkU2NyaXB0
SWQrKzsKQEAgLTEyMyw4ICsxMjMsOCBAQCB2b2lkIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6ZGlz
Y2FyZEluamVjCiAgICAgVmVjdG9yPGxvbmc+IGlkc1RvUmVtb3ZlOwogICAgIElkVG9JbmplY3Rl
ZFNjcmlwdE1hcDo6aXRlcmF0b3IgZW5kID0gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuZW5kKCk7CiAg
ICAgZm9yIChJZFRvSW5qZWN0ZWRTY3JpcHRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pZFRvSW5qZWN0
ZWRTY3JpcHQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFNjcmlwdFN0YXRl
KiBzY3JpcHRTdGF0ZSA9IGl0LT52YWx1ZS5zY3JpcHRTdGF0ZSgpOwotICAgICAgICBpZiAod2lu
ZG93ICE9IGRvbVdpbmRvd0Zyb21TY3JpcHRTdGF0ZShzY3JpcHRTdGF0ZSkpCisgICAgICAgIEpT
Qzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IGl0LT52YWx1ZS5zY3JpcHRTdGF0ZSgpOworICAg
ICAgICBpZiAod2luZG93ICE9IGRvbVdpbmRvd0Zyb21FeGVjU3RhdGUoc2NyaXB0U3RhdGUpKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG1fc2NyaXB0U3RhdGVUb0lkLnJlbW92ZShz
Y3JpcHRTdGF0ZSk7CiAgICAgICAgIGlkc1RvUmVtb3ZlLmFwcGVuZChpdC0+a2V5KTsKQEAgLTEz
NCwxNyArMTM0LDE3IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpkaXNjYXJkSW5qZWMK
ICAgICAgICAgbV9pZFRvSW5qZWN0ZWRTY3JpcHQucmVtb3ZlKGlkc1RvUmVtb3ZlW2ldKTsKIAog
ICAgIC8vIE5vdyByZW1vdmUgc2NyaXB0IHN0YXRlcyB0aGF0IGhhdmUgaWQgYnV0IG5vIGluamVj
dGVkIHNjcmlwdC4KLSAgICBWZWN0b3I8U2NyaXB0U3RhdGUqPiBzY3JpcHRTdGF0ZXNUb1JlbW92
ZTsKLSAgICBmb3IgKFNjcmlwdFN0YXRlVG9JZDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdFN0YXRl
VG9JZC5iZWdpbigpOyBpdCAhPSBtX3NjcmlwdFN0YXRlVG9JZC5lbmQoKTsgKytpdCkgewotICAg
ICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBpdC0+a2V5OwotICAgICAgICBpZiAod2lu
ZG93ID09IGRvbVdpbmRvd0Zyb21TY3JpcHRTdGF0ZShzY3JpcHRTdGF0ZSkpCisgICAgVmVjdG9y
PEpTQzo6RXhlY1N0YXRlKj4gc2NyaXB0U3RhdGVzVG9SZW1vdmU7CisgICAgZm9yIChFeGVjU3Rh
dGVUb0lkOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0U3RhdGVUb0lkLmJlZ2luKCk7IGl0ICE9IG1f
c2NyaXB0U3RhdGVUb0lkLmVuZCgpOyArK2l0KSB7CisgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBz
Y3JpcHRTdGF0ZSA9IGl0LT5rZXk7CisgICAgICAgIGlmICh3aW5kb3cgPT0gZG9tV2luZG93RnJv
bUV4ZWNTdGF0ZShzY3JpcHRTdGF0ZSkpCiAgICAgICAgICAgICBzY3JpcHRTdGF0ZXNUb1JlbW92
ZS5hcHBlbmQoc2NyaXB0U3RhdGUpOwogICAgIH0KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNjcmlwdFN0YXRlc1RvUmVtb3ZlLnNpemUoKTsgaSsrKQogICAgICAgICBtX3NjcmlwdFN0YXRl
VG9JZC5yZW1vdmUoc2NyaXB0U3RhdGVzVG9SZW1vdmVbaV0pOwogfQogCi1ib29sIEluamVjdGVk
U2NyaXB0TWFuYWdlcjo6Y2FuQWNjZXNzSW5zcGVjdGVkV29ya2VyR2xvYmFsU2NvcGUoU2NyaXB0
U3RhdGUqKQorYm9vbCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNhbkFjY2Vzc0luc3BlY3RlZFdv
cmtlckdsb2JhbFNjb3BlKEpTQzo6RXhlY1N0YXRlKikKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
QEAgLTE2MCwyMCArMTYwLDIwIEBAIFN0cmluZyBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVj
dGVkU2MKICAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KElu
amVjdGVkU2NyaXB0U291cmNlX2pzKSwgc2l6ZW9mKEluamVjdGVkU2NyaXB0U291cmNlX2pzKSk7
CiB9CiAKLUluamVjdGVkU2NyaXB0IEluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3Jp
cHRGb3IoU2NyaXB0U3RhdGUqIGluc3BlY3RlZFNjcmlwdFN0YXRlKQorSW5qZWN0ZWRTY3JpcHQg
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjcmlwdEZvcihKU0M6OkV4ZWNTdGF0ZSog
aW5zcGVjdGVkRXhlY1N0YXRlKQogewotICAgIFNjcmlwdFN0YXRlVG9JZDo6aXRlcmF0b3IgaXQg
PSBtX3NjcmlwdFN0YXRlVG9JZC5maW5kKGluc3BlY3RlZFNjcmlwdFN0YXRlKTsKKyAgICBFeGVj
U3RhdGVUb0lkOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0U3RhdGVUb0lkLmZpbmQoaW5zcGVjdGVk
RXhlY1N0YXRlKTsKICAgICBpZiAoaXQgIT0gbV9zY3JpcHRTdGF0ZVRvSWQuZW5kKCkpIHsKICAg
ICAgICAgSWRUb0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBpdDEgPSBtX2lkVG9JbmplY3Rl
ZFNjcmlwdC5maW5kKGl0LT52YWx1ZSk7CiAgICAgICAgIGlmIChpdDEgIT0gbV9pZFRvSW5qZWN0
ZWRTY3JpcHQuZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gaXQxLT52YWx1ZTsKICAgICB9CiAK
LSAgICBpZiAoIW1faW5zcGVjdGVkU3RhdGVBY2Nlc3NDaGVjayhpbnNwZWN0ZWRTY3JpcHRTdGF0
ZSkpCisgICAgaWYgKCFtX2luc3BlY3RlZFN0YXRlQWNjZXNzQ2hlY2soaW5zcGVjdGVkRXhlY1N0
YXRlKSkKICAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0KCk7CiAKLSAgICBpbnQgaWQgPSBp
bmplY3RlZFNjcmlwdElkRm9yKGluc3BlY3RlZFNjcmlwdFN0YXRlKTsKLSAgICBTY3JpcHRPYmpl
Y3QgaW5qZWN0ZWRTY3JpcHRPYmplY3QgPSBjcmVhdGVJbmplY3RlZFNjcmlwdChpbmplY3RlZFNj
cmlwdFNvdXJjZSgpLCBpbnNwZWN0ZWRTY3JpcHRTdGF0ZSwgaWQpOworICAgIGludCBpZCA9IGlu
amVjdGVkU2NyaXB0SWRGb3IoaW5zcGVjdGVkRXhlY1N0YXRlKTsKKyAgICBTY3JpcHRPYmplY3Qg
aW5qZWN0ZWRTY3JpcHRPYmplY3QgPSBjcmVhdGVJbmplY3RlZFNjcmlwdChpbmplY3RlZFNjcmlw
dFNvdXJjZSgpLCBpbnNwZWN0ZWRFeGVjU3RhdGUsIGlkKTsKICAgICBJbmplY3RlZFNjcmlwdCBy
ZXN1bHQoaW5qZWN0ZWRTY3JpcHRPYmplY3QsIG1faW5zcGVjdGVkU3RhdGVBY2Nlc3NDaGVjayk7
CiAgICAgbV9pZFRvSW5qZWN0ZWRTY3JpcHQuc2V0KGlkLCByZXN1bHQpOwogICAgIHJldHVybiBy
ZXN1bHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0TWFuYWdlci5oCShyZXZpc2lvbiAxNTU3MzApCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDMzICs1NCwz
MyBAQCBwdWJsaWM6CiAKICAgICBJbmplY3RlZFNjcmlwdEhvc3QqIGluamVjdGVkU2NyaXB0SG9z
dCgpOwogCi0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3IoU2NyaXB0U3RhdGUq
KTsKKyAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvcihKU0M6OkV4ZWNTdGF0ZSop
OwogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9ySWQoaW50KTsKLSAgICBpbnQg
aW5qZWN0ZWRTY3JpcHRJZEZvcihTY3JpcHRTdGF0ZSopOworICAgIGludCBpbmplY3RlZFNjcmlw
dElkRm9yKEpTQzo6RXhlY1N0YXRlKik7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3Jp
cHRGb3JPYmplY3RJZChjb25zdCBTdHJpbmcmIG9iamVjdElkKTsKICAgICB2b2lkIGRpc2NhcmRJ
bmplY3RlZFNjcmlwdHMoKTsKICAgICB2b2lkIGRpc2NhcmRJbmplY3RlZFNjcmlwdHNGb3IoRE9N
V2luZG93Kik7CiAgICAgdm9pZCByZWxlYXNlT2JqZWN0R3JvdXAoY29uc3QgU3RyaW5nJiBvYmpl
Y3RHcm91cCk7CiAKLSAgICB0eXBlZGVmIGJvb2wgKCpJbnNwZWN0ZWRTdGF0ZUFjY2Vzc0NoZWNr
KShTY3JpcHRTdGF0ZSopOworICAgIHR5cGVkZWYgYm9vbCAoKkluc3BlY3RlZFN0YXRlQWNjZXNz
Q2hlY2spKEpTQzo6RXhlY1N0YXRlKik7CiAgICAgSW5zcGVjdGVkU3RhdGVBY2Nlc3NDaGVjayBp
bnNwZWN0ZWRTdGF0ZUFjY2Vzc0NoZWNrKCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0ZWRTdGF0
ZUFjY2Vzc0NoZWNrOyB9CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKEluc3BlY3RlZFN0YXRlQWNjZXNzQ2hlY2spOwogCiAgICAgU3RyaW5nIGluamVjdGVk
U2NyaXB0U291cmNlKCk7Ci0gICAgU2NyaXB0T2JqZWN0IGNyZWF0ZUluamVjdGVkU2NyaXB0KGNv
bnN0IFN0cmluZyYgc291cmNlLCBTY3JpcHRTdGF0ZSosIGludCBpZCk7CisgICAgU2NyaXB0T2Jq
ZWN0IGNyZWF0ZUluamVjdGVkU2NyaXB0KGNvbnN0IFN0cmluZyYgc291cmNlLCBKU0M6OkV4ZWNT
dGF0ZSosIGludCBpZCk7CiAKLSAgICBzdGF0aWMgYm9vbCBjYW5BY2Nlc3NJbnNwZWN0ZWRXaW5k
b3coU2NyaXB0U3RhdGUqKTsKLSAgICBzdGF0aWMgYm9vbCBjYW5BY2Nlc3NJbnNwZWN0ZWRXb3Jr
ZXJHbG9iYWxTY29wZShTY3JpcHRTdGF0ZSopOworICAgIHN0YXRpYyBib29sIGNhbkFjY2Vzc0lu
c3BlY3RlZFdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBib29sIGNhbkFjY2Vz
c0luc3BlY3RlZFdvcmtlckdsb2JhbFNjb3BlKEpTQzo6RXhlY1N0YXRlKik7CiAKICAgICBpbnQg
bV9uZXh0SW5qZWN0ZWRTY3JpcHRJZDsKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBJbmplY3Rl
ZFNjcmlwdD4gSWRUb0luamVjdGVkU2NyaXB0TWFwOwogICAgIElkVG9JbmplY3RlZFNjcmlwdE1h
cCBtX2lkVG9JbmplY3RlZFNjcmlwdDsKICAgICBSZWZQdHI8SW5qZWN0ZWRTY3JpcHRIb3N0PiBt
X2luamVjdGVkU2NyaXB0SG9zdDsKICAgICBJbnNwZWN0ZWRTdGF0ZUFjY2Vzc0NoZWNrIG1faW5z
cGVjdGVkU3RhdGVBY2Nlc3NDaGVjazsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U2NyaXB0U3RhdGUq
LCBpbnQ+IFNjcmlwdFN0YXRlVG9JZDsKLSAgICBTY3JpcHRTdGF0ZVRvSWQgbV9zY3JpcHRTdGF0
ZVRvSWQ7CisgICAgdHlwZWRlZiBIYXNoTWFwPEpTQzo6RXhlY1N0YXRlKiwgaW50PiBFeGVjU3Rh
dGVUb0lkOworICAgIEV4ZWNTdGF0ZVRvSWQgbV9zY3JpcHRTdGF0ZVRvSWQ7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0
ZWRTY3JpcHRNb2R1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAJKHJldmlzaW9uIDE1NTczMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDcgKzQ2LDcgQEAgSW5qZWN0ZWRTY3JpcHRNb2R1bGU6OkluamVjdGVkU2NyaXB0TW9k
dQogewogfQogCi12b2lkIEluamVjdGVkU2NyaXB0TW9kdWxlOjplbnN1cmVJbmplY3RlZChJbmpl
Y3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgU2NyaXB0U3RhdGUqIHNj
cmlwdFN0YXRlKQordm9pZCBJbmplY3RlZFNjcmlwdE1vZHVsZTo6ZW5zdXJlSW5qZWN0ZWQoSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIEpTQzo6RXhlY1N0YXRl
KiBzY3JpcHRTdGF0ZSkKIHsKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IGlu
amVjdGVkU2NyaXB0TWFuYWdlci0+aW5qZWN0ZWRTY3JpcHRGb3Ioc2NyaXB0U3RhdGUpOwogICAg
IEFTU0VSVCghaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1vZHVsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1vZHVsZS5oCShyZXZpc2lvbiAxNTU3
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNb2R1bGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gYSBzdGF0
aWMgZmFjdG9yeSBtZXRob2QgdGhhdCB3b3VsZCBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhl
IGNsYXNzCiAgICAgLy8gYW5kIGNhbGwgaXRzIGVuc3VyZUluamVjdGVkKCkgbWV0aG9kIGltbWVk
aWF0ZWx5LgogICAgIEluamVjdGVkU2NyaXB0TW9kdWxlKGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0g
ICAgdm9pZCBlbnN1cmVJbmplY3RlZChJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBTY3JpcHRTdGF0
ZSopOworICAgIHZvaWQgZW5zdXJlSW5qZWN0ZWQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSlND
OjpFeGVjU3RhdGUqKTsKIH07CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwCShyZXZpc2lvbiAxNTU3MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3
ICs4OSw3IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpZENsZWFyV2luZG93T2JqZWMKICAgICBT
dHJpbmcgc2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdEZvck9yaWdpbi5nZXQob3JpZ2luKTsKICAg
ICBpZiAoc2NyaXB0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGludCBpbmplY3Rl
ZFNjcmlwdElkID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdGVkU2NyaXB0SWRGb3Io
bWFpbldvcmxkU2NyaXB0U3RhdGUoZnJhbWUpKTsKKyAgICBpbnQgaW5qZWN0ZWRTY3JpcHRJZCA9
IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdElkRm9yKG1haW5Xb3JsZEV4
ZWNTdGF0ZShmcmFtZSkpOwogICAgIFN0cmluZ0J1aWxkZXIgc2NyaXB0U291cmNlOwogICAgIHNj
cmlwdFNvdXJjZS5hcHBlbmQoc2NyaXB0KTsKICAgICBzY3JpcHRTb3VyY2UuYXBwZW5kKCIoIik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNB
Z2VudC5jcHAJKHJldmlzaW9uIDE1NTczMCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDYW52YXNBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNyBA
QCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpjYXB0dXJlRnJhbWUoCiAgICAgRnJhbWUqIGZy
YW1lID0gZnJhbWVJZCA/IG1fcGFnZUFnZW50LT5hc3NlcnRGcmFtZShlcnJvclN0cmluZywgKmZy
YW1lSWQpIDogbV9wYWdlQWdlbnQtPm1haW5GcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAg
ICAgIHJldHVybjsKLSAgICBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSBtb2R1bGUgPSBpbmpl
Y3RlZFNjcmlwdENhbnZhc01vZHVsZShlcnJvclN0cmluZywgbWFpbldvcmxkU2NyaXB0U3RhdGUo
ZnJhbWUpKTsKKyAgICBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSBtb2R1bGUgPSBpbmplY3Rl
ZFNjcmlwdENhbnZhc01vZHVsZShlcnJvclN0cmluZywgbWFpbldvcmxkRXhlY1N0YXRlKGZyYW1l
KSk7CiAgICAgaWYgKCFtb2R1bGUuaGFzTm9WYWx1ZSgpKQogICAgICAgICBtb2R1bGUuY2FwdHVy
ZUZyYW1lKGVycm9yU3RyaW5nLCB0cmFjZUxvZ0lkKTsKIH0KQEAgLTE1Miw3ICsxNTIsNyBAQCB2
b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpzdGFydENhcHR1cmluCiAgICAgRnJhbWUqIGZyYW1l
ID0gZnJhbWVJZCA/IG1fcGFnZUFnZW50LT5hc3NlcnRGcmFtZShlcnJvclN0cmluZywgKmZyYW1l
SWQpIDogbV9wYWdlQWdlbnQtPm1haW5GcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAg
IHJldHVybjsKLSAgICBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSBtb2R1bGUgPSBpbmplY3Rl
ZFNjcmlwdENhbnZhc01vZHVsZShlcnJvclN0cmluZywgbWFpbldvcmxkU2NyaXB0U3RhdGUoZnJh
bWUpKTsKKyAgICBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSBtb2R1bGUgPSBpbmplY3RlZFNj
cmlwdENhbnZhc01vZHVsZShlcnJvclN0cmluZywgbWFpbldvcmxkRXhlY1N0YXRlKGZyYW1lKSk7
CiAgICAgaWYgKCFtb2R1bGUuaGFzTm9WYWx1ZSgpKQogICAgICAgICBtb2R1bGUuc3RhcnRDYXB0
dXJpbmcoZXJyb3JTdHJpbmcsIHRyYWNlTG9nSWQpOwogfQpAQCAtMjE1LDggKzIxNSw4IEBAIFNj
cmlwdE9iamVjdCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6d3JhcFcKIFNjcmlwdE9iamVjdCBJbnNw
ZWN0b3JDYW52YXNBZ2VudDo6bm90aWZ5UmVuZGVyaW5nQ29udGV4dFdhc1dyYXBwZWQoY29uc3Qg
U2NyaXB0T2JqZWN0JiB3cmFwcGVkQ29udGV4dCkKIHsKICAgICBBU1NFUlQobV9mcm9udGVuZCk7
Ci0gICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gd3JhcHBlZENvbnRleHQuc2NyaXB0U3Rh
dGUoKTsKLSAgICBET01XaW5kb3cqIGRvbVdpbmRvdyA9IHNjcmlwdFN0YXRlID8gZG9tV2luZG93
RnJvbVNjcmlwdFN0YXRlKHNjcmlwdFN0YXRlKSA6IDA7CisgICAgSlNDOjpFeGVjU3RhdGUqIHNj
cmlwdFN0YXRlID0gd3JhcHBlZENvbnRleHQuc2NyaXB0U3RhdGUoKTsKKyAgICBET01XaW5kb3cq
IGRvbVdpbmRvdyA9IHNjcmlwdFN0YXRlID8gZG9tV2luZG93RnJvbUV4ZWNTdGF0ZShzY3JpcHRT
dGF0ZSkgOiAwOwogICAgIEZyYW1lKiBmcmFtZSA9IGRvbVdpbmRvdyA/IGRvbVdpbmRvdy0+ZnJh
bWUoKSA6IDA7CiAgICAgaWYgKGZyYW1lICYmICFtX2ZyYW1lc1dpdGhVbmluc3RydW1lbnRlZENh
bnZhc2VzLmNvbnRhaW5zKGZyYW1lKSkKICAgICAgICAgbV9mcmFtZXNXaXRoVW5pbnN0cnVtZW50
ZWRDYW52YXNlcy5zZXQoZnJhbWUsIGZhbHNlKTsKQEAgLTIyNiw3ICsyMjYsNyBAQCBTY3JpcHRP
YmplY3QgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6Om5vdGlmCiAgICAgcmV0dXJuIHdyYXBwZWRDb250
ZXh0OwogfQogCi1JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSBJbnNwZWN0b3JDYW52YXNBZ2Vu
dDo6aW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBT
Y3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpCitJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSBJbnNw
ZWN0b3JDYW52YXNBZ2VudDo6aW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUoRXJyb3JTdHJpbmcq
IGVycm9yU3RyaW5nLCBKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUpCiB7CiAgICAgaWYgKCFj
aGVja0lzRW5hYmxlZChlcnJvclN0cmluZykpCiAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlw
dENhbnZhc01vZHVsZSgpOwpAQCAtMzMwLDcgKzMzMCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OmRpZEJlZ2luRnJhbWUKICAgICAgICAgcmV0dXJuOwogICAgIEVycm9yU3RyaW5nIGVy
cm9yOwogICAgIGZvciAoRnJhbWVzV2l0aFVuaW5zdHJ1bWVudGVkQ2FudmFzZXM6Oml0ZXJhdG9y
IGl0ID0gbV9mcmFtZXNXaXRoVW5pbnN0cnVtZW50ZWRDYW52YXNlcy5iZWdpbigpOyBpdCAhPSBt
X2ZyYW1lc1dpdGhVbmluc3RydW1lbnRlZENhbnZhc2VzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAg
IEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlIG1vZHVsZSA9IGluamVjdGVkU2NyaXB0Q2FudmFz
TW9kdWxlKCZlcnJvciwgbWFpbldvcmxkU2NyaXB0U3RhdGUoaXQtPmtleSkpOworICAgICAgICBJ
bmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSBtb2R1bGUgPSBpbmplY3RlZFNjcmlwdENhbnZhc01v
ZHVsZSgmZXJyb3IsIG1haW5Xb3JsZEV4ZWNTdGF0ZShpdC0+a2V5KSk7CiAgICAgICAgIGlmICgh
bW9kdWxlLmhhc05vVmFsdWUoKSkKICAgICAgICAgICAgIG1vZHVsZS5tYXJrRnJhbWVFbmQoKTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdl
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2Fu
dmFzQWdlbnQuaAkocmV2aXNpb24gMTU1NzMwKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNhbnZhc0FnZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBJbnNwZWN0b3JDYW52YXNBZ2VudChJbnN0cnVtZW50aW5n
QWdlbnRzKiwgSW5zcGVjdG9yQ29tcG9zaXRlU3RhdGUqLCBJbnNwZWN0b3JQYWdlQWdlbnQqLCBJ
bmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKIAotICAgIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxl
IGluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlKEVycm9yU3RyaW5nKiwgU2NyaXB0U3RhdGUqKTsK
KyAgICBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSBpbmplY3RlZFNjcmlwdENhbnZhc01vZHVs
ZShFcnJvclN0cmluZyosIEpTQzo6RXhlY1N0YXRlKik7CiAgICAgSW5qZWN0ZWRTY3JpcHRDYW52
YXNNb2R1bGUgaW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUoRXJyb3JTdHJpbmcqLCBjb25zdCBT
Y3JpcHRPYmplY3QmKTsKICAgICBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSBpbmplY3RlZFNj
cmlwdENhbnZhc01vZHVsZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNw
cAkocmV2aXNpb24gMTU1NzMwKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnNvbGVBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw3ICsxNjUsNyBAQCB2b2lk
IEluc3BlY3RvckNvbnNvbGVBZ2VudDo6YWRkTWVzc2FnZVRvCiAgICAgYWRkQ29uc29sZU1lc3Nh
Z2UoYWRvcHRQdHIobmV3IENvbnNvbGVNZXNzYWdlKCFpc1dvcmtlckFnZW50KCksIHNvdXJjZSwg
dHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGNhbGxTdGFjaywgcmVxdWVzdElkZW50aWZpZXIpKSk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjphZGRNZXNzYWdlVG9Db25zb2xlKE1lc3Nh
Z2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgU2NyaXB0U3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRyPFNjcmlw
dEFyZ3VtZW50cz4gYXJndW1lbnRzLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQor
dm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNv
dXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFBhc3NSZWZQdHI8U2NyaXB0
QXJndW1lbnRzPiBhcmd1bWVudHMsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCiB7
CiAgICAgaWYgKCFkZXZlbG9wZXJFeHRyYXNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE3OCw3ICsxNzgsNyBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6YWRkTWVzc2FnZVRv
CiAgICAgYWRkQ29uc29sZU1lc3NhZ2UoYWRvcHRQdHIobmV3IENvbnNvbGVNZXNzYWdlKCFpc1dv
cmtlckFnZW50KCksIHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGFyZ3VtZW50cywgc3Rh
dGUsIHJlcXVlc3RJZGVudGlmaWVyKSkpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnNvbGVBZ2Vu
dDo6YWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUg
dHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0
cmluZyYgc2NyaXB0SWQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJl
ciwgU2NyaXB0U3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQor
dm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNv
dXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCB1bnNpZ25lZCBsaW5lTnVt
YmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWdu
ZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcikKIHsKICAgICBpZiAoIWRldmVsb3BlckV4dHJhc0Vu
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgSW5zcGVj
dG9yQ29uc29sZUFnZW50OjpzdG9wVGltaW5nKGMKICAgICBhZGRNZXNzYWdlVG9Db25zb2xlKENv
bnNvbGVBUElNZXNzYWdlU291cmNlLCBUaW1pbmdNZXNzYWdlVHlwZSwgRGVidWdNZXNzYWdlTGV2
ZWwsIG1lc3NhZ2UsIGNhbGxTdGFjayk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50
Ojpjb3VudChTY3JpcHRTdGF0ZSogc3RhdGUsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBh
cmd1bWVudHMpCit2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Y291bnQoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQogewogICAg
IFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjayhjcmVhdGVTY3JpcHRDYWxsU3RhY2tG
b3JDb25zb2xlKHN0YXRlKSk7CiAgICAgY29uc3QgU2NyaXB0Q2FsbEZyYW1lJiBsYXN0Q2FsbGVy
ID0gY2FsbFN0YWNrLT5hdCgwKTsKQEAgLTMzNiw3ICszMzYsNyBAQCB2b2lkIEluc3BlY3RvckNv
bnNvbGVBZ2VudDo6YWRkQ29uc29sZU1lCiBjbGFzcyBJbnNwZWN0YWJsZUhlYXBPYmplY3QgOiBw
dWJsaWMgSW5qZWN0ZWRTY3JpcHRIb3N0OjpJbnNwZWN0YWJsZU9iamVjdCB7CiBwdWJsaWM6CiAg
ICAgZXhwbGljaXQgSW5zcGVjdGFibGVIZWFwT2JqZWN0KGludCBoZWFwT2JqZWN0SWQpIDogbV9o
ZWFwT2JqZWN0SWQoaGVhcE9iamVjdElkKSB7IH0KLSAgICB2aXJ0dWFsIFNjcmlwdFZhbHVlIGdl
dChTY3JpcHRTdGF0ZSopCisgICAgdmlydHVhbCBTY3JpcHRWYWx1ZSBnZXQoSlNDOjpFeGVjU3Rh
dGUqKQogICAgIHsKICAgICAgICAgcmV0dXJuIFNjcmlwdFByb2ZpbGVyOjpvYmplY3RCeUhlYXBP
YmplY3RJZChtX2hlYXBPYmplY3RJZCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuaAkocmV2aXNpb24gMTU1NzMwKQor
KysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MCw4ICs3MCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJGcm9udGVuZCgpOwogICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlKCk7CiAKLSAgICB2b2lkIGFk
ZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZl
bCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBTY3JpcHRTdGF0ZSosIFBhc3NSZWZQdHI8U2NyaXB0
QXJndW1lbnRzPiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOwotICAgIHZv
aWQgYWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2Fn
ZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIHVu
c2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgU2NyaXB0U3RhdGUqID0g
MCwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOworICAgIHZvaWQgYWRkTWVz
c2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIEpTQzo6RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTY3JpcHRB
cmd1bWVudHM+LCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7CisgICAgdm9p
ZCBhZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdl
TGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgdW5z
aWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBKU0M6OkV4ZWNTdGF0ZSog
PSAwLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7CiAKICAgICAvLyBGSVhN
RTogUmVtb3ZlIG9uY2Ugd2Ugbm8gbG9uZ2VyIGdlbmVyYXRlIHN0YWNrcyBvdXRzaWRlIG9mIElu
c3BlY3Rvci4KICAgICB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVz
c2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRy
PFNjcmlwdENhbGxTdGFjaz4sIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsK
QEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzdGFydFRpbWluZyhjb25zdCBT
dHJpbmcmIHRpdGxlKTsKICAgICB2b2lkIHN0b3BUaW1pbmcoY29uc3QgU3RyaW5nJiB0aXRsZSwg
UGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+KTsKLSAgICB2b2lkIGNvdW50KFNjcmlwdFN0YXRl
KiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+KTsKKyAgICB2b2lkIGNvdW50KEpTQzo6RXhl
Y1N0YXRlKiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+KTsKIAogICAgIHZvaWQgZnJhbWVX
aW5kb3dEaXNjYXJkZWQoRE9NV2luZG93Kik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb25zb2xlSW5zdHJ1bWVudGF0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVJbnN0cnVtZW50YXRpb24uaAko
cmV2aXNpb24gMTU1NzMwKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnNvbGVJbnN0cnVtZW50YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBp
bmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkCiAjZW5kaWYKIH0KIAotaW5s
aW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKFBh
Z2UqIHBhZ2UsIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdl
TGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgU2NyaXB0U3RhdGUqIHN0YXRlLCBQ
YXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzLCB1bnNpZ25lZCBsb25nIHJlcXVl
c3RJZGVudGlmaWVyKQoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRN
ZXNzYWdlVG9Db25zb2xlKFBhZ2UqIHBhZ2UsIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdl
VHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRz
LCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQogewogI2lmIEVOQUJMRShJTlNQRUNU
T1IpCiAgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBp
bnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKQEAgLTcyLDcgKzcyLDcgQEAgaW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZAogI2VuZGlmCiB9CiAKLWlubGluZSB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZShQYWdlKiBw
YWdlLCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVs
IGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIHVu
c2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgU2NyaXB0U3RhdGUqIHN0
YXRlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQoraW5saW5lIHZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKFBhZ2UqIHBhZ2UsIE1lc3Nh
Z2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgdW5zaWduZWQgbGlu
ZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHVu
c2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikK
ICAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3Ry
dW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpKQpAQCAtMTA3LDcgKzEwNyw3IEBAIGlubGluZSB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWQKICNlbmRpZgogfQogCi1pbmxpbmUgdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUoV29ya2VyR2xv
YmFsU2NvcGUqIHdvcmtlckdsb2JhbFNjb3BlLCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2Fn
ZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNv
bnN0IFN0cmluZyYgc2NyaXB0SWQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVt
bk51bWJlciwgU2NyaXB0U3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlm
aWVyKQoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9D
b25zb2xlKFdvcmtlckdsb2JhbFNjb3BlKiB3b3JrZXJHbG9iYWxTY29wZSwgTWVzc2FnZVNvdXJj
ZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCB1bnNpZ25lZCBsaW5lTnVtYmVy
LCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQg
bG9uZyByZXF1ZXN0SWRlbnRpZmllcikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlm
IChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGlu
Z0FnZW50c0Zvcldvcmtlckdsb2JhbFNjb3BlKHdvcmtlckdsb2JhbFNjb3BlKSkKQEAgLTEyNyw3
ICsxMjcsNyBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkCiB9CiAj
ZW5kaWYKIAotaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQ291
bnQoUGFnZSogcGFnZSwgU2NyaXB0U3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3Vt
ZW50cz4gYXJndW1lbnRzKQoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpj
b25zb2xlQ291bnQoUGFnZSogcGFnZSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRy
PFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAg
ICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2aXNpb24gMTU1NzMwKQorKysgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA5MCw3ICsxMDkwLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Zm9jdXNOb2RlKCkK
ICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbmplY3RlZFNjcmlwdCBp
bmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZv
cihtYWluV29ybGRTY3JpcHRTdGF0ZShmcmFtZSkpOworICAgIEluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdGVkU2NyaXB0Rm9yKG1h
aW5Xb3JsZEV4ZWNTdGF0ZShmcmFtZSkpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1Zh
bHVlKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTQ5MSw3ICsxNDkxLDcgQEAgUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6RE9NOjpFdmVudExpc3RlbgogICAgICAgICBTY3JpcHRWYWx1ZSBmdW5j
dGlvblZhbHVlID0gZXZlbnRMaXN0ZW5lckhhbmRsZXIoJm5vZGUtPmRvY3VtZW50KCksIGV2ZW50
TGlzdGVuZXIuZ2V0KCkpOwogICAgICAgICBpZiAoIWZ1bmN0aW9uVmFsdWUuaGFzTm9WYWx1ZSgp
KSB7CiAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFt
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gZXZlbnRM
aXN0ZW5lckhhbmRsZXJTY3JpcHRTdGF0ZShmcmFtZSwgZXZlbnRMaXN0ZW5lci5nZXQoKSk7Cisg
ICAgICAgICAgICAgICAgSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlID0gZXZlbnRMaXN0ZW5l
ckhhbmRsZXJTY3JpcHRTdGF0ZShmcmFtZSwgZXZlbnRMaXN0ZW5lci5nZXQoKSk7CiAgICAgICAg
ICAgICAgICAgaWYgKHNjcmlwdFN0YXRlKSB7CiAgICAgICAgICAgICAgICAgICAgIEluamVjdGVk
U2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdGVk
U2NyaXB0Rm9yKHNjcmlwdFN0YXRlKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmplY3Rl
ZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKQEAgLTE4MTUsNyArMTgxNSw3IEBAIFBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU8KICAgICBpZiAoIWZyYW1lKQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3Rl
ZFNjcmlwdE1hbmFnZXItPmluamVjdGVkU2NyaXB0Rm9yKG1haW5Xb3JsZFNjcmlwdFN0YXRlKGZy
YW1lKSk7CisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2Ny
aXB0TWFuYWdlci0+aW5qZWN0ZWRTY3JpcHRGb3IobWFpbldvcmxkRXhlY1N0YXRlKGZyYW1lKSk7
CiAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIDA7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5jcHAJKHJldmlzaW9uIDE1NTczMCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUyLDcg
Kzc1Miw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZmFpbGVkVG9QYXIKICAgICBt
X2Zyb250ZW5kLT5zY3JpcHRGYWlsZWRUb1BhcnNlKHVybCwgZGF0YSwgZmlyc3RMaW5lLCBlcnJv
ckxpbmUsIGVycm9yTWVzc2FnZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
ZGlkUGF1c2UoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBTY3JpcHRWYWx1ZSYgY2Fs
bEZyYW1lcywgY29uc3QgU2NyaXB0VmFsdWUmIGV4Y2VwdGlvbikKK3ZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6ZGlkUGF1c2UoSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBT
Y3JpcHRWYWx1ZSYgY2FsbEZyYW1lcywgY29uc3QgU2NyaXB0VmFsdWUmIGV4Y2VwdGlvbikKIHsK
ICAgICBBU1NFUlQoc2NyaXB0U3RhdGUgJiYgIW1fcGF1c2VkU2NyaXB0U3RhdGUpOwogICAgIG1f
cGF1c2VkU2NyaXB0U3RhdGUgPSBzY3JpcHRTdGF0ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAkocmV2aXNpb24gMTU1NzMw
KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMTQyLDcgKzE0Miw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1
YWwgdm9pZCBlbmFibGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZSgpOwotICAgIHZpcnR1
YWwgdm9pZCBkaWRQYXVzZShTY3JpcHRTdGF0ZSosIGNvbnN0IFNjcmlwdFZhbHVlJiBjYWxsRnJh
bWVzLCBjb25zdCBTY3JpcHRWYWx1ZSYgZXhjZXB0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
UGF1c2UoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTY3JpcHRWYWx1ZSYgY2FsbEZyYW1lcywgY29u
c3QgU2NyaXB0VmFsdWUmIGV4Y2VwdGlvbik7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbnRpbnVl
KCk7CiAgICAgdm9pZCByZXNldCgpOwogCkBAIC0xNjgsNyArMTY4LDcgQEAgcHJpdmF0ZToKIAog
ICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CiAgICAg
SW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyKiBtX2Zyb250ZW5kOwotICAgIFNjcmlwdFN0YXRl
KiBtX3BhdXNlZFNjcmlwdFN0YXRlOworICAgIEpTQzo6RXhlY1N0YXRlKiBtX3BhdXNlZFNjcmlw
dFN0YXRlOwogICAgIFNjcmlwdFZhbHVlIG1fY3VycmVudENhbGxTdGFjazsKICAgICBTY3JpcHRz
TWFwIG1fc2NyaXB0czsKICAgICBCcmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElk
c01hcCBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsLmNwcAkocmV2aXNpb24gMTU1NzMwKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzgsOSArMTM4LDkgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjp3aW5kbwog
ICAgIGlmIChtX2Zyb250ZW5kSG9zdCkKICAgICAgICAgbV9mcm9udGVuZEhvc3QtPmRpc2Nvbm5l
Y3RDbGllbnQoKTsKICAgICAKLSAgICBTY3JpcHRTdGF0ZSogZnJvbnRlbmRTY3JpcHRTdGF0ZSA9
IHNjcmlwdFN0YXRlRnJvbVBhZ2UoZGVidWdnZXJXb3JsZCgpLCBtX2Zyb250ZW5kUGFnZSk7Cisg
ICAgSlNDOjpFeGVjU3RhdGUqIGZyb250ZW5kRXhlY1N0YXRlID0gZXhlY1N0YXRlRnJvbVBhZ2Uo
ZGVidWdnZXJXb3JsZCgpLCBtX2Zyb250ZW5kUGFnZSk7CiAgICAgbV9mcm9udGVuZEhvc3QgPSBJ
bnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNyZWF0ZSh0aGlzLCBtX2Zyb250ZW5kUGFnZSk7Ci0gICAg
U2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIkluc3BlY3RvckZy
b250ZW5kSG9zdCIsIG1fZnJvbnRlbmRIb3N0LmdldCgpKTsKKyAgICBTY3JpcHRHbG9iYWxPYmpl
Y3Q6OnNldChmcm9udGVuZEV4ZWNTdGF0ZSwgIkluc3BlY3RvckZyb250ZW5kSG9zdCIsIG1fZnJv
bnRlbmRIb3N0LmdldCgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
Ojpmcm9udGVuZExvYWRlZCgpCkBAIC0zNDUsNyArMzQ1LDcgQEAgYm9vbCBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsOjppc1VuZAogYm9vbCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
OjpldmFsdWF0ZUFzQm9vbGVhbihjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24pCiB7CiAgICAgU2Ny
aXB0VmFsdWUgdmFsdWUgPSBtX2Zyb250ZW5kUGFnZS0+bWFpbkZyYW1lKCkuc2NyaXB0KCkuZXhl
Y3V0ZVNjcmlwdChleHByZXNzaW9uKTsKLSAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcobWFpbldv
cmxkU2NyaXB0U3RhdGUoJm1fZnJvbnRlbmRQYWdlLT5tYWluRnJhbWUoKSkpID09ICJ0cnVlIjsK
KyAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcobWFpbldvcmxkRXhlY1N0YXRlKCZtX2Zyb250ZW5k
UGFnZS0+bWFpbkZyYW1lKCkpKSA9PSAidHJ1ZSI7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbDo6ZXZhbHVhdGVPbkxvYWQoY29uc3QgU3RyaW5nJiBleHByZXNzaW9uKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
SG9zdC5jcHAJKHJldmlzaW9uIDE1NTczMCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjksOSArMjY5LDkg
QEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDb250ZXh0TQogICAgICAgICByZXR1
cm47CiAKICAgICBBU1NFUlQobV9mcm9udGVuZFBhZ2UpOwotICAgIFNjcmlwdFN0YXRlKiBmcm9u
dGVuZFNjcmlwdFN0YXRlID0gc2NyaXB0U3RhdGVGcm9tUGFnZShkZWJ1Z2dlcldvcmxkKCksIG1f
ZnJvbnRlbmRQYWdlKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZnJvbnRlbmRFeGVjU3RhdGUgPSBl
eGVjU3RhdGVGcm9tUGFnZShkZWJ1Z2dlcldvcmxkKCksIG1fZnJvbnRlbmRQYWdlKTsKICAgICBT
Y3JpcHRPYmplY3QgZnJvbnRlbmRBcGlPYmplY3Q7Ci0gICAgaWYgKCFTY3JpcHRHbG9iYWxPYmpl
Y3Q6OmdldChmcm9udGVuZFNjcmlwdFN0YXRlLCAiSW5zcGVjdG9yRnJvbnRlbmRBUEkiLCBmcm9u
dGVuZEFwaU9iamVjdCkpIHsKKyAgICBpZiAoIVNjcmlwdEdsb2JhbE9iamVjdDo6Z2V0KGZyb250
ZW5kRXhlY1N0YXRlLCAiSW5zcGVjdG9yRnJvbnRlbmRBUEkiLCBmcm9udGVuZEFwaU9iamVjdCkp
IHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRl
eGVkREJBZ2VudC5jcHAJKHJldmlzaW9uIDE1NTczMCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1Nyw3
ICs2NTcsNyBAQCB2b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0CiAgICAg
aWYgKCFpZGJGYWN0b3J5KQogICAgICAgICByZXR1cm47CiAKLSAgICBJbmplY3RlZFNjcmlwdCBp
bmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZv
cihtYWluV29ybGRTY3JpcHRTdGF0ZShmcmFtZSkpOworICAgIEluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdGVkU2NyaXB0Rm9yKG1h
aW5Xb3JsZEV4ZWNTdGF0ZShmcmFtZSkpOwogCiAgICAgUmVmUHRyPElEQktleVJhbmdlPiBpZGJL
ZXlSYW5nZSA9IGtleVJhbmdlID8gaWRiS2V5UmFuZ2VGcm9tS2V5UmFuZ2Uoa2V5UmFuZ2UtPmdl
dCgpKSA6IDA7CiAgICAgaWYgKGtleVJhbmdlICYmICFpZGJLZXlSYW5nZSkgewpJbmRleDogU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlv
bi5jcHAJKHJldmlzaW9uIDE1NTczMCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjMsNyArNDYzLDcg
QEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNjcmlwdHNFbgogICAgICAgICBwYWdl
QWdlbnQtPnNjcmlwdHNFbmFibGVkKGlzRW5hYmxlZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRDcmVhdGVJc29sYXRlZENvbnRleHRJbXBsKEluc3RydW1lbnRpbmdB
Z2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEZyYW1lKiBmcmFtZSwgU2NyaXB0U3RhdGUqIHNj
cmlwdFN0YXRlLCBTZWN1cml0eU9yaWdpbiogb3JpZ2luKQordm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZENyZWF0ZUlzb2xhdGVkQ29udGV4dEltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyogaW5zdHJ1bWVudGluZ0FnZW50cywgRnJhbWUqIGZyYW1lLCBKU0M6OkV4ZWNTdGF0ZSogc2Ny
aXB0U3RhdGUsIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCiB7CiAgICAgaWYgKFBhZ2VSdW50aW1l
QWdlbnQqIHJ1bnRpbWVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPnBhZ2VSdW50aW1lQWdl
bnQoKSkKICAgICAgICAgcnVudGltZUFnZW50LT5kaWRDcmVhdGVJc29sYXRlZENvbnRleHQoZnJh
bWUsIHNjcmlwdFN0YXRlLCBvcmlnaW4pOwpAQCAtMTAyNiw3ICsxMDI2LDcgQEAgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZwogI2VuZGlmCiB9CiAKLXZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlSW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2Fn
ZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFNj
cmlwdFN0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cywg
dW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcikKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzLCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwg
TWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cywgdW5zaWduZWQg
bG9uZyByZXF1ZXN0SWRlbnRpZmllcikKIHsKICAgICBpZiAoSW5zcGVjdG9yQ29uc29sZUFnZW50
KiBjb25zb2xlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JDb25zb2xlQWdl
bnQoKSkKICAgICAgICAgY29uc29sZUFnZW50LT5hZGRNZXNzYWdlVG9Db25zb2xlKHNvdXJjZSwg
dHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIHN0YXRlLCBhcmd1bWVudHMsIHJlcXVlc3RJZGVudGlmaWVy
KTsKQEAgLTEwMzYsMTMgKzEwMzYsMTMgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmFkZE1lc3NhZwogI2VuZGlmCiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjph
ZGRNZXNzYWdlVG9Db25zb2xlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzLCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxl
dmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQs
IHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgU2NyaXB0U3RhdGUq
IHN0YXRlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQordm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKEluc3RydW1lbnRpbmdBZ2Vu
dHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlw
ZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3Qg
U3RyaW5nJiBzY3JpcHRJZCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVt
YmVyLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZp
ZXIpCiB7CiAgICAgaWYgKEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5z
dHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yQ29uc29sZUFnZW50KCkpCiAgICAgICAgIGNvbnNv
bGVBZ2VudC0+YWRkTWVzc2FnZVRvQ29uc29sZShzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdl
LCBzY3JpcHRJZCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzdGF0ZSwgcmVxdWVzdElkZW50
aWZpZXIpOwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZUNvdW50
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBTY3JpcHRTdGF0
ZSogc3RhdGUsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMpCit2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZUNvdW50SW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFBhc3NSZWZQ
dHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMpCiB7CiAgICAgaWYgKEluc3BlY3RvckNvbnNv
bGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yQ29u
c29sZUFnZW50KCkpCiAgICAgICAgIGNvbnNvbGVBZ2VudC0+Y291bnQoc3RhdGUsIGFyZ3VtZW50
cyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvcklu
c3RydW1lbnRhdGlvbi5oCShyZXZpc2lvbiAxNTU3MzApCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw3
ICsxNTgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSB3aWxsRXZhbHVhdGVTY3JpcHQoRnJhbWUqLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IGxp
bmVOdW1iZXIpOwogICAgIHN0YXRpYyB2b2lkIGRpZEV2YWx1YXRlU2NyaXB0KGNvbnN0IEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYpOwogICAgIHN0YXRpYyB2b2lkIHNjcmlwdHNFbmFi
bGVkKFBhZ2UqLCBib29sIGlzRW5hYmxlZCk7Ci0gICAgc3RhdGljIHZvaWQgZGlkQ3JlYXRlSXNv
bGF0ZWRDb250ZXh0KEZyYW1lKiwgU2NyaXB0U3RhdGUqLCBTZWN1cml0eU9yaWdpbiopOworICAg
IHN0YXRpYyB2b2lkIGRpZENyZWF0ZUlzb2xhdGVkQ29udGV4dChGcmFtZSosIEpTQzo6RXhlY1N0
YXRlKiwgU2VjdXJpdHlPcmlnaW4qKTsKICAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uQ29va2llIHdpbGxGaXJlVGltZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGludCB0aW1l
cklkKTsKICAgICBzdGF0aWMgdm9pZCBkaWRGaXJlVGltZXIoY29uc3QgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uQ29va2llJik7CiAgICAgc3RhdGljIHZvaWQgZGlkSW52YWxpZGF0ZUxheW91dChG
cmFtZSopOwpAQCAtMjMwLDE0ICsyMzAsMTQgQEAgcHVibGljOgogCiAgICAgLy8gRklYTUU6IFJl
bW92ZSBvbmNlIHdlIG5vIGxvbmdlciBnZW5lcmF0ZSBzdGFja3Mgb3V0c2lkZSBvZiBJbnNwZWN0
b3IuCiAgICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShQYWdlKiwgTWVzc2FnZVNv
dXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQ
YXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4sIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZp
ZXIgPSAwKTsKLSAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKFBhZ2UqLCBNZXNz
YWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIFNjcmlwdFN0YXRlKiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+LCB1bnNpZ25lZCBs
b25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7Ci0gICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRv
Q29uc29sZShQYWdlKiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCB1bnNpZ25lZCBs
aW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFNjcmlwdFN0YXRlKiA9IDAsIHVuc2ln
bmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsKKyAgICBzdGF0aWMgdm9pZCBhZGRNZXNz
YWdlVG9Db25zb2xlKFBhZ2UqLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxl
dmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEpTQzo6RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxT
Y3JpcHRBcmd1bWVudHM+LCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7Cisg
ICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShQYWdlKiwgTWVzc2FnZVNvdXJjZSwg
TWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBT
dHJpbmcmIHNjcmlwdElkLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1i
ZXIsIEpTQzo6RXhlY1N0YXRlKiA9IDAsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIg
PSAwKTsKICNpZiBFTkFCTEUoV09SS0VSUykKICAgICAvLyBGSVhNRTogQ29udmVydCB0byBTY3Jp
cHRBcmd1bWVudHMgdG8gbWF0Y2ggbm9uLXdvcmtlciBjb250ZXh0LgogICAgIHN0YXRpYyB2b2lk
IGFkZE1lc3NhZ2VUb0NvbnNvbGUoV29ya2VyR2xvYmFsU2NvcGUqLCBNZXNzYWdlU291cmNlLCBN
ZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NSZWZQ
dHI8U2NyaXB0Q2FsbFN0YWNrPiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDAp
OwotICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoV29ya2VyR2xvYmFsU2NvcGUq
LCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVu
c2lnbmVkIGNvbHVtbk51bWJlciwgU2NyaXB0U3RhdGUqID0gMCwgdW5zaWduZWQgbG9uZyByZXF1
ZXN0SWRlbnRpZmllciA9IDApOworICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUo
V29ya2VyR2xvYmFsU2NvcGUqLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxl
dmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIHVuc2ln
bmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgSlNDOjpFeGVjU3RhdGUqID0g
MCwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOwogI2VuZGlmCi0gICAgc3Rh
dGljIHZvaWQgY29uc29sZUNvdW50KFBhZ2UqLCBTY3JpcHRTdGF0ZSosIFBhc3NSZWZQdHI8U2Ny
aXB0QXJndW1lbnRzPik7CisgICAgc3RhdGljIHZvaWQgY29uc29sZUNvdW50KFBhZ2UqLCBKU0M6
OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPik7CiAgICAgc3RhdGljIHZv
aWQgc3RhcnRDb25zb2xlVGltaW5nKEZyYW1lKiwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CiAgICAg
c3RhdGljIHZvaWQgc3RvcENvbnNvbGVUaW1pbmcoRnJhbWUqLCBjb25zdCBTdHJpbmcmIHRpdGxl
LCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4pOwogICAgIHN0YXRpYyB2b2lkIGNvbnNvbGVU
aW1lU3RhbXAoRnJhbWUqLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4pOwpAQCAtMzYzLDcg
KzM2Myw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSB3aWxsRXZhbHVhdGVTY3JpcHRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBjb25zdCBT
dHJpbmcmIHVybCwgaW50IGxpbmVOdW1iZXIsIEZyYW1lKik7CiAgICAgc3RhdGljIHZvaWQgZGlk
RXZhbHVhdGVTY3JpcHRJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYp
OwogICAgIHN0YXRpYyB2b2lkIHNjcmlwdHNFbmFibGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
KiwgYm9vbCBpc0VuYWJsZWQpOwotICAgIHN0YXRpYyB2b2lkIGRpZENyZWF0ZUlzb2xhdGVkQ29u
dGV4dEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIEZyYW1lKiwgU2NyaXB0U3RhdGUqLCBTZWN1
cml0eU9yaWdpbiopOworICAgIHN0YXRpYyB2b2lkIGRpZENyZWF0ZUlzb2xhdGVkQ29udGV4dElt
cGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIEZyYW1lKiwgSlNDOjpFeGVjU3RhdGUqLCBTZWN1cml0
eU9yaWdpbiopOwogICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2ls
bEZpcmVUaW1lckltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIGludCB0aW1lcklkLCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0Kik7CiAgICAgc3RhdGljIHZvaWQgZGlkRmlyZVRpbWVySW1wbChjb25z
dCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmKTsKICAgICBzdGF0aWMgdm9pZCBkaWRJ
bnZhbGlkYXRlTGF5b3V0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgRnJhbWUqKTsKQEAgLTQz
MiwxMyArNDMyLDEzIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSB3aWxsV3JpdGVIVE1MSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgdW5zaWdu
ZWQgc3RhcnRMaW5lLCBGcmFtZSopOwogICAgIHN0YXRpYyB2b2lkIGRpZFdyaXRlSFRNTEltcGwo
Y29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiwgdW5zaWduZWQgZW5kTGluZSk7
CiAKLSAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlSW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzKiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBTY3JpcHRTdGF0ZSosIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRz
PiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcik7Ci0gICAgc3RhdGljIHZvaWQgYWRk
TWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIE1lc3NhZ2VTb3VyY2Us
IE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3Qg
U3RyaW5nJiBzY3JpcHRJZCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVt
YmVyLCBTY3JpcHRTdGF0ZSosIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpOworICAg
IHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMq
LCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsIEpTQzo6RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+LCB1
bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKTsKKyAgICBzdGF0aWMgdm9pZCBhZGRNZXNz
YWdlVG9Db25zb2xlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgTWVzc2FnZVNvdXJjZSwgTWVz
c2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJp
bmcmIHNjcmlwdElkLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIs
IEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcik7CiAKICAg
ICAvLyBGSVhNRTogUmVtb3ZlIG9uY2Ugd2Ugbm8gbG9uZ2VyIGdlbmVyYXRlIHN0YWNrcyBvdXRz
aWRlIG9mIEluc3BlY3Rvci4KICAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlSW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzKiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3Nh
Z2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFj
az4sIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpOwogCi0gICAgc3RhdGljIHZvaWQg
Y29uc29sZUNvdW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgU2NyaXB0U3RhdGUqLCBQYXNz
UmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4pOworICAgIHN0YXRpYyB2b2lkIGNvbnNvbGVDb3VudElt
cGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIEpTQzo6RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTY3Jp
cHRBcmd1bWVudHM+KTsKICAgICBzdGF0aWMgdm9pZCBzdGFydENvbnNvbGVUaW1pbmdJbXBsKElu
c3RydW1lbnRpbmdBZ2VudHMqLCBGcmFtZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpOwogICAgIHN0
YXRpYyB2b2lkIHN0b3BDb25zb2xlVGltaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgRnJh
bWUqLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4pOwog
ICAgIHN0YXRpYyB2b2lkIGNvbnNvbGVUaW1lU3RhbXBJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMq
LCBGcmFtZSosIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPik7CkBAIC05OTYsNyArOTk2LDcg
QEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzYwogI2VuZGlmCiB9CiAK
LWlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ3JlYXRlSXNvbGF0ZWRD
b250ZXh0KEZyYW1lKiBmcmFtZSwgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBTZWN1cml0eU9y
aWdpbiogb3JpZ2luKQoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRD
cmVhdGVJc29sYXRlZENvbnRleHQoRnJhbWUqIGZyYW1lLCBKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0
U3RhdGUsIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikK
ICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9QYWdlQ29uc29sZUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZUNvbnNvbGVBZ2VudC5jcHAJKHJldmlzaW9uIDE1NTcz
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlQ29uc29sZUFnZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIFBhZ2VDb25zb2xlQWdlbnQ6OmNsZWFy
TWVzc2FnZXMoRXJyCiBjbGFzcyBJbnNwZWN0YWJsZU5vZGUgOiBwdWJsaWMgSW5qZWN0ZWRTY3Jp
cHRIb3N0OjpJbnNwZWN0YWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgSW5zcGVj
dGFibGVOb2RlKE5vZGUqIG5vZGUpIDogbV9ub2RlKG5vZGUpIHsgfQotICAgIHZpcnR1YWwgU2Ny
aXB0VmFsdWUgZ2V0KFNjcmlwdFN0YXRlKiBzdGF0ZSkKKyAgICB2aXJ0dWFsIFNjcmlwdFZhbHVl
IGdldChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCiAgICAgewogICAgICAgICByZXR1cm4gSW5qZWN0
ZWRTY3JpcHRIb3N0Ojpub2RlQXNTY3JpcHRWYWx1ZShzdGF0ZSwgbV9ub2RlKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAJ
KHJldmlzaW9uIDE1NTczMCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdn
ZXJBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBQYWdlRGVi
dWdnZXJBZ2VudDo6dW5tdXRlQ29uc29sZSgpCiBJbmplY3RlZFNjcmlwdCBQYWdlRGVidWdnZXJB
Z2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29u
c3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpCiB7CiAgICAgaWYgKCFleGVjdXRpb25Db250ZXh0
SWQpIHsKLSAgICAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gbWFpbldvcmxkU2NyaXB0
U3RhdGUobV9wYWdlQWdlbnQtPm1haW5GcmFtZSgpKTsKKyAgICAgICAgSlNDOjpFeGVjU3RhdGUq
IHNjcmlwdFN0YXRlID0gbWFpbldvcmxkRXhlY1N0YXRlKG1fcGFnZUFnZW50LT5tYWluRnJhbWUo
KSk7CiAgICAgICAgIHJldHVybiBpbmplY3RlZFNjcmlwdE1hbmFnZXIoKS0+aW5qZWN0ZWRTY3Jp
cHRGb3Ioc2NyaXB0U3RhdGUpOwogICAgIH0KICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNj
cmlwdCA9IGluamVjdGVkU2NyaXB0TWFuYWdlcigpLT5pbmplY3RlZFNjcmlwdEZvcklkKCpleGVj
dXRpb25Db250ZXh0SWQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VSdW50
aW1lQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdl
UnVudGltZUFnZW50LmNwcAkocmV2aXNpb24gMTU1NzMwKQorKysgU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL1BhZ2VSdW50aW1lQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsMTEgKzEy
MCwxMSBAQCB2b2lkIFBhZ2VSdW50aW1lQWdlbnQ6OmRpZENyZWF0ZU1haW5Xb3JsCiAgICAgICAg
IHJldHVybjsKICAgICBBU1NFUlQobV9mcm9udGVuZCk7CiAgICAgU3RyaW5nIGZyYW1lSWQgPSBt
X3BhZ2VBZ2VudC0+ZnJhbWVJZChmcmFtZSk7Ci0gICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRl
ID0gbWFpbldvcmxkU2NyaXB0U3RhdGUoZnJhbWUpOworICAgIEpTQzo6RXhlY1N0YXRlKiBzY3Jp
cHRTdGF0ZSA9IG1haW5Xb3JsZEV4ZWNTdGF0ZShmcmFtZSk7CiAgICAgbm90aWZ5Q29udGV4dENy
ZWF0ZWQoZnJhbWVJZCwgc2NyaXB0U3RhdGUsIDAsIHRydWUpOwogfQogCi12b2lkIFBhZ2VSdW50
aW1lQWdlbnQ6OmRpZENyZWF0ZUlzb2xhdGVkQ29udGV4dChGcmFtZSogZnJhbWUsIFNjcmlwdFN0
YXRlKiBzY3JpcHRTdGF0ZSwgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK3ZvaWQgUGFnZVJ1bnRp
bWVBZ2VudDo6ZGlkQ3JlYXRlSXNvbGF0ZWRDb250ZXh0KEZyYW1lKiBmcmFtZSwgSlNDOjpFeGVj
U3RhdGUqIHNjcmlwdFN0YXRlLCBTZWN1cml0eU9yaWdpbiogb3JpZ2luKQogewogICAgIGlmICgh
bV9lbmFibGVkKQogICAgICAgICByZXR1cm47CkBAIC0xMzYsNyArMTM2LDcgQEAgdm9pZCBQYWdl
UnVudGltZUFnZW50OjpkaWRDcmVhdGVJc29sYXRlZAogSW5qZWN0ZWRTY3JpcHQgUGFnZVJ1bnRp
bWVBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywg
Y29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpCiB7CiAgICAgaWYgKCFleGVjdXRpb25Db250
ZXh0SWQpIHsKLSAgICAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gbWFpbldvcmxkU2Ny
aXB0U3RhdGUoJm1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkpOworICAgICAgICBKU0M6OkV4
ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSBtYWluV29ybGRFeGVjU3RhdGUoJm1faW5zcGVjdGVkUGFn
ZS0+bWFpbkZyYW1lKCkpOwogICAgICAgICBJbmplY3RlZFNjcmlwdCByZXN1bHQgPSBpbmplY3Rl
ZFNjcmlwdE1hbmFnZXIoKS0+aW5qZWN0ZWRTY3JpcHRGb3Ioc2NyaXB0U3RhdGUpOwogICAgICAg
ICBpZiAocmVzdWx0Lmhhc05vVmFsdWUoKSkKICAgICAgICAgICAgICplcnJvclN0cmluZyA9ICJJ
bnRlcm5hbCBlcnJvcjogbWFpbiB3b3JsZCBleGVjdXRpb24gY29udGV4dCBub3QgZm91bmQuIjsK
QEAgLTE2MCwxMyArMTYwLDEzIEBAIHZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6dW5tdXRlQ29uc29s
ZSgpCiAKIHZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6cmVwb3J0RXhlY3V0aW9uQ29udGV4dENyZWF0
aW9uKCkKIHsKLSAgICBWZWN0b3I8c3RkOjpwYWlyPFNjcmlwdFN0YXRlKiwgU2VjdXJpdHlPcmln
aW4qPiA+IGlzb2xhdGVkQ29udGV4dHM7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxKU0M6OkV4ZWNT
dGF0ZSosIFNlY3VyaXR5T3JpZ2luKj4gPiBpc29sYXRlZENvbnRleHRzOwogICAgIGZvciAoRnJh
bWUqIGZyYW1lID0gJm1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9
IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKICAgICAgICAgaWYgKCFmcmFtZS0+c2Ny
aXB0KCkuY2FuRXhlY3V0ZVNjcmlwdHMoTm90QWJvdXRUb0V4ZWN1dGVTY3JpcHQpKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIFN0cmluZyBmcmFtZUlkID0gbV9wYWdlQWdlbnQtPmZy
YW1lSWQoZnJhbWUpOwogCi0gICAgICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IG1haW5X
b3JsZFNjcmlwdFN0YXRlKGZyYW1lKTsKKyAgICAgICAgSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0
YXRlID0gbWFpbldvcmxkRXhlY1N0YXRlKGZyYW1lKTsKICAgICAgICAgbm90aWZ5Q29udGV4dENy
ZWF0ZWQoZnJhbWVJZCwgc2NyaXB0U3RhdGUsIDAsIHRydWUpOwogICAgICAgICBmcmFtZS0+c2Ny
aXB0KCkuY29sbGVjdElzb2xhdGVkQ29udGV4dHMoaXNvbGF0ZWRDb250ZXh0cyk7CiAgICAgICAg
IGlmIChpc29sYXRlZENvbnRleHRzLmlzRW1wdHkoKSkKQEAgLTE3Nyw3ICsxNzcsNyBAQCB2b2lk
IFBhZ2VSdW50aW1lQWdlbnQ6OnJlcG9ydEV4ZWN1dGlvbkNvCiAgICAgfQogfQogCi12b2lkIFBh
Z2VSdW50aW1lQWdlbnQ6Om5vdGlmeUNvbnRleHRDcmVhdGVkKGNvbnN0IFN0cmluZyYgZnJhbWVJ
ZCwgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmln
aW4sIGJvb2wgaXNQYWdlQ29udGV4dCkKK3ZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6bm90aWZ5Q29u
dGV4dENyZWF0ZWQoY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0
U3RhdGUsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgYm9vbCBpc1BhZ2VDb250ZXh0
KQogewogICAgIEFTU0VSVChzZWN1cml0eU9yaWdpbiB8fCBpc1BhZ2VDb250ZXh0KTsKICAgICBp
bnQgZXhlY3V0aW9uQ29udGV4dElkID0gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCktPmluamVjdGVk
U2NyaXB0SWRGb3Ioc2NyaXB0U3RhdGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L1BhZ2VSdW50aW1lQWdlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvUGFnZVJ1bnRpbWVBZ2VudC5oCShyZXZpc2lvbiAxNTU3MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvUGFnZVJ1bnRpbWVBZ2VudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1
OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyopOwog
CiAgICAgdm9pZCBkaWRDcmVhdGVNYWluV29ybGRDb250ZXh0KEZyYW1lKik7Ci0gICAgdm9pZCBk
aWRDcmVhdGVJc29sYXRlZENvbnRleHQoRnJhbWUqLCBTY3JpcHRTdGF0ZSosIFNlY3VyaXR5T3Jp
Z2luKik7CisgICAgdm9pZCBkaWRDcmVhdGVJc29sYXRlZENvbnRleHQoRnJhbWUqLCBKU0M6OkV4
ZWNTdGF0ZSosIFNlY3VyaXR5T3JpZ2luKik7CiAKIHByaXZhdGU6CiAgICAgUGFnZVJ1bnRpbWVB
Z2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yQ29tcG9zaXRlU3RhdGUqLCBJbmpl
Y3RlZFNjcmlwdE1hbmFnZXIqLCBQYWdlKiwgSW5zcGVjdG9yUGFnZUFnZW50Kik7CkBAIC02Nyw3
ICs2Nyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIG11dGVDb25zb2xlKCk7CiAgICAg
dmlydHVhbCB2b2lkIHVubXV0ZUNvbnNvbGUoKTsKICAgICB2b2lkIHJlcG9ydEV4ZWN1dGlvbkNv
bnRleHRDcmVhdGlvbigpOwotICAgIHZvaWQgbm90aWZ5Q29udGV4dENyZWF0ZWQoY29uc3QgU3Ry
aW5nJiBmcmFtZUlkLCBTY3JpcHRTdGF0ZSosIFNlY3VyaXR5T3JpZ2luKiwgYm9vbCBpc1BhZ2VD
b250ZXh0KTsKKyAgICB2b2lkIG5vdGlmeUNvbnRleHRDcmVhdGVkKGNvbnN0IFN0cmluZyYgZnJh
bWVJZCwgSlNDOjpFeGVjU3RhdGUqLCBTZWN1cml0eU9yaWdpbiosIGJvb2wgaXNQYWdlQ29udGV4
dCk7CiAKICAgICBQYWdlKiBtX2luc3BlY3RlZFBhZ2U7CiAgICAgSW5zcGVjdG9yUGFnZUFnZW50
KiBtX3BhZ2VBZ2VudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9TY3JpcHRBcmd1
bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9TY3JpcHRB
cmd1bWVudHMuY3BwCShyZXZpc2lvbiAxNTU3MzApCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvU2NyaXB0QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDEyIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IFNj
cmlwdEFyZ3VtZW50czo6Y3JlYXRlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgVmVjdG9yPFNj
cmlwdFZhbHVlPiYgYXJndW1lbnRzKQorUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IFNjcmlw
dEFyZ3VtZW50czo6Y3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSwgVmVjdG9yPFNj
cmlwdFZhbHVlPiYgYXJndW1lbnRzKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2NyaXB0
QXJndW1lbnRzKHNjcmlwdFN0YXRlLCBhcmd1bWVudHMpKTsKIH0KIAotU2NyaXB0QXJndW1lbnRz
OjpTY3JpcHRBcmd1bWVudHMoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBWZWN0b3I8U2NyaXB0
VmFsdWU+JiBhcmd1bWVudHMpCitTY3JpcHRBcmd1bWVudHM6OlNjcmlwdEFyZ3VtZW50cyhKU0M6
OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIFZlY3RvcjxTY3JpcHRWYWx1ZT4mIGFyZ3VtZW50cykK
ICAgICA6IG1fZ2xvYmFsT2JqZWN0KHNjcmlwdFN0YXRlLT52bSgpLCBzY3JpcHRTdGF0ZS0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKQogewogICAgIG1fYXJndW1lbnRzLnN3YXAoYXJndW1lbnRzKTsK
QEAgLTU2LDcgKzU2LDcgQEAgY29uc3QgU2NyaXB0VmFsdWUgJlNjcmlwdEFyZ3VtZW50czo6YXJn
dQogICAgIHJldHVybiBtX2FyZ3VtZW50c1tpbmRleF07CiB9CiAKLVNjcmlwdFN0YXRlKiBTY3Jp
cHRBcmd1bWVudHM6Omdsb2JhbFN0YXRlKCkgY29uc3QKK0pTQzo6RXhlY1N0YXRlKiBTY3JpcHRB
cmd1bWVudHM6Omdsb2JhbFN0YXRlKCkgY29uc3QKIHsKICAgICBpZiAobV9nbG9iYWxPYmplY3Qp
CiAgICAgICAgIHJldHVybiBjb25zdF9jYXN0PEpTQzo6SlNHbG9iYWxPYmplY3QqPihtX2dsb2Jh
bE9iamVjdC5nZXQoKSktPmdsb2JhbEV4ZWMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9TY3JpcHRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvU2NyaXB0QXJndW1lbnRzLmgJKHJldmlzaW9uIDE1NTczMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9TY3JpcHRBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMjUg
KzQ0LDI0IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXR5cGVkZWYgSlNDOjpFeGVjU3RhdGUgU2NyaXB0U3RhdGU7CiBjbGFzcyBTY3JpcHRWYWx1ZTsK
IAogY2xhc3MgU2NyaXB0QXJndW1lbnRzIDogcHVibGljIFJlZkNvdW50ZWQ8U2NyaXB0QXJndW1l
bnRzPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBj
cmVhdGUoU2NyaXB0U3RhdGUqLCBWZWN0b3I8U2NyaXB0VmFsdWU+JiBhcmd1bWVudHMpOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gY3JlYXRlKEpTQzo6RXhlY1N0YXRl
KiwgVmVjdG9yPFNjcmlwdFZhbHVlPiYgYXJndW1lbnRzKTsKIAogICAgIH5TY3JpcHRBcmd1bWVu
dHMoKTsKIAogICAgIGNvbnN0IFNjcmlwdFZhbHVlJiBhcmd1bWVudEF0KHNpemVfdCkgY29uc3Q7
CiAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50cy5z
aXplKCk7IH0KIAotICAgIFNjcmlwdFN0YXRlKiBnbG9iYWxTdGF0ZSgpIGNvbnN0OworICAgIEpT
Qzo6RXhlY1N0YXRlKiBnbG9iYWxTdGF0ZSgpIGNvbnN0OwogCiAgICAgYm9vbCBnZXRGaXJzdEFy
Z3VtZW50QXNTdHJpbmcoV1RGOjpTdHJpbmcmIHJlc3VsdCwgYm9vbCBjaGVja0Zvck51bGxPclVu
ZGVmaW5lZCA9IGZhbHNlKTsKICAgICBib29sIGlzRXF1YWwoU2NyaXB0QXJndW1lbnRzKikgY29u
c3Q7CiAKIHByaXZhdGU6Ci0gICAgU2NyaXB0QXJndW1lbnRzKFNjcmlwdFN0YXRlKiwgVmVjdG9y
PFNjcmlwdFZhbHVlPiYgYXJndW1lbnRzKTsKKyAgICBTY3JpcHRBcmd1bWVudHMoSlNDOjpFeGVj
U3RhdGUqLCBWZWN0b3I8U2NyaXB0VmFsdWU+JiBhcmd1bWVudHMpOwogCiAgICAgSlNDOjpTdHJv
bmc8SlNDOjpKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CiAgICAgVmVjdG9yPFNjcmlw
dFZhbHVlPiBtX2FyZ3VtZW50czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9TY3Jp
cHREZWJ1Z0xpc3RlbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L1NjcmlwdERlYnVnTGlzdGVuZXIuaAkocmV2aXNpb24gMTU1NzMwKQorKysgU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnTGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjYs
NyArNjYsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkUGFyc2VTb3VyY2UoY29u
c3QgU3RyaW5nJiBzY3JpcHRJZCwgY29uc3QgU2NyaXB0JikgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBmYWlsZWRUb1BhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGRh
dGEsIGludCBmaXJzdExpbmUsIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNz
YWdlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFBhdXNlKFNjcmlwdFN0YXRlKiwgY29uc3Qg
U2NyaXB0VmFsdWUmIGNhbGxGcmFtZXMsIGNvbnN0IFNjcmlwdFZhbHVlJiBleGNlcHRpb24pID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUGF1c2UoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTY3Jp
cHRWYWx1ZSYgY2FsbEZyYW1lcywgY29uc3QgU2NyaXB0VmFsdWUmIGV4Y2VwdGlvbikgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBkaWRDb250aW51ZSgpID0gMDsKIH07CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAJKHJldmlzaW9u
IDE1NTczMCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlckFnZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDcgKzEzMCw3IEBAIEluamVjdGVkU2NyaXB0IFdv
cmtlckRlYnVnZ2VyQWdlbnQ6OmluamUKICAgICAgICAgKmVycm9yID0gIkV4ZWN1dGlvbiBjb250
ZXh0IGlkIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHdvcmtlcnMgYXMgdGhlcmUgaXMgb25seSBvbmUg
ZXhlY3V0aW9uIGNvbnRleHQuIjsKICAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0KCk7CiAg
ICAgfQotICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IHNjcmlwdFN0YXRlRnJvbVdvcmtl
ckdsb2JhbFNjb3BlKG1faW5zcGVjdGVkV29ya2VyR2xvYmFsU2NvcGUpOworICAgIEpTQzo6RXhl
Y1N0YXRlKiBzY3JpcHRTdGF0ZSA9IGV4ZWNTdGF0ZUZyb21Xb3JrZXJHbG9iYWxTY29wZShtX2lu
c3BlY3RlZFdvcmtlckdsb2JhbFNjb3BlKTsKICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyKCktPmluamVjdGVkU2NyaXB0Rm9yKHNjcmlwdFN0YXRlKTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5jcHAJKHJldmlzaW9u
IDE1NTczMCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJSdW50aW1lQWdlbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIEluamVjdGVkU2NyaXB0IFdvcmtl
clJ1bnRpbWVBZ2VudDo6aW5qZWMKICAgICAgICAgKmVycm9yID0gIkV4ZWN1dGlvbiBjb250ZXh0
IGlkIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHdvcmtlcnMgYXMgdGhlcmUgaXMgb25seSBvbmUgZXhl
Y3V0aW9uIGNvbnRleHQuIjsKICAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0KCk7CiAgICAg
fQotICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IHNjcmlwdFN0YXRlRnJvbVdvcmtlckds
b2JhbFNjb3BlKG1fd29ya2VyR2xvYmFsU2NvcGUpOworICAgIEpTQzo6RXhlY1N0YXRlKiBzY3Jp
cHRTdGF0ZSA9IGV4ZWNTdGF0ZUZyb21Xb3JrZXJHbG9iYWxTY29wZShtX3dvcmtlckdsb2JhbFNj
b3BlKTsKICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCktPmluamVjdGVkU2NyaXB0
Rm9yKHNjcmlwdFN0YXRlKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Db25zb2xl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnNvbGUuY3BwCShyZXZp
c2lvbiAxNTU3MzApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnNvbGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIENvbnNvbGU6On5Db25zb2xlKCkKIHsKIH0KIAotc3Rh
dGljIHZvaWQgaW50ZXJuYWxBZGRNZXNzYWdlKFBhZ2UqIHBhZ2UsIE1lc3NhZ2VUeXBlIHR5cGUs
IE1lc3NhZ2VMZXZlbCBsZXZlbCwgU2NyaXB0U3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRyPFNjcmlw
dEFyZ3VtZW50cz4gcHJwQXJndW1lbnRzLCBib29sIGFjY2VwdE5vQXJndW1lbnRzID0gZmFsc2Us
IGJvb2wgcHJpbnRUcmFjZSA9IGZhbHNlKQorc3RhdGljIHZvaWQgaW50ZXJuYWxBZGRNZXNzYWdl
KFBhZ2UqIHBhZ2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gcHJwQXJndW1lbnRz
LCBib29sIGFjY2VwdE5vQXJndW1lbnRzID0gZmFsc2UsIGJvb2wgcHJpbnRUcmFjZSA9IGZhbHNl
KQogewogICAgIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cyA9IHBycEFyZ3VtZW50
czsKIApAQCAtMTExLDU3ICsxMTEsNTcgQEAgc3RhdGljIHZvaWQgaW50ZXJuYWxBZGRNZXNzYWdl
KFBhZ2UqIHBhZwogICAgIH0KIH0KIAotdm9pZCBDb25zb2xlOjpkZWJ1ZyhTY3JpcHRTdGF0ZSog
c3RhdGUsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMpCit2b2lkIENvbnNv
bGU6OmRlYnVnKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVu
dHM+IGFyZ3VtZW50cykKIHsKICAgICBpbnRlcm5hbEFkZE1lc3NhZ2UocGFnZSgpLCBMb2dNZXNz
YWdlVHlwZSwgRGVidWdNZXNzYWdlTGV2ZWwsIHN0YXRlLCBhcmd1bWVudHMpOwogfQogCi12b2lk
IENvbnNvbGU6OmVycm9yKFNjcmlwdFN0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1
bWVudHM+IGFyZ3VtZW50cykKK3ZvaWQgQ29uc29sZTo6ZXJyb3IoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQogewogICAgIGludGVy
bmFsQWRkTWVzc2FnZShwYWdlKCksIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwg
c3RhdGUsIGFyZ3VtZW50cyk7CiB9CiAKLXZvaWQgQ29uc29sZTo6aW5mbyhTY3JpcHRTdGF0ZSog
c3RhdGUsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMpCit2b2lkIENvbnNv
bGU6OmluZm8oSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50
cz4gYXJndW1lbnRzKQogewogICAgIGxvZyhzdGF0ZSwgYXJndW1lbnRzKTsKIH0KIAotdm9pZCBD
b25zb2xlOjpsb2coU2NyaXB0U3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50
cz4gYXJndW1lbnRzKQordm9pZCBDb25zb2xlOjpsb2coSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBQ
YXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQogewogICAgIGludGVybmFsQWRk
TWVzc2FnZShwYWdlKCksIExvZ01lc3NhZ2VUeXBlLCBMb2dNZXNzYWdlTGV2ZWwsIHN0YXRlLCBh
cmd1bWVudHMpOwogfQogCi12b2lkIENvbnNvbGU6Ondhcm4oU2NyaXB0U3RhdGUqIHN0YXRlLCBQ
YXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQordm9pZCBDb25zb2xlOjp3YXJu
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3Vt
ZW50cykKIHsKICAgICBpbnRlcm5hbEFkZE1lc3NhZ2UocGFnZSgpLCBMb2dNZXNzYWdlVHlwZSwg
V2FybmluZ01lc3NhZ2VMZXZlbCwgc3RhdGUsIGFyZ3VtZW50cyk7CiB9CiAKLXZvaWQgQ29uc29s
ZTo6ZGlyKFNjcmlwdFN0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFy
Z3VtZW50cykKK3ZvaWQgQ29uc29sZTo6ZGlyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUGFzc1Jl
ZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKIHsKICAgICBpbnRlcm5hbEFkZE1lc3Nh
Z2UocGFnZSgpLCBEaXJNZXNzYWdlVHlwZSwgTG9nTWVzc2FnZUxldmVsLCBzdGF0ZSwgYXJndW1l
bnRzKTsKIH0KIAotdm9pZCBDb25zb2xlOjpkaXJ4bWwoU2NyaXB0U3RhdGUqIHN0YXRlLCBQYXNz
UmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQordm9pZCBDb25zb2xlOjpkaXJ4bWwo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1l
bnRzKQogewogICAgIGludGVybmFsQWRkTWVzc2FnZShwYWdlKCksIERpclhNTE1lc3NhZ2VUeXBl
LCBMb2dNZXNzYWdlTGV2ZWwsIHN0YXRlLCBhcmd1bWVudHMpOwogfQogCi12b2lkIENvbnNvbGU6
OnRhYmxlKFNjcmlwdFN0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFy
Z3VtZW50cykKK3ZvaWQgQ29uc29sZTo6dGFibGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBQYXNz
UmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQogewogICAgIGludGVybmFsQWRkTWVz
c2FnZShwYWdlKCksIFRhYmxlTWVzc2FnZVR5cGUsIExvZ01lc3NhZ2VMZXZlbCwgc3RhdGUsIGFy
Z3VtZW50cyk7CiB9CiAKLXZvaWQgQ29uc29sZTo6Y2xlYXIoU2NyaXB0U3RhdGUqIHN0YXRlLCBQ
YXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQordm9pZCBDb25zb2xlOjpjbGVh
cihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1
bWVudHMpCiB7CiAgICAgaW50ZXJuYWxBZGRNZXNzYWdlKHBhZ2UoKSwgQ2xlYXJNZXNzYWdlVHlw
ZSwgTG9nTWVzc2FnZUxldmVsLCBzdGF0ZSwgYXJndW1lbnRzLCB0cnVlKTsKIH0KIAotdm9pZCBD
b25zb2xlOjp0cmFjZShTY3JpcHRTdGF0ZSogc3RhdGUsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1l
bnRzPiBhcmd1bWVudHMpCit2b2lkIENvbnNvbGU6OnRyYWNlKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKIHsKICAgICBpbnRlcm5h
bEFkZE1lc3NhZ2UocGFnZSgpLCBUcmFjZU1lc3NhZ2VUeXBlLCBMb2dNZXNzYWdlTGV2ZWwsIHN0
YXRlLCBhcmd1bWVudHMsIHRydWUsIHRydWUpOwogfQogCi12b2lkIENvbnNvbGU6OmFzc2VydENv
bmRpdGlvbihTY3JpcHRTdGF0ZSogc3RhdGUsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBh
cmd1bWVudHMsIGJvb2wgY29uZGl0aW9uKQordm9pZCBDb25zb2xlOjphc3NlcnRDb25kaXRpb24o
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1l
bnRzLCBib29sIGNvbmRpdGlvbikKIHsKICAgICBpZiAoY29uZGl0aW9uKQogICAgICAgICByZXR1
cm47CkBAIC0xNjksMTQgKzE2OSwxNCBAQCB2b2lkIENvbnNvbGU6OmFzc2VydENvbmRpdGlvbihT
Y3JpcHRTdGF0CiAgICAgaW50ZXJuYWxBZGRNZXNzYWdlKHBhZ2UoKSwgQXNzZXJ0TWVzc2FnZVR5
cGUsIEVycm9yTWVzc2FnZUxldmVsLCBzdGF0ZSwgYXJndW1lbnRzLCB0cnVlKTsKIH0KIAotdm9p
ZCBDb25zb2xlOjpjb3VudChTY3JpcHRTdGF0ZSogc3RhdGUsIFBhc3NSZWZQdHI8U2NyaXB0QXJn
dW1lbnRzPiBhcmd1bWVudHMpCit2b2lkIENvbnNvbGU6OmNvdW50KEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKIHsKICAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVDb3VudChwYWdlKCksIHN0YXRlLCBhcmd1bWVu
dHMpOwogfQogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAKLXZvaWQgQ29uc29s
ZTo6cHJvZmlsZShjb25zdCBTdHJpbmcmIHRpdGxlLCBTY3JpcHRTdGF0ZSogc3RhdGUpCit2b2lk
IENvbnNvbGU6OnByb2ZpbGUoY29uc3QgU3RyaW5nJiB0aXRsZSwgSlNDOjpFeGVjU3RhdGUqIHN0
YXRlKQogewogICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQpA
QCAtMTk3LDcgKzE5Nyw3IEBAIHZvaWQgQ29uc29sZTo6cHJvZmlsZShjb25zdCBTdHJpbmcmIHRp
dGwKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZFN0YXJ0UHJvZmlsaW5nTWVzc2Fn
ZVRvQ29uc29sZShwYWdlLCByZXNvbHZlZFRpdGxlLCBsYXN0Q2FsbGVyLmxpbmVOdW1iZXIoKSwg
bGFzdENhbGxlci5jb2x1bW5OdW1iZXIoKSwgbGFzdENhbGxlci5zb3VyY2VVUkwoKSk7CiB9CiAK
LXZvaWQgQ29uc29sZTo6cHJvZmlsZUVuZChjb25zdCBTdHJpbmcmIHRpdGxlLCBTY3JpcHRTdGF0
ZSogc3RhdGUpCit2b2lkIENvbnNvbGU6OnByb2ZpbGVFbmQoY29uc3QgU3RyaW5nJiB0aXRsZSwg
SlNDOjpFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7
CiAgICAgaWYgKCFwYWdlKQpAQCAtMjIyLDcgKzIyMiw3IEBAIHZvaWQgQ29uc29sZTo6dGltZShj
b25zdCBTdHJpbmcmIHRpdGxlKQogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RhcnRD
b25zb2xlVGltaW5nKG1fZnJhbWUsIHRpdGxlKTsKIH0KIAotdm9pZCBDb25zb2xlOjp0aW1lRW5k
KFNjcmlwdFN0YXRlKiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB0aXRsZSkKK3ZvaWQgQ29uc29sZTo6
dGltZUVuZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7CiAg
ICAgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFj
a0ZvckNvbnNvbGUoc3RhdGUpKTsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BD
b25zb2xlVGltaW5nKG1fZnJhbWUsIHRpdGxlLCBjYWxsU3RhY2sucmVsZWFzZSgpKTsKQEAgLTIz
MywxMiArMjMzLDEyIEBAIHZvaWQgQ29uc29sZTo6dGltZVN0YW1wKFBhc3NSZWZQdHI8U2NyaXAK
ICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVUaW1lU3RhbXAobV9mcmFtZSwg
YXJndW1lbnRzKTsKIH0KIAotdm9pZCBDb25zb2xlOjpncm91cChTY3JpcHRTdGF0ZSogc3RhdGUs
IFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMpCit2b2lkIENvbnNvbGU6Omdy
b3VwKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFy
Z3VtZW50cykKIHsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0Nv
bnNvbGUocGFnZSgpLCBDb25zb2xlQVBJTWVzc2FnZVNvdXJjZSwgU3RhcnRHcm91cE1lc3NhZ2VU
eXBlLCBMb2dNZXNzYWdlTGV2ZWwsIFN0cmluZygpLCBzdGF0ZSwgYXJndW1lbnRzKTsKIH0KIAot
dm9pZCBDb25zb2xlOjpncm91cENvbGxhcHNlZChTY3JpcHRTdGF0ZSogc3RhdGUsIFBhc3NSZWZQ
dHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMpCit2b2lkIENvbnNvbGU6Omdyb3VwQ29sbGFw
c2VkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFy
Z3VtZW50cykKIHsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0Nv
bnNvbGUocGFnZSgpLCBDb25zb2xlQVBJTWVzc2FnZVNvdXJjZSwgU3RhcnRHcm91cENvbGxhcHNl
ZE1lc3NhZ2VUeXBlLCBMb2dNZXNzYWdlTGV2ZWwsIFN0cmluZygpLCBzdGF0ZSwgYXJndW1lbnRz
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29uc29sZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29uc29sZS5oCShyZXZpc2lvbiAxNTU3MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0NvbnNvbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsMjggKzUyLDI4
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb25zb2xlPiBjcmVhdGUoRnJhbWUq
IGZyYW1lKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ29uc29sZShmcmFtZSkpOyB9CiAgICAgdmly
dHVhbCB+Q29uc29sZSgpOwogCi0gICAgdm9pZCBkZWJ1ZyhTY3JpcHRTdGF0ZSosIFBhc3NSZWZQ
dHI8U2NyaXB0QXJndW1lbnRzPik7Ci0gICAgdm9pZCBlcnJvcihTY3JpcHRTdGF0ZSosIFBhc3NS
ZWZQdHI8U2NyaXB0QXJndW1lbnRzPik7Ci0gICAgdm9pZCBpbmZvKFNjcmlwdFN0YXRlKiwgUGFz
c1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+KTsKLSAgICB2b2lkIGxvZyhTY3JpcHRTdGF0ZSosIFBh
c3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPik7Ci0gICAgdm9pZCBjbGVhcihTY3JpcHRTdGF0ZSos
IFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPik7Ci0gICAgdm9pZCB3YXJuKFNjcmlwdFN0YXRl
KiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+KTsKLSAgICB2b2lkIGRpcihTY3JpcHRTdGF0
ZSosIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPik7Ci0gICAgdm9pZCBkaXJ4bWwoU2NyaXB0
U3RhdGUqLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4pOwotICAgIHZvaWQgdGFibGUoU2Ny
aXB0U3RhdGUqLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4pOwotICAgIHZvaWQgdHJhY2Uo
U2NyaXB0U3RhdGUqLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4pOwotICAgIHZvaWQgYXNz
ZXJ0Q29uZGl0aW9uKFNjcmlwdFN0YXRlKiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+LCBi
b29sIGNvbmRpdGlvbik7Ci0gICAgdm9pZCBjb3VudChTY3JpcHRTdGF0ZSosIFBhc3NSZWZQdHI8
U2NyaXB0QXJndW1lbnRzPik7CisgICAgdm9pZCBkZWJ1ZyhKU0M6OkV4ZWNTdGF0ZSosIFBhc3NS
ZWZQdHI8U2NyaXB0QXJndW1lbnRzPik7CisgICAgdm9pZCBlcnJvcihKU0M6OkV4ZWNTdGF0ZSos
IFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPik7CisgICAgdm9pZCBpbmZvKEpTQzo6RXhlY1N0
YXRlKiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+KTsKKyAgICB2b2lkIGxvZyhKU0M6OkV4
ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPik7CisgICAgdm9pZCBjbGVhcihK
U0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPik7CisgICAgdm9pZCB3
YXJuKEpTQzo6RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+KTsKKyAgICB2
b2lkIGRpcihKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPik7Cisg
ICAgdm9pZCBkaXJ4bWwoSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50
cz4pOworICAgIHZvaWQgdGFibGUoSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFNjcmlwdEFy
Z3VtZW50cz4pOworICAgIHZvaWQgdHJhY2UoSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFNj
cmlwdEFyZ3VtZW50cz4pOworICAgIHZvaWQgYXNzZXJ0Q29uZGl0aW9uKEpTQzo6RXhlY1N0YXRl
KiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+LCBib29sIGNvbmRpdGlvbik7CisgICAgdm9p
ZCBjb3VudChKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPik7CiAj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgY29uc3QgUHJvZmlsZXNBcnJheSYg
cHJvZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb2ZpbGVzOyB9Ci0gICAgdm9pZCBwcm9maWxl
KGNvbnN0IFN0cmluZyYsIFNjcmlwdFN0YXRlKik7Ci0gICAgdm9pZCBwcm9maWxlRW5kKGNvbnN0
IFN0cmluZyYsIFNjcmlwdFN0YXRlKik7CisgICAgdm9pZCBwcm9maWxlKGNvbnN0IFN0cmluZyYs
IEpTQzo6RXhlY1N0YXRlKik7CisgICAgdm9pZCBwcm9maWxlRW5kKGNvbnN0IFN0cmluZyYsIEpT
Qzo6RXhlY1N0YXRlKik7CiAjZW5kaWYKICAgICB2b2lkIHRpbWUoY29uc3QgU3RyaW5nJik7Ci0g
ICAgdm9pZCB0aW1lRW5kKFNjcmlwdFN0YXRlKiwgY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCB0
aW1lRW5kKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCB0aW1lU3Rh
bXAoUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+KTsKLSAgICB2b2lkIGdyb3VwKFNjcmlwdFN0
YXRlKiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+KTsKLSAgICB2b2lkIGdyb3VwQ29sbGFw
c2VkKFNjcmlwdFN0YXRlKiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+KTsKKyAgICB2b2lk
IGdyb3VwKEpTQzo6RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+KTsKKyAg
ICB2b2lkIGdyb3VwQ29sbGFwc2VkKEpTQzo6RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTY3JpcHRB
cmd1bWVudHM+KTsKICAgICB2b2lkIGdyb3VwRW5kKCk7CiAKIHByaXZhdGU6CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCShyZXZpc2lvbiAx
NTU3MzApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgzNyw3ICs4MzcsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBhbGxv
d0lubGluZUV2ZW50SGFuZGxlcnMoY29uc3QgU3RyaW5nJiBjb250ZXh0VVJMLCBjb25zdCBXVEY6
Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5lLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9y
dGluZ1N0YXR1cykgY29uc3Q7CiAgICAgYm9vbCBhbGxvd0lubGluZVNjcmlwdChjb25zdCBTdHJp
bmcmIGNvbnRleHRVUkwsIGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYgY29udGV4dExpbmUsIENv
bnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzKSBjb25zdDsKICAgICBib29sIGFs
bG93SW5saW5lU3R5bGUoY29uc3QgU3RyaW5nJiBjb250ZXh0VVJMLCBjb25zdCBXVEY6Ok9yZGlu
YWxOdW1iZXImIGNvbnRleHRMaW5lLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0
YXR1cykgY29uc3Q7Ci0gICAgYm9vbCBhbGxvd0V2YWwoU2NyaXB0U3RhdGUqLCBDb250ZW50U2Vj
dXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cykgY29uc3Q7CisgICAgYm9vbCBhbGxvd0V2YWwo
SlNDOjpFeGVjU3RhdGUqLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cykg
Y29uc3Q7CiAgICAgYm9vbCBhbGxvd1NjcmlwdE5vbmNlKGNvbnN0IFN0cmluZyYgbm9uY2UsIGNv
bnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0
TGluZSwgY29uc3QgS1VSTCYpIGNvbnN0OwogICAgIGJvb2wgYWxsb3dQbHVnaW5UeXBlKGNvbnN0
IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiB0eXBlQXR0cmlidXRlLCBjb25zdCBLVVJMJiwg
Q29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMpIGNvbnN0OwogCkBAIC04NzUs
NyArODc1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldENTUERpcmVjdGl2ZShjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIE93blB0cjxDU1BEaXJlY3RpdmVUeXBlPiYp
OwogCiAgICAgU291cmNlTGlzdERpcmVjdGl2ZSogb3BlcmF0aXZlRGlyZWN0aXZlKFNvdXJjZUxp
c3REaXJlY3RpdmUqKSBjb25zdDsKLSAgICB2b2lkIHJlcG9ydFZpb2xhdGlvbihjb25zdCBTdHJp
bmcmIGRpcmVjdGl2ZVRleHQsIGNvbnN0IFN0cmluZyYgZWZmZWN0aXZlRGlyZWN0aXZlLCBjb25z
dCBTdHJpbmcmIGNvbnNvbGVNZXNzYWdlLCBjb25zdCBLVVJMJiBibG9ja2VkVVJMID0gS1VSTCgp
LCBjb25zdCBTdHJpbmcmIGNvbnRleHRVUkwgPSBTdHJpbmcoKSwgY29uc3QgV1RGOjpPcmRpbmFs
TnVtYmVyJiBjb250ZXh0TGluZSA9IFdURjo6T3JkaW5hbE51bWJlcjo6YmVmb3JlRmlyc3QoKSwg
U2NyaXB0U3RhdGUqID0gMCkgY29uc3Q7CisgICAgdm9pZCByZXBvcnRWaW9sYXRpb24oY29uc3Qg
U3RyaW5nJiBkaXJlY3RpdmVUZXh0LCBjb25zdCBTdHJpbmcmIGVmZmVjdGl2ZURpcmVjdGl2ZSwg
Y29uc3QgU3RyaW5nJiBjb25zb2xlTWVzc2FnZSwgY29uc3QgS1VSTCYgYmxvY2tlZFVSTCA9IEtV
UkwoKSwgY29uc3QgU3RyaW5nJiBjb250ZXh0VVJMID0gU3RyaW5nKCksIGNvbnN0IFdURjo6T3Jk
aW5hbE51bWJlciYgY29udGV4dExpbmUgPSBXVEY6Ok9yZGluYWxOdW1iZXI6OmJlZm9yZUZpcnN0
KCksIEpTQzo6RXhlY1N0YXRlKiA9IDApIGNvbnN0OwogCiAgICAgYm9vbCBjaGVja0V2YWwoU291
cmNlTGlzdERpcmVjdGl2ZSopIGNvbnN0OwogICAgIGJvb2wgY2hlY2tJbmxpbmUoU291cmNlTGlz
dERpcmVjdGl2ZSopIGNvbnN0OwpAQCAtODg1LDcgKzg4NSw3IEBAIHByaXZhdGU6CiAKICAgICB2
b2lkIHNldEV2YWxEaXNhYmxlZEVycm9yTWVzc2FnZShjb25zdCBTdHJpbmcmIGVycm9yTWVzc2Fn
ZSkgeyBtX2V2YWxEaXNhYmxlZEVycm9yTWVzc2FnZSA9IGVycm9yTWVzc2FnZTsgfQogCi0gICAg
Ym9vbCBjaGVja0V2YWxBbmRSZXBvcnRWaW9sYXRpb24oU291cmNlTGlzdERpcmVjdGl2ZSosIGNv
bnN0IFN0cmluZyYgY29uc29sZU1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCA9IFN0
cmluZygpLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5lID0gV1RGOjpPcmRp
bmFsTnVtYmVyOjpiZWZvcmVGaXJzdCgpLCBTY3JpcHRTdGF0ZSogPSAwKSBjb25zdDsKKyAgICBi
b29sIGNoZWNrRXZhbEFuZFJlcG9ydFZpb2xhdGlvbihTb3VyY2VMaXN0RGlyZWN0aXZlKiwgY29u
c3QgU3RyaW5nJiBjb25zb2xlTWVzc2FnZSwgY29uc3QgU3RyaW5nJiBjb250ZXh0VVJMID0gU3Ry
aW5nKCksIGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYgY29udGV4dExpbmUgPSBXVEY6Ok9yZGlu
YWxOdW1iZXI6OmJlZm9yZUZpcnN0KCksIEpTQzo6RXhlY1N0YXRlKiA9IDApIGNvbnN0OwogICAg
IGJvb2wgY2hlY2tJbmxpbmVBbmRSZXBvcnRWaW9sYXRpb24oU291cmNlTGlzdERpcmVjdGl2ZSos
IGNvbnN0IFN0cmluZyYgY29uc29sZU1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCwg
Y29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgYm9vbCBpc1NjcmlwdCkgY29u
c3Q7CiAgICAgYm9vbCBjaGVja05vbmNlQW5kUmVwb3J0VmlvbGF0aW9uKE5vbmNlRGlyZWN0aXZl
KiwgY29uc3QgU3RyaW5nJiBub25jZSwgY29uc3QgU3RyaW5nJiBjb25zb2xlTWVzc2FnZSwgY29u
c3QgU3RyaW5nJiBjb250ZXh0VVJMLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRM
aW5lKSBjb25zdDsKIApAQCAtOTQ4LDcgKzk0OCw3IEBAIFBhc3NPd25QdHI8Q1NQRGlyZWN0aXZl
TGlzdD4gQ1NQRGlyZWN0aXYKICAgICByZXR1cm4gZGlyZWN0aXZlcy5yZWxlYXNlKCk7CiB9CiAK
LXZvaWQgQ1NQRGlyZWN0aXZlTGlzdDo6cmVwb3J0VmlvbGF0aW9uKGNvbnN0IFN0cmluZyYgZGly
ZWN0aXZlVGV4dCwgY29uc3QgU3RyaW5nJiBlZmZlY3RpdmVEaXJlY3RpdmUsIGNvbnN0IFN0cmlu
ZyYgY29uc29sZU1lc3NhZ2UsIGNvbnN0IEtVUkwmIGJsb2NrZWRVUkwsIGNvbnN0IFN0cmluZyYg
Y29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgU2NyaXB0
U3RhdGUqIHN0YXRlKSBjb25zdAordm9pZCBDU1BEaXJlY3RpdmVMaXN0OjpyZXBvcnRWaW9sYXRp
b24oY29uc3QgU3RyaW5nJiBkaXJlY3RpdmVUZXh0LCBjb25zdCBTdHJpbmcmIGVmZmVjdGl2ZURp
cmVjdGl2ZSwgY29uc3QgU3RyaW5nJiBjb25zb2xlTWVzc2FnZSwgY29uc3QgS1VSTCYgYmxvY2tl
ZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZXh0VVJMLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXIm
IGNvbnRleHRMaW5lLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpIGNvbnN0CiB7CiAgICAgU3RyaW5n
IG1lc3NhZ2UgPSBtX3JlcG9ydE9ubHkgPyAiW1JlcG9ydCBPbmx5XSAiICsgY29uc29sZU1lc3Nh
Z2UgOiBjb25zb2xlTWVzc2FnZTsKICAgICBtX3BvbGljeS0+cmVwb3J0VmlvbGF0aW9uKGRpcmVj
dGl2ZVRleHQsIGVmZmVjdGl2ZURpcmVjdGl2ZSwgbWVzc2FnZSwgYmxvY2tlZFVSTCwgbV9yZXBv
cnRVUklzLCBtX2hlYWRlciwgY29udGV4dFVSTCwgY29udGV4dExpbmUsIHN0YXRlKTsKQEAgLTk4
OCw3ICs5ODgsNyBAQCBTb3VyY2VMaXN0RGlyZWN0aXZlKiBDU1BEaXJlY3RpdmVMaXN0OjpvCiAg
ICAgcmV0dXJuIGRpcmVjdGl2ZSA/IGRpcmVjdGl2ZSA6IG1fZGVmYXVsdFNyYy5nZXQoKTsKIH0K
IAotYm9vbCBDU1BEaXJlY3RpdmVMaXN0OjpjaGVja0V2YWxBbmRSZXBvcnRWaW9sYXRpb24oU291
cmNlTGlzdERpcmVjdGl2ZSogZGlyZWN0aXZlLCBjb25zdCBTdHJpbmcmIGNvbnNvbGVNZXNzYWdl
LCBjb25zdCBTdHJpbmcmIGNvbnRleHRVUkwsIGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYgY29u
dGV4dExpbmUsIFNjcmlwdFN0YXRlKiBzdGF0ZSkgY29uc3QKK2Jvb2wgQ1NQRGlyZWN0aXZlTGlz
dDo6Y2hlY2tFdmFsQW5kUmVwb3J0VmlvbGF0aW9uKFNvdXJjZUxpc3REaXJlY3RpdmUqIGRpcmVj
dGl2ZSwgY29uc3QgU3RyaW5nJiBjb25zb2xlTWVzc2FnZSwgY29uc3QgU3RyaW5nJiBjb250ZXh0
VVJMLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5lLCBKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUpIGNvbnN0CiB7CiAgICAgaWYgKGNoZWNrRXZhbChkaXJlY3RpdmUpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTExMjAsNyArMTEyMCw3IEBAIGJvb2wgQ1NQRGlyZWN0aXZlTGlz
dDo6YWxsb3dJbmxpbmVTdHlsZSgKICAgICAgICAgY2hlY2tJbmxpbmUob3BlcmF0aXZlRGlyZWN0
aXZlKG1fc3R5bGVTcmMuZ2V0KCkpKTsKIH0KIAotYm9vbCBDU1BEaXJlY3RpdmVMaXN0OjphbGxv
d0V2YWwoU2NyaXB0U3RhdGUqIHN0YXRlLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGlu
Z1N0YXR1cyByZXBvcnRpbmdTdGF0dXMpIGNvbnN0Citib29sIENTUERpcmVjdGl2ZUxpc3Q6OmFs
bG93RXZhbChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVw
b3J0aW5nU3RhdHVzIHJlcG9ydGluZ1N0YXR1cykgY29uc3QKIHsKICAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFN0cmluZywgY29uc29sZU1lc3NhZ2UsIChBU0NJSUxpdGVyYWwoIlJlZnVzZWQgdG8g
ZXZhbHVhdGUgc2NyaXB0IGJlY2F1c2UgaXQgdmlvbGF0ZXMgdGhlIGZvbGxvd2luZyBDb250ZW50
IFNlY3VyaXR5IFBvbGljeSBkaXJlY3RpdmU6ICIpKSk7CiAgICAgcmV0dXJuIHJlcG9ydGluZ1N0
YXR1cyA9PSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlNlbmRSZXBvcnQgPwpAQCAtMTUxNiw4ICsx
NTE2LDggQEAgYm9vbCBpc0FsbG93ZWRCeUFsbChjb25zdCBDU1BEaXJlY3RpdmVMaQogICAgIHJl
dHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTxib29sIChDU1BEaXJlY3RpdmVMaXN0OjoqYWxsb3dl
ZCkoU2NyaXB0U3RhdGUqIHN0YXRlLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0
YXR1cykgY29uc3Q+Ci1ib29sIGlzQWxsb3dlZEJ5QWxsV2l0aFN0YXRlKGNvbnN0IENTUERpcmVj
dGl2ZUxpc3RWZWN0b3ImIHBvbGljaWVzLCBTY3JpcHRTdGF0ZSogc3RhdGUsIENvbnRlbnRTZWN1
cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzIHJlcG9ydGluZ1N0YXR1cykKK3RlbXBsYXRlPGJv
b2wgKENTUERpcmVjdGl2ZUxpc3Q6OiphbGxvd2VkKShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIENv
bnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzKSBjb25zdD4KK2Jvb2wgaXNBbGxv
d2VkQnlBbGxXaXRoU3RhdGUoY29uc3QgQ1NQRGlyZWN0aXZlTGlzdFZlY3RvciYgcG9saWNpZXMs
IEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdT
dGF0dXMgcmVwb3J0aW5nU3RhdHVzKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9s
aWNpZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKCEocG9saWNpZXNbaV0uZ2V0KCktPiph
bGxvd2VkKShzdGF0ZSwgcmVwb3J0aW5nU3RhdHVzKSkKQEAgLTE1ODEsNyArMTU4MSw3IEBAIGJv
b2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd0lubGluZVMKICAgICByZXR1cm4gaXNBbGxv
d2VkQnlBbGxXaXRoQ29udGV4dDwmQ1NQRGlyZWN0aXZlTGlzdDo6YWxsb3dJbmxpbmVTdHlsZT4o
bV9wb2xpY2llcywgY29udGV4dFVSTCwgY29udGV4dExpbmUsIHJlcG9ydGluZ1N0YXR1cyk7CiB9
CiAKLWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd0V2YWwoU2NyaXB0U3RhdGUqIHN0
YXRlLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyByZXBvcnRpbmdTdGF0
dXMpIGNvbnN0Citib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dFdmFsKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMgcmVw
b3J0aW5nU3RhdHVzKSBjb25zdAogewogICAgIHJldHVybiBpc0FsbG93ZWRCeUFsbFdpdGhTdGF0
ZTwmQ1NQRGlyZWN0aXZlTGlzdDo6YWxsb3dFdmFsPihtX3BvbGljaWVzLCBzdGF0ZSwgcmVwb3J0
aW5nU3RhdHVzKTsKIH0KQEAgLTE3MzUsNyArMTczNSw3IEBAIHN0YXRpYyB2b2lkIGdhdGhlclNl
Y3VyaXR5UG9saWN5VmlvbGF0aW8KIH0KICNlbmRpZgogCi12b2lkIENvbnRlbnRTZWN1cml0eVBv
bGljeTo6cmVwb3J0VmlvbGF0aW9uKGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlVGV4dCwgY29uc3Qg
U3RyaW5nJiBlZmZlY3RpdmVEaXJlY3RpdmUsIGNvbnN0IFN0cmluZyYgY29uc29sZU1lc3NhZ2Us
IGNvbnN0IEtVUkwmIGJsb2NrZWRVUkwsIGNvbnN0IFZlY3RvcjxLVVJMPiYgcmVwb3J0VVJJcywg
Y29uc3QgU3RyaW5nJiBoZWFkZXIsIGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RG
OjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgU2NyaXB0U3RhdGUqIHN0YXRlKSBjb25zdAor
dm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OnJlcG9ydFZpb2xhdGlvbihjb25zdCBTdHJpbmcm
IGRpcmVjdGl2ZVRleHQsIGNvbnN0IFN0cmluZyYgZWZmZWN0aXZlRGlyZWN0aXZlLCBjb25zdCBT
dHJpbmcmIGNvbnNvbGVNZXNzYWdlLCBjb25zdCBLVVJMJiBibG9ja2VkVVJMLCBjb25zdCBWZWN0
b3I8S1VSTD4mIHJlcG9ydFVSSXMsIGNvbnN0IFN0cmluZyYgaGVhZGVyLCBjb25zdCBTdHJpbmcm
IGNvbnRleHRVUkwsIGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYgY29udGV4dExpbmUsIEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSkgY29uc3QKIHsKICAgICBsb2dUb0NvbnNvbGUoY29uc29sZU1lc3Nh
Z2UsIGNvbnRleHRVUkwsIGNvbnRleHRMaW5lLCBzdGF0ZSk7CiAKQEAgLTE4OTEsNyArMTg5MSw3
IEBAIHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5OjpyZXBvcnRNaXNzaW4KICAgICBsb2dUb0Nv
bnNvbGUoIlRoZSBDb250ZW50IFNlY3VyaXR5IFBvbGljeSAnIiArIHBvbGljeSArICInIHdhcyBk
ZWxpdmVyZWQgaW4gcmVwb3J0LW9ubHkgbW9kZSwgYnV0IGRvZXMgbm90IHNwZWNpZnkgYSAncmVw
b3J0LXVyaSc7IHRoZSBwb2xpY3kgd2lsbCBoYXZlIG5vIGVmZmVjdC4gUGxlYXNlIGVpdGhlciBh
ZGQgYSAncmVwb3J0LXVyaScgZGlyZWN0aXZlLCBvciBkZWxpdmVyIHRoZSBwb2xpY3kgdmlhIHRo
ZSAnQ29udGVudC1TZWN1cml0eS1Qb2xpY3knIGhlYWRlci4iKTsKIH0KIAotdm9pZCBDb250ZW50
U2VjdXJpdHlQb2xpY3k6OmxvZ1RvQ29uc29sZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0
IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGlu
ZSwgU2NyaXB0U3RhdGUqIHN0YXRlKSBjb25zdAordm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6
OmxvZ1RvQ29uc29sZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgY29udGV4
dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlKSBjb25zdAogewogICAgIC8vIEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8x
MTQzMTc+IENvbnRlbnRTZWN1cml0eVBvbGljeTo6bG9nVG9Db25zb2xlIHNob3VsZCBpbmNsdWRl
IGEgY29sdW1uIG51bWJlcgogICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkQ29uc29s
ZU1lc3NhZ2UoU2VjdXJpdHlNZXNzYWdlU291cmNlLCBFcnJvck1lc3NhZ2VMZXZlbCwgbWVzc2Fn
ZSwgY29udGV4dFVSTCwgY29udGV4dExpbmUub25lQmFzZWRJbnQoKSwgMCwgc3RhdGUpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZW50U2VjdXJpdHlQb2xpY3kuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRlbnRTZWN1cml0eVBvbGljeS5oCShyZXZpc2lv
biAxNTU3MzApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRlbnRTZWN1cml0eVBvbGljeS5o
CSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICBib29sIGFsbG93
SW5saW5lRXZlbnRIYW5kbGVycyhjb25zdCBTdHJpbmcmIGNvbnRleHRVUkwsIGNvbnN0IFdURjo6
T3JkaW5hbE51bWJlciYgY29udGV4dExpbmUsIFJlcG9ydGluZ1N0YXR1cyA9IFNlbmRSZXBvcnQp
IGNvbnN0OwogICAgIGJvb2wgYWxsb3dJbmxpbmVTY3JpcHQoY29uc3QgU3RyaW5nJiBjb250ZXh0
VVJMLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5lLCBSZXBvcnRpbmdTdGF0
dXMgPSBTZW5kUmVwb3J0KSBjb25zdDsKICAgICBib29sIGFsbG93SW5saW5lU3R5bGUoY29uc3Qg
U3RyaW5nJiBjb250ZXh0VVJMLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5l
LCBSZXBvcnRpbmdTdGF0dXMgPSBTZW5kUmVwb3J0KSBjb25zdDsKLSAgICBib29sIGFsbG93RXZh
bChTY3JpcHRTdGF0ZSogPSAwLCBSZXBvcnRpbmdTdGF0dXMgPSBTZW5kUmVwb3J0KSBjb25zdDsK
KyAgICBib29sIGFsbG93RXZhbChKU0M6OkV4ZWNTdGF0ZSogPSAwLCBSZXBvcnRpbmdTdGF0dXMg
PSBTZW5kUmVwb3J0KSBjb25zdDsKICAgICBib29sIGFsbG93U2NyaXB0Tm9uY2UoY29uc3QgU3Ry
aW5nJiBub25jZSwgY29uc3QgU3RyaW5nJiBjb250ZXh0VVJMLCBjb25zdCBXVEY6Ok9yZGluYWxO
dW1iZXImIGNvbnRleHRMaW5lLCBjb25zdCBLVVJMJiA9IEtVUkwoKSkgY29uc3Q7CiAgICAgYm9v
bCBhbGxvd1BsdWdpblR5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIHR5cGVB
dHRyaWJ1dGUsIGNvbnN0IEtVUkwmLCBSZXBvcnRpbmdTdGF0dXMgPSBTZW5kUmVwb3J0KSBjb25z
dDsKIApAQCAtMTI0LDcgKzEyNCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlcG9ydEludmFsaWRS
ZWZsZWN0ZWRYU1MoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAgdm9pZCByZXBvcnRNaXNzaW5n
UmVwb3J0VVJJKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIHZvaWQgcmVwb3J0VW5zdXBwb3J0
ZWREaXJlY3RpdmUoY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0gICAgdm9pZCByZXBvcnRWaW9sYXRp
b24oY29uc3QgU3RyaW5nJiBkaXJlY3RpdmVUZXh0LCBjb25zdCBTdHJpbmcmIGVmZmVjdGl2ZURp
cmVjdGl2ZSwgY29uc3QgU3RyaW5nJiBjb25zb2xlTWVzc2FnZSwgY29uc3QgS1VSTCYgYmxvY2tl
ZFVSTCwgY29uc3QgVmVjdG9yPEtVUkw+JiByZXBvcnRVUklzLCBjb25zdCBTdHJpbmcmIGhlYWRl
ciwgY29uc3QgU3RyaW5nJiBjb250ZXh0VVJMID0gU3RyaW5nKCksIGNvbnN0IFdURjo6T3JkaW5h
bE51bWJlciYgY29udGV4dExpbmUgPSBXVEY6Ok9yZGluYWxOdW1iZXI6OmJlZm9yZUZpcnN0KCks
IFNjcmlwdFN0YXRlKiA9IDApIGNvbnN0OworICAgIHZvaWQgcmVwb3J0VmlvbGF0aW9uKGNvbnN0
IFN0cmluZyYgZGlyZWN0aXZlVGV4dCwgY29uc3QgU3RyaW5nJiBlZmZlY3RpdmVEaXJlY3RpdmUs
IGNvbnN0IFN0cmluZyYgY29uc29sZU1lc3NhZ2UsIGNvbnN0IEtVUkwmIGJsb2NrZWRVUkwsIGNv
bnN0IFZlY3RvcjxLVVJMPiYgcmVwb3J0VVJJcywgY29uc3QgU3RyaW5nJiBoZWFkZXIsIGNvbnN0
IFN0cmluZyYgY29udGV4dFVSTCA9IFN0cmluZygpLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXIm
IGNvbnRleHRMaW5lID0gV1RGOjpPcmRpbmFsTnVtYmVyOjpiZWZvcmVGaXJzdCgpLCBKU0M6OkV4
ZWNTdGF0ZSogPSAwKSBjb25zdDsKIAogICAgIHZvaWQgcmVwb3J0QmxvY2tlZFNjcmlwdEV4ZWN1
dGlvblRvSW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlVGV4dCkgY29uc3Q7CiAKQEAg
LTEzOSw3ICsxMzksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IENvbnRlbnRT
ZWN1cml0eVBvbGljeShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKLSAgICB2b2lkIGxvZ1Rv
Q29uc29sZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCA9
IFN0cmluZygpLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5lID0gV1RGOjpP
cmRpbmFsTnVtYmVyOjpiZWZvcmVGaXJzdCgpLCBTY3JpcHRTdGF0ZSogPSAwKSBjb25zdDsKKyAg
ICB2b2lkIGxvZ1RvQ29uc29sZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYg
Y29udGV4dFVSTCA9IFN0cmluZygpLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRM
aW5lID0gV1RGOjpPcmRpbmFsTnVtYmVyOjpiZWZvcmVGaXJzdCgpLCBKU0M6OkV4ZWNTdGF0ZSog
PSAwKSBjb25zdDsKIAogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dDsKICAgICBib29sIG1fb3ZlcnJpZGVJbmxpbmVTdHlsZUFsbG93ZWQ7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlLmNwcAkocmV2aXNpb24gMTU1NzMwKQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw3
ICsxNTEsNyBAQCB2b2lkIFBhZ2VDb25zb2xlOjphZGRNZXNzYWdlKE1lc3NhZ2VTb3VyCiAgICAg
YWRkTWVzc2FnZShzb3VyY2UsIGxldmVsLCBtZXNzYWdlLCBTdHJpbmcoKSwgMCwgMCwgY2FsbFN0
YWNrLCAwKTsKIH0KIAotdm9pZCBQYWdlQ29uc29sZTo6YWRkTWVzc2FnZShNZXNzYWdlU291cmNl
IHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0
IFN0cmluZyYgdXJsLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIs
IFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2ssIFNjcmlwdFN0YXRlKiBzdGF0
ZSwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcikKK3ZvaWQgUGFnZUNvbnNvbGU6OmFk
ZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHVybCwgdW5zaWduZWQgbGluZU51bWJlciwg
dW5zaWduZWQgY29sdW1uTnVtYmVyLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0
YWNrLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZp
ZXIpCiB7CiAgICAgaWYgKG11dGVDb3VudCAmJiBzb3VyY2UgIT0gQ29uc29sZUFQSU1lc3NhZ2VT
b3VyY2UpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNv
bnNvbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlLmgJ
KHJldmlzaW9uIDE1NTczMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQg
cHJpbnRTb3VyY2VVUkxBbmRMaW5lKGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNpZ25lZCBs
aW5lTnVtYmVyKTsKICAgICBzdGF0aWMgdm9pZCBwcmludE1lc3NhZ2VTb3VyY2VBbmRMZXZlbFBy
ZWZpeChNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwpOwogCi0gICAgdm9pZCBhZGRNZXNzYWdl
KE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1u
TnVtYmVyLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gPSAwLCBTY3JpcHRTdGF0ZSogPSAw
LCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7CisgICAgdm9pZCBhZGRNZXNz
YWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBj
b25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29s
dW1uTnVtYmVyLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gPSAwLCBKU0M6OkV4ZWNTdGF0
ZSogPSAwLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7CiAgICAgdm9pZCBh
ZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4pOwogICAgIHZvaWQgYWRkTWVzc2FnZShN
ZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWdu
ZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDAsIERvY3VtZW50KiA9IDApOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcAkocmV2aXNpb24g
MTU1NzMwKQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3OCw3ICsyNzgsNyBAQCB2b2lkIFdvcmtlckdsb2JhbFNjb3Bl
OjphZGRDb25zb2xlTWVzc2FnCiAgICAgYWRkTWVzc2FnZVRvV29ya2VyQ29uc29sZShzb3VyY2Us
IGxldmVsLCBtZXNzYWdlLCBTdHJpbmcoKSwgMCwgMCwgMCwgMCwgcmVxdWVzdElkZW50aWZpZXIp
OwogfQogCi12b2lkIFdvcmtlckdsb2JhbFNjb3BlOjphZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ug
c291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51
bWJlciwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaywgU2NyaXB0U3RhdGUq
IHN0YXRlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQordm9pZCBXb3JrZXJHbG9i
YWxTY29wZTo6YWRkTWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxl
dmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNp
Z25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFBhc3NSZWZQdHI8U2NyaXB0
Q2FsbFN0YWNrPiBjYWxsU3RhY2ssIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgbG9u
ZyByZXF1ZXN0SWRlbnRpZmllcikKIHsKICAgICBpZiAoIWlzQ29udGV4dFRocmVhZCgpKSB7CiAg
ICAgICAgIHBvc3RUYXNrKEFkZENvbnNvbGVNZXNzYWdlVGFzazo6Y3JlYXRlKHNvdXJjZSwgbGV2
ZWwsIG1lc3NhZ2UpKTsKQEAgLTI4OSw3ICsyODksNyBAQCB2b2lkIFdvcmtlckdsb2JhbFNjb3Bl
OjphZGRNZXNzYWdlKE1lc3NhCiAgICAgYWRkTWVzc2FnZVRvV29ya2VyQ29uc29sZShzb3VyY2Us
IGxldmVsLCBtZXNzYWdlLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgY2Fs
bFN0YWNrLCBzdGF0ZSwgcmVxdWVzdElkZW50aWZpZXIpOwogfQogCi12b2lkIFdvcmtlckdsb2Jh
bFNjb3BlOjphZGRNZXNzYWdlVG9Xb3JrZXJDb25zb2xlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBN
ZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBz
b3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUGFz
c1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaywgU2NyaXB0U3RhdGUqIHN0YXRlLCB1
bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQordm9pZCBXb3JrZXJHbG9iYWxTY29wZTo6
YWRkTWVzc2FnZVRvV29ya2VyQ29uc29sZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxl
dmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJM
LCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFBhc3NSZWZQdHI8
U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2ssIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWdu
ZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoaXNDb250ZXh0VGhyZWFk
KCkpOwogICAgIGlmIChjYWxsU3RhY2spCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlckdsb2JhbFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJHbG9iYWxTY29wZS5oCShyZXZpc2lvbiAxNTU3MzApCisrKyBTb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Myw3ICsxNDMs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgYXBwbHlDb250ZW50U2VjdXJp
dHlQb2xpY3lGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgY29udGVudFNlY3VyaXR5UG9saWN5LCBD
b250ZW50U2VjdXJpdHlQb2xpY3k6OkhlYWRlclR5cGUpOwogCiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBsb2dFeGNlcHRpb25Ub0NvbnNvbGUoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGNvbnN0
IFN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgUGFz
c1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+KSBPVkVSUklERTsKLSAgICAgICAgdm9pZCBhZGRNZXNz
YWdlVG9Xb3JrZXJDb25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJl
ciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4sIFNj
cmlwdFN0YXRlKiA9IDAsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsKKyAg
ICAgICAgdm9pZCBhZGRNZXNzYWdlVG9Xb3JrZXJDb25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3Nh
Z2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwg
dW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBQYXNzUmVmUHRyPFNj
cmlwdENhbGxTdGFjaz4sIEpTQzo6RXhlY1N0YXRlKiA9IDAsIHVuc2lnbmVkIGxvbmcgcmVxdWVz
dElkZW50aWZpZXIgPSAwKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBy
ZWZTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgT1ZFUlJJREUgeyByZWYoKTsgfQpAQCAtMTU0LDcg
KzE1NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBFdmVudFRhcmdl
dERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpIE9WRVJSSURFOwogICAgICAgICB2aXJ0dWFsIEV2ZW50
VGFyZ2V0RGF0YSYgZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkgT1ZFUlJJREU7CiAKLSAgICAgICAg
dmlydHVhbCB2b2lkIGFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNpZ25lZCBsaW5l
TnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNr
PiwgU2NyaXB0U3RhdGUqID0gMCwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDAp
IE9WRVJSSURFOworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZShNZXNzYWdlU291cmNl
LCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUGFzc1Jl
ZlB0cjxTY3JpcHRDYWxsU3RhY2s+LCBKU0M6OkV4ZWNTdGF0ZSogPSAwLCB1bnNpZ25lZCBsb25n
IHJlcXVlc3RJZGVudGlmaWVyID0gMCkgT1ZFUlJJREU7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBh
ZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApIE9WRVJSSURF
OwogCiAgICAgICAgIHZpcnR1YWwgRXZlbnRUYXJnZXQqIGVycm9yRXZlbnRUYXJnZXQoKSBPVkVS
UklERTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211610</attachid>
            <date>2013-09-13 18:21:38 -0700</date>
            <delta_ts>2013-09-13 18:27:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121336-20130913182138.patch</filename>
            <type>text/plain</type>
            <size>134281</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NTczNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkyIEBACisyMDEzLTA5LTEzICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBTY3JpcHRTdGF0ZSB3aXRo
IEpTQzo6RXhlY1N0YXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjEzMzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJ
bmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVDdXN0
b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5oOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9T
Y3JpcHREZWJ1Z1NlcnZlci5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlz
dGVuZXIuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuaDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NjcmlwdE9iamVjdC5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0Lmg6
CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmg6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0
U3RhdGUuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmg6CisgICAgICAg
ICogYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Nj
cmlwdFZhbHVlLmg6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaDoKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAg
ICAgICAqIGRvbS9Ob2RlRmlsdGVyLmNwcDoKKyAgICAgICAgKiBkb20vTm9kZUZpbHRlci5oOgor
ICAgICAgICAqIGRvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmNwcDoKKyAgICAgICAgKiBkb20vTm9k
ZUZpbHRlckNvbmRpdGlvbi5oOgorICAgICAgICAqIGRvbS9Ob2RlSXRlcmF0b3IuY3BwOgorICAg
ICAgICAqIGRvbS9Ob2RlSXRlcmF0b3IuaDoKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5jcHA6CisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaDoKKyAg
ICAgICAgKiBkb20vVHJhdmVyc2FsLmNwcDoKKyAgICAgICAgKiBkb20vVHJhdmVyc2FsLmg6Cisg
ICAgICAgICogZG9tL1RyZWVXYWxrZXIuY3BwOgorICAgICAgICAqIGRvbS9UcmVlV2Fsa2VyLmg6
CisgICAgICAgICogaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvQ29uc29sZU1lc3NhZ2UuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmg6CisgICAgICAgICogaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRIb3N0LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHA6CisgICAgICAg
ICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5oOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdE1vZHVsZS5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0TW9kdWxlLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JD
b25zb2xlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUluc3Ry
dW1lbnRhdGlvbi5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JJbmRleGVkREJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5oOgorICAgICAgICAqIGluc3BlY3Rvci9QYWdlQ29uc29sZUFnZW50LmNwcDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rv
ci9QYWdlUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvUGFnZVJ1bnRpbWVB
Z2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHRBcmd1bWVudHMuY3BwOgorICAgICAg
ICAqIGluc3BlY3Rvci9TY3JpcHRBcmd1bWVudHMuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvU2Ny
aXB0RGVidWdMaXN0ZW5lci5oOgorICAgICAgICAqIGluc3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlckFn
ZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvV29ya2VyUnVudGltZUFnZW50LmNwcDoKKyAg
ICAgICAgKiBwYWdlL0NvbnNvbGUuY3BwOgorICAgICAgICAqIHBhZ2UvQ29uc29sZS5oOgorICAg
ICAgICAqIHBhZ2UvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcDoKKyAgICAgICAgKiBwYWdlL0Nv
bnRlbnRTZWN1cml0eVBvbGljeS5oOgorICAgICAgICAqIHBhZ2UvUGFnZUNvbnNvbGUuY3BwOgor
ICAgICAgICAqIHBhZ2UvUGFnZUNvbnNvbGUuaDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckds
b2JhbFNjb3BlLmNwcDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmg6CisK
IDIwMTMtMDktMTMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBDaHJv
bWUsIERyYWdDb250cm9sbGVyIGFuZCBGb2N1c0NvbnRyb2xsZXIgc2hvdWxkIGhvbGQgb250byBh
IFBhZ2UmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJz
b3IuaAkocmV2aXNpb24gMTU1NzM1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgog
ICAgIGNvbnN0IFNjcmlwdFZhbHVlJiB2YWx1ZSgpIGNvbnN0OwogICAgIElEQkFueSogc291cmNl
KCkgY29uc3Q7CiAKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHVwZGF0ZShTY3JpcHRTdGF0
ZSosIFNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gdXBkYXRlKEpTQzo6RXhlY1N0YXRlKiwgU2NyaXB0VmFsdWUmLCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIGxvbmcsIEV4Y2VwdGlvbkNvZGUmKTsKICAg
ICAvLyBGSVhNRTogVHJ5IHRvIG1vZGlmeSB0aGUgY29kZSBnZW5lcmF0b3Igc28gdGhpcyBvdmVy
bG9hZCBpcyB1bm5lZWRlZC4KICAgICB2b2lkIGNvbnRpbnVlRnVuY3Rpb24oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IGNvbnRpbnVlRnVuY3Rpb24oc3RhdGlj
X2Nhc3Q8SURCS2V5Kj4oMCksIGVjKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCShyZXZpc2lvbiAxNTU3MzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC02NSw4ICs2NSw4IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uPiB0cmFuc2FjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb247IH0KICAg
ICBib29sIGF1dG9JbmNyZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmF1dG9JbmNy
ZW1lbnQ7IH0KIAotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gYWRkKFNjcmlwdFN0YXRlKiwg
U2NyaXB0VmFsdWUmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBwdXQoU2NyaXB0U3RhdGUqLCBTY3JpcHRWYWx1ZSYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IGFkZChKU0M6OkV4ZWNTdGF0ZSosIFNjcmlwdFZhbHVlJiwg
RXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gcHV0KEpTQzo6RXhl
Y1N0YXRlKiwgU2NyaXB0VmFsdWUmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4
Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIHN0YXRpY19jYXN0
PElEQktleVJhbmdlKj4oMCksIGVjKTsgfQogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3Bl
bkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3Io
Y29udGV4dCwga2V5UmFuZ2UsIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0KICAg
ICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgY29uc3QgU2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsg
cmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwga2V5LCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQo
KSwgZWMpOyB9CkBAIC03Niw4ICs3Niw4IEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTY3JpcHRWYWx1ZSYg
a2V5LCBFeGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBhZGQoU2NyaXB0U3RhdGUqLCBTY3Jp
cHRWYWx1ZSYsIGNvbnN0IFNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChTY3JpcHRTdGF0ZSosIFNjcmlwdFZhbHVlJiwgY29u
c3QgU2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gYWRkKEpTQzo6RXhlY1N0YXRlKiwgU2NyaXB0VmFsdWUmLCBjb25zdCBTY3JpcHRW
YWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBw
dXQoSlNDOjpFeGVjU3RhdGUqLCBTY3JpcHRWYWx1ZSYsIGNvbnN0IFNjcmlwdFZhbHVlJiBrZXks
IEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0
aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhj
ZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlv
bkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNsZWFyKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7CkBAIC05NCw4ICs5NCw4IEBAIHB1YmxpYzoKICAg
ICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFNjcmlwdFZh
bHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4g
cHV0KElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSwgUGFzc1JlZlB0cjxJREJB
bnk+IHNvdXJjZSwgU2NyaXB0U3RhdGUqLCBTY3JpcHRWYWx1ZSYsIGNvbnN0IFNjcmlwdFZhbHVl
JiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChJ
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQW55PiBz
b3VyY2UsIFNjcmlwdFN0YXRlKiwgU2NyaXB0VmFsdWUmLCBQYXNzUmVmUHRyPElEQktleT4sIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChJREJEYXRhYmFz
ZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIEpT
Qzo6RXhlY1N0YXRlKiwgU2NyaXB0VmFsdWUmLCBjb25zdCBTY3JpcHRWYWx1ZSYga2V5LCBFeGNl
cHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBKU0M6
OkV4ZWNTdGF0ZSosIFNjcmlwdFZhbHVlJiwgUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRpb25D
b2RlJik7CiAgICAgdm9pZCBtYXJrRGVsZXRlZCgpIHsgbV9kZWxldGVkID0gdHJ1ZTsgfQogICAg
IHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9ET01SZXF1ZXN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9ET01SZXF1ZXN0U3RhdGUuaAkocmV2aXNpb24gMTU1NzM1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvRE9NUmVxdWVzdFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDExICs0OSwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAobV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5pc0RvY3VtZW50KCkpIHsKICAgICAgICAgICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IHRvRG9jdW1lbnQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKLSAgICAgICAgICAg
IG1fZXhlYyA9IHNjcmlwdFN0YXRlRnJvbVBhZ2UobWFpblRocmVhZE5vcm1hbFdvcmxkKCksIGRv
Y3VtZW50LT5wYWdlKCkpOworICAgICAgICAgICAgbV9leGVjID0gZXhlY1N0YXRlRnJvbVBhZ2Uo
bWFpblRocmVhZE5vcm1hbFdvcmxkKCksIGRvY3VtZW50LT5wYWdlKCkpOwogICAgICAgICB9IGVs
c2UgewogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgICAgICAgICAgV29ya2VyR2xvYmFsU2NvcGUq
IHdvcmtlckdsb2JhbFNjb3BlID0gc3RhdGljX2Nhc3Q8V29ya2VyR2xvYmFsU2NvcGUqPihtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpOwotICAgICAgICAgICAgbV9leGVjID0gc2NyaXB0U3RhdGVG
cm9tV29ya2VyR2xvYmFsU2NvcGUod29ya2VyR2xvYmFsU2NvcGUpOworICAgICAgICAgICAgbV9l
eGVjID0gZXhlY1N0YXRlRnJvbVdvcmtlckdsb2JhbFNjb3BlKHdvcmtlckdsb2JhbFNjb3BlKTsK
ICNlbmRpZgogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAkocmV2aXNp
b24gMTU1NzM1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlw
dEhvc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIE5vZGUqIElu
amVjdGVkU2NyaXB0SG9zdDo6c2NyaXB0VmFsdWVBc04KICAgICByZXR1cm4gdG9Ob2RlKHZhbHVl
LmpzVmFsdWUoKSk7CiB9CiAKLVNjcmlwdFZhbHVlIEluamVjdGVkU2NyaXB0SG9zdDo6bm9kZUFz
U2NyaXB0VmFsdWUoU2NyaXB0U3RhdGUqIHN0YXRlLCBOb2RlKiBub2RlKQorU2NyaXB0VmFsdWUg
SW5qZWN0ZWRTY3JpcHRIb3N0Ojpub2RlQXNTY3JpcHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShzdGF0
ZSwgbm9kZSkpCiAgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZShzdGF0ZS0+dm0oKSwganNOdWxs
KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdE1h
bmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTU1NzM1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MCw3ICs1MCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotU2NyaXB0T2JqZWN0IEluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y3JlYXRlSW5qZWN0
ZWRTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2UsIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwg
aW50IGlkKQorU2NyaXB0T2JqZWN0IEluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y3JlYXRlSW5qZWN0
ZWRTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2UsIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0
ZSwgaW50IGlkKQogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKIApAQCAt
ODYsNyArODYsNyBAQCBTY3JpcHRPYmplY3QgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjcmVhCiAg
ICAgcmV0dXJuIFNjcmlwdE9iamVjdCgpOwogfQogCi1ib29sIEluamVjdGVkU2NyaXB0TWFuYWdl
cjo6Y2FuQWNjZXNzSW5zcGVjdGVkV2luZG93KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkKK2Jv
b2wgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjYW5BY2Nlc3NJbnNwZWN0ZWRXaW5kb3coSlNDOjpF
eGVjU3RhdGUqIHNjcmlwdFN0YXRlKQogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0
YXRlKTsKICAgICBKU0RPTVdpbmRvdyogaW5zcGVjdGVkV2luZG93ID0gdG9KU0RPTVdpbmRvdyhz
Y3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAkocmV2aXNpb24gMTU1NzM1KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjc2LDcgKzI3Niw3IEBAIEpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChFeGVjU3RhdGUqIGV4
ZWMKIAogdm9pZCB3aWxsQ3JlYXRlUG9zc2libHlPcnBoYW5lZFRyZWVCeVJlbW92YWxTbG93Q2Fz
ZShOb2RlKiByb290KQogewotICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IG1haW5Xb3Js
ZFNjcmlwdFN0YXRlKHJvb3QtPmRvY3VtZW50KCkuZnJhbWUoKSk7CisgICAgSlNDOjpFeGVjU3Rh
dGUqIHNjcmlwdFN0YXRlID0gbWFpbldvcmxkRXhlY1N0YXRlKHJvb3QtPmRvY3VtZW50KCkuZnJh
bWUoKSk7CiAgICAgaWYgKCFzY3JpcHRTdGF0ZSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24u
aAkocmV2aXNpb24gMTU1NzM1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2Rl
RmlsdGVyQ29uZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAgIEpTTm9kZUZpbHRlckNvbmRpdGlv
bihKU0M6OlZNJiwgTm9kZUZpbHRlciogb3duZXIsIEpTQzo6SlNWYWx1ZSBmaWx0ZXIpOwogCi0g
ICAgICAgIHZpcnR1YWwgc2hvcnQgYWNjZXB0Tm9kZShTY3JpcHRTdGF0ZSosIE5vZGUqKSBjb25z
dDsKKyAgICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRlKiwgTm9k
ZSopIGNvbnN0OwogCiAgICAgICAgIGNsYXNzIFdlYWtPd25lciA6IHB1YmxpYyBKU0M6OldlYWtI
YW5kbGVPd25lciB7CiAgICAgICAgICAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpT
bG90VmlzaXRvciYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE1NTczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzgsNyAr
MzM4LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjb2xsZWN0SXNvbGF0ZWRDbwogICAgIGZv
ciAoU2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVy
ICE9IG1fd2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMgPSBpdGVyLT52YWx1ZS0+d2luZG93KCktPmdsb2JhbEV4ZWMoKTsKICAgICAgICAg
U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IGl0ZXItPnZhbHVlLT53aW5kb3coKS0+aW1wbCgpLT5k
b2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpOwotICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6
cGFpcjxTY3JpcHRTdGF0ZSosIFNlY3VyaXR5T3JpZ2luKj4oZXhlYywgb3JpZ2luKSk7CisgICAg
ICAgIHJlc3VsdC5hcHBlbmQoc3RkOjpwYWlyPEpTQzo6RXhlY1N0YXRlKiwgU2VjdXJpdHlPcmln
aW4qPihleGVjLCBvcmlnaW4pKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDE1NTczNSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzA0LDcgKzMwNCw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRp
c3BhdGNoRGlkUGF1c2UKIHsKICAgICBBU1NFUlQobV9wYXVzZWQpOwogICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+Z2xv
YmFsT2JqZWN0KCk7Ci0gICAgU2NyaXB0U3RhdGUqIHN0YXRlID0gZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCk7CisgICAgSlNDOjpFeGVjU3RhdGUqIHN0YXRlID0gZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCk7CiAgICAgSlNWYWx1ZSBqc0NhbGxGcmFtZTsKICAgICB7CiAgICAgICAgIGlmICht
X2N1cnJlbnRDYWxsRnJhbWUtPmlzVmFsaWQoKSAmJiBnbG9iYWxPYmplY3QtPmluaGVyaXRzKEpT
RE9NR2xvYmFsT2JqZWN0OjppbmZvKCkpKSB7CkBAIC01NzQsNyArNTc0LDcgQEAgdm9pZCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdQogICAgIG1fcmVjb21waWxlVGltZXIuc3Rh
cnRPbmVTaG90KDApOwogfQogCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpjb21waWxlU2NyaXB0
KFNjcmlwdFN0YXRlKiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgU3RyaW5nKiwgU3Ry
aW5nKikKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmNvbXBpbGVTY3JpcHQoSlNDOjpFeGVjU3Rh
dGUqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBTdHJpbmcqLCBTdHJpbmcqKQogewog
ICAgIC8vIEZJWE1FKDg5NjUyKTogaW1wbGVtZW50IHRoaXMuCiB9CkBAIC01ODQsNyArNTg0LDcg
QEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6Y2xlYXJDb21waWxlZFNjcgogICAgIC8vIEZJWE1F
KDg5NjUyKTogaW1wbGVtZW50IHRoaXMuCiB9CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJ1
blNjcmlwdChTY3JpcHRTdGF0ZSosIGNvbnN0IFN0cmluZyYsIFNjcmlwdFZhbHVlKiwgYm9vbCos
IFN0cmluZyopCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpydW5TY3JpcHQoSlNDOjpFeGVjU3Rh
dGUqLCBjb25zdCBTdHJpbmcmLCBTY3JpcHRWYWx1ZSosIGJvb2wqLCBTdHJpbmcqKQogewogICAg
IC8vIEZJWE1FKDg5NjUyKTogaW1wbGVtZW50IHRoaXMuCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgJKHJldmlzaW9uIDE1NTczNSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTk4LDkgKzk4LDkgQEAgcHVibGljOgogICAgIGJvb2wgaXNQYXVzZWQoKSB7
IHJldHVybiBtX3BhdXNlZDsgfQogICAgIGJvb2wgcnVubmluZ05lc3RlZE1lc3NhZ2VMb29wKCkg
eyByZXR1cm4gbV9ydW5uaW5nTmVzdGVkTWVzc2FnZUxvb3A7IH0KIAotICAgIHZvaWQgY29tcGls
ZVNjcmlwdChTY3JpcHRTdGF0ZSosIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VVUkwsIFN0cmluZyogc2NyaXB0SWQsIFN0cmluZyogZXhjZXB0aW9uTWVzc2Fn
ZSk7CisgICAgdm9pZCBjb21waWxlU2NyaXB0KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5n
JiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgU3RyaW5nKiBzY3JpcHRJZCwg
U3RyaW5nKiBleGNlcHRpb25NZXNzYWdlKTsKICAgICB2b2lkIGNsZWFyQ29tcGlsZWRTY3JpcHRz
KCk7Ci0gICAgdm9pZCBydW5TY3JpcHQoU2NyaXB0U3RhdGUqLCBjb25zdCBTdHJpbmcmIHNjcmlw
dElkLCBTY3JpcHRWYWx1ZSogcmVzdWx0LCBib29sKiB3YXNUaHJvd24sIFN0cmluZyogZXhjZXB0
aW9uTWVzc2FnZSk7CisgICAgdm9pZCBydW5TY3JpcHQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBT
dHJpbmcmIHNjcmlwdElkLCBTY3JpcHRWYWx1ZSogcmVzdWx0LCBib29sKiB3YXNUaHJvd24sIFN0
cmluZyogZXhjZXB0aW9uTWVzc2FnZSk7CiAKICAgICBjbGFzcyBUYXNrIHsKICAgICAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRFdmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMTU1NzM1KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMyw3ICsxMDMsNyBAQCBTdHJpbmcgZXZlbnRMaXN0ZW5lckhhbmRsZXJCb2R5
KERvY3VtZW50CiAgICAgSlNDOjpKU09iamVjdCoganNGdW5jdGlvbiA9IGpzTGlzdGVuZXItPmpz
RnVuY3Rpb24oZG9jdW1lbnQpOwogICAgIGlmICghanNGdW5jdGlvbikKICAgICAgICAgcmV0dXJu
ICIiOwotICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IHNjcmlwdFN0YXRlRnJvbU5vZGUo
anNMaXN0ZW5lci0+aXNvbGF0ZWRXb3JsZCgpLCBkb2N1bWVudCk7CisgICAgSlNDOjpFeGVjU3Rh
dGUqIHNjcmlwdFN0YXRlID0gZXhlY1N0YXRlRnJvbU5vZGUoanNMaXN0ZW5lci0+aXNvbGF0ZWRX
b3JsZCgpLCBkb2N1bWVudCk7CiAgICAgcmV0dXJuIGpzRnVuY3Rpb24tPnRvU3RyaW5nKHNjcmlw
dFN0YXRlKS0+dmFsdWUoc2NyaXB0U3RhdGUpOwogfQogCkBAIC0xMjAsNyArMTIwLDcgQEAgU2Ny
aXB0VmFsdWUgZXZlbnRMaXN0ZW5lckhhbmRsZXIoRG9jdW1lbgogICAgIHJldHVybiBTY3JpcHRW
YWx1ZSgqanNMaXN0ZW5lci0+aXNvbGF0ZWRXb3JsZCgpLT52bSgpLCBqc0Z1bmN0aW9uKTsKIH0K
IAotU2NyaXB0U3RhdGUqIGV2ZW50TGlzdGVuZXJIYW5kbGVyU2NyaXB0U3RhdGUoRnJhbWUqIGZy
YW1lLCBFdmVudExpc3RlbmVyKiBldmVudExpc3RlbmVyKQorSlNDOjpFeGVjU3RhdGUqIGV2ZW50
TGlzdGVuZXJIYW5kbGVyU2NyaXB0U3RhdGUoRnJhbWUqIGZyYW1lLCBFdmVudExpc3RlbmVyKiBl
dmVudExpc3RlbmVyKQogewogICAgIGNvbnN0IEpTRXZlbnRMaXN0ZW5lcioganNMaXN0ZW5lciA9
IEpTRXZlbnRMaXN0ZW5lcjo6Y2FzdChldmVudExpc3RlbmVyKTsKICAgICBBU1NFUlQoanNMaXN0
ZW5lcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRFdmVudExpc3Rl
bmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RXZl
bnRMaXN0ZW5lci5oCShyZXZpc2lvbiAxNTU3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRFdmVudExpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFBhc3NSZWZQdHI8SlNMYXp5RXZlbnRMaXN0ZW5l
cj4gY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcihGcmFtZSosIGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKICAgICBTdHJpbmcgZXZlbnRMaXN0ZW5l
ckhhbmRsZXJCb2R5KERvY3VtZW50KiwgRXZlbnRMaXN0ZW5lciopOwogICAgIFNjcmlwdFZhbHVl
IGV2ZW50TGlzdGVuZXJIYW5kbGVyKERvY3VtZW50KiwgRXZlbnRMaXN0ZW5lciopOwotICAgIFNj
cmlwdFN0YXRlKiBldmVudExpc3RlbmVySGFuZGxlclNjcmlwdFN0YXRlKEZyYW1lKiwgRXZlbnRM
aXN0ZW5lciopOworICAgIEpTQzo6RXhlY1N0YXRlKiBldmVudExpc3RlbmVySGFuZGxlclNjcmlw
dFN0YXRlKEZyYW1lKiwgRXZlbnRMaXN0ZW5lciopOwogICAgIGJvb2wgZXZlbnRMaXN0ZW5lckhh
bmRsZXJMb2NhdGlvbihEb2N1bWVudCosIEV2ZW50TGlzdGVuZXIqLCBTdHJpbmcmIHNvdXJjZU5h
bWUsIFN0cmluZyYgc2NyaXB0SWQsIGludCYgbGluZU51bWJlcik7CiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9u
Q2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
RnVuY3Rpb25DYWxsLmNwcAkocmV2aXNpb24gMTU1NzM1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcg
KzE5MCw3IEBAIFNjcmlwdE9iamVjdCBTY3JpcHRGdW5jdGlvbkNhbGw6OmNvbnN0cnUKICAgICBy
ZXR1cm4gU2NyaXB0T2JqZWN0KG1fZXhlYywgYXNPYmplY3QocmVzdWx0KSk7CiB9CiAKLVNjcmlw
dENhbGxiYWNrOjpTY3JpcHRDYWxsYmFjayhTY3JpcHRTdGF0ZSogc3RhdGUsIGNvbnN0IFNjcmlw
dFZhbHVlJiBmdW5jdGlvbikKK1NjcmlwdENhbGxiYWNrOjpTY3JpcHRDYWxsYmFjayhKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIGNvbnN0IFNjcmlwdFZhbHVlJiBmdW5jdGlvbikKICAgICA6IFNjcmlw
dENhbGxBcmd1bWVudEhhbmRsZXIoc3RhdGUpCiAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQog
ewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25D
YWxsLmgJKHJldmlzaW9uIDE1NTczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdEZ1bmN0aW9uQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIgewog
ICAgIHB1YmxpYzoKLSAgICAgICAgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcihTY3JpcHRTdGF0
ZSogc3RhdGUpIDogbV9leGVjKHN0YXRlKSB7IH0KKyAgICAgICAgU2NyaXB0Q2FsbEFyZ3VtZW50
SGFuZGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpIDogbV9leGVjKHN0YXRlKSB7IH0KIAogICAg
ICAgICB2b2lkIGFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdE9iamVjdCYpOwogICAgICAgICB2
b2lkIGFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdFZhbHVlJik7CkBAIC02Miw3ICs2Miw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgSlNDOjpNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBtX2FyZ3VtZW50czsKLSAgICAgICAgU2NyaXB0U3RhdGUqIG1fZXhl
YzsKKyAgICAgICAgSlNDOjpFeGVjU3RhdGUqIG1fZXhlYzsKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIC8vIE1hcmtlZEFyZ3VtZW50QnVmZmVyIG11c3QgYmUgc3RhY2sgYWxsb2NhdGVkLCBzbyBw
cmV2ZW50IGhlYXAKQEAgLTg1LDcgKzg1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
Y2xhc3MgU2NyaXB0Q2FsbGJhY2sgOiBwdWJsaWMgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlciB7
CiAgICAgcHVibGljOgotICAgICAgICBTY3JpcHRDYWxsYmFjayhTY3JpcHRTdGF0ZSosIGNvbnN0
IFNjcmlwdFZhbHVlJik7CisgICAgICAgIFNjcmlwdENhbGxiYWNrKEpTQzo6RXhlY1N0YXRlKiwg
Y29uc3QgU2NyaXB0VmFsdWUmKTsKIAogICAgICAgICBTY3JpcHRWYWx1ZSBjYWxsKCk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcAkocmV2aXNp
b24gMTU1NzM1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTkgKzQ0LDE5IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU2NyaXB0T2JqZWN0OjpTY3JpcHRPYmplY3QoU2Ny
aXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBKU09iamVjdCogb2JqZWN0KQorU2NyaXB0T2JqZWN0OjpT
Y3JpcHRPYmplY3QoSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLCBKU09iamVjdCogb2JqZWN0
KQogICAgIDogU2NyaXB0VmFsdWUoc2NyaXB0U3RhdGUtPnZtKCksIG9iamVjdCkKICAgICAsIG1f
c2NyaXB0U3RhdGUoc2NyaXB0U3RhdGUpCiB7CiB9CiAKLVNjcmlwdE9iamVjdDo6U2NyaXB0T2Jq
ZWN0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgU2NyaXB0VmFsdWUmIHNjcmlwdFZh
bHVlKQorU2NyaXB0T2JqZWN0OjpTY3JpcHRPYmplY3QoSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0
YXRlLCBjb25zdCBTY3JpcHRWYWx1ZSYgc2NyaXB0VmFsdWUpCiAgICAgOiBTY3JpcHRWYWx1ZShz
Y3JpcHRTdGF0ZS0+dm0oKSwgc2NyaXB0VmFsdWUuanNWYWx1ZSgpKQogICAgICwgbV9zY3JpcHRT
dGF0ZShzY3JpcHRTdGF0ZSkKIHsKIH0KIAotc3RhdGljIGJvb2wgaGFuZGxlRXhjZXB0aW9uKFNj
cmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkKK3N0YXRpYyBib29sIGhhbmRsZUV4Y2VwdGlvbihKU0M6
OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUpCiB7CiAgICAgaWYgKCFzY3JpcHRTdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNjUsNyArNjUsNyBAQCBzdGF0aWMg
Ym9vbCBoYW5kbGVFeGNlcHRpb24oU2NyaXB0U3RhdGUqCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1ib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwg
Y29uc3QgY2hhciogbmFtZSwgY29uc3QgU2NyaXB0T2JqZWN0JiB2YWx1ZSkKK2Jvb2wgU2NyaXB0
R2xvYmFsT2JqZWN0OjpzZXQoSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFy
KiBuYW1lLCBjb25zdCBTY3JpcHRPYmplY3QmIHZhbHVlKQogewogICAgIEpTTG9ja0hvbGRlciBs
b2NrKHNjcmlwdFN0YXRlKTsKICAgICBzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5wdXREaXJlY3Qoc2NyaXB0U3RhdGUtPnZtKCksIElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5h
bWUpLCB2YWx1ZS5qc09iamVjdCgpKTsKQEAgLTczLDcgKzczLDcgQEAgYm9vbCBTY3JpcHRHbG9i
YWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZQogfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLWJv
b2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25z
dCBjaGFyKiBuYW1lLCBJbnNwZWN0b3JGcm9udGVuZEhvc3QqIHZhbHVlKQorYm9vbCBTY3JpcHRH
bG9iYWxPYmplY3Q6OnNldChKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIq
IG5hbWUsIEluc3BlY3RvckZyb250ZW5kSG9zdCogdmFsdWUpCiB7CiAgICAgSlNMb2NrSG9sZGVy
IGxvY2soc2NyaXB0U3RhdGUpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpKTsKQEAgLTgxLDcgKzgxLDcgQEAgYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChT
Y3JpcHRTdGF0ZQogICAgIHJldHVybiBoYW5kbGVFeGNlcHRpb24oc2NyaXB0U3RhdGUpOwogfQog
Ci1ib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwg
Y29uc3QgY2hhciogbmFtZSwgSW5qZWN0ZWRTY3JpcHRIb3N0KiB2YWx1ZSkKK2Jvb2wgU2NyaXB0
R2xvYmFsT2JqZWN0OjpzZXQoSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFy
KiBuYW1lLCBJbmplY3RlZFNjcmlwdEhvc3QqIHZhbHVlKQogewogICAgIEpTTG9ja0hvbGRlciBs
b2NrKHNjcmlwdFN0YXRlKTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSk7CkBAIC05MCw3ICs5MCw3IEBAIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2Ny
aXB0U3RhdGUKIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQogCi1ib29sIFNjcmlwdEds
b2JhbE9iamVjdDo6Z2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFt
ZSwgU2NyaXB0T2JqZWN0JiB2YWx1ZSkKK2Jvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpnZXQoSlND
OjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBTY3JpcHRPYmplY3Qm
IHZhbHVlKQogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKICAgICBKU1Zh
bHVlIGpzVmFsdWUgPSBzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nZXQoc2Ny
aXB0U3RhdGUsIElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpKTsKQEAgLTEwNCw3ICsxMDQs
NyBAQCBib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6Z2V0KFNjcmlwdFN0YXRlCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpyZW1vdmUoU2NyaXB0U3RhdGUq
IHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lKQorYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6
OnJlbW92ZShKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUpCiB7
CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0U3RhdGUpOwogICAgIHNjcmlwdFN0YXRlLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHNjcmlw
dFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHNjcmlwdFN0YXRlLCBJZGVudGlmaWVyKHNj
cmlwdFN0YXRlLCBuYW1lKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRPYmplY3QuaAkocmV2aXNpb24gMTU1NzM1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDI1ICs0MywyNSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBTY3JpcHRPYmplY3QgOiBwdWJsaWMgU2NyaXB0
VmFsdWUgewogICAgIHB1YmxpYzoKLSAgICAgICAgU2NyaXB0T2JqZWN0KFNjcmlwdFN0YXRlKiwg
SlNDOjpKU09iamVjdCopOwotICAgICAgICBTY3JpcHRPYmplY3QoU2NyaXB0U3RhdGUqLCBjb25z
dCBTY3JpcHRWYWx1ZSYpOworICAgICAgICBTY3JpcHRPYmplY3QoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTT2JqZWN0Kik7CisgICAgICAgIFNjcmlwdE9iamVjdChKU0M6OkV4ZWNTdGF0ZSosIGNv
bnN0IFNjcmlwdFZhbHVlJik7CiAgICAgICAgIFNjcmlwdE9iamVjdCgpIDogbV9zY3JpcHRTdGF0
ZSgwKSB7IH0KICAgICAgICAgSlNDOjpKU09iamVjdCoganNPYmplY3QoKSBjb25zdCB7IHJldHVy
biBhc09iamVjdChqc1ZhbHVlKCkpOyB9Ci0gICAgICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyaXB0U3RhdGU7IH0KKyAgICAgICAgSlNDOjpFeGVjU3Rh
dGUqIHNjcmlwdFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHRTdGF0ZTsgfQogCiAgICAg
cHJvdGVjdGVkOgotICAgICAgICBTY3JpcHRTdGF0ZSogbV9zY3JpcHRTdGF0ZTsKKyAgICAgICAg
SlNDOjpFeGVjU3RhdGUqIG1fc2NyaXB0U3RhdGU7CiAgICAgfTsKIAogICAgIGNsYXNzIFNjcmlw
dEdsb2JhbE9iamVjdCB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgYm9vbCBzZXQoU2Ny
aXB0U3RhdGUqLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBTY3JpcHRPYmplY3QmKTsKKyAgICAg
ICAgc3RhdGljIGJvb2wgc2V0KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgY2hhciogbmFtZSwgY29u
c3QgU2NyaXB0T2JqZWN0Jik7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICAgICAgc3RhdGlj
IGJvb2wgc2V0KFNjcmlwdFN0YXRlKiwgY29uc3QgY2hhciogbmFtZSwgSW5zcGVjdG9yRnJvbnRl
bmRIb3N0Kik7Ci0gICAgICAgIHN0YXRpYyBib29sIHNldChTY3JpcHRTdGF0ZSosIGNvbnN0IGNo
YXIqIG5hbWUsIEluamVjdGVkU2NyaXB0SG9zdCopOworICAgICAgICBzdGF0aWMgYm9vbCBzZXQo
SlNDOjpFeGVjU3RhdGUqLCBjb25zdCBjaGFyKiBuYW1lLCBJbnNwZWN0b3JGcm9udGVuZEhvc3Qq
KTsKKyAgICAgICAgc3RhdGljIGJvb2wgc2V0KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgY2hhciog
bmFtZSwgSW5qZWN0ZWRTY3JpcHRIb3N0Kik7CiAjZW5kaWYKLSAgICAgICAgc3RhdGljIGJvb2wg
Z2V0KFNjcmlwdFN0YXRlKiwgY29uc3QgY2hhciogbmFtZSwgU2NyaXB0T2JqZWN0Jik7Ci0gICAg
ICAgIHN0YXRpYyBib29sIHJlbW92ZShTY3JpcHRTdGF0ZSosIGNvbnN0IGNoYXIqIG5hbWUpOwor
ICAgICAgICBzdGF0aWMgYm9vbCBnZXQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBjaGFyKiBuYW1l
LCBTY3JpcHRPYmplY3QmKTsKKyAgICAgICAgc3RhdGljIGJvb2wgcmVtb3ZlKEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgY2hhciogbmFtZSk7CiAgICAgcHJpdmF0ZToKICAgICAgICAgU2NyaXB0R2xv
YmFsT2JqZWN0KCkgeyB9CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdFByb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRQcm9maWxlci5jcHAJKHJldmlzaW9uIDE1NTczNSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcs
NyArNTcsNyBAQCB1bnNpZ25lZCBTY3JpcHRQcm9maWxlcjo6Z2V0SGVhcE9iamVjdElkCiAgICAg
cmV0dXJuIDA7CiB9CiAKLXZvaWQgU2NyaXB0UHJvZmlsZXI6OnN0YXJ0KFNjcmlwdFN0YXRlKiBz
dGF0ZSwgY29uc3QgU3RyaW5nJiB0aXRsZSkKK3ZvaWQgU2NyaXB0UHJvZmlsZXI6OnN0YXJ0KEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsKICAgICBKU0M6Okxl
Z2FjeVByb2ZpbGVyOjpwcm9maWxlcigpLT5zdGFydFByb2ZpbGluZyhzdGF0ZSwgdGl0bGUpOwog
fQpAQCAtNzEsMTEgKzcxLDExIEBAIHZvaWQgU2NyaXB0UHJvZmlsZXI6OnN0YXJ0Rm9yUGFnZShQ
YWdlKiAKICNpZiBFTkFCTEUoV09SS0VSUykKIHZvaWQgU2NyaXB0UHJvZmlsZXI6OnN0YXJ0Rm9y
V29ya2VyR2xvYmFsU2NvcGUoV29ya2VyR2xvYmFsU2NvcGUqIGNvbnRleHQsIGNvbnN0IFN0cmlu
ZyYgdGl0bGUpCiB7Ci0gICAgc3RhcnQoc2NyaXB0U3RhdGVGcm9tV29ya2VyR2xvYmFsU2NvcGUo
Y29udGV4dCksIHRpdGxlKTsKKyAgICBzdGFydChleGVjU3RhdGVGcm9tV29ya2VyR2xvYmFsU2Nv
cGUoY29udGV4dCksIHRpdGxlKTsKIH0KICNlbmRpZgogCi1QYXNzUmVmUHRyPFNjcmlwdFByb2Zp
bGU+IFNjcmlwdFByb2ZpbGVyOjpzdG9wKFNjcmlwdFN0YXRlKiBzdGF0ZSwgY29uc3QgU3RyaW5n
JiB0aXRsZSkKK1Bhc3NSZWZQdHI8U2NyaXB0UHJvZmlsZT4gU2NyaXB0UHJvZmlsZXI6OnN0b3Ao
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBjb25zdCBTdHJpbmcmIHRpdGxlKQogewogICAgIFJlZlB0
cjxKU0M6OlByb2ZpbGU+IHByb2ZpbGUgPSBKU0M6OkxlZ2FjeVByb2ZpbGVyOjpwcm9maWxlcigp
LT5zdG9wUHJvZmlsaW5nKHN0YXRlLCB0aXRsZSk7CiAgICAgcmV0dXJuIFNjcmlwdFByb2ZpbGU6
OmNyZWF0ZShwcm9maWxlKTsKQEAgLTkwLDcgKzkwLDcgQEAgUGFzc1JlZlB0cjxTY3JpcHRQcm9m
aWxlPiBTY3JpcHRQcm9maWxlcgogI2lmIEVOQUJMRShXT1JLRVJTKQogUGFzc1JlZlB0cjxTY3Jp
cHRQcm9maWxlPiBTY3JpcHRQcm9maWxlcjo6c3RvcEZvcldvcmtlckdsb2JhbFNjb3BlKFdvcmtl
ckdsb2JhbFNjb3BlKiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHRpdGxlKQogewotICAgIHJldHVy
biBzdG9wKHNjcmlwdFN0YXRlRnJvbVdvcmtlckdsb2JhbFNjb3BlKGNvbnRleHQpLCB0aXRsZSk7
CisgICAgcmV0dXJuIHN0b3AoZXhlY1N0YXRlRnJvbVdvcmtlckdsb2JhbFNjb3BlKGNvbnRleHQp
LCB0aXRsZSk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0UHJvZmlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRQcm9maWxlci5oCShyZXZpc2lvbiAxNTU3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRQcm9maWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMiArNTks
MTIgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGNvbGxlY3RHYXJiYWdlKCk7CiAgICAgc3Rh
dGljIFNjcmlwdE9iamVjdCBvYmplY3RCeUhlYXBPYmplY3RJZCh1bnNpZ25lZCBpZCk7CiAgICAg
c3RhdGljIHVuc2lnbmVkIGdldEhlYXBPYmplY3RJZChjb25zdCBTY3JpcHRWYWx1ZSYpOwotICAg
IHN0YXRpYyB2b2lkIHN0YXJ0KFNjcmlwdFN0YXRlKiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB0aXRs
ZSk7CisgICAgc3RhdGljIHZvaWQgc3RhcnQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcm
IHRpdGxlKTsKICAgICBzdGF0aWMgdm9pZCBzdGFydEZvclBhZ2UoUGFnZSosIGNvbnN0IFN0cmlu
ZyYgdGl0bGUpOwogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgIHN0YXRpYyB2b2lkIHN0YXJ0Rm9y
V29ya2VyR2xvYmFsU2NvcGUoV29ya2VyR2xvYmFsU2NvcGUqLCBjb25zdCBTdHJpbmcmIHRpdGxl
KTsKICNlbmRpZgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHN0b3AoU2Ny
aXB0U3RhdGUqIHN0YXRlLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTY3JpcHRQcm9maWxlPiBzdG9wKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0
aXRsZSk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2NyaXB0UHJvZmlsZT4gc3RvcEZvclBhZ2Uo
UGFnZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpOwogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHN0b3BGb3JXb3JrZXJHbG9iYWxTY29wZShX
b3JrZXJHbG9iYWxTY29wZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmNwcAkocmV2aXNpb24gMTU1NzM1KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OSw3ICs0OSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRE9NV2luZG93KiBk
b21XaW5kb3dGcm9tU2NyaXB0U3RhdGUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKQorRE9NV2lu
ZG93KiBkb21XaW5kb3dGcm9tRXhlY1N0YXRlKEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSkK
IHsKICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY3JpcHRTdGF0ZS0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pbmhlcml0cyhK
U0RPTVdpbmRvd0Jhc2U6OmluZm8oKSkpCkBAIC01Nyw3ICs1Nyw3IEBAIERPTVdpbmRvdyogZG9t
V2luZG93RnJvbVNjcmlwdFN0YXRlKFNjcmkKICAgICByZXR1cm4gSlNDOjpqc0Nhc3Q8SlNET01X
aW5kb3dCYXNlKj4oZ2xvYmFsT2JqZWN0KS0+aW1wbCgpOwogfQogCi1TY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0RnJvbVNjcmlwdFN0YXRlKFNjcmlwdFN0YXRl
KiBzY3JpcHRTdGF0ZSkKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRGcm9tRXhlY1N0YXRlKEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSkKIHsKICAgICBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY3JpcHRTdGF0ZS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pbmhlcml0cyhKU0RPTUdsb2Jh
bE9iamVjdDo6aW5mbygpKSkKQEAgLTY1LDcgKzY1LDcgQEAgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQwogICAgIHJldHVybiBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKIH0KIAotU2Ny
aXB0U3RhdGUqIG1haW5Xb3JsZFNjcmlwdFN0YXRlKEZyYW1lKiBmcmFtZSkKK0pTQzo6RXhlY1N0
YXRlKiBtYWluV29ybGRFeGVjU3RhdGUoRnJhbWUqIGZyYW1lKQogewogICAgIGlmICghZnJhbWUp
CiAgICAgICAgIHJldHVybiAwOwpAQCAtNzMsNyArNzMsNyBAQCBTY3JpcHRTdGF0ZSogbWFpbldv
cmxkU2NyaXB0U3RhdGUoRnJhbWUqCiAgICAgcmV0dXJuIHNoZWxsLT53aW5kb3coKS0+Z2xvYmFs
RXhlYygpOwogfQogCi1TY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGVGcm9tTm9kZShET01XcmFwcGVy
V29ybGQqIHdvcmxkLCBOb2RlKiBub2RlKQorSlNDOjpFeGVjU3RhdGUqIGV4ZWNTdGF0ZUZyb21O
b2RlKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2Rl
KQogICAgICAgICByZXR1cm4gMDsKQEAgLTg1LDEzICs4NSwxMyBAQCBTY3JpcHRTdGF0ZSogc2Ny
aXB0U3RhdGVGcm9tTm9kZShET01XcmFwCiAgICAgcmV0dXJuIGZyYW1lLT5zY3JpcHQoKS5nbG9i
YWxPYmplY3Qod29ybGQpLT5nbG9iYWxFeGVjKCk7CiB9CiAKLVNjcmlwdFN0YXRlKiBzY3JpcHRT
dGF0ZUZyb21QYWdlKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIFBhZ2UqIHBhZ2UpCitKU0M6OkV4
ZWNTdGF0ZSogZXhlY1N0YXRlRnJvbVBhZ2UoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgUGFnZSog
cGFnZSkKIHsKICAgICByZXR1cm4gcGFnZS0+bWFpbkZyYW1lKCkuc2NyaXB0KCkuZ2xvYmFsT2Jq
ZWN0KHdvcmxkKS0+Z2xvYmFsRXhlYygpOwogfQogCiAjaWYgRU5BQkxFKFdPUktFUlMpCi1TY3Jp
cHRTdGF0ZSogc2NyaXB0U3RhdGVGcm9tV29ya2VyR2xvYmFsU2NvcGUoV29ya2VyR2xvYmFsU2Nv
cGUqIHdvcmtlckdsb2JhbFNjb3BlKQorSlNDOjpFeGVjU3RhdGUqIGV4ZWNTdGF0ZUZyb21Xb3Jr
ZXJHbG9iYWxTY29wZShXb3JrZXJHbG9iYWxTY29wZSogd29ya2VyR2xvYmFsU2NvcGUpCiB7CiAg
ICAgcmV0dXJuIHdvcmtlckdsb2JhbFNjb3BlLT5zY3JpcHQoKS0+d29ya2VyR2xvYmFsU2NvcGVX
cmFwcGVyKCktPmdsb2JhbEV4ZWMoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0U3RhdGUuaAkocmV2aXNpb24gMTU1NzM1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTYgKzUyLDE2IEBA
IGNsYXNzIFdvcmtlckdsb2JhbFNjb3BlOwogLy8gRm9yIG5vdywgdGhlIHNlcGFyYXRpb24gaXMg
cHVyZWx5IGJ5IGNvbnZlbnRpb24uCiB0eXBlZGVmIEpTQzo6RXhlY1N0YXRlIFNjcmlwdFN0YXRl
OwogCi1ET01XaW5kb3cqIGRvbVdpbmRvd0Zyb21TY3JpcHRTdGF0ZShTY3JpcHRTdGF0ZSopOwot
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dEZyb21TY3JpcHRT
dGF0ZShTY3JpcHRTdGF0ZSopOworRE9NV2luZG93KiBkb21XaW5kb3dGcm9tRXhlY1N0YXRlKFNj
cmlwdFN0YXRlKik7CitTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0RnJvbUV4ZWNTdGF0ZShKU0M6OkV4ZWNTdGF0ZSopOwogCi1TY3JpcHRTdGF0ZSogbWFpbldv
cmxkU2NyaXB0U3RhdGUoRnJhbWUqKTsKK0pTQzo6RXhlY1N0YXRlKiBtYWluV29ybGRFeGVjU3Rh
dGUoRnJhbWUqKTsKIAotU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlRnJvbU5vZGUoRE9NV3JhcHBl
cldvcmxkKiwgTm9kZSopOwotU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlRnJvbVBhZ2UoRE9NV3Jh
cHBlcldvcmxkKiwgUGFnZSopOworSlNDOjpFeGVjU3RhdGUqIGV4ZWNTdGF0ZUZyb21Ob2RlKERP
TVdyYXBwZXJXb3JsZCosIE5vZGUqKTsKK0pTQzo6RXhlY1N0YXRlKiBleGVjU3RhdGVGcm9tUGFn
ZShET01XcmFwcGVyV29ybGQqLCBQYWdlKik7CiAKICNpZiBFTkFCTEUoV09SS0VSUykKLVNjcmlw
dFN0YXRlKiBzY3JpcHRTdGF0ZUZyb21Xb3JrZXJHbG9iYWxTY29wZShXb3JrZXJHbG9iYWxTY29w
ZSopOworSlNDOjpFeGVjU3RhdGUqIGV4ZWNTdGF0ZUZyb21Xb3JrZXJHbG9iYWxTY29wZShXb3Jr
ZXJHbG9iYWxTY29wZSopOwogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDE1
NTczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgU2NyaXB0VmFsdWU6OmdldFN0cmluZyhTY3JpcHRTdGF0
ZSogc2NyaXB0U3RhdGUsIFN0cmluZyYgcmVzdWx0KSBjb25zdAorYm9vbCBTY3JpcHRWYWx1ZTo6
Z2V0U3RyaW5nKEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSwgU3RyaW5nJiByZXN1bHQpIGNv
bnN0CiB7CiAgICAgaWYgKCFtX3ZhbHVlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01NCw3
ICs1NCw3IEBAIGJvb2wgU2NyaXB0VmFsdWU6OmdldFN0cmluZyhTY3JpcHRTdGF0ZSoKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotU3RyaW5nIFNjcmlwdFZhbHVlOjp0b1N0cmluZyhTY3JpcHRTdGF0
ZSogc2NyaXB0U3RhdGUpIGNvbnN0CitTdHJpbmcgU2NyaXB0VmFsdWU6OnRvU3RyaW5nKEpTQzo6
RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSkgY29uc3QKIHsKICAgICBTdHJpbmcgcmVzdWx0ID0gbV92
YWx1ZS5nZXQoKS50b1N0cmluZyhzY3JpcHRTdGF0ZSktPnZhbHVlKHNjcmlwdFN0YXRlKTsKICAg
ICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYW4gZXhjZXB0aW9uIGlzIHRocm93biBhcyBwYXJ0
IG9mIGludm9raW5nIHRvU3RyaW5nIG9uIHRoZSBvYmplY3QuCkBAIC02Myw3ICs2Myw3IEBAIFN0
cmluZyBTY3JpcHRWYWx1ZTo6dG9TdHJpbmcoU2NyaXB0U3RhdGUKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1ib29sIFNjcmlwdFZhbHVlOjppc0VxdWFsKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0
ZSwgY29uc3QgU2NyaXB0VmFsdWUmIGFub3RoZXJWYWx1ZSkgY29uc3QKK2Jvb2wgU2NyaXB0VmFs
dWU6OmlzRXF1YWwoSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBTY3JpcHRWYWx1
ZSYgYW5vdGhlclZhbHVlKSBjb25zdAogewogICAgIGlmIChoYXNOb1ZhbHVlKCkpCiAgICAgICAg
IHJldHVybiBhbm90aGVyVmFsdWUuaGFzTm9WYWx1ZSgpOwpAQCAtOTgsMjUgKzk4LDI1IEBAIGJv
b2wgU2NyaXB0VmFsdWU6OmlzRnVuY3Rpb24oKSBjb25zdAogICAgIHJldHVybiBnZXRDYWxsRGF0
YShtX3ZhbHVlLmdldCgpLCBjYWxsRGF0YSkgIT0gQ2FsbFR5cGVOb25lOwogfQogCi1QYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2NyaXB0VmFsdWU6OnNlcmlhbGl6ZShTY3JpcHRT
dGF0ZSogc2NyaXB0U3RhdGUsIFNlcmlhbGl6YXRpb25FcnJvck1vZGUgdGhyb3dFeGNlcHRpb25z
KQorUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNjcmlwdFZhbHVlOjpzZXJpYWxp
emUoSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlIHRo
cm93RXhjZXB0aW9ucykKIHsKICAgICByZXR1cm4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVh
dGUoc2NyaXB0U3RhdGUsIGpzVmFsdWUoKSwgMCwgMCwgdGhyb3dFeGNlcHRpb25zKTsKIH0KIAot
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNjcmlwdFZhbHVlOjpzZXJpYWxpemUo
U2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBNZXNzYWdlUG9ydEFycmF5KiBtZXNzYWdlUG9ydHMs
IEFycmF5QnVmZmVyQXJyYXkqIGFycmF5QnVmZmVycywgYm9vbCYgZGlkVGhyb3cpCitQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2NyaXB0VmFsdWU6OnNlcmlhbGl6ZShKU0M6OkV4
ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIE1lc3NhZ2VQb3J0QXJyYXkqIG1lc3NhZ2VQb3J0cywgQXJy
YXlCdWZmZXJBcnJheSogYXJyYXlCdWZmZXJzLCBib29sJiBkaWRUaHJvdykKIHsKICAgICBSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZShzY3JpcHRTdGF0ZSwganNWYWx1ZSgpLCBtZXNzYWdlUG9ydHMsIGFy
cmF5QnVmZmVycyk7CiAgICAgZGlkVGhyb3cgPSBzY3JpcHRTdGF0ZS0+aGFkRXhjZXB0aW9uKCk7
CiAgICAgcmV0dXJuIHNlcmlhbGl6ZWRWYWx1ZS5yZWxlYXNlKCk7CiB9CiAKLVNjcmlwdFZhbHVl
IFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSogdmFsdWUsIFNlcmlhbGl6YXRpb25FcnJvck1vZGUgdGhyb3dFeGNl
cHRpb25zKQorU2NyaXB0VmFsdWUgU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKEpTQzo6RXhlY1N0
YXRlKiBzY3JpcHRTdGF0ZSwgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiB2YWx1ZSwgU2VyaWFsaXph
dGlvbkVycm9yTW9kZSB0aHJvd0V4Y2VwdGlvbnMpCiB7CiAgICAgcmV0dXJuIFNjcmlwdFZhbHVl
KHNjcmlwdFN0YXRlLT52bSgpLCB2YWx1ZS0+ZGVzZXJpYWxpemUoc2NyaXB0U3RhdGUsIHNjcmlw
dFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIDAsIHRocm93RXhjZXB0aW9ucykpOwogfQog
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLXN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBqc1RvSW5zcGVjdG9yVmFsdWUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBKU1ZhbHVlIHZh
bHVlLCBpbnQgbWF4RGVwdGgpCitzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4ganNU
b0luc3BlY3RvclZhbHVlKEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSwgaW50IG1heERlcHRoKQogewogICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkBAIC0xNjksNyArMTY5LDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IGpzVG9JbgogICAgIHJldHVybiAwOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiBTY3JpcHRWYWx1ZTo6dG9JbnNwZWN0b3JWYWx1ZShTY3JpcHRTdGF0ZSogc2NyaXB0
U3RhdGUpIGNvbnN0CitQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBTY3JpcHRWYWx1ZTo6dG9J
bnNwZWN0b3JWYWx1ZShKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUpIGNvbnN0CiB7CiAgICAg
SlNDOjpKU0xvY2tIb2xkZXIgaG9sZGVyKHNjcmlwdFN0YXRlKTsKICAgICByZXR1cm4ganNUb0lu
c3BlY3RvclZhbHVlKHNjcmlwdFN0YXRlLCBtX3ZhbHVlLmdldCgpLCBJbnNwZWN0b3JWYWx1ZTo6
bWF4RGVwdGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5o
CShyZXZpc2lvbiAxNTU3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRW
YWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5TY3JpcHRWYWx1ZSgpIHt9CiAKICAgICBKU0M6OkpTVmFsdWUganNWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KLSAgICBib29sIGdldFN0cmluZyhTY3JpcHRTdGF0
ZSosIFN0cmluZyYgcmVzdWx0KSBjb25zdDsKLSAgICBTdHJpbmcgdG9TdHJpbmcoU2NyaXB0U3Rh
dGUqKSBjb25zdDsKLSAgICBib29sIGlzRXF1YWwoU2NyaXB0U3RhdGUqLCBjb25zdCBTY3JpcHRW
YWx1ZSYpIGNvbnN0OworICAgIGJvb2wgZ2V0U3RyaW5nKEpTQzo6RXhlY1N0YXRlKiwgU3RyaW5n
JiByZXN1bHQpIGNvbnN0OworICAgIFN0cmluZyB0b1N0cmluZyhKU0M6OkV4ZWNTdGF0ZSopIGNv
bnN0OworICAgIGJvb2wgaXNFcXVhbChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFNjcmlwdFZhbHVl
JikgY29uc3Q7CiAgICAgYm9vbCBpc051bGwoKSBjb25zdDsKICAgICBib29sIGlzVW5kZWZpbmVk
KCkgY29uc3Q7CiAgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0OwpAQCAtNjUsMTIgKzY1LDEyIEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTY3JpcHRWYWx1ZSYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsgfQogCi0gICAgUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZShTY3JpcHRTdGF0ZSosIFNlcmlh
bGl6YXRpb25FcnJvck1vZGUgPSBUaHJvd2luZyk7Ci0gICAgUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IHNlcmlhbGl6ZShTY3JpcHRTdGF0ZSosIE1lc3NhZ2VQb3J0QXJyYXkqLCBB
cnJheUJ1ZmZlckFycmF5KiwgYm9vbCYpOwotICAgIHN0YXRpYyBTY3JpcHRWYWx1ZSBkZXNlcmlh
bGl6ZShTY3JpcHRTdGF0ZSosIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSosIFNlcmlhbGl6YXRpb25F
cnJvck1vZGUgPSBUaHJvd2luZyk7CisgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHNlcmlhbGl6ZShKU0M6OkV4ZWNTdGF0ZSosIFNlcmlhbGl6YXRpb25FcnJvck1vZGUgPSBU
aHJvd2luZyk7CisgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6
ZShKU0M6OkV4ZWNTdGF0ZSosIE1lc3NhZ2VQb3J0QXJyYXkqLCBBcnJheUJ1ZmZlckFycmF5Kiwg
Ym9vbCYpOworICAgIHN0YXRpYyBTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZShKU0M6OkV4ZWNTdGF0
ZSosIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSosIFNlcmlhbGl6YXRpb25FcnJvck1vZGUgPSBUaHJv
d2luZyk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IHRvSW5zcGVjdG9yVmFsdWUoU2NyaXB0U3RhdGUqKSBjb25zdDsKKyAgICBQYXNzUmVm
UHRyPEluc3BlY3RvclZhbHVlPiB0b0luc3BlY3RvclZhbHVlKEpTQzo6RXhlY1N0YXRlKikgY29u
c3Q7CiAjZW5kaWYKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMTU1NzM1KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjAwNSw3ICsyMDA1LDcgQEAgSlNWYWx1ZSBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmRlc2VyaWFsaQogfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLVNjcmlwdFZh
bHVlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemVGb3JJbnNwZWN0b3IoU2NyaXB0
U3RhdGUqIHNjcmlwdFN0YXRlKQorU2NyaXB0VmFsdWUgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpk
ZXNlcmlhbGl6ZUZvckluc3BlY3RvcihKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUpCiB7CiAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IGRlc2VyaWFsaXplKHNjcmlwdFN0YXRlLCBzY3JpcHRTdGF0ZS0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwKTsKICAgICByZXR1cm4gU2NyaXB0VmFsdWUoc2NyaXB0
U3RhdGUtPnZtKCksIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCShyZXZpc2lvbiAxNTU3MzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtOTIsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZVJlZiBkZXNlcmlhbGl6
ZShKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAKICNpZiBFTkFCTEUoSU5T
UEVDVE9SKQotICAgIFNjcmlwdFZhbHVlIGRlc2VyaWFsaXplRm9ySW5zcGVjdG9yKFNjcmlwdFN0
YXRlKik7CisgICAgU2NyaXB0VmFsdWUgZGVzZXJpYWxpemVGb3JJbnNwZWN0b3IoSlNDOjpFeGVj
U3RhdGUqKTsKICNlbmRpZgogCiAgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKCkgeyBy
ZXR1cm4gbV9kYXRhOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDE1
NTczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg1OSwxMiArODU5LDEyIEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gRG9jdW1lbnQ6OmNyZWF0
ZUVsZW0KICAgICByZXR1cm4gc2V0VHlwZUV4dGVuc2lvbihjcmVhdGVFbGVtZW50TlMobmFtZXNw
YWNlVVJJLCBxdWFsaWZpZWROYW1lLCBlYyksIHR5cGVFeHRlbnNpb24pOwogfQogCi1QYXNzUmVm
UHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gRG9jdW1lbnQ6OnJlZ2lzdGVyRWxlbWVudChX
ZWJDb3JlOjpTY3JpcHRTdGF0ZSogc3RhdGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gRG9j
dW1lbnQ6OnJlZ2lzdGVyRWxlbWVudChXZWJDb3JlOjpKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgcmV0dXJu
IHJlZ2lzdGVyRWxlbWVudChzdGF0ZSwgbmFtZSwgRGljdGlvbmFyeSgpLCBlYyk7CiB9CiAKLVBh
c3NSZWZQdHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBEb2N1bWVudDo6cmVnaXN0ZXJFbGVt
ZW50KFdlYkNvcmU6OlNjcmlwdFN0YXRlKiBzdGF0ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
LCBjb25zdCBEaWN0aW9uYXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQ
dHI8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPiBEb2N1bWVudDo6cmVnaXN0ZXJFbGVtZW50KFdl
YkNvcmU6OkpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBj
b25zdCBEaWN0aW9uYXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAo
IWlzSFRNTERvY3VtZW50KCkgJiYgIWlzWEhUTUxEb2N1bWVudCgpKSB7CiAgICAgICAgIGVjID0g
Tk9UX1NVUFBPUlRFRF9FUlI7CkBAIC00ODE1LDcgKzQ4MTUsNyBAQCB2b2lkIERvY3VtZW50Ojph
ZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlCiAgICAgICAgIHBhZ2UtPmNvbnNvbGUoKS5hZGRNZXNz
YWdlKHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIHJlcXVlc3RJZGVudGlmaWVyLCB0aGlzKTsKIH0K
IAotdm9pZCBEb2N1bWVudDo6YWRkTWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2Fn
ZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNl
VVJMLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFBhc3NSZWZQ
dHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2ssIFNjcmlwdFN0YXRlKiBzdGF0ZSwgdW5zaWdu
ZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcikKK3ZvaWQgRG9jdW1lbnQ6OmFkZE1lc3NhZ2UoTWVz
c2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWdu
ZWQgY29sdW1uTnVtYmVyLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrLCBK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCiB7
CiAgICAgaWYgKCFpc0NvbnRleHRUaHJlYWQoKSkgewogICAgICAgICBwb3N0VGFzayhBZGRDb25z
b2xlTWVzc2FnZVRhc2s6OmNyZWF0ZShzb3VyY2UsIGxldmVsLCBtZXNzYWdlKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTU1NzM1KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMzgsOCArMTEzOCw4IEBAIHB1YmxpYzoK
ICNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQogICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY3Jl
YXRlRWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgY29uc3QgQXRvbWljU3Ry
aW5nJiB0eXBlRXh0ZW5zaW9uLCBFeGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxFbGVt
ZW50PiBjcmVhdGVFbGVtZW50TlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNv
bnN0IFN0cmluZyYgcXVhbGlmaWVkTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlRXh0ZW5z
aW9uLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29uc3Ry
dWN0b3I+IHJlZ2lzdGVyRWxlbWVudChXZWJDb3JlOjpTY3JpcHRTdGF0ZSosIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8Q3VzdG9tRWxl
bWVudENvbnN0cnVjdG9yPiByZWdpc3RlckVsZW1lbnQoV2ViQ29yZTo6U2NyaXB0U3RhdGUqLCBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcj4gcmVn
aXN0ZXJFbGVtZW50KFdlYkNvcmU6OkpTQzo6RXhlY1N0YXRlKiwgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxDdXN0b21FbGVtZW50Q29u
c3RydWN0b3I+IHJlZ2lzdGVyRWxlbWVudChXZWJDb3JlOjpKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywgRXhjZXB0aW9u
Q29kZSYpOwogICAgIEN1c3RvbUVsZW1lbnRSZWdpc3RyeSogcmVnaXN0cnkoKSBjb25zdCB7IHJl
dHVybiBtX3JlZ2lzdHJ5LmdldCgpOyB9CiAgICAgdm9pZCBkaWRDcmVhdGVDdXN0b21FbGVtZW50
KEVsZW1lbnQqLCBDdXN0b21FbGVtZW50Q29uc3RydWN0b3IqKTsKICNlbmRpZgpAQCAtMTIyMCw3
ICsxMjIwLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcmVmU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpIHsgcmVmKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZTY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkgeyBkZXJlZigpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZShN
ZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51
bWJlciwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+LCBTY3JpcHRTdGF0ZSogPSAwLCB1bnNp
Z25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7CisgICAgdmlydHVhbCB2b2lkIGFkZE1l
c3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBj
b2x1bW5OdW1iZXIsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiwgSlNDOjpFeGVjU3RhdGUq
ID0gMCwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOwogCiAgICAgdmlydHVh
bCBkb3VibGUgbWluaW11bVRpbWVySW50ZXJ2YWwoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL05vZGVGaWx0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlRmlsdGVyLmNwcAkocmV2aXNpb24gMTU1NzM1KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L05vZGVGaWx0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotc2hvcnQgTm9kZUZpbHRlcjo6YWNjZXB0Tm9kZShTY3JpcHRTdGF0
ZSogc3RhdGUsIE5vZGUqIG5vZGUpIGNvbnN0CitzaG9ydCBOb2RlRmlsdGVyOjphY2NlcHROb2Rl
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgTm9kZSogbm9kZSkgY29uc3QKIHsKICAgICAvLyBjYXN0
IHRvIHNob3J0IHNpbGVuY2VzICJlbnVtZXJhbCBhbmQgbm9uLWVudW1lcmFsIHR5cGVzIGluIHJl
dHVybiIgd2FybmluZwogICAgIHJldHVybiBtX2NvbmRpdGlvbiA/IG1fY29uZGl0aW9uLT5hY2Nl
cHROb2RlKHN0YXRlLCBub2RlKSA6IHN0YXRpY19jYXN0PHNob3J0PihGSUxURVJfQUNDRVBUKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuaAkocmV2aXNpb24gMTU1NzM1KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsMTEgKzc1LDEx
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Tm9kZUZpbHRlcigpKTsKICAgICAgICAgfQogCi0gICAgICAgIHNob3J0IGFjY2VwdE5vZGUoU2Ny
aXB0U3RhdGUqLCBOb2RlKikgY29uc3Q7CisgICAgICAgIHNob3J0IGFjY2VwdE5vZGUoSlNDOjpF
eGVjU3RhdGUqLCBOb2RlKikgY29uc3Q7CiAKICAgICAgICAgLy8gRG8gbm90IGNhbGwgdGhlc2Ug
ZnVuY3Rpb25zLiBUaGV5IGFyZSBqdXN0IHNjYWZmb2xkaW5nIHRvIHN1cHBvcnQgdGhlIE9iamVj
dGl2ZS1DIGJpbmRpbmdzLgogICAgICAgICAvLyBUaGV5IG9wZXJhdGUgaW4gdGhlIG1haW4gdGhy
ZWFkIG5vcm1hbCB3b3JsZCwgYW5kIHRoZXkgc3dhbGxvdyBKUyBleGNlcHRpb25zLgotICAgICAg
ICBzaG9ydCBhY2NlcHROb2RlKE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIGFjY2VwdE5vZGUo
c2NyaXB0U3RhdGVGcm9tTm9kZShtYWluVGhyZWFkTm9ybWFsV29ybGQoKSwgbm9kZSksIG5vZGUp
OyB9CisgICAgICAgIHNob3J0IGFjY2VwdE5vZGUoTm9kZSogbm9kZSkgY29uc3QgeyByZXR1cm4g
YWNjZXB0Tm9kZShleGVjU3RhdGVGcm9tTm9kZShtYWluVGhyZWFkTm9ybWFsV29ybGQoKSwgbm9k
ZSksIG5vZGUpOyB9CiAgICAgICAgIAogICAgICAgICB2b2lkIHNldENvbmRpdGlvbihQYXNzUmVm
UHRyPE5vZGVGaWx0ZXJDb25kaXRpb24+IGNvbmRpdGlvbikgeyBBU1NFUlQoIW1fY29uZGl0aW9u
KTsgbV9jb25kaXRpb24gPSBjb25kaXRpb247IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmNwcAkocmV2aXNpb24gMTU1NzM1KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3
ICsyOSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc2hvcnQgTm9kZUZpbHRlckNvbmRp
dGlvbjo6YWNjZXB0Tm9kZShTY3JpcHRTdGF0ZSosIE5vZGUqKSBjb25zdAorc2hvcnQgTm9kZUZp
bHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShKU0M6OkV4ZWNTdGF0ZSosIE5vZGUqKSBjb25zdAog
ewogICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5oCShyZXZpc2lvbiAxNTU3MzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBOb2RlRmlsdGVy
Q29uZGl0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8Tm9kZUZpbHRlckNvbmRpdGlvbj4gewogICAg
IHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+Tm9kZUZpbHRlckNvbmRpdGlvbigpIHsgfQotICAg
ICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoU2NyaXB0U3RhdGUqLCBOb2RlKikgY29uc3Qg
PSAwOworICAgICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoSlNDOjpFeGVjU3RhdGUqLCBO
b2RlKikgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRBZ2dyZWdhdGUoSlND
OjpTbG90VmlzaXRvciYpIHsgfQogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlSXRl
cmF0b3IuY3BwCShyZXZpc2lvbiAxNTU3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZUl0
ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBOb2RlSXRlcmF0b3I6
On5Ob2RlSXRlcmF0b3IoKQogICAgIHJvb3QoKS0+ZG9jdW1lbnQoKS5kZXRhY2hOb2RlSXRlcmF0
b3IodGhpcyk7CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZShT
Y3JpcHRTdGF0ZSogc3RhdGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxOb2RlPiBO
b2RlSXRlcmF0b3I6Om5leHROb2RlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CiAgICAgaWYgKG1fZGV0YWNoZWQpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NU
QVRFX0VSUjsKQEAgLTExNCw3ICsxMTQsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IE5vZGVJdGVyYXRv
cjo6bmV4dE5vZGUoCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQ
dHI8Tm9kZT4gTm9kZUl0ZXJhdG9yOjpwcmV2aW91c05vZGUoU2NyaXB0U3RhdGUqIHN0YXRlLCBF
eGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9yOjpwcmV2aW91
c05vZGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBp
ZiAobV9kZXRhY2hlZCkgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuaAkocmV2aXNpb24gMTU1NzM1KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL05vZGVJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw4ICs0Myw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgfQogICAgICAgICB+Tm9kZUl0ZXJhdG9yKCk7
CiAKLSAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiBuZXh0Tm9kZShTY3JpcHRTdGF0ZSosIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiBwcmV2aW91c05vZGUoU2NyaXB0
U3RhdGUqLCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIFBhc3NSZWZQdHI8Tm9kZT4gbmV4dE5v
ZGUoSlNDOjpFeGVjU3RhdGUqLCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIFBhc3NSZWZQdHI8
Tm9kZT4gcHJldmlvdXNOb2RlKEpTQzo6RXhlY1N0YXRlKiwgRXhjZXB0aW9uQ29kZSYpOwogICAg
ICAgICB2b2lkIGRldGFjaCgpOwogCiAgICAgICAgIE5vZGUqIHJlZmVyZW5jZU5vZGUoKSBjb25z
dCB7IHJldHVybiBtX3JlZmVyZW5jZU5vZGUubm9kZS5nZXQoKTsgfQpAQCAtNTUsOCArNTUsOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgLy8gRG8gbm90IGNhbGwgdGhlc2UgZnVu
Y3Rpb25zLiBUaGV5IGFyZSBqdXN0IHNjYWZmb2xkaW5nIHRvIHN1cHBvcnQgdGhlIE9iamVjdGl2
ZS1DIGJpbmRpbmdzLgogICAgICAgICAvLyBUaGV5IG9wZXJhdGUgaW4gdGhlIG1haW4gdGhyZWFk
IG5vcm1hbCB3b3JsZCwgYW5kIHRoZXkgc3dhbGxvdyBKUyBleGNlcHRpb25zLgotICAgICAgICBQ
YXNzUmVmUHRyPE5vZGU+IG5leHROb2RlKEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBuZXh0
Tm9kZShzY3JpcHRTdGF0ZUZyb21Ob2RlKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpLCByZWZlcmVu
Y2VOb2RlKCkpLCBlYyk7IH0KLSAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiBwcmV2aW91c05vZGUo
RXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIHByZXZpb3VzTm9kZShzY3JpcHRTdGF0ZUZyb21O
b2RlKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpLCByZWZlcmVuY2VOb2RlKCkpLCBlYyk7IH0KKyAg
ICAgICAgUGFzc1JlZlB0cjxOb2RlPiBuZXh0Tm9kZShFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1
cm4gbmV4dE5vZGUoZXhlY1N0YXRlRnJvbU5vZGUobWFpblRocmVhZE5vcm1hbFdvcmxkKCksIHJl
ZmVyZW5jZU5vZGUoKSksIGVjKTsgfQorICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IHByZXZpb3Vz
Tm9kZShFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gcHJldmlvdXNOb2RlKGV4ZWNTdGF0ZUZy
b21Ob2RlKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpLCByZWZlcmVuY2VOb2RlKCkpLCBlYyk7IH0K
IAogICAgIHByaXZhdGU6CiAgICAgICAgIE5vZGVJdGVyYXRvcihQYXNzUmVmUHRyPE5vZGU+LCB1
bnNpZ25lZCB3aGF0VG9TaG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+LCBib29sIGV4cGFuZEVu
dGl0eVJlZmVyZW5jZXMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVj
dXRpb25Db250ZXh0LmNwcAkocmV2aXNpb24gMTU1NzM1KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTMsNyArMzEz
LDcgQEAgdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpyZXBvcnRFeGNlcAogICAgIG1fcGVu
ZGluZ0V4Y2VwdGlvbnMuY2xlYXIoKTsKIH0KIAotdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjphZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxl
dmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNp
Z25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFNjcmlwdFN0YXRlKiBzdGF0
ZSwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcikKK3ZvaWQgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VM
ZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVS
TCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCiB7CiAgICAgYWRk
TWVzc2FnZShzb3VyY2UsIGxldmVsLCBtZXNzYWdlLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIsIGNv
bHVtbk51bWJlciwgMCwgc3RhdGUsIHJlcXVlc3RJZGVudGlmaWVyKTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAkocmV2aXNpb24gMTU1NzM1
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsOCArNTEsNiBAQCBjbGFzcyBFdmVudFRhcmdldDsKIGNsYXNzIE1lc3Nh
Z2VQb3J0OwogY2xhc3MgU2NyaXB0Q2FsbFN0YWNrOwogCi10eXBlZGVmIEpTQzo6RXhlY1N0YXRl
IFNjcmlwdFN0YXRlOwotCiAjaWYgRU5BQkxFKEJMT0IpCiBjbGFzcyBQdWJsaWNVUkxNYW5hZ2Vy
OwogI2VuZGlmCkBAIC03OSw3ICs3Nyw3IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogPGh0dHA6
Ly93ZWJraXQub3JnL2IvMTE0MzE1PiBTY3JpcHRFeGVjdXRpb25Db250ZXh0IGxvZyBleGNlcHRp
b24gc2hvdWxkIGluY2x1ZGUgYSBjb2x1bW4gbnVtYmVyCiAgICAgdm9pZCByZXBvcnRFeGNlcHRp
b24oY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1u
TnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3Rh
Y2s+LCBDYWNoZWRTY3JpcHQqID0gMCk7CiAKLSAgICB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKE1l
c3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBT
dHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVt
YmVyLCBTY3JpcHRTdGF0ZSogPSAwLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0g
MCk7CisgICAgdm9pZCBhZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2
ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2ln
bmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgSlNDOjpFeGVjU3RhdGUqID0g
MCwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOwogICAgIHZpcnR1YWwgdm9p
ZCBhZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApID0gMDsK
IAogICAgIHZpcnR1YWwgU2VjdXJpdHlPcmlnaW4qIHRvcE9yaWdpbigpIGNvbnN0ID0gMDsKQEAg
LTE3OSw3ICsxNzcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgQWN0aXZlRE9NT2JqZWN0OjpSZWFzb25G
b3JTdXNwZW5zaW9uIHJlYXNvbkZvclN1c3BlbmRpbmdBY3RpdmVET01PYmplY3RzKCkgY29uc3Qg
eyByZXR1cm4gbV9yZWFzb25Gb3JTdXNwZW5kaW5nQWN0aXZlRE9NT2JqZWN0czsgfQogCiBwcml2
YXRlOgotICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VM
ZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5z
aWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBQYXNzUmVmUHRyPFNjcmlw
dENhbGxTdGFjaz4sIFNjcmlwdFN0YXRlKiA9IDAsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50
aWZpZXIgPSAwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJj
ZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291
cmNlVVJMLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFBhc3NS
ZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiwgSlNDOjpFeGVjU3RhdGUqID0gMCwgdW5zaWduZWQgbG9u
ZyByZXF1ZXN0SWRlbnRpZmllciA9IDApID0gMDsKICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0KiBl
cnJvckV2ZW50VGFyZ2V0KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBsb2dFeGNlcHRpb25Ub0Nv
bnNvbGUoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJM
LCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgUGFzc1JlZlB0cjxTY3JpcHRDYWxs
U3RhY2s+KSA9IDA7CiAgICAgYm9vbCBkaXNwYXRjaEVycm9yRXZlbnQoY29uc3QgU3RyaW5nJiBl
cnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCwgQ2FjaGVkU2NyaXB0Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
VHJhdmVyc2FsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVHJhdmVyc2Fs
LmNwcAkocmV2aXNpb24gMTU1NzM1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RyYXZlcnNhbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgTm9kZUl0ZXJhdG9yQmFzZTo6Tm9k
ZUl0ZXJhdG9yQmFzZShQYXNzUgogewogfQogCi1zaG9ydCBOb2RlSXRlcmF0b3JCYXNlOjphY2Nl
cHROb2RlKFNjcmlwdFN0YXRlKiBzdGF0ZSwgTm9kZSogbm9kZSkgY29uc3QKK3Nob3J0IE5vZGVJ
dGVyYXRvckJhc2U6OmFjY2VwdE5vZGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBOb2RlKiBub2Rl
KSBjb25zdAogewogICAgIC8vIEZJWE1FOiBUbyBoYW5kbGUgWE1MIHByb3Blcmx5IHdlIHdvdWxk
IGhhdmUgdG8gY2hlY2sgbV9leHBhbmRFbnRpdHlSZWZlcmVuY2VzLgogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vVHJhdmVyc2FsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L1RyYXZlcnNhbC5oCShyZXZpc2lvbiAxNTU3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVHJh
dmVyc2FsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBOb2RlSXRlcmF0b3JCYXNlKFBhc3NSZWZQ
dHI8Tm9kZT4sIHVuc2lnbmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4sIGJv
b2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcyk7Ci0gICAgICAgIHNob3J0IGFjY2VwdE5vZGUoU2Ny
aXB0U3RhdGUqLCBOb2RlKikgY29uc3Q7CisgICAgICAgIHNob3J0IGFjY2VwdE5vZGUoSlNDOjpF
eGVjU3RhdGUqLCBOb2RlKikgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8
Tm9kZT4gbV9yb290OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmNwcAkocmV2aXNpb24g
MTU1NzM1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NSw3ICs1NSw3IEBAIGlubGluZSBOb2RlKiBUcmVlV2Fsa2VyOjpzZXRDdXJyZW50
KFBhc3MKICAgICByZXR1cm4gbV9jdXJyZW50LmdldCgpOwogfQogCi1Ob2RlKiBUcmVlV2Fsa2Vy
OjpwYXJlbnROb2RlKFNjcmlwdFN0YXRlKiBzdGF0ZSkKK05vZGUqIFRyZWVXYWxrZXI6OnBhcmVu
dE5vZGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFJlZlB0cjxOb2RlPiBub2RlID0g
bV9jdXJyZW50OwogICAgIHdoaWxlIChub2RlICE9IHJvb3QoKSkgewpAQCAtNzEsNyArNzEsNyBA
QCBOb2RlKiBUcmVlV2Fsa2VyOjpwYXJlbnROb2RlKFNjcmlwdFN0YXRlCiAgICAgcmV0dXJuIDA7
CiB9CiAKLU5vZGUqIFRyZWVXYWxrZXI6OmZpcnN0Q2hpbGQoU2NyaXB0U3RhdGUqIHN0YXRlKQor
Tm9kZSogVHJlZVdhbGtlcjo6Zmlyc3RDaGlsZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAg
ICAgZm9yIChSZWZQdHI8Tm9kZT4gbm9kZSA9IG1fY3VycmVudC0+Zmlyc3RDaGlsZCgpOyBub2Rl
OyApIHsKICAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUs
IG5vZGUuZ2V0KCkpOwpAQCAtMTA0LDcgKzEwNCw3IEBAIE5vZGUqIFRyZWVXYWxrZXI6OmZpcnN0
Q2hpbGQoU2NyaXB0U3RhdGUKICAgICByZXR1cm4gMDsKIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6
bGFzdENoaWxkKFNjcmlwdFN0YXRlKiBzdGF0ZSkKK05vZGUqIFRyZWVXYWxrZXI6Omxhc3RDaGls
ZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgZm9yIChSZWZQdHI8Tm9kZT4gbm9kZSA9
IG1fY3VycmVudC0+bGFzdENoaWxkKCk7IG5vZGU7ICkgewogICAgICAgICBzaG9ydCBhY2NlcHRO
b2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShzdGF0ZSwgbm9kZS5nZXQoKSk7CkBAIC0xMzcsNyArMTM3
LDcgQEAgTm9kZSogVHJlZVdhbGtlcjo6bGFzdENoaWxkKFNjcmlwdFN0YXRlKgogICAgIHJldHVy
biAwOwogfQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmcoU2NyaXB0U3RhdGUq
IHN0YXRlKQorTm9kZSogVHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5nKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSkKIHsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IG1fY3VycmVudDsKICAgICBpZiAo
bm9kZSA9PSByb290KCkpCkBAIC0xNzQsNyArMTc0LDcgQEAgTm9kZSogVHJlZVdhbGtlcjo6cHJl
dmlvdXNTaWJsaW5nKFNjcmlwdAogICAgIH0KIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6bmV4dFNp
YmxpbmcoU2NyaXB0U3RhdGUqIHN0YXRlKQorTm9kZSogVHJlZVdhbGtlcjo6bmV4dFNpYmxpbmco
SlNDOjpFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbV9jdXJy
ZW50OwogICAgIGlmIChub2RlID09IHJvb3QoKSkKQEAgLTIxMSw3ICsyMTEsNyBAQCBOb2RlKiBU
cmVlV2Fsa2VyOjpuZXh0U2libGluZyhTY3JpcHRTdGF0CiAgICAgfQogfQogCi1Ob2RlKiBUcmVl
V2Fsa2VyOjpwcmV2aW91c05vZGUoU2NyaXB0U3RhdGUqIHN0YXRlKQorTm9kZSogVHJlZVdhbGtl
cjo6cHJldmlvdXNOb2RlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBSZWZQdHI8Tm9k
ZT4gbm9kZSA9IG1fY3VycmVudDsKICAgICB3aGlsZSAobm9kZSAhPSByb290KCkpIHsKQEAgLTI1
MCw3ICsyNTAsNyBAQCBOb2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c05vZGUoU2NyaXB0U3RhCiAg
ICAgcmV0dXJuIDA7CiB9CiAKLU5vZGUqIFRyZWVXYWxrZXI6Om5leHROb2RlKFNjcmlwdFN0YXRl
KiBzdGF0ZSkKK05vZGUqIFRyZWVXYWxrZXI6Om5leHROb2RlKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSkKIHsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IG1fY3VycmVudDsKIENoaWxkcmVuOgpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vVHJlZVdhbGtlci5oCShyZXZpc2lvbiAxNTU3MzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vVHJlZVdhbGtlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwyMyArNDUsMjMgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBOb2RlKiBjdXJyZW50Tm9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY3VycmVudC5nZXQoKTsgfQogICAgICAgICB2b2lkIHNldEN1cnJlbnROb2RlKFBh
c3NSZWZQdHI8Tm9kZT4sIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgICAgICBOb2RlKiBwYXJlbnRO
b2RlKFNjcmlwdFN0YXRlKik7Ci0gICAgICAgIE5vZGUqIGZpcnN0Q2hpbGQoU2NyaXB0U3RhdGUq
KTsKLSAgICAgICAgTm9kZSogbGFzdENoaWxkKFNjcmlwdFN0YXRlKik7Ci0gICAgICAgIE5vZGUq
IHByZXZpb3VzU2libGluZyhTY3JpcHRTdGF0ZSopOwotICAgICAgICBOb2RlKiBuZXh0U2libGlu
ZyhTY3JpcHRTdGF0ZSopOwotICAgICAgICBOb2RlKiBwcmV2aW91c05vZGUoU2NyaXB0U3RhdGUq
KTsKLSAgICAgICAgTm9kZSogbmV4dE5vZGUoU2NyaXB0U3RhdGUqKTsKKyAgICAgICAgTm9kZSog
cGFyZW50Tm9kZShKU0M6OkV4ZWNTdGF0ZSopOworICAgICAgICBOb2RlKiBmaXJzdENoaWxkKEpT
Qzo6RXhlY1N0YXRlKik7CisgICAgICAgIE5vZGUqIGxhc3RDaGlsZChKU0M6OkV4ZWNTdGF0ZSop
OworICAgICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICAg
ICAgTm9kZSogbmV4dFNpYmxpbmcoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICAgICAgTm9kZSogcHJl
dmlvdXNOb2RlKEpTQzo6RXhlY1N0YXRlKik7CisgICAgICAgIE5vZGUqIG5leHROb2RlKEpTQzo6
RXhlY1N0YXRlKik7CiAKICAgICAgICAgLy8gRG8gbm90IGNhbGwgdGhlc2UgZnVuY3Rpb25zLiBU
aGV5IGFyZSBqdXN0IHNjYWZmb2xkaW5nIHRvIHN1cHBvcnQgdGhlIE9iamVjdGl2ZS1DIGJpbmRp
bmdzLgogICAgICAgICAvLyBUaGV5IG9wZXJhdGUgaW4gdGhlIG1haW4gdGhyZWFkIG5vcm1hbCB3
b3JsZCwgYW5kIHRoZXkgc3dhbGxvdyBKUyBleGNlcHRpb25zLgotICAgICAgICBOb2RlKiBwYXJl
bnROb2RlKCkgeyByZXR1cm4gcGFyZW50Tm9kZShzY3JpcHRTdGF0ZUZyb21Ob2RlKG1haW5UaHJl
YWROb3JtYWxXb3JsZCgpLCBtX2N1cnJlbnQuZ2V0KCkpKTsgfQotICAgICAgICBOb2RlKiBmaXJz
dENoaWxkKCkgeyByZXR1cm4gZmlyc3RDaGlsZChzY3JpcHRTdGF0ZUZyb21Ob2RlKG1haW5UaHJl
YWROb3JtYWxXb3JsZCgpLCBtX2N1cnJlbnQuZ2V0KCkpKTsgfQotICAgICAgICBOb2RlKiBsYXN0
Q2hpbGQoKSB7IHJldHVybiBsYXN0Q2hpbGQoc2NyaXB0U3RhdGVGcm9tTm9kZShtYWluVGhyZWFk
Tm9ybWFsV29ybGQoKSwgbV9jdXJyZW50LmdldCgpKSk7IH0KLSAgICAgICAgTm9kZSogcHJldmlv
dXNTaWJsaW5nKCkgeyByZXR1cm4gcHJldmlvdXNTaWJsaW5nKHNjcmlwdFN0YXRlRnJvbU5vZGUo
bWFpblRocmVhZE5vcm1hbFdvcmxkKCksIG1fY3VycmVudC5nZXQoKSkpOyB9Ci0gICAgICAgIE5v
ZGUqIG5leHRTaWJsaW5nKCkgeyByZXR1cm4gbmV4dFNpYmxpbmcoc2NyaXB0U3RhdGVGcm9tTm9k
ZShtYWluVGhyZWFkTm9ybWFsV29ybGQoKSwgbV9jdXJyZW50LmdldCgpKSk7IH0KLSAgICAgICAg
Tm9kZSogcHJldmlvdXNOb2RlKCkgeyByZXR1cm4gcHJldmlvdXNOb2RlKHNjcmlwdFN0YXRlRnJv
bU5vZGUobWFpblRocmVhZE5vcm1hbFdvcmxkKCksIG1fY3VycmVudC5nZXQoKSkpOyB9Ci0gICAg
ICAgIE5vZGUqIG5leHROb2RlKCkgeyByZXR1cm4gbmV4dE5vZGUoc2NyaXB0U3RhdGVGcm9tTm9k
ZShtYWluVGhyZWFkTm9ybWFsV29ybGQoKSwgbV9jdXJyZW50LmdldCgpKSk7IH0KKyAgICAgICAg
Tm9kZSogcGFyZW50Tm9kZSgpIHsgcmV0dXJuIHBhcmVudE5vZGUoZXhlY1N0YXRlRnJvbU5vZGUo
bWFpblRocmVhZE5vcm1hbFdvcmxkKCksIG1fY3VycmVudC5nZXQoKSkpOyB9CisgICAgICAgIE5v
ZGUqIGZpcnN0Q2hpbGQoKSB7IHJldHVybiBmaXJzdENoaWxkKGV4ZWNTdGF0ZUZyb21Ob2RlKG1h
aW5UaHJlYWROb3JtYWxXb3JsZCgpLCBtX2N1cnJlbnQuZ2V0KCkpKTsgfQorICAgICAgICBOb2Rl
KiBsYXN0Q2hpbGQoKSB7IHJldHVybiBsYXN0Q2hpbGQoZXhlY1N0YXRlRnJvbU5vZGUobWFpblRo
cmVhZE5vcm1hbFdvcmxkKCksIG1fY3VycmVudC5nZXQoKSkpOyB9CisgICAgICAgIE5vZGUqIHBy
ZXZpb3VzU2libGluZygpIHsgcmV0dXJuIHByZXZpb3VzU2libGluZyhleGVjU3RhdGVGcm9tTm9k
ZShtYWluVGhyZWFkTm9ybWFsV29ybGQoKSwgbV9jdXJyZW50LmdldCgpKSk7IH0KKyAgICAgICAg
Tm9kZSogbmV4dFNpYmxpbmcoKSB7IHJldHVybiBuZXh0U2libGluZyhleGVjU3RhdGVGcm9tTm9k
ZShtYWluVGhyZWFkTm9ybWFsV29ybGQoKSwgbV9jdXJyZW50LmdldCgpKSk7IH0KKyAgICAgICAg
Tm9kZSogcHJldmlvdXNOb2RlKCkgeyByZXR1cm4gcHJldmlvdXNOb2RlKGV4ZWNTdGF0ZUZyb21O
b2RlKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpLCBtX2N1cnJlbnQuZ2V0KCkpKTsgfQorICAgICAg
ICBOb2RlKiBuZXh0Tm9kZSgpIHsgcmV0dXJuIG5leHROb2RlKGV4ZWNTdGF0ZUZyb21Ob2RlKG1h
aW5UaHJlYWROb3JtYWxXb3JsZCgpLCBtX2N1cnJlbnQuZ2V0KCkpKTsgfQogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgVHJlZVdhbGtlcihQYXNzUmVmUHRyPE5vZGU+LCB1bnNpZ25lZCB3aGF0VG9T
aG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+LCBib29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCShy
ZXZpc2lvbiAxNTU3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3Nh
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIENvbnNvbGVNZXNzYWdlOjpD
b25zb2xlTWVzc2FnZShib29sIGNhbkcKICAgICBhdXRvZ2VuZXJhdGVNZXRhZGF0YShjYW5HZW5l
cmF0ZUNhbGxTdGFjayk7CiB9CiAKLUNvbnNvbGVNZXNzYWdlOjpDb25zb2xlTWVzc2FnZShib29s
IGNhbkdlbmVyYXRlQ2FsbFN0YWNrLCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUg
dHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0
cmluZyYgdXJsLCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBjb2x1bW4sIFNjcmlwdFN0YXRlKiBz
dGF0ZSwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcikKK0NvbnNvbGVNZXNzYWdlOjpD
b25zb2xlTWVzc2FnZShib29sIGNhbkdlbmVyYXRlQ2FsbFN0YWNrLCBNZXNzYWdlU291cmNlIHNv
dXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgdXJsLCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBjb2x1
bW4sIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmll
cikKICAgICA6IG1fc291cmNlKHNvdXJjZSkKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9s
ZXZlbChsZXZlbCkKQEAgLTk3LDcgKzk3LDcgQEAgQ29uc29sZU1lc3NhZ2U6OkNvbnNvbGVNZXNz
YWdlKGJvb2wsIE1lcwogICAgIG1fY2FsbFN0YWNrID0gY2FsbFN0YWNrOwogfQogCi1Db25zb2xl
TWVzc2FnZTo6Q29uc29sZU1lc3NhZ2UoYm9vbCBjYW5HZW5lcmF0ZUNhbGxTdGFjaywgTWVzc2Fn
ZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRz
LCBTY3JpcHRTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCitD
b25zb2xlTWVzc2FnZTo6Q29uc29sZU1lc3NhZ2UoYm9vbCBjYW5HZW5lcmF0ZUNhbGxTdGFjaywg
TWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZl
bCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJn
dW1lbnRzLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50
aWZpZXIpCiAgICAgOiBtX3NvdXJjZShzb3VyY2UpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAs
IG1fbGV2ZWwobGV2ZWwpCkBAIC0xMTYsNyArMTE2LDcgQEAgQ29uc29sZU1lc3NhZ2U6On5Db25z
b2xlTWVzc2FnZSgpCiB7CiB9CiAKLXZvaWQgQ29uc29sZU1lc3NhZ2U6OmF1dG9nZW5lcmF0ZU1l
dGFkYXRhKGJvb2wgY2FuR2VuZXJhdGVDYWxsU3RhY2ssIFNjcmlwdFN0YXRlKiBzdGF0ZSkKK3Zv
aWQgQ29uc29sZU1lc3NhZ2U6OmF1dG9nZW5lcmF0ZU1ldGFkYXRhKGJvb2wgY2FuR2VuZXJhdGVD
YWxsU3RhY2ssIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBpZiAobV90eXBlID09IEVu
ZEdyb3VwTWVzc2FnZVR5cGUpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MSw3ICsyNzEsNyBAQCB2
b2lkIENvbnNvbGVNZXNzYWdlOjp3aW5kb3dDbGVhcmVkKERPTVdpCiB7CiAgICAgaWYgKCFtX2Fy
Z3VtZW50cykKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChkb21XaW5kb3dGcm9tU2NyaXB0U3Rh
dGUobV9hcmd1bWVudHMtPmdsb2JhbFN0YXRlKCkpICE9IHdpbmRvdykKKyAgICBpZiAoZG9tV2lu
ZG93RnJvbUV4ZWNTdGF0ZShtX2FyZ3VtZW50cy0+Z2xvYmFsU3RhdGUoKSkgIT0gd2luZG93KQog
ICAgICAgICByZXR1cm47CiAgICAgaWYgKCFtX21lc3NhZ2UpCiAgICAgICAgIG1fbWVzc2FnZSA9
ICI8bWVzc2FnZSBjb2xsZWN0ZWQ+IjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9D
b25zb2xlTWVzc2FnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9D
b25zb2xlTWVzc2FnZS5oCShyZXZpc2lvbiAxNTU3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29uc29sZU1lc3NhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsOSArNTMsOSBAQCBj
bGFzcyBDb25zb2xlTWVzc2FnZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29uc29sZU1l
c3NhZ2UpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBDb25zb2xlTWVz
c2FnZShib29sIGNhbkdlbmVyYXRlQ2FsbFN0YWNrLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlw
ZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxvbmcgcmVx
dWVzdElkZW50aWZpZXIgPSAwKTsKLSAgICBDb25zb2xlTWVzc2FnZShib29sIGNhbkdlbmVyYXRl
Q2FsbFN0YWNrLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgdXJsLCB1bnNpZ25lZCBsaW5lLCB1bnNp
Z25lZCBjb2x1bW4sIFNjcmlwdFN0YXRlKiA9IDAsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50
aWZpZXIgPSAwKTsKKyAgICBDb25zb2xlTWVzc2FnZShib29sIGNhbkdlbmVyYXRlQ2FsbFN0YWNr
LCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgdXJsLCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBjb2x1
bW4sIEpTQzo6RXhlY1N0YXRlKiA9IDAsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIg
PSAwKTsKICAgICBDb25zb2xlTWVzc2FnZShib29sIGNhbkdlbmVyYXRlQ2FsbFN0YWNrLCBNZXNz
YWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRl
bnRpZmllciA9IDApOwotICAgIENvbnNvbGVNZXNzYWdlKGJvb2wgY2FuR2VuZXJhdGVDYWxsU3Rh
Y2ssIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+LCBTY3JpcHRTdGF0ZSosIHVu
c2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsKKyAgICBDb25zb2xlTWVzc2FnZShi
b29sIGNhbkdlbmVyYXRlQ2FsbFN0YWNrLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVz
c2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1l
bnRzPiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0g
MCk7CiAgICAgfkNvbnNvbGVNZXNzYWdlKCk7CiAKICAgICB2b2lkIGFkZFRvRnJvbnRlbmQoSW5z
cGVjdG9yRnJvbnRlbmQ6OkNvbnNvbGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBib29sIGdl
bmVyYXRlUHJldmlldyk7CkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBh
cmd1bWVudENvdW50KCk7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBhdXRvZ2VuZXJhdGVNZXRhZGF0
YShib29sIGNhbkdlbmVyYXRlQ2FsbFN0YWNrLCBTY3JpcHRTdGF0ZSogPSAwKTsKKyAgICB2b2lk
IGF1dG9nZW5lcmF0ZU1ldGFkYXRhKGJvb2wgY2FuR2VuZXJhdGVDYWxsU3RhY2ssIEpTQzo6RXhl
Y1N0YXRlKiA9IDApOwogCiAgICAgTWVzc2FnZVNvdXJjZSBtX3NvdXJjZTsKICAgICBNZXNzYWdl
VHlwZSBtX3R5cGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHQuaAkocmV2aXNpb24gMTU1NzM1KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBwdWJsaWM6CiAK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEluamVjdGVkU2NyaXB0TW9kdWxlOwotICAgIGZy
aWVuZCBJbmplY3RlZFNjcmlwdCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0
Rm9yKFNjcmlwdFN0YXRlKik7CisgICAgZnJpZW5kIEluamVjdGVkU2NyaXB0IEluamVjdGVkU2Ny
aXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRGb3IoSlNDOjpFeGVjU3RhdGUqKTsKICAgICBJbmpl
Y3RlZFNjcmlwdChTY3JpcHRPYmplY3QsIEluc3BlY3RlZFN0YXRlQWNjZXNzQ2hlY2spOwogCiAg
ICAgU2NyaXB0VmFsdWUgbm9kZUFzU2NyaXB0VmFsdWUoTm9kZSopOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHAJKHJldmlzaW9uIDE1
NTczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NSwxMCArNzUsMTAgQEAgY29uc3QgU2NyaXB0T2JqZWN0JiBJ
bmplY3RlZFNjcmlwdEJhc2U6OgogCiBTY3JpcHRWYWx1ZSBJbmplY3RlZFNjcmlwdEJhc2U6OmNh
bGxGdW5jdGlvbldpdGhFdmFsRW5hYmxlZChTY3JpcHRGdW5jdGlvbkNhbGwmIGZ1bmN0aW9uLCBi
b29sJiBoYWRFeGNlcHRpb24pIGNvbnN0CiB7Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHRGcm9tU2NyaXB0
U3RhdGUobV9pbmplY3RlZFNjcmlwdE9iamVjdC5zY3JpcHRTdGF0ZSgpKTsKKyAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gc2NyaXB0RXhlY3V0aW9u
Q29udGV4dEZyb21FeGVjU3RhdGUobV9pbmplY3RlZFNjcmlwdE9iamVjdC5zY3JpcHRTdGF0ZSgp
KTsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsQ2FsbEZ1bmN0aW9uKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQs
IG5hbWUoKSwgMSk7CiAKLSAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBtX2luamVjdGVk
U2NyaXB0T2JqZWN0LnNjcmlwdFN0YXRlKCk7CisgICAgSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0
YXRlID0gbV9pbmplY3RlZFNjcmlwdE9iamVjdC5zY3JpcHRTdGF0ZSgpOwogICAgIGJvb2wgZXZh
bElzRGlzYWJsZWQgPSBmYWxzZTsKICAgICBpZiAoc2NyaXB0U3RhdGUpIHsKICAgICAgICAgZXZh
bElzRGlzYWJsZWQgPSAhc2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZXZhbEVu
YWJsZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRCYXNlLmgJKHJldmlzaW9uIDE1NTczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTAgKzUxLDEwIEBAIHB1
YmxpYzoKIAogICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsg
fQogICAgIGJvb2wgaGFzTm9WYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5qZWN0ZWRTY3JpcHRP
YmplY3QuaGFzTm9WYWx1ZSgpOyB9Ci0gICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKCkgY29u
c3QgeyByZXR1cm4gbV9pbmplY3RlZFNjcmlwdE9iamVjdC5zY3JpcHRTdGF0ZSgpOyB9CisgICAg
SlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9pbmplY3RlZFNj
cmlwdE9iamVjdC5zY3JpcHRTdGF0ZSgpOyB9CiAKIHByb3RlY3RlZDoKLSAgICB0eXBlZGVmIGJv
b2wgKCpJbnNwZWN0ZWRTdGF0ZUFjY2Vzc0NoZWNrKShTY3JpcHRTdGF0ZSopOworICAgIHR5cGVk
ZWYgYm9vbCAoKkluc3BlY3RlZFN0YXRlQWNjZXNzQ2hlY2spKEpTQzo6RXhlY1N0YXRlKik7CiAg
ICAgSW5qZWN0ZWRTY3JpcHRCYXNlKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgSW5qZWN0ZWRT
Y3JpcHRCYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgU2NyaXB0T2JqZWN0LCBJbnNwZWN0ZWRTdGF0
ZUFjY2Vzc0NoZWNrKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0Q2FudmFzTW9kdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUuY3BwCShyZXZpc2lvbiAxNTU3MzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIEluamVjdGVkU2NyaXB0Q2FudmFzTW9k
dWxlOjpJbmplY3RlZFNjcmkKIHsKIH0KIAotSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUgSW5q
ZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGU6Om1vZHVsZUZvclN0YXRlKEluamVjdGVkU2NyaXB0TWFu
YWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpCitJ
bmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZTo6bW9k
dWxlRm9yU3RhdGUoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIs
IEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSkKIHsKICAgICBJbmplY3RlZFNjcmlwdENhbnZh
c01vZHVsZSByZXN1bHQ7CiAgICAgcmVzdWx0LmVuc3VyZUluamVjdGVkKGluamVjdGVkU2NyaXB0
TWFuYWdlciwgc2NyaXB0U3RhdGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmgJKHJldmlzaW9uIDE1NTczNSkK
KysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0
dWFsIFN0cmluZyBzb3VyY2UoKSBjb25zdDsKIAotICAgIHN0YXRpYyBJbmplY3RlZFNjcmlwdENh
bnZhc01vZHVsZSBtb2R1bGVGb3JTdGF0ZShJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBTY3JpcHRT
dGF0ZSopOworICAgIHN0YXRpYyBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSBtb2R1bGVGb3JT
dGF0ZShJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBKU0M6OkV4ZWNTdGF0ZSopOwogCiAgICAgU2Ny
aXB0T2JqZWN0IHdyYXBDYW52YXMyRENvbnRleHQoY29uc3QgU2NyaXB0T2JqZWN0Jik7CiAjaWYg
RU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0SG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0SG9zdC5jcHAJKHJldmlzaW9uIDE1NTczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNyAr
MTIzLDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OmNvcHlUZXh0KGNvbnN0IAogICAgIFBh
c3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLT53cml0ZVBsYWluVGV4dCh0ZXh0LCBQ
YXN0ZWJvYXJkOjpDYW5ub3RTbWFydFJlcGxhY2UpOwogfQogCi1TY3JpcHRWYWx1ZSBJbmplY3Rl
ZFNjcmlwdEhvc3Q6Okluc3BlY3RhYmxlT2JqZWN0OjpnZXQoU2NyaXB0U3RhdGUqKQorU2NyaXB0
VmFsdWUgSW5qZWN0ZWRTY3JpcHRIb3N0OjpJbnNwZWN0YWJsZU9iamVjdDo6Z2V0KEpTQzo6RXhl
Y1N0YXRlKikKIHsKICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKIH07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5oCShyZXZpc2lvbiAxNTU3
MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTg3LDE0ICs4NywxNCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3Rh
dGljIE5vZGUqIHNjcmlwdFZhbHVlQXNOb2RlKFNjcmlwdFZhbHVlKTsKLSAgICBzdGF0aWMgU2Ny
aXB0VmFsdWUgbm9kZUFzU2NyaXB0VmFsdWUoU2NyaXB0U3RhdGUqLCBOb2RlKik7CisgICAgc3Rh
dGljIFNjcmlwdFZhbHVlIG5vZGVBc1NjcmlwdFZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgTm9kZSop
OwogCiAgICAgdm9pZCBkaXNjb25uZWN0KCk7CiAKICAgICBjbGFzcyBJbnNwZWN0YWJsZU9iamVj
dCB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKLSAgICAg
ICAgdmlydHVhbCBTY3JpcHRWYWx1ZSBnZXQoU2NyaXB0U3RhdGUqKTsKKyAgICAgICAgdmlydHVh
bCBTY3JpcHRWYWx1ZSBnZXQoSlNDOjpFeGVjU3RhdGUqKTsKICAgICAgICAgdmlydHVhbCB+SW5z
cGVjdGFibGVPYmplY3QoKSB7IH0KICAgICB9OwogICAgIHZvaWQgYWRkSW5zcGVjdGVkT2JqZWN0
KFBhc3NPd25QdHI8SW5zcGVjdGFibGVPYmplY3Q+KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNTU3
MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODAsMTYgKzgwLDE2IEBAIEluamVjdGVkU2NyaXB0IEluamVj
dGVkU2NyaXB0TWFuYWdlcjo6aW4KICAgICBJZFRvSW5qZWN0ZWRTY3JpcHRNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuZmluZChpZCk7CiAgICAgaWYgKGl0ICE9IG1faWRU
b0luamVjdGVkU2NyaXB0LmVuZCgpKQogICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwotICAgIGZv
ciAoU2NyaXB0U3RhdGVUb0lkOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0U3RhdGVUb0lkLmJlZ2lu
KCk7IGl0ICE9IG1fc2NyaXB0U3RhdGVUb0lkLmVuZCgpOyArK2l0KSB7CisgICAgZm9yIChFeGVj
U3RhdGVUb0lkOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0U3RhdGVUb0lkLmJlZ2luKCk7IGl0ICE9
IG1fc2NyaXB0U3RhdGVUb0lkLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGlmIChpdC0+dmFsdWUg
PT0gaWQpCiAgICAgICAgICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHRGb3IoaXQtPmtleSk7CiAg
ICAgfQogICAgIHJldHVybiBJbmplY3RlZFNjcmlwdCgpOwogfQogCi1pbnQgSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyOjppbmplY3RlZFNjcmlwdElkRm9yKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkK
K2ludCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0SWRGb3IoSlNDOjpFeGVj
U3RhdGUqIHNjcmlwdFN0YXRlKQogewotICAgIFNjcmlwdFN0YXRlVG9JZDo6aXRlcmF0b3IgaXQg
PSBtX3NjcmlwdFN0YXRlVG9JZC5maW5kKHNjcmlwdFN0YXRlKTsKKyAgICBFeGVjU3RhdGVUb0lk
OjppdGVyYXRvciBpdCA9IG1fc2NyaXB0U3RhdGVUb0lkLmZpbmQoc2NyaXB0U3RhdGUpOwogICAg
IGlmIChpdCAhPSBtX3NjcmlwdFN0YXRlVG9JZC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGl0LT52
YWx1ZTsKICAgICBpbnQgaWQgPSBtX25leHRJbmplY3RlZFNjcmlwdElkKys7CkBAIC0xMjMsOCAr
MTIzLDggQEAgdm9pZCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmRpc2NhcmRJbmplYwogICAgIFZl
Y3Rvcjxsb25nPiBpZHNUb1JlbW92ZTsKICAgICBJZFRvSW5qZWN0ZWRTY3JpcHRNYXA6Oml0ZXJh
dG9yIGVuZCA9IG1faWRUb0luamVjdGVkU2NyaXB0LmVuZCgpOwogICAgIGZvciAoSWRUb0luamVj
dGVkU2NyaXB0TWFwOjppdGVyYXRvciBpdCA9IG1faWRUb0luamVjdGVkU2NyaXB0LmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBp
dC0+dmFsdWUuc2NyaXB0U3RhdGUoKTsKLSAgICAgICAgaWYgKHdpbmRvdyAhPSBkb21XaW5kb3dG
cm9tU2NyaXB0U3RhdGUoc2NyaXB0U3RhdGUpKQorICAgICAgICBKU0M6OkV4ZWNTdGF0ZSogc2Ny
aXB0U3RhdGUgPSBpdC0+dmFsdWUuc2NyaXB0U3RhdGUoKTsKKyAgICAgICAgaWYgKHdpbmRvdyAh
PSBkb21XaW5kb3dGcm9tRXhlY1N0YXRlKHNjcmlwdFN0YXRlKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICBtX3NjcmlwdFN0YXRlVG9JZC5yZW1vdmUoc2NyaXB0U3RhdGUpOwogICAg
ICAgICBpZHNUb1JlbW92ZS5hcHBlbmQoaXQtPmtleSk7CkBAIC0xMzQsMTcgKzEzNCwxNyBAQCB2
b2lkIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6ZGlzY2FyZEluamVjCiAgICAgICAgIG1faWRUb0lu
amVjdGVkU2NyaXB0LnJlbW92ZShpZHNUb1JlbW92ZVtpXSk7CiAKICAgICAvLyBOb3cgcmVtb3Zl
IHNjcmlwdCBzdGF0ZXMgdGhhdCBoYXZlIGlkIGJ1dCBubyBpbmplY3RlZCBzY3JpcHQuCi0gICAg
VmVjdG9yPFNjcmlwdFN0YXRlKj4gc2NyaXB0U3RhdGVzVG9SZW1vdmU7Ci0gICAgZm9yIChTY3Jp
cHRTdGF0ZVRvSWQ6Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRTdGF0ZVRvSWQuYmVnaW4oKTsgaXQg
IT0gbV9zY3JpcHRTdGF0ZVRvSWQuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgU2NyaXB0U3RhdGUq
IHNjcmlwdFN0YXRlID0gaXQtPmtleTsKLSAgICAgICAgaWYgKHdpbmRvdyA9PSBkb21XaW5kb3dG
cm9tU2NyaXB0U3RhdGUoc2NyaXB0U3RhdGUpKQorICAgIFZlY3RvcjxKU0M6OkV4ZWNTdGF0ZSo+
IHNjcmlwdFN0YXRlc1RvUmVtb3ZlOworICAgIGZvciAoRXhlY1N0YXRlVG9JZDo6aXRlcmF0b3Ig
aXQgPSBtX3NjcmlwdFN0YXRlVG9JZC5iZWdpbigpOyBpdCAhPSBtX3NjcmlwdFN0YXRlVG9JZC5l
bmQoKTsgKytpdCkgeworICAgICAgICBKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSBpdC0+
a2V5OworICAgICAgICBpZiAod2luZG93ID09IGRvbVdpbmRvd0Zyb21FeGVjU3RhdGUoc2NyaXB0
U3RhdGUpKQogICAgICAgICAgICAgc2NyaXB0U3RhdGVzVG9SZW1vdmUuYXBwZW5kKHNjcmlwdFN0
YXRlKTsKICAgICB9CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzY3JpcHRTdGF0ZXNUb1Jl
bW92ZS5zaXplKCk7IGkrKykKICAgICAgICAgbV9zY3JpcHRTdGF0ZVRvSWQucmVtb3ZlKHNjcmlw
dFN0YXRlc1RvUmVtb3ZlW2ldKTsKIH0KIAotYm9vbCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNh
bkFjY2Vzc0luc3BlY3RlZFdvcmtlckdsb2JhbFNjb3BlKFNjcmlwdFN0YXRlKikKK2Jvb2wgSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjYW5BY2Nlc3NJbnNwZWN0ZWRXb3JrZXJHbG9iYWxTY29wZShK
U0M6OkV4ZWNTdGF0ZSopCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xNjAsMjAgKzE2MCwy
MCBAQCBTdHJpbmcgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjCiAgICAgcmV0dXJu
IFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihJbmplY3RlZFNjcmlwdFNvdXJj
ZV9qcyksIHNpemVvZihJbmplY3RlZFNjcmlwdFNvdXJjZV9qcykpOwogfQogCi1JbmplY3RlZFNj
cmlwdCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0Rm9yKFNjcmlwdFN0YXRl
KiBpbnNwZWN0ZWRTY3JpcHRTdGF0ZSkKK0luamVjdGVkU2NyaXB0IEluamVjdGVkU2NyaXB0TWFu
YWdlcjo6aW5qZWN0ZWRTY3JpcHRGb3IoSlNDOjpFeGVjU3RhdGUqIGluc3BlY3RlZEV4ZWNTdGF0
ZSkKIHsKLSAgICBTY3JpcHRTdGF0ZVRvSWQ6Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRTdGF0ZVRv
SWQuZmluZChpbnNwZWN0ZWRTY3JpcHRTdGF0ZSk7CisgICAgRXhlY1N0YXRlVG9JZDo6aXRlcmF0
b3IgaXQgPSBtX3NjcmlwdFN0YXRlVG9JZC5maW5kKGluc3BlY3RlZEV4ZWNTdGF0ZSk7CiAgICAg
aWYgKGl0ICE9IG1fc2NyaXB0U3RhdGVUb0lkLmVuZCgpKSB7CiAgICAgICAgIElkVG9JbmplY3Rl
ZFNjcmlwdE1hcDo6aXRlcmF0b3IgaXQxID0gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuZmluZChpdC0+
dmFsdWUpOwogICAgICAgICBpZiAoaXQxICE9IG1faWRUb0luamVjdGVkU2NyaXB0LmVuZCgpKQog
ICAgICAgICAgICAgcmV0dXJuIGl0MS0+dmFsdWU7CiAgICAgfQogCi0gICAgaWYgKCFtX2luc3Bl
Y3RlZFN0YXRlQWNjZXNzQ2hlY2soaW5zcGVjdGVkU2NyaXB0U3RhdGUpKQorICAgIGlmICghbV9p
bnNwZWN0ZWRTdGF0ZUFjY2Vzc0NoZWNrKGluc3BlY3RlZEV4ZWNTdGF0ZSkpCiAgICAgICAgIHJl
dHVybiBJbmplY3RlZFNjcmlwdCgpOwogCi0gICAgaW50IGlkID0gaW5qZWN0ZWRTY3JpcHRJZEZv
cihpbnNwZWN0ZWRTY3JpcHRTdGF0ZSk7Ci0gICAgU2NyaXB0T2JqZWN0IGluamVjdGVkU2NyaXB0
T2JqZWN0ID0gY3JlYXRlSW5qZWN0ZWRTY3JpcHQoaW5qZWN0ZWRTY3JpcHRTb3VyY2UoKSwgaW5z
cGVjdGVkU2NyaXB0U3RhdGUsIGlkKTsKKyAgICBpbnQgaWQgPSBpbmplY3RlZFNjcmlwdElkRm9y
KGluc3BlY3RlZEV4ZWNTdGF0ZSk7CisgICAgU2NyaXB0T2JqZWN0IGluamVjdGVkU2NyaXB0T2Jq
ZWN0ID0gY3JlYXRlSW5qZWN0ZWRTY3JpcHQoaW5qZWN0ZWRTY3JpcHRTb3VyY2UoKSwgaW5zcGVj
dGVkRXhlY1N0YXRlLCBpZCk7CiAgICAgSW5qZWN0ZWRTY3JpcHQgcmVzdWx0KGluamVjdGVkU2Ny
aXB0T2JqZWN0LCBtX2luc3BlY3RlZFN0YXRlQWNjZXNzQ2hlY2spOwogICAgIG1faWRUb0luamVj
dGVkU2NyaXB0LnNldChpZCwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuaAkocmV2
aXNpb24gMTU1NzM1KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
TWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwzMyArNTQsMzMgQEAgcHVibGljOgogCiAg
ICAgSW5qZWN0ZWRTY3JpcHRIb3N0KiBpbmplY3RlZFNjcmlwdEhvc3QoKTsKIAotICAgIEluamVj
dGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yKFNjcmlwdFN0YXRlKik7CisgICAgSW5qZWN0ZWRT
Y3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3IoSlNDOjpFeGVjU3RhdGUqKTsKICAgICBJbmplY3RlZFNj
cmlwdCBpbmplY3RlZFNjcmlwdEZvcklkKGludCk7Ci0gICAgaW50IGluamVjdGVkU2NyaXB0SWRG
b3IoU2NyaXB0U3RhdGUqKTsKKyAgICBpbnQgaW5qZWN0ZWRTY3JpcHRJZEZvcihKU0M6OkV4ZWNT
dGF0ZSopOwogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQoY29u
c3QgU3RyaW5nJiBvYmplY3RJZCk7CiAgICAgdm9pZCBkaXNjYXJkSW5qZWN0ZWRTY3JpcHRzKCk7
CiAgICAgdm9pZCBkaXNjYXJkSW5qZWN0ZWRTY3JpcHRzRm9yKERPTVdpbmRvdyopOwogICAgIHZv
aWQgcmVsZWFzZU9iamVjdEdyb3VwKGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApOwogCi0gICAg
dHlwZWRlZiBib29sICgqSW5zcGVjdGVkU3RhdGVBY2Nlc3NDaGVjaykoU2NyaXB0U3RhdGUqKTsK
KyAgICB0eXBlZGVmIGJvb2wgKCpJbnNwZWN0ZWRTdGF0ZUFjY2Vzc0NoZWNrKShKU0M6OkV4ZWNT
dGF0ZSopOwogICAgIEluc3BlY3RlZFN0YXRlQWNjZXNzQ2hlY2sgaW5zcGVjdGVkU3RhdGVBY2Nl
c3NDaGVjaygpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdGVkU3RhdGVBY2Nlc3NDaGVjazsgfQog
CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEluamVjdGVkU2NyaXB0TWFuYWdlcihJbnNwZWN0ZWRT
dGF0ZUFjY2Vzc0NoZWNrKTsKIAogICAgIFN0cmluZyBpbmplY3RlZFNjcmlwdFNvdXJjZSgpOwot
ICAgIFNjcmlwdE9iamVjdCBjcmVhdGVJbmplY3RlZFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJj
ZSwgU2NyaXB0U3RhdGUqLCBpbnQgaWQpOworICAgIFNjcmlwdE9iamVjdCBjcmVhdGVJbmplY3Rl
ZFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZSwgSlNDOjpFeGVjU3RhdGUqLCBpbnQgaWQpOwog
Ci0gICAgc3RhdGljIGJvb2wgY2FuQWNjZXNzSW5zcGVjdGVkV2luZG93KFNjcmlwdFN0YXRlKik7
Ci0gICAgc3RhdGljIGJvb2wgY2FuQWNjZXNzSW5zcGVjdGVkV29ya2VyR2xvYmFsU2NvcGUoU2Ny
aXB0U3RhdGUqKTsKKyAgICBzdGF0aWMgYm9vbCBjYW5BY2Nlc3NJbnNwZWN0ZWRXaW5kb3coSlND
OjpFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMgYm9vbCBjYW5BY2Nlc3NJbnNwZWN0ZWRXb3JrZXJH
bG9iYWxTY29wZShKU0M6OkV4ZWNTdGF0ZSopOwogCiAgICAgaW50IG1fbmV4dEluamVjdGVkU2Ny
aXB0SWQ7CiAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgSW5qZWN0ZWRTY3JpcHQ+IElkVG9Jbmpl
Y3RlZFNjcmlwdE1hcDsKICAgICBJZFRvSW5qZWN0ZWRTY3JpcHRNYXAgbV9pZFRvSW5qZWN0ZWRT
Y3JpcHQ7CiAgICAgUmVmUHRyPEluamVjdGVkU2NyaXB0SG9zdD4gbV9pbmplY3RlZFNjcmlwdEhv
c3Q7CiAgICAgSW5zcGVjdGVkU3RhdGVBY2Nlc3NDaGVjayBtX2luc3BlY3RlZFN0YXRlQWNjZXNz
Q2hlY2s7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFNjcmlwdFN0YXRlKiwgaW50PiBTY3JpcHRTdGF0
ZVRvSWQ7Ci0gICAgU2NyaXB0U3RhdGVUb0lkIG1fc2NyaXB0U3RhdGVUb0lkOworICAgIHR5cGVk
ZWYgSGFzaE1hcDxKU0M6OkV4ZWNTdGF0ZSosIGludD4gRXhlY1N0YXRlVG9JZDsKKyAgICBFeGVj
U3RhdGVUb0lkIG1fc2NyaXB0U3RhdGVUb0lkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TW9kdWxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRN
b2R1bGUuY3BwCShyZXZpc2lvbiAxNTU3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHRNb2R1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBA
IEluamVjdGVkU2NyaXB0TW9kdWxlOjpJbmplY3RlZFNjcmlwdE1vZHUKIHsKIH0KIAotdm9pZCBJ
bmplY3RlZFNjcmlwdE1vZHVsZTo6ZW5zdXJlSW5qZWN0ZWQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
KiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkKK3ZvaWQg
SW5qZWN0ZWRTY3JpcHRNb2R1bGU6OmVuc3VyZUluamVjdGVkKEluamVjdGVkU2NyaXB0TWFuYWdl
ciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUpCiB7
CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdE1hbmFn
ZXItPmluamVjdGVkU2NyaXB0Rm9yKHNjcmlwdFN0YXRlKTsKICAgICBBU1NFUlQoIWluamVjdGVk
U2NyaXB0Lmhhc05vVmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRNb2R1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHRNb2R1bGUuaAkocmV2aXNpb24gMTU1NzM1KQorKysgU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TW9kdWxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDcgKzUwLDcgQEAgcHJvdGVjdGVkOgogICAgIC8vIGEgc3RhdGljIGZhY3RvcnkgbWV0aG9k
IHRoYXQgd291bGQgY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcwogICAgIC8vIGFu
ZCBjYWxsIGl0cyBlbnN1cmVJbmplY3RlZCgpIG1ldGhvZCBpbW1lZGlhdGVseS4KICAgICBJbmpl
Y3RlZFNjcmlwdE1vZHVsZShjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIHZvaWQgZW5zdXJlSW5q
ZWN0ZWQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgU2NyaXB0U3RhdGUqKTsKKyAgICB2b2lkIGVu
c3VyZUluamVjdGVkKEluamVjdGVkU2NyaXB0TWFuYWdlciosIEpTQzo6RXhlY1N0YXRlKik7CiB9
OwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2Vu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFn
ZW50LmNwcAkocmV2aXNpb24gMTU1NzM1KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBAQCB2b2lkIElu
c3BlY3RvckFnZW50OjpkaWRDbGVhcldpbmRvd09iamVjCiAgICAgU3RyaW5nIHNjcmlwdCA9IG1f
aW5qZWN0ZWRTY3JpcHRGb3JPcmlnaW4uZ2V0KG9yaWdpbik7CiAgICAgaWYgKHNjcmlwdC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpbnQgaW5qZWN0ZWRTY3JpcHRJZCA9IG1faW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdElkRm9yKG1haW5Xb3JsZFNjcmlwdFN0
YXRlKGZyYW1lKSk7CisgICAgaW50IGluamVjdGVkU2NyaXB0SWQgPSBtX2luamVjdGVkU2NyaXB0
TWFuYWdlci0+aW5qZWN0ZWRTY3JpcHRJZEZvcihtYWluV29ybGRFeGVjU3RhdGUoZnJhbWUpKTsK
ICAgICBTdHJpbmdCdWlsZGVyIHNjcmlwdFNvdXJjZTsKICAgICBzY3JpcHRTb3VyY2UuYXBwZW5k
KHNjcmlwdCk7CiAgICAgc2NyaXB0U291cmNlLmFwcGVuZCgiKCIpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCShyZXZpc2lv
biAxNTU3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdl
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBJbnNwZWN0b3JD
YW52YXNBZ2VudDo6Y2FwdHVyZUZyYW1lKAogICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lSWQgPyBt
X3BhZ2VBZ2VudC0+YXNzZXJ0RnJhbWUoZXJyb3JTdHJpbmcsICpmcmFtZUlkKSA6IG1fcGFnZUFn
ZW50LT5tYWluRnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47Ci0gICAg
SW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUgbW9kdWxlID0gaW5qZWN0ZWRTY3JpcHRDYW52YXNN
b2R1bGUoZXJyb3JTdHJpbmcsIG1haW5Xb3JsZFNjcmlwdFN0YXRlKGZyYW1lKSk7CisgICAgSW5q
ZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUgbW9kdWxlID0gaW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1
bGUoZXJyb3JTdHJpbmcsIG1haW5Xb3JsZEV4ZWNTdGF0ZShmcmFtZSkpOwogICAgIGlmICghbW9k
dWxlLmhhc05vVmFsdWUoKSkKICAgICAgICAgbW9kdWxlLmNhcHR1cmVGcmFtZShlcnJvclN0cmlu
ZywgdHJhY2VMb2dJZCk7CiB9CkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6c3RhcnRDYXB0dXJpbgogICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lSWQgPyBtX3Bh
Z2VBZ2VudC0+YXNzZXJ0RnJhbWUoZXJyb3JTdHJpbmcsICpmcmFtZUlkKSA6IG1fcGFnZUFnZW50
LT5tYWluRnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47Ci0gICAgSW5q
ZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUgbW9kdWxlID0gaW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1
bGUoZXJyb3JTdHJpbmcsIG1haW5Xb3JsZFNjcmlwdFN0YXRlKGZyYW1lKSk7CisgICAgSW5qZWN0
ZWRTY3JpcHRDYW52YXNNb2R1bGUgbW9kdWxlID0gaW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUo
ZXJyb3JTdHJpbmcsIG1haW5Xb3JsZEV4ZWNTdGF0ZShmcmFtZSkpOwogICAgIGlmICghbW9kdWxl
Lmhhc05vVmFsdWUoKSkKICAgICAgICAgbW9kdWxlLnN0YXJ0Q2FwdHVyaW5nKGVycm9yU3RyaW5n
LCB0cmFjZUxvZ0lkKTsKIH0KQEAgLTIxNSw4ICsyMTUsOCBAQCBTY3JpcHRPYmplY3QgSW5zcGVj
dG9yQ2FudmFzQWdlbnQ6OndyYXBXCiBTY3JpcHRPYmplY3QgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
Om5vdGlmeVJlbmRlcmluZ0NvbnRleHRXYXNXcmFwcGVkKGNvbnN0IFNjcmlwdE9iamVjdCYgd3Jh
cHBlZENvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1fZnJvbnRlbmQpOwotICAgIFNjcmlwdFN0YXRl
KiBzY3JpcHRTdGF0ZSA9IHdyYXBwZWRDb250ZXh0LnNjcmlwdFN0YXRlKCk7Ci0gICAgRE9NV2lu
ZG93KiBkb21XaW5kb3cgPSBzY3JpcHRTdGF0ZSA/IGRvbVdpbmRvd0Zyb21TY3JpcHRTdGF0ZShz
Y3JpcHRTdGF0ZSkgOiAwOworICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IHdyYXBw
ZWRDb250ZXh0LnNjcmlwdFN0YXRlKCk7CisgICAgRE9NV2luZG93KiBkb21XaW5kb3cgPSBzY3Jp
cHRTdGF0ZSA/IGRvbVdpbmRvd0Zyb21FeGVjU3RhdGUoc2NyaXB0U3RhdGUpIDogMDsKICAgICBG
cmFtZSogZnJhbWUgPSBkb21XaW5kb3cgPyBkb21XaW5kb3ctPmZyYW1lKCkgOiAwOwogICAgIGlm
IChmcmFtZSAmJiAhbV9mcmFtZXNXaXRoVW5pbnN0cnVtZW50ZWRDYW52YXNlcy5jb250YWlucyhm
cmFtZSkpCiAgICAgICAgIG1fZnJhbWVzV2l0aFVuaW5zdHJ1bWVudGVkQ2FudmFzZXMuc2V0KGZy
YW1lLCBmYWxzZSk7CkBAIC0yMjYsNyArMjI2LDcgQEAgU2NyaXB0T2JqZWN0IEluc3BlY3RvckNh
bnZhc0FnZW50Ojpub3RpZgogICAgIHJldHVybiB3cmFwcGVkQ29udGV4dDsKIH0KIAotSW5qZWN0
ZWRTY3JpcHRDYW52YXNNb2R1bGUgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmluamVjdGVkU2NyaXB0
Q2FudmFzTW9kdWxlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgU2NyaXB0U3RhdGUqIHNjcmlw
dFN0YXRlKQorSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OmluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgSlND
OjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlKQogewogICAgIGlmICghY2hlY2tJc0VuYWJsZWQoZXJy
b3JTdHJpbmcpKQogICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUoKTsK
QEAgLTMzMCw3ICszMzAsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRCZWdpbkZy
YW1lCiAgICAgICAgIHJldHVybjsKICAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgICBmb3IgKEZy
YW1lc1dpdGhVbmluc3RydW1lbnRlZENhbnZhc2VzOjppdGVyYXRvciBpdCA9IG1fZnJhbWVzV2l0
aFVuaW5zdHJ1bWVudGVkQ2FudmFzZXMuYmVnaW4oKTsgaXQgIT0gbV9mcmFtZXNXaXRoVW5pbnN0
cnVtZW50ZWRDYW52YXNlcy5lbmQoKTsgKytpdCkgewotICAgICAgICBJbmplY3RlZFNjcmlwdENh
bnZhc01vZHVsZSBtb2R1bGUgPSBpbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSgmZXJyb3IsIG1h
aW5Xb3JsZFNjcmlwdFN0YXRlKGl0LT5rZXkpKTsKKyAgICAgICAgSW5qZWN0ZWRTY3JpcHRDYW52
YXNNb2R1bGUgbW9kdWxlID0gaW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUoJmVycm9yLCBtYWlu
V29ybGRFeGVjU3RhdGUoaXQtPmtleSkpOwogICAgICAgICBpZiAoIW1vZHVsZS5oYXNOb1ZhbHVl
KCkpCiAgICAgICAgICAgICBtb2R1bGUubWFya0ZyYW1lRW5kKCk7CiAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0FnZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0FnZW50LmgJKHJldmlz
aW9uIDE1NTczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNB
Z2VudC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgSW5zcGVjdG9yQ2FudmFzQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3Rv
ckNvbXBvc2l0ZVN0YXRlKiwgSW5zcGVjdG9yUGFnZUFnZW50KiwgSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyKik7CiAKLSAgICBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSBpbmplY3RlZFNjcmlwdENh
bnZhc01vZHVsZShFcnJvclN0cmluZyosIFNjcmlwdFN0YXRlKik7CisgICAgSW5qZWN0ZWRTY3Jp
cHRDYW52YXNNb2R1bGUgaW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUoRXJyb3JTdHJpbmcqLCBK
U0M6OkV4ZWNTdGF0ZSopOwogICAgIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlIGluamVjdGVk
U2NyaXB0Q2FudmFzTW9kdWxlKEVycm9yU3RyaW5nKiwgY29uc3QgU2NyaXB0T2JqZWN0Jik7CiAg
ICAgSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUgaW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUo
RXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAJKHJldmlzaW9uIDE1NTcz
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDcgQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xl
QWdlbnQ6OmFkZE1lc3NhZ2VUbwogICAgIGFkZENvbnNvbGVNZXNzYWdlKGFkb3B0UHRyKG5ldyBD
b25zb2xlTWVzc2FnZSghaXNXb3JrZXJBZ2VudCgpLCBzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNz
YWdlLCBjYWxsU3RhY2ssIHJlcXVlc3RJZGVudGlmaWVyKSkpOwogfQogCi12b2lkIEluc3BlY3Rv
ckNvbnNvbGVBZ2VudDo6YWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlIHNvdXJjZSwg
TWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIFNjcmlwdFN0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3Vt
ZW50cywgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcikKK3ZvaWQgSW5zcGVjdG9yQ29u
c29sZUFnZW50OjphZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNz
YWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1l
bnRzLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQogewogICAgIGlmICghZGV2ZWxv
cGVyRXh0cmFzRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNzgsNyArMTc4LDcgQEAg
dm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmFkZE1lc3NhZ2VUbwogICAgIGFkZENvbnNvbGVN
ZXNzYWdlKGFkb3B0UHRyKG5ldyBDb25zb2xlTWVzc2FnZSghaXNXb3JrZXJBZ2VudCgpLCBzb3Vy
Y2UsIHR5cGUsIGxldmVsLCBtZXNzYWdlLCBhcmd1bWVudHMsIHN0YXRlLCByZXF1ZXN0SWRlbnRp
ZmllcikpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmFkZE1lc3NhZ2VUb0Nv
bnNvbGUoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZl
bCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCB1
bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFNjcmlwdFN0YXRlKiBz
dGF0ZSwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcikKK3ZvaWQgSW5zcGVjdG9yQ29u
c29sZUFnZW50OjphZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNz
YWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
Y29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29s
dW1uTnVtYmVyLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElk
ZW50aWZpZXIpCiB7CiAgICAgaWYgKCFkZXZlbG9wZXJFeHRyYXNFbmFibGVkKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6
c3RvcFRpbWluZyhjCiAgICAgYWRkTWVzc2FnZVRvQ29uc29sZShDb25zb2xlQVBJTWVzc2FnZVNv
dXJjZSwgVGltaW5nTWVzc2FnZVR5cGUsIERlYnVnTWVzc2FnZUxldmVsLCBtZXNzYWdlLCBjYWxs
U3RhY2spOwogfQogCi12b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Y291bnQoU2NyaXB0U3Rh
dGUqIHN0YXRlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQordm9pZCBJ
bnNwZWN0b3JDb25zb2xlQWdlbnQ6OmNvdW50KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUGFzc1Jl
ZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKIHsKICAgICBSZWZQdHI8U2NyaXB0Q2Fs
bFN0YWNrPiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRm9yQ29uc29sZShzdGF0ZSkp
OwogICAgIGNvbnN0IFNjcmlwdENhbGxGcmFtZSYgbGFzdENhbGxlciA9IGNhbGxTdGFjay0+YXQo
MCk7CkBAIC0zMzYsNyArMzM2LDcgQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmFkZENv
bnNvbGVNZQogY2xhc3MgSW5zcGVjdGFibGVIZWFwT2JqZWN0IDogcHVibGljIEluamVjdGVkU2Ny
aXB0SG9zdDo6SW5zcGVjdGFibGVPYmplY3QgewogcHVibGljOgogICAgIGV4cGxpY2l0IEluc3Bl
Y3RhYmxlSGVhcE9iamVjdChpbnQgaGVhcE9iamVjdElkKSA6IG1faGVhcE9iamVjdElkKGhlYXBP
YmplY3RJZCkgeyB9Ci0gICAgdmlydHVhbCBTY3JpcHRWYWx1ZSBnZXQoU2NyaXB0U3RhdGUqKQor
ICAgIHZpcnR1YWwgU2NyaXB0VmFsdWUgZ2V0KEpTQzo6RXhlY1N0YXRlKikKICAgICB7CiAgICAg
ICAgIHJldHVybiBTY3JpcHRQcm9maWxlcjo6b2JqZWN0QnlIZWFwT2JqZWN0SWQobV9oZWFwT2Jq
ZWN0SWQpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b25zb2xlQWdlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29uc29sZUFnZW50LmgJKHJldmlzaW9uIDE1NTczNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzAs
OCArNzAsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyRnJvbnRlbmQoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVzdG9yZSgpOwogCi0gICAgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xl
KE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgU2NyaXB0U3RhdGUqLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4sIHVuc2ln
bmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsKLSAgICB2b2lkIGFkZE1lc3NhZ2VUb0Nv
bnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCB1bnNpZ25lZCBsaW5lTnVtYmVy
LCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFNjcmlwdFN0YXRlKiA9IDAsIHVuc2lnbmVkIGxvbmcg
cmVxdWVzdElkZW50aWZpZXIgPSAwKTsKKyAgICB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVz
c2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCBKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiwgdW5zaWdu
ZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOworICAgIHZvaWQgYWRkTWVzc2FnZVRvQ29u
c29sZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIHVuc2lnbmVkIGxpbmVOdW1iZXIs
IHVuc2lnbmVkIGNvbHVtbk51bWJlciwgSlNDOjpFeGVjU3RhdGUqID0gMCwgdW5zaWduZWQgbG9u
ZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOwogCiAgICAgLy8gRklYTUU6IFJlbW92ZSBvbmNlIHdl
IG5vIGxvbmdlciBnZW5lcmF0ZSBzdGFja3Mgb3V0c2lkZSBvZiBJbnNwZWN0b3IuCiAgICAgdm9p
ZCBhZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdl
TGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+
LCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7CkBAIC04MCw3ICs4MCw3IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgc3RhcnRUaW1pbmcoY29uc3QgU3RyaW5nJiB0aXRsZSk7CiAg
ICAgdm9pZCBzdG9wVGltaW5nKGNvbnN0IFN0cmluZyYgdGl0bGUsIFBhc3NSZWZQdHI8U2NyaXB0
Q2FsbFN0YWNrPik7Ci0gICAgdm9pZCBjb3VudChTY3JpcHRTdGF0ZSosIFBhc3NSZWZQdHI8U2Ny
aXB0QXJndW1lbnRzPik7CisgICAgdm9pZCBjb3VudChKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQ
dHI8U2NyaXB0QXJndW1lbnRzPik7CiAKICAgICB2b2lkIGZyYW1lV2luZG93RGlzY2FyZGVkKERP
TVdpbmRvdyopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
c29sZUluc3RydW1lbnRhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb25zb2xlSW5zdHJ1bWVudGF0aW9uLmgJKHJldmlzaW9uIDE1NTczNSkK
KysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlSW5zdHJ1bWVudGF0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgaW5saW5lIHZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjphZAogI2VuZGlmCiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZShQYWdlKiBwYWdlLCBNZXNzYWdl
U291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UsIFNjcmlwdFN0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRB
cmd1bWVudHM+IGFyZ3VtZW50cywgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcikKK2lu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZShQ
YWdlKiBwYWdlLCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2Fn
ZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cywgdW5zaWduZWQgbG9uZyBy
ZXF1ZXN0SWRlbnRpZmllcikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChJbnN0
cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50
c0ZvclBhZ2UocGFnZSkpCkBAIC03Miw3ICs3Miw3IEBAIGlubGluZSB2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6YWQKICNlbmRpZgogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSogcGFnZSwgTWVzc2FnZVNvdXJj
ZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCB1bnNpZ25lZCBsaW5lTnVtYmVy
LCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFNjcmlwdFN0YXRlKiBzdGF0ZSwgdW5zaWduZWQgbG9u
ZyByZXF1ZXN0SWRlbnRpZmllcikKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6YWRkTWVzc2FnZVRvQ29uc29sZShQYWdlKiBwYWdlLCBNZXNzYWdlU291cmNlIHNvdXJjZSwg
TWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVk
IGNvbHVtbk51bWJlciwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBsb25nIHJlcXVl
c3RJZGVudGlmaWVyKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9y
UGFnZShwYWdlKSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmFkCiAjZW5kaWYKIH0KIAotaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKFdvcmtlckdsb2JhbFNjb3BlKiB3b3JrZXJH
bG9iYWxTY29wZSwgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3Nh
Z2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNjcmlw
dElkLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFNjcmlwdFN0
YXRlKiBzdGF0ZSwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcikKK2lubGluZSB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZShXb3JrZXJHbG9i
YWxTY29wZSogd29ya2VyR2xvYmFsU2NvcGUsIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdl
VHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29u
c3QgU3RyaW5nJiBzY3JpcHRJZCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1u
TnVtYmVyLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50
aWZpZXIpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JXb3JrZXJH
bG9iYWxTY29wZSh3b3JrZXJHbG9iYWxTY29wZSkpCkBAIC0xMjcsNyArMTI3LDcgQEAgaW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZAogfQogI2VuZGlmCiAKLWlubGluZSB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZUNvdW50KFBhZ2UqIHBhZ2UsIFNj
cmlwdFN0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykK
K2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZUNvdW50KFBhZ2Uq
IHBhZ2UsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+
IGFyZ3VtZW50cykKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBh
Z2UocGFnZSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5jcHAJKHJldmlzaW9uIDE1NTczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOTAsNyArMTA5MCw3
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmZvY3VzTm9kZSgpCiAgICAgaWYgKCFmcmFtZSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBt
X2luamVjdGVkU2NyaXB0TWFuYWdlci0+aW5qZWN0ZWRTY3JpcHRGb3IobWFpbldvcmxkU2NyaXB0
U3RhdGUoZnJhbWUpKTsKKyAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZvcihtYWluV29ybGRFeGVjU3RhdGUo
ZnJhbWUpKTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTE0OTEsNyArMTQ5MSw3IEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRP
TTo6RXZlbnRMaXN0ZW4KICAgICAgICAgU2NyaXB0VmFsdWUgZnVuY3Rpb25WYWx1ZSA9IGV2ZW50
TGlzdGVuZXJIYW5kbGVyKCZub2RlLT5kb2N1bWVudCgpLCBldmVudExpc3RlbmVyLmdldCgpKTsK
ICAgICAgICAgaWYgKCFmdW5jdGlvblZhbHVlLmhhc05vVmFsdWUoKSkgewogICAgICAgICAgICAg
aWYgKEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKSkgewotICAgICAgICAg
ICAgICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IGV2ZW50TGlzdGVuZXJIYW5kbGVyU2Ny
aXB0U3RhdGUoZnJhbWUsIGV2ZW50TGlzdGVuZXIuZ2V0KCkpOworICAgICAgICAgICAgICAgIEpT
Qzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IGV2ZW50TGlzdGVuZXJIYW5kbGVyU2NyaXB0U3Rh
dGUoZnJhbWUsIGV2ZW50TGlzdGVuZXIuZ2V0KCkpOwogICAgICAgICAgICAgICAgIGlmIChzY3Jp
cHRTdGF0ZSkgewogICAgICAgICAgICAgICAgICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNj
cmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZvcihzY3JpcHRT
dGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1
ZSgpKSB7CkBAIC0xODE1LDcgKzE4MTUsNyBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50
aW1lOjpSZW1vdGVPCiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBJ
bmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5p
bmplY3RlZFNjcmlwdEZvcihtYWluV29ybGRTY3JpcHRTdGF0ZShmcmFtZSkpOworICAgIEluamVj
dGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVj
dGVkU2NyaXB0Rm9yKG1haW5Xb3JsZEV4ZWNTdGF0ZShmcmFtZSkpOwogICAgIGlmIChpbmplY3Rl
ZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiAwOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCShy
ZXZpc2lvbiAxNTU3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1Miw3ICs3NTIsNyBAQCB2b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmZhaWxlZFRvUGFyCiAgICAgbV9mcm9udGVuZC0+c2NyaXB0
RmFpbGVkVG9QYXJzZSh1cmwsIGRhdGEsIGZpcnN0TGluZSwgZXJyb3JMaW5lLCBlcnJvck1lc3Nh
Z2UpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKFNjcmlwdFN0
YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgU2NyaXB0VmFsdWUmIGNhbGxGcmFtZXMsIGNvbnN0IFNj
cmlwdFZhbHVlJiBleGNlcHRpb24pCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBh
dXNlKEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgU2NyaXB0VmFsdWUmIGNhbGxG
cmFtZXMsIGNvbnN0IFNjcmlwdFZhbHVlJiBleGNlcHRpb24pCiB7CiAgICAgQVNTRVJUKHNjcmlw
dFN0YXRlICYmICFtX3BhdXNlZFNjcmlwdFN0YXRlKTsKICAgICBtX3BhdXNlZFNjcmlwdFN0YXRl
ID0gc2NyaXB0U3RhdGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RGVidWdnZXJBZ2VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgJKHJldmlzaW9uIDE1NTczNSkKKysrIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTE0Miw3ICsxNDIsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKCk7
CiAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUGF1c2Uo
U2NyaXB0U3RhdGUqLCBjb25zdCBTY3JpcHRWYWx1ZSYgY2FsbEZyYW1lcywgY29uc3QgU2NyaXB0
VmFsdWUmIGV4Y2VwdGlvbik7CisgICAgdmlydHVhbCB2b2lkIGRpZFBhdXNlKEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgU2NyaXB0VmFsdWUmIGNhbGxGcmFtZXMsIGNvbnN0IFNjcmlwdFZhbHVlJiBl
eGNlcHRpb24pOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb250aW51ZSgpOwogICAgIHZvaWQgcmVz
ZXQoKTsKIApAQCAtMTY4LDcgKzE2OCw3IEBAIHByaXZhdGU6CiAKICAgICBJbmplY3RlZFNjcmlw
dE1hbmFnZXIqIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogICAgIEluc3BlY3RvckZyb250ZW5k
OjpEZWJ1Z2dlciogbV9mcm9udGVuZDsKLSAgICBTY3JpcHRTdGF0ZSogbV9wYXVzZWRTY3JpcHRT
dGF0ZTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogbV9wYXVzZWRTY3JpcHRTdGF0ZTsKICAgICBTY3Jp
cHRWYWx1ZSBtX2N1cnJlbnRDYWxsU3RhY2s7CiAgICAgU2NyaXB0c01hcCBtX3NjcmlwdHM7CiAg
ICAgQnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNNYXAgbV9icmVha3BvaW50
SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAJKHJl
dmlzaW9uIDE1NTczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDkgKzEzOCw5IEBAIHZv
aWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6d2luZG8KICAgICBpZiAobV9mcm9udGVu
ZEhvc3QpCiAgICAgICAgIG1fZnJvbnRlbmRIb3N0LT5kaXNjb25uZWN0Q2xpZW50KCk7CiAgICAg
Ci0gICAgU2NyaXB0U3RhdGUqIGZyb250ZW5kU2NyaXB0U3RhdGUgPSBzY3JpcHRTdGF0ZUZyb21Q
YWdlKGRlYnVnZ2VyV29ybGQoKSwgbV9mcm9udGVuZFBhZ2UpOworICAgIEpTQzo6RXhlY1N0YXRl
KiBmcm9udGVuZEV4ZWNTdGF0ZSA9IGV4ZWNTdGF0ZUZyb21QYWdlKGRlYnVnZ2VyV29ybGQoKSwg
bV9mcm9udGVuZFBhZ2UpOwogICAgIG1fZnJvbnRlbmRIb3N0ID0gSW5zcGVjdG9yRnJvbnRlbmRI
b3N0OjpjcmVhdGUodGhpcywgbV9mcm9udGVuZFBhZ2UpOwotICAgIFNjcmlwdEdsb2JhbE9iamVj
dDo6c2V0KGZyb250ZW5kU2NyaXB0U3RhdGUsICJJbnNwZWN0b3JGcm9udGVuZEhvc3QiLCBtX2Zy
b250ZW5kSG9zdC5nZXQoKSk7CisgICAgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoZnJvbnRlbmRF
eGVjU3RhdGUsICJJbnNwZWN0b3JGcm9udGVuZEhvc3QiLCBtX2Zyb250ZW5kSG9zdC5nZXQoKSk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6ZnJvbnRlbmRMb2FkZWQo
KQpAQCAtMzQ1LDcgKzM0NSw3IEBAIGJvb2wgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6
aXNVbmQKIGJvb2wgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6ZXZhbHVhdGVBc0Jvb2xl
YW4oY29uc3QgU3RyaW5nJiBleHByZXNzaW9uKQogewogICAgIFNjcmlwdFZhbHVlIHZhbHVlID0g
bV9mcm9udGVuZFBhZ2UtPm1haW5GcmFtZSgpLnNjcmlwdCgpLmV4ZWN1dGVTY3JpcHQoZXhwcmVz
c2lvbik7Ci0gICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKG1haW5Xb3JsZFNjcmlwdFN0YXRlKCZt
X2Zyb250ZW5kUGFnZS0+bWFpbkZyYW1lKCkpKSA9PSAidHJ1ZSI7CisgICAgcmV0dXJuIHZhbHVl
LnRvU3RyaW5nKG1haW5Xb3JsZEV4ZWNTdGF0ZSgmbV9mcm9udGVuZFBhZ2UtPm1haW5GcmFtZSgp
KSkgPT0gInRydWUiOwogfQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmV2
YWx1YXRlT25Mb2FkKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCShyZXZpc2lv
biAxNTU3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRI
b3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY5LDkgKzI2OSw5IEBAIHZvaWQgSW5zcGVjdG9y
RnJvbnRlbmRIb3N0OjpzaG93Q29udGV4dE0KICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJU
KG1fZnJvbnRlbmRQYWdlKTsKLSAgICBTY3JpcHRTdGF0ZSogZnJvbnRlbmRTY3JpcHRTdGF0ZSA9
IHNjcmlwdFN0YXRlRnJvbVBhZ2UoZGVidWdnZXJXb3JsZCgpLCBtX2Zyb250ZW5kUGFnZSk7Cisg
ICAgSlNDOjpFeGVjU3RhdGUqIGZyb250ZW5kRXhlY1N0YXRlID0gZXhlY1N0YXRlRnJvbVBhZ2Uo
ZGVidWdnZXJXb3JsZCgpLCBtX2Zyb250ZW5kUGFnZSk7CiAgICAgU2NyaXB0T2JqZWN0IGZyb250
ZW5kQXBpT2JqZWN0OwotICAgIGlmICghU2NyaXB0R2xvYmFsT2JqZWN0OjpnZXQoZnJvbnRlbmRT
Y3JpcHRTdGF0ZSwgIkluc3BlY3RvckZyb250ZW5kQVBJIiwgZnJvbnRlbmRBcGlPYmplY3QpKSB7
CisgICAgaWYgKCFTY3JpcHRHbG9iYWxPYmplY3Q6OmdldChmcm9udGVuZEV4ZWNTdGF0ZSwgIklu
c3BlY3RvckZyb250ZW5kQVBJIiwgZnJvbnRlbmRBcGlPYmplY3QpKSB7CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCShy
ZXZpc2lvbiAxNTU3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5k
ZXhlZERCQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NTcsNyArNjU3LDcgQEAgdm9pZCBJ
bnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdAogICAgIGlmICghaWRiRmFjdG9yeSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBt
X2luamVjdGVkU2NyaXB0TWFuYWdlci0+aW5qZWN0ZWRTY3JpcHRGb3IobWFpbldvcmxkU2NyaXB0
U3RhdGUoZnJhbWUpKTsKKyAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZvcihtYWluV29ybGRFeGVjU3RhdGUo
ZnJhbWUpKTsKIAogICAgIFJlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFuZ2UgPSBrZXlSYW5n
ZSA/IGlkYktleVJhbmdlRnJvbUtleVJhbmdlKGtleVJhbmdlLT5nZXQoKSkgOiAwOwogICAgIGlm
IChrZXlSYW5nZSAmJiAhaWRiS2V5UmFuZ2UpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCShyZXZpc2lvbiAx
NTU3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYzLDcgKzQ2Myw3IEBAIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpzY3JpcHRzRW4KICAgICAgICAgcGFnZUFnZW50LT5zY3JpcHRzRW5h
YmxlZChpc0VuYWJsZWQpOwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
Q3JlYXRlSXNvbGF0ZWRDb250ZXh0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50
aW5nQWdlbnRzLCBGcmFtZSogZnJhbWUsIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgU2VjdXJp
dHlPcmlnaW4qIG9yaWdpbikKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDcmVh
dGVJc29sYXRlZENvbnRleHRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdB
Z2VudHMsIEZyYW1lKiBmcmFtZSwgSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLCBTZWN1cml0
eU9yaWdpbiogb3JpZ2luKQogewogICAgIGlmIChQYWdlUnVudGltZUFnZW50KiBydW50aW1lQWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5wYWdlUnVudGltZUFnZW50KCkpCiAgICAgICAgIHJ1
bnRpbWVBZ2VudC0+ZGlkQ3JlYXRlSXNvbGF0ZWRDb250ZXh0KGZyYW1lLCBzY3JpcHRTdGF0ZSwg
b3JpZ2luKTsKQEAgLTEwMjYsNyArMTAyNiw3IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjphZGRNZXNzYWcKICNlbmRpZgogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6YWRkTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cywgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3Nh
Z2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBTY3JpcHRTdGF0ZSogc3RhdGUs
IFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMsIHVuc2lnbmVkIGxvbmcgcmVx
dWVzdElkZW50aWZpZXIpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2Fn
ZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywg
TWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZl
bCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFBhc3NSZWZQ
dHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50
aWZpZXIpCiB7CiAgICAgaWYgKEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yQ29uc29sZUFnZW50KCkpCiAgICAgICAgIGNv
bnNvbGVBZ2VudC0+YWRkTWVzc2FnZVRvQ29uc29sZShzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNz
YWdlLCBzdGF0ZSwgYXJndW1lbnRzLCByZXF1ZXN0SWRlbnRpZmllcik7CkBAIC0xMDM2LDEzICsx
MDM2LDEzIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWcKICNlbmRp
ZgogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29s
ZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgTWVzc2FnZVNv
dXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCB1bnNpZ25lZCBsaW5lTnVt
YmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFNjcmlwdFN0YXRlKiBzdGF0ZSwgdW5zaWduZWQg
bG9uZyByZXF1ZXN0SWRlbnRpZmllcikKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjph
ZGRNZXNzYWdlVG9Db25zb2xlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzLCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxl
dmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQs
IHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQogewogICAgIGlmIChJ
bnNwZWN0b3JDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMt
Pmluc3BlY3RvckNvbnNvbGVBZ2VudCgpKQogICAgICAgICBjb25zb2xlQWdlbnQtPmFkZE1lc3Nh
Z2VUb0NvbnNvbGUoc291cmNlLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgc2NyaXB0SWQsIGxpbmVO
dW1iZXIsIGNvbHVtbk51bWJlciwgc3RhdGUsIHJlcXVlc3RJZGVudGlmaWVyKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVDb3VudEltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgU2NyaXB0U3RhdGUqIHN0YXRlLCBQYXNzUmVm
UHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmNvbnNvbGVDb3VudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGlu
Z0FnZW50cywgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50
cz4gYXJndW1lbnRzKQogewogICAgIGlmIChJbnNwZWN0b3JDb25zb2xlQWdlbnQqIGNvbnNvbGVB
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckNvbnNvbGVBZ2VudCgpKQogICAg
ICAgICBjb25zb2xlQWdlbnQtPmNvdW50KHN0YXRlLCBhcmd1bWVudHMpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAko
cmV2aXNpb24gMTU1NzM1KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvcklu
c3RydW1lbnRhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4LDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbEV2YWx1YXRl
U2NyaXB0KEZyYW1lKiwgY29uc3QgU3RyaW5nJiB1cmwsIGludCBsaW5lTnVtYmVyKTsKICAgICBz
dGF0aWMgdm9pZCBkaWRFdmFsdWF0ZVNjcmlwdChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b25Db29raWUmKTsKICAgICBzdGF0aWMgdm9pZCBzY3JpcHRzRW5hYmxlZChQYWdlKiwgYm9vbCBp
c0VuYWJsZWQpOwotICAgIHN0YXRpYyB2b2lkIGRpZENyZWF0ZUlzb2xhdGVkQ29udGV4dChGcmFt
ZSosIFNjcmlwdFN0YXRlKiwgU2VjdXJpdHlPcmlnaW4qKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRD
cmVhdGVJc29sYXRlZENvbnRleHQoRnJhbWUqLCBKU0M6OkV4ZWNTdGF0ZSosIFNlY3VyaXR5T3Jp
Z2luKik7CiAgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsRmly
ZVRpbWVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBpbnQgdGltZXJJZCk7CiAgICAgc3RhdGlj
IHZvaWQgZGlkRmlyZVRpbWVyKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYp
OwogICAgIHN0YXRpYyB2b2lkIGRpZEludmFsaWRhdGVMYXlvdXQoRnJhbWUqKTsKQEAgLTIzMCwx
NCArMjMwLDE0IEBAIHB1YmxpYzoKIAogICAgIC8vIEZJWE1FOiBSZW1vdmUgb25jZSB3ZSBubyBs
b25nZXIgZ2VuZXJhdGUgc3RhY2tzIG91dHNpZGUgb2YgSW5zcGVjdG9yLgogICAgIHN0YXRpYyB2
b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSosIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBl
LCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxTY3JpcHRD
YWxsU3RhY2s+LCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7Ci0gICAgc3Rh
dGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShQYWdlKiwgTWVzc2FnZVNvdXJjZSwgTWVzc2Fn
ZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBTY3JpcHRTdGF0ZSos
IFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRp
ZmllciA9IDApOwotICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSosIE1l
c3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWdu
ZWQgY29sdW1uTnVtYmVyLCBTY3JpcHRTdGF0ZSogPSAwLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJ
ZGVudGlmaWVyID0gMCk7CisgICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShQYWdl
KiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiwg
dW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOworICAgIHN0YXRpYyB2b2lkIGFk
ZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSosIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNz
YWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwg
dW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBKU0M6OkV4ZWNTdGF0
ZSogPSAwLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7CiAjaWYgRU5BQkxF
KFdPUktFUlMpCiAgICAgLy8gRklYTUU6IENvbnZlcnQgdG8gU2NyaXB0QXJndW1lbnRzIHRvIG1h
dGNoIG5vbi13b3JrZXIgY29udGV4dC4KICAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25z
b2xlKFdvcmtlckdsb2JhbFNjb3BlKiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3Nh
Z2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFj
az4sIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsKLSAgICBzdGF0aWMgdm9p
ZCBhZGRNZXNzYWdlVG9Db25zb2xlKFdvcmtlckdsb2JhbFNjb3BlKiwgTWVzc2FnZVNvdXJjZSwg
TWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBT
dHJpbmcmIHNjcmlwdElkLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1i
ZXIsIFNjcmlwdFN0YXRlKiA9IDAsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAw
KTsKKyAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKFdvcmtlckdsb2JhbFNjb3Bl
KiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1
bnNpZ25lZCBjb2x1bW5OdW1iZXIsIEpTQzo6RXhlY1N0YXRlKiA9IDAsIHVuc2lnbmVkIGxvbmcg
cmVxdWVzdElkZW50aWZpZXIgPSAwKTsKICNlbmRpZgotICAgIHN0YXRpYyB2b2lkIGNvbnNvbGVD
b3VudChQYWdlKiwgU2NyaXB0U3RhdGUqLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4pOwor
ICAgIHN0YXRpYyB2b2lkIGNvbnNvbGVDb3VudChQYWdlKiwgSlNDOjpFeGVjU3RhdGUqLCBQYXNz
UmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4pOwogICAgIHN0YXRpYyB2b2lkIHN0YXJ0Q29uc29sZVRp
bWluZyhGcmFtZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpOwogICAgIHN0YXRpYyB2b2lkIHN0b3BD
b25zb2xlVGltaW5nKEZyYW1lKiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgUGFzc1JlZlB0cjxTY3Jp
cHRDYWxsU3RhY2s+KTsKICAgICBzdGF0aWMgdm9pZCBjb25zb2xlVGltZVN0YW1wKEZyYW1lKiwg
UGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+KTsKQEAgLTM2Myw3ICszNjMsNyBAQCBwcml2YXRl
OgogICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbEV2YWx1YXRl
U2NyaXB0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgY29uc3QgU3RyaW5nJiB1cmwsIGludCBs
aW5lTnVtYmVyLCBGcmFtZSopOwogICAgIHN0YXRpYyB2b2lkIGRpZEV2YWx1YXRlU2NyaXB0SW1w
bChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmKTsKICAgICBzdGF0aWMgdm9p
ZCBzY3JpcHRzRW5hYmxlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIGJvb2wgaXNFbmFibGVk
KTsKLSAgICBzdGF0aWMgdm9pZCBkaWRDcmVhdGVJc29sYXRlZENvbnRleHRJbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMqLCBGcmFtZSosIFNjcmlwdFN0YXRlKiwgU2VjdXJpdHlPcmlnaW4qKTsKKyAg
ICBzdGF0aWMgdm9pZCBkaWRDcmVhdGVJc29sYXRlZENvbnRleHRJbXBsKEluc3RydW1lbnRpbmdB
Z2VudHMqLCBGcmFtZSosIEpTQzo6RXhlY1N0YXRlKiwgU2VjdXJpdHlPcmlnaW4qKTsKICAgICBz
dGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxGaXJlVGltZXJJbXBsKElu
c3RydW1lbnRpbmdBZ2VudHMqLCBpbnQgdGltZXJJZCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCop
OwogICAgIHN0YXRpYyB2b2lkIGRpZEZpcmVUaW1lckltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uQ29va2llJik7CiAgICAgc3RhdGljIHZvaWQgZGlkSW52YWxpZGF0ZUxheW91dElt
cGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIEZyYW1lKik7CkBAIC00MzIsMTMgKzQzMiwxMyBAQCBw
cml2YXRlOgogICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbFdy
aXRlSFRNTEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIHVuc2lnbmVkIHN0YXJ0TGluZSwgRnJh
bWUqKTsKICAgICBzdGF0aWMgdm9pZCBkaWRXcml0ZUhUTUxJbXBsKGNvbnN0IEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbkNvb2tpZSYsIHVuc2lnbmVkIGVuZExpbmUpOwogCi0gICAgc3RhdGljIHZv
aWQgYWRkTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIE1lc3NhZ2VT
b3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
U2NyaXB0U3RhdGUqLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4sIHVuc2lnbmVkIGxvbmcg
cmVxdWVzdElkZW50aWZpZXIpOwotICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGVJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVz
c2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQs
IHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgU2NyaXB0U3RhdGUq
LCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKTsKKyAgICBzdGF0aWMgdm9pZCBhZGRN
ZXNzYWdlVG9Db25zb2xlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgTWVzc2FnZVNvdXJjZSwg
TWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBKU0M6OkV4
ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiwgdW5zaWduZWQgbG9uZyByZXF1
ZXN0SWRlbnRpZmllcik7CisgICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZUltcGwo
SW5zdHJ1bWVudGluZ0FnZW50cyosIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdl
TGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgdW5z
aWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBKU0M6OkV4ZWNTdGF0ZSos
IHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpOwogCiAgICAgLy8gRklYTUU6IFJlbW92
ZSBvbmNlIHdlIG5vIGxvbmdlciBnZW5lcmF0ZSBzdGFja3Mgb3V0c2lkZSBvZiBJbnNwZWN0b3Iu
CiAgICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyosIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+LCB1bnNpZ25lZCBsb25n
IHJlcXVlc3RJZGVudGlmaWVyKTsKIAotICAgIHN0YXRpYyB2b2lkIGNvbnNvbGVDb3VudEltcGwo
SW5zdHJ1bWVudGluZ0FnZW50cyosIFNjcmlwdFN0YXRlKiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1
bWVudHM+KTsKKyAgICBzdGF0aWMgdm9pZCBjb25zb2xlQ291bnRJbXBsKEluc3RydW1lbnRpbmdB
Z2VudHMqLCBKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPik7CiAg
ICAgc3RhdGljIHZvaWQgc3RhcnRDb25zb2xlVGltaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
KiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKICAgICBzdGF0aWMgdm9pZCBzdG9wQ29u
c29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIEZyYW1lKiwgY29uc3QgU3RyaW5n
JiB0aXRsZSwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+KTsKICAgICBzdGF0aWMgdm9pZCBj
b25zb2xlVGltZVN0YW1wSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgRnJhbWUqLCBQYXNzUmVm
UHRyPFNjcmlwdEFyZ3VtZW50cz4pOwpAQCAtOTk2LDcgKzk5Niw3IEBAIGlubGluZSB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2MKICNlbmRpZgogfQogCi1pbmxpbmUgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENyZWF0ZUlzb2xhdGVkQ29udGV4dChGcmFtZSogZnJh
bWUsIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK2lu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ3JlYXRlSXNvbGF0ZWRDb250
ZXh0KEZyYW1lKiBmcmFtZSwgSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLCBTZWN1cml0eU9y
aWdpbiogb3JpZ2luKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgRkFTVF9SRVRVUk5f
SUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
UGFnZUNvbnNvbGVBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL1BhZ2VDb25zb2xlQWdlbnQuY3BwCShyZXZpc2lvbiAxNTU3MzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvUGFnZUNvbnNvbGVBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2
LDcgKzY2LDcgQEAgdm9pZCBQYWdlQ29uc29sZUFnZW50OjpjbGVhck1lc3NhZ2VzKEVycgogY2xh
c3MgSW5zcGVjdGFibGVOb2RlIDogcHVibGljIEluamVjdGVkU2NyaXB0SG9zdDo6SW5zcGVjdGFi
bGVPYmplY3QgewogcHVibGljOgogICAgIGV4cGxpY2l0IEluc3BlY3RhYmxlTm9kZShOb2RlKiBu
b2RlKSA6IG1fbm9kZShub2RlKSB7IH0KLSAgICB2aXJ0dWFsIFNjcmlwdFZhbHVlIGdldChTY3Jp
cHRTdGF0ZSogc3RhdGUpCisgICAgdmlydHVhbCBTY3JpcHRWYWx1ZSBnZXQoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlKQogICAgIHsKICAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0SG9zdDo6bm9k
ZUFzU2NyaXB0VmFsdWUoc3RhdGUsIG1fbm9kZSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCShyZXZpc2lvbiAxNTU3MzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OnVubXV0
ZUNvbnNvbGUoKQogSW5qZWN0ZWRTY3JpcHQgUGFnZURlYnVnZ2VyQWdlbnQ6OmluamVjdGVkU2Ny
aXB0Rm9yRXZhbChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IGludCogZXhlY3V0aW9u
Q29udGV4dElkKQogewogICAgIGlmICghZXhlY3V0aW9uQ29udGV4dElkKSB7Ci0gICAgICAgIFNj
cmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IG1haW5Xb3JsZFNjcmlwdFN0YXRlKG1fcGFnZUFnZW50
LT5tYWluRnJhbWUoKSk7CisgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IG1h
aW5Xb3JsZEV4ZWNTdGF0ZShtX3BhZ2VBZ2VudC0+bWFpbkZyYW1lKCkpOwogICAgICAgICByZXR1
cm4gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCktPmluamVjdGVkU2NyaXB0Rm9yKHNjcmlwdFN0YXRl
KTsKICAgICB9CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNj
cmlwdE1hbmFnZXIoKS0+aW5qZWN0ZWRTY3JpcHRGb3JJZCgqZXhlY3V0aW9uQ29udGV4dElkKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlUnVudGltZUFnZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVJ1bnRpbWVBZ2VudC5jcHAJ
KHJldmlzaW9uIDE1NTczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlUnVudGlt
ZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDExICsxMjAsMTEgQEAgdm9pZCBQYWdl
UnVudGltZUFnZW50OjpkaWRDcmVhdGVNYWluV29ybAogICAgICAgICByZXR1cm47CiAgICAgQVNT
RVJUKG1fZnJvbnRlbmQpOwogICAgIFN0cmluZyBmcmFtZUlkID0gbV9wYWdlQWdlbnQtPmZyYW1l
SWQoZnJhbWUpOwotICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IG1haW5Xb3JsZFNjcmlw
dFN0YXRlKGZyYW1lKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSBtYWluV29y
bGRFeGVjU3RhdGUoZnJhbWUpOwogICAgIG5vdGlmeUNvbnRleHRDcmVhdGVkKGZyYW1lSWQsIHNj
cmlwdFN0YXRlLCAwLCB0cnVlKTsKIH0KIAotdm9pZCBQYWdlUnVudGltZUFnZW50OjpkaWRDcmVh
dGVJc29sYXRlZENvbnRleHQoRnJhbWUqIGZyYW1lLCBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUs
IFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit2b2lkIFBhZ2VSdW50aW1lQWdlbnQ6OmRpZENyZWF0
ZUlzb2xhdGVkQ29udGV4dChGcmFtZSogZnJhbWUsIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0
ZSwgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIHsKICAgICBpZiAoIW1fZW5hYmxlZCkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTM2LDcgKzEzNiw3IEBAIHZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6ZGlk
Q3JlYXRlSXNvbGF0ZWQKIEluamVjdGVkU2NyaXB0IFBhZ2VSdW50aW1lQWdlbnQ6OmluamVjdGVk
U2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IGludCogZXhlY3V0
aW9uQ29udGV4dElkKQogewogICAgIGlmICghZXhlY3V0aW9uQ29udGV4dElkKSB7Ci0gICAgICAg
IFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IG1haW5Xb3JsZFNjcmlwdFN0YXRlKCZtX2luc3Bl
Y3RlZFBhZ2UtPm1haW5GcmFtZSgpKTsKKyAgICAgICAgSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0
YXRlID0gbWFpbldvcmxkRXhlY1N0YXRlKCZtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpKTsK
ICAgICAgICAgSW5qZWN0ZWRTY3JpcHQgcmVzdWx0ID0gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCkt
PmluamVjdGVkU2NyaXB0Rm9yKHNjcmlwdFN0YXRlKTsKICAgICAgICAgaWYgKHJlc3VsdC5oYXNO
b1ZhbHVlKCkpCiAgICAgICAgICAgICAqZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IG1h
aW4gd29ybGQgZXhlY3V0aW9uIGNvbnRleHQgbm90IGZvdW5kLiI7CkBAIC0xNjAsMTMgKzE2MCwx
MyBAQCB2b2lkIFBhZ2VSdW50aW1lQWdlbnQ6OnVubXV0ZUNvbnNvbGUoKQogCiB2b2lkIFBhZ2VS
dW50aW1lQWdlbnQ6OnJlcG9ydEV4ZWN1dGlvbkNvbnRleHRDcmVhdGlvbigpCiB7Ci0gICAgVmVj
dG9yPHN0ZDo6cGFpcjxTY3JpcHRTdGF0ZSosIFNlY3VyaXR5T3JpZ2luKj4gPiBpc29sYXRlZENv
bnRleHRzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8SlNDOjpFeGVjU3RhdGUqLCBTZWN1cml0eU9y
aWdpbio+ID4gaXNvbGF0ZWRDb250ZXh0czsKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX2lu
c3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRy
YXZlcnNlTmV4dCgpKSB7CiAgICAgICAgIGlmICghZnJhbWUtPnNjcmlwdCgpLmNhbkV4ZWN1dGVT
Y3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICBTdHJpbmcgZnJhbWVJZCA9IG1fcGFnZUFnZW50LT5mcmFtZUlkKGZyYW1lKTsKIAot
ICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBtYWluV29ybGRTY3JpcHRTdGF0ZShm
cmFtZSk7CisgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IG1haW5Xb3JsZEV4
ZWNTdGF0ZShmcmFtZSk7CiAgICAgICAgIG5vdGlmeUNvbnRleHRDcmVhdGVkKGZyYW1lSWQsIHNj
cmlwdFN0YXRlLCAwLCB0cnVlKTsKICAgICAgICAgZnJhbWUtPnNjcmlwdCgpLmNvbGxlY3RJc29s
YXRlZENvbnRleHRzKGlzb2xhdGVkQ29udGV4dHMpOwogICAgICAgICBpZiAoaXNvbGF0ZWRDb250
ZXh0cy5pc0VtcHR5KCkpCkBAIC0xNzcsNyArMTc3LDcgQEAgdm9pZCBQYWdlUnVudGltZUFnZW50
OjpyZXBvcnRFeGVjdXRpb25DbwogICAgIH0KIH0KIAotdm9pZCBQYWdlUnVudGltZUFnZW50Ojpu
b3RpZnlDb250ZXh0Q3JlYXRlZChjb25zdCBTdHJpbmcmIGZyYW1lSWQsIFNjcmlwdFN0YXRlKiBz
Y3JpcHRTdGF0ZSwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBib29sIGlzUGFnZUNv
bnRleHQpCit2b2lkIFBhZ2VSdW50aW1lQWdlbnQ6Om5vdGlmeUNvbnRleHRDcmVhdGVkKGNvbnN0
IFN0cmluZyYgZnJhbWVJZCwgSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLCBTZWN1cml0eU9y
aWdpbiogc2VjdXJpdHlPcmlnaW4sIGJvb2wgaXNQYWdlQ29udGV4dCkKIHsKICAgICBBU1NFUlQo
c2VjdXJpdHlPcmlnaW4gfHwgaXNQYWdlQ29udGV4dCk7CiAgICAgaW50IGV4ZWN1dGlvbkNvbnRl
eHRJZCA9IGluamVjdGVkU2NyaXB0TWFuYWdlcigpLT5pbmplY3RlZFNjcmlwdElkRm9yKHNjcmlw
dFN0YXRlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlUnVudGltZUFnZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VSdW50aW1lQWdl
bnQuaAkocmV2aXNpb24gMTU1NzM1KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VS
dW50aW1lQWdlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcqKTsKIAogICAgIHZvaWQgZGlkQ3Jl
YXRlTWFpbldvcmxkQ29udGV4dChGcmFtZSopOwotICAgIHZvaWQgZGlkQ3JlYXRlSXNvbGF0ZWRD
b250ZXh0KEZyYW1lKiwgU2NyaXB0U3RhdGUqLCBTZWN1cml0eU9yaWdpbiopOworICAgIHZvaWQg
ZGlkQ3JlYXRlSXNvbGF0ZWRDb250ZXh0KEZyYW1lKiwgSlNDOjpFeGVjU3RhdGUqLCBTZWN1cml0
eU9yaWdpbiopOwogCiBwcml2YXRlOgogICAgIFBhZ2VSdW50aW1lQWdlbnQoSW5zdHJ1bWVudGlu
Z0FnZW50cyosIEluc3BlY3RvckNvbXBvc2l0ZVN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
KiwgUGFnZSosIEluc3BlY3RvclBhZ2VBZ2VudCopOwpAQCAtNjcsNyArNjcsNyBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgdm9pZCBtdXRlQ29uc29sZSgpOwogICAgIHZpcnR1YWwgdm9pZCB1bm11
dGVDb25zb2xlKCk7CiAgICAgdm9pZCByZXBvcnRFeGVjdXRpb25Db250ZXh0Q3JlYXRpb24oKTsK
LSAgICB2b2lkIG5vdGlmeUNvbnRleHRDcmVhdGVkKGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgU2Ny
aXB0U3RhdGUqLCBTZWN1cml0eU9yaWdpbiosIGJvb2wgaXNQYWdlQ29udGV4dCk7CisgICAgdm9p
ZCBub3RpZnlDb250ZXh0Q3JlYXRlZChjb25zdCBTdHJpbmcmIGZyYW1lSWQsIEpTQzo6RXhlY1N0
YXRlKiwgU2VjdXJpdHlPcmlnaW4qLCBib29sIGlzUGFnZUNvbnRleHQpOwogCiAgICAgUGFnZSog
bV9pbnNwZWN0ZWRQYWdlOwogICAgIEluc3BlY3RvclBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0QXJndW1lbnRzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0QXJndW1lbnRzLmNwcAkocmV2
aXNpb24gMTU1NzM1KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdEFyZ3VtZW50
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxMiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBTY3JpcHRBcmd1bWVudHM6OmNy
ZWF0ZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIFZlY3RvcjxTY3JpcHRWYWx1ZT4mIGFyZ3Vt
ZW50cykKK1Bhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBTY3JpcHRBcmd1bWVudHM6OmNyZWF0
ZShKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIFZlY3RvcjxTY3JpcHRWYWx1ZT4mIGFyZ3Vt
ZW50cykKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNjcmlwdEFyZ3VtZW50cyhzY3JpcHRT
dGF0ZSwgYXJndW1lbnRzKSk7CiB9CiAKLVNjcmlwdEFyZ3VtZW50czo6U2NyaXB0QXJndW1lbnRz
KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgVmVjdG9yPFNjcmlwdFZhbHVlPiYgYXJndW1lbnRz
KQorU2NyaXB0QXJndW1lbnRzOjpTY3JpcHRBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUqIHNjcmlw
dFN0YXRlLCBWZWN0b3I8U2NyaXB0VmFsdWU+JiBhcmd1bWVudHMpCiAgICAgOiBtX2dsb2JhbE9i
amVjdChzY3JpcHRTdGF0ZS0+dm0oKSwgc2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSkKIHsKICAgICBtX2FyZ3VtZW50cy5zd2FwKGFyZ3VtZW50cyk7CkBAIC01Niw3ICs1Niw3IEBA
IGNvbnN0IFNjcmlwdFZhbHVlICZTY3JpcHRBcmd1bWVudHM6OmFyZ3UKICAgICByZXR1cm4gbV9h
cmd1bWVudHNbaW5kZXhdOwogfQogCi1TY3JpcHRTdGF0ZSogU2NyaXB0QXJndW1lbnRzOjpnbG9i
YWxTdGF0ZSgpIGNvbnN0CitKU0M6OkV4ZWNTdGF0ZSogU2NyaXB0QXJndW1lbnRzOjpnbG9iYWxT
dGF0ZSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fZ2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm4g
Y29uc3RfY2FzdDxKU0M6OkpTR2xvYmFsT2JqZWN0Kj4obV9nbG9iYWxPYmplY3QuZ2V0KCkpLT5n
bG9iYWxFeGVjKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0QXJndW1l
bnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdEFyZ3Vt
ZW50cy5oCShyZXZpc2lvbiAxNTU3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvU2Ny
aXB0QXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDI1ICs0NCwyNCBAQCBjbGFzcyBK
U0dsb2JhbE9iamVjdDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIEpTQzo6RXhl
Y1N0YXRlIFNjcmlwdFN0YXRlOwogY2xhc3MgU2NyaXB0VmFsdWU7CiAKIGNsYXNzIFNjcmlwdEFy
Z3VtZW50cyA6IHB1YmxpYyBSZWZDb3VudGVkPFNjcmlwdEFyZ3VtZW50cz4gewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gY3JlYXRlKFNjcmlwdFN0YXRl
KiwgVmVjdG9yPFNjcmlwdFZhbHVlPiYgYXJndW1lbnRzKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTY3JpcHRBcmd1bWVudHM+IGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSosIFZlY3RvcjxTY3JpcHRW
YWx1ZT4mIGFyZ3VtZW50cyk7CiAKICAgICB+U2NyaXB0QXJndW1lbnRzKCk7CiAKICAgICBjb25z
dCBTY3JpcHRWYWx1ZSYgYXJndW1lbnRBdChzaXplX3QpIGNvbnN0OwogICAgIHNpemVfdCBhcmd1
bWVudENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgpOyB9CiAKLSAgICBT
Y3JpcHRTdGF0ZSogZ2xvYmFsU3RhdGUoKSBjb25zdDsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZ2xv
YmFsU3RhdGUoKSBjb25zdDsKIAogICAgIGJvb2wgZ2V0Rmlyc3RBcmd1bWVudEFzU3RyaW5nKFdU
Rjo6U3RyaW5nJiByZXN1bHQsIGJvb2wgY2hlY2tGb3JOdWxsT3JVbmRlZmluZWQgPSBmYWxzZSk7
CiAgICAgYm9vbCBpc0VxdWFsKFNjcmlwdEFyZ3VtZW50cyopIGNvbnN0OwogCiBwcml2YXRlOgot
ICAgIFNjcmlwdEFyZ3VtZW50cyhTY3JpcHRTdGF0ZSosIFZlY3RvcjxTY3JpcHRWYWx1ZT4mIGFy
Z3VtZW50cyk7CisgICAgU2NyaXB0QXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlKiwgVmVjdG9yPFNj
cmlwdFZhbHVlPiYgYXJndW1lbnRzKTsKIAogICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNHbG9iYWxP
YmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwogICAgIFZlY3RvcjxTY3JpcHRWYWx1ZT4gbV9hcmd1bWVu
dHM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdMaXN0ZW5lci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9TY3JpcHREZWJ1Z0xpc3Rl
bmVyLmgJKHJldmlzaW9uIDE1NTczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9TY3Jp
cHREZWJ1Z0xpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIGRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgc2NyaXB0
SWQsIGNvbnN0IFNjcmlwdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZmFpbGVkVG9QYXJzZVNv
dXJjZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgZmlyc3RMaW5l
LCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBkaWRQYXVzZShTY3JpcHRTdGF0ZSosIGNvbnN0IFNjcmlwdFZhbHVlJiBjYWxs
RnJhbWVzLCBjb25zdCBTY3JpcHRWYWx1ZSYgZXhjZXB0aW9uKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGRpZFBhdXNlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU2NyaXB0VmFsdWUmIGNhbGxGcmFt
ZXMsIGNvbnN0IFNjcmlwdFZhbHVlJiBleGNlcHRpb24pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ29udGludWUoKSA9IDA7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
V29ya2VyRGVidWdnZXJBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3BwCShyZXZpc2lvbiAxNTU3MzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMCw3ICsxMzAsNyBAQCBJbmplY3RlZFNjcmlwdCBXb3JrZXJEZWJ1Z2dlckFnZW50
OjppbmplCiAgICAgICAgICplcnJvciA9ICJFeGVjdXRpb24gY29udGV4dCBpZCBpcyBub3Qgc3Vw
cG9ydGVkIGZvciB3b3JrZXJzIGFzIHRoZXJlIGlzIG9ubHkgb25lIGV4ZWN1dGlvbiBjb250ZXh0
LiI7CiAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdCgpOwogICAgIH0KLSAgICBTY3JpcHRT
dGF0ZSogc2NyaXB0U3RhdGUgPSBzY3JpcHRTdGF0ZUZyb21Xb3JrZXJHbG9iYWxTY29wZShtX2lu
c3BlY3RlZFdvcmtlckdsb2JhbFNjb3BlKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3Rh
dGUgPSBleGVjU3RhdGVGcm9tV29ya2VyR2xvYmFsU2NvcGUobV9pbnNwZWN0ZWRXb3JrZXJHbG9i
YWxTY29wZSk7CiAgICAgcmV0dXJuIGluamVjdGVkU2NyaXB0TWFuYWdlcigpLT5pbmplY3RlZFNj
cmlwdEZvcihzY3JpcHRTdGF0ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9Xb3JrZXJSdW50aW1lQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Xb3JrZXJSdW50aW1lQWdlbnQuY3BwCShyZXZpc2lvbiAxNTU3MzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyUnVudGltZUFnZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjMsNyArNjMsNyBAQCBJbmplY3RlZFNjcmlwdCBXb3JrZXJSdW50aW1lQWdlbnQ6Omlu
amVjCiAgICAgICAgICplcnJvciA9ICJFeGVjdXRpb24gY29udGV4dCBpZCBpcyBub3Qgc3VwcG9y
dGVkIGZvciB3b3JrZXJzIGFzIHRoZXJlIGlzIG9ubHkgb25lIGV4ZWN1dGlvbiBjb250ZXh0LiI7
CiAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdCgpOwogICAgIH0KLSAgICBTY3JpcHRTdGF0
ZSogc2NyaXB0U3RhdGUgPSBzY3JpcHRTdGF0ZUZyb21Xb3JrZXJHbG9iYWxTY29wZShtX3dvcmtl
ckdsb2JhbFNjb3BlKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSBleGVjU3Rh
dGVGcm9tV29ya2VyR2xvYmFsU2NvcGUobV93b3JrZXJHbG9iYWxTY29wZSk7CiAgICAgcmV0dXJu
IGluamVjdGVkU2NyaXB0TWFuYWdlcigpLT5pbmplY3RlZFNjcmlwdEZvcihzY3JpcHRTdGF0ZSk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29uc29sZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9Db25zb2xlLmNwcAkocmV2aXNpb24gMTU1NzM1KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9Db25zb2xlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyAr
NjUsNyBAQCBDb25zb2xlOjp+Q29uc29sZSgpCiB7CiB9CiAKLXN0YXRpYyB2b2lkIGludGVybmFs
QWRkTWVzc2FnZShQYWdlKiBwYWdlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2
ZWwsIFNjcmlwdFN0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IHBycEFy
Z3VtZW50cywgYm9vbCBhY2NlcHROb0FyZ3VtZW50cyA9IGZhbHNlLCBib29sIHByaW50VHJhY2Ug
PSBmYWxzZSkKK3N0YXRpYyB2b2lkIGludGVybmFsQWRkTWVzc2FnZShQYWdlKiBwYWdlLCBNZXNz
YWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
UGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IHBycEFyZ3VtZW50cywgYm9vbCBhY2NlcHROb0Fy
Z3VtZW50cyA9IGZhbHNlLCBib29sIHByaW50VHJhY2UgPSBmYWxzZSkKIHsKICAgICBSZWZQdHI8
U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMgPSBwcnBBcmd1bWVudHM7CiAKQEAgLTExMSw1NyAr
MTExLDU3IEBAIHN0YXRpYyB2b2lkIGludGVybmFsQWRkTWVzc2FnZShQYWdlKiBwYWcKICAgICB9
CiB9CiAKLXZvaWQgQ29uc29sZTo6ZGVidWcoU2NyaXB0U3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRy
PFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQordm9pZCBDb25zb2xlOjpkZWJ1ZyhKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMpCiB7
CiAgICAgaW50ZXJuYWxBZGRNZXNzYWdlKHBhZ2UoKSwgTG9nTWVzc2FnZVR5cGUsIERlYnVnTWVz
c2FnZUxldmVsLCBzdGF0ZSwgYXJndW1lbnRzKTsKIH0KIAotdm9pZCBDb25zb2xlOjplcnJvcihT
Y3JpcHRTdGF0ZSogc3RhdGUsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMp
Cit2b2lkIENvbnNvbGU6OmVycm9yKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxT
Y3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKIHsKICAgICBpbnRlcm5hbEFkZE1lc3NhZ2UocGFn
ZSgpLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIHN0YXRlLCBhcmd1bWVudHMp
OwogfQogCi12b2lkIENvbnNvbGU6OmluZm8oU2NyaXB0U3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRy
PFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQordm9pZCBDb25zb2xlOjppbmZvKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKIHsK
ICAgICBsb2coc3RhdGUsIGFyZ3VtZW50cyk7CiB9CiAKLXZvaWQgQ29uc29sZTo6bG9nKFNjcmlw
dFN0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKK3Zv
aWQgQ29uc29sZTo6bG9nKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRB
cmd1bWVudHM+IGFyZ3VtZW50cykKIHsKICAgICBpbnRlcm5hbEFkZE1lc3NhZ2UocGFnZSgpLCBM
b2dNZXNzYWdlVHlwZSwgTG9nTWVzc2FnZUxldmVsLCBzdGF0ZSwgYXJndW1lbnRzKTsKIH0KIAot
dm9pZCBDb25zb2xlOjp3YXJuKFNjcmlwdFN0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRB
cmd1bWVudHM+IGFyZ3VtZW50cykKK3ZvaWQgQ29uc29sZTo6d2FybihKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMpCiB7CiAgICAgaW50
ZXJuYWxBZGRNZXNzYWdlKHBhZ2UoKSwgTG9nTWVzc2FnZVR5cGUsIFdhcm5pbmdNZXNzYWdlTGV2
ZWwsIHN0YXRlLCBhcmd1bWVudHMpOwogfQogCi12b2lkIENvbnNvbGU6OmRpcihTY3JpcHRTdGF0
ZSogc3RhdGUsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMpCit2b2lkIENv
bnNvbGU6OmRpcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1l
bnRzPiBhcmd1bWVudHMpCiB7CiAgICAgaW50ZXJuYWxBZGRNZXNzYWdlKHBhZ2UoKSwgRGlyTWVz
c2FnZVR5cGUsIExvZ01lc3NhZ2VMZXZlbCwgc3RhdGUsIGFyZ3VtZW50cyk7CiB9CiAKLXZvaWQg
Q29uc29sZTo6ZGlyeG1sKFNjcmlwdFN0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1
bWVudHM+IGFyZ3VtZW50cykKK3ZvaWQgQ29uc29sZTo6ZGlyeG1sKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKIHsKICAgICBpbnRl
cm5hbEFkZE1lc3NhZ2UocGFnZSgpLCBEaXJYTUxNZXNzYWdlVHlwZSwgTG9nTWVzc2FnZUxldmVs
LCBzdGF0ZSwgYXJndW1lbnRzKTsKIH0KIAotdm9pZCBDb25zb2xlOjp0YWJsZShTY3JpcHRTdGF0
ZSogc3RhdGUsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMpCit2b2lkIENv
bnNvbGU6OnRhYmxlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1
bWVudHM+IGFyZ3VtZW50cykKIHsKICAgICBpbnRlcm5hbEFkZE1lc3NhZ2UocGFnZSgpLCBUYWJs
ZU1lc3NhZ2VUeXBlLCBMb2dNZXNzYWdlTGV2ZWwsIHN0YXRlLCBhcmd1bWVudHMpOwogfQogCi12
b2lkIENvbnNvbGU6OmNsZWFyKFNjcmlwdFN0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRB
cmd1bWVudHM+IGFyZ3VtZW50cykKK3ZvaWQgQ29uc29sZTo6Y2xlYXIoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQogewogICAgIGlu
dGVybmFsQWRkTWVzc2FnZShwYWdlKCksIENsZWFyTWVzc2FnZVR5cGUsIExvZ01lc3NhZ2VMZXZl
bCwgc3RhdGUsIGFyZ3VtZW50cywgdHJ1ZSk7CiB9CiAKLXZvaWQgQ29uc29sZTo6dHJhY2UoU2Ny
aXB0U3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQor
dm9pZCBDb25zb2xlOjp0cmFjZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFBhc3NSZWZQdHI8U2Ny
aXB0QXJndW1lbnRzPiBhcmd1bWVudHMpCiB7CiAgICAgaW50ZXJuYWxBZGRNZXNzYWdlKHBhZ2Uo
KSwgVHJhY2VNZXNzYWdlVHlwZSwgTG9nTWVzc2FnZUxldmVsLCBzdGF0ZSwgYXJndW1lbnRzLCB0
cnVlLCB0cnVlKTsKIH0KIAotdm9pZCBDb25zb2xlOjphc3NlcnRDb25kaXRpb24oU2NyaXB0U3Rh
dGUqIHN0YXRlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzLCBib29sIGNv
bmRpdGlvbikKK3ZvaWQgQ29uc29sZTo6YXNzZXJ0Q29uZGl0aW9uKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cywgYm9vbCBjb25kaXRp
b24pCiB7CiAgICAgaWYgKGNvbmRpdGlvbikKICAgICAgICAgcmV0dXJuOwpAQCAtMTY5LDE0ICsx
NjksMTQgQEAgdm9pZCBDb25zb2xlOjphc3NlcnRDb25kaXRpb24oU2NyaXB0U3RhdAogICAgIGlu
dGVybmFsQWRkTWVzc2FnZShwYWdlKCksIEFzc2VydE1lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VM
ZXZlbCwgc3RhdGUsIGFyZ3VtZW50cywgdHJ1ZSk7CiB9CiAKLXZvaWQgQ29uc29sZTo6Y291bnQo
U2NyaXB0U3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRz
KQordm9pZCBDb25zb2xlOjpjb3VudChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFBhc3NSZWZQdHI8
U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMpCiB7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpjb25zb2xlQ291bnQocGFnZSgpLCBzdGF0ZSwgYXJndW1lbnRzKTsKIH0KIAogI2lmIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogCi12b2lkIENvbnNvbGU6OnByb2ZpbGUoY29uc3Qg
U3RyaW5nJiB0aXRsZSwgU2NyaXB0U3RhdGUqIHN0YXRlKQordm9pZCBDb25zb2xlOjpwcm9maWxl
KGNvbnN0IFN0cmluZyYgdGl0bGUsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBQYWdl
KiBwYWdlID0gdGhpcy0+cGFnZSgpOwogICAgIGlmICghcGFnZSkKQEAgLTE5Nyw3ICsxOTcsNyBA
QCB2b2lkIENvbnNvbGU6OnByb2ZpbGUoY29uc3QgU3RyaW5nJiB0aXRsCiAgICAgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjphZGRTdGFydFByb2ZpbGluZ01lc3NhZ2VUb0NvbnNvbGUocGFnZSwg
cmVzb2x2ZWRUaXRsZSwgbGFzdENhbGxlci5saW5lTnVtYmVyKCksIGxhc3RDYWxsZXIuY29sdW1u
TnVtYmVyKCksIGxhc3RDYWxsZXIuc291cmNlVVJMKCkpOwogfQogCi12b2lkIENvbnNvbGU6OnBy
b2ZpbGVFbmQoY29uc3QgU3RyaW5nJiB0aXRsZSwgU2NyaXB0U3RhdGUqIHN0YXRlKQordm9pZCBD
b25zb2xlOjpwcm9maWxlRW5kKGNvbnN0IFN0cmluZyYgdGl0bGUsIEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSkKIHsKICAgICBQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOwogICAgIGlmICghcGFnZSkK
QEAgLTIyMiw3ICsyMjIsNyBAQCB2b2lkIENvbnNvbGU6OnRpbWUoY29uc3QgU3RyaW5nJiB0aXRs
ZSkKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0YXJ0Q29uc29sZVRpbWluZyhtX2Zy
YW1lLCB0aXRsZSk7CiB9CiAKLXZvaWQgQ29uc29sZTo6dGltZUVuZChTY3JpcHRTdGF0ZSogc3Rh
dGUsIGNvbnN0IFN0cmluZyYgdGl0bGUpCit2b2lkIENvbnNvbGU6OnRpbWVFbmQoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBjb25zdCBTdHJpbmcmIHRpdGxlKQogewogICAgIFJlZlB0cjxTY3JpcHRD
YWxsU3RhY2s+IGNhbGxTdGFjayhjcmVhdGVTY3JpcHRDYWxsU3RhY2tGb3JDb25zb2xlKHN0YXRl
KSk7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRpbWluZyhtX2Zy
YW1lLCB0aXRsZSwgY2FsbFN0YWNrLnJlbGVhc2UoKSk7CkBAIC0yMzMsMTIgKzIzMywxMiBAQCB2
b2lkIENvbnNvbGU6OnRpbWVTdGFtcChQYXNzUmVmUHRyPFNjcmlwCiAgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpjb25zb2xlVGltZVN0YW1wKG1fZnJhbWUsIGFyZ3VtZW50cyk7CiB9CiAK
LXZvaWQgQ29uc29sZTo6Z3JvdXAoU2NyaXB0U3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRyPFNjcmlw
dEFyZ3VtZW50cz4gYXJndW1lbnRzKQordm9pZCBDb25zb2xlOjpncm91cChKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMpCiB7CiAgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKHBhZ2UoKSwgQ29u
c29sZUFQSU1lc3NhZ2VTb3VyY2UsIFN0YXJ0R3JvdXBNZXNzYWdlVHlwZSwgTG9nTWVzc2FnZUxl
dmVsLCBTdHJpbmcoKSwgc3RhdGUsIGFyZ3VtZW50cyk7CiB9CiAKLXZvaWQgQ29uc29sZTo6Z3Jv
dXBDb2xsYXBzZWQoU2NyaXB0U3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50
cz4gYXJndW1lbnRzKQordm9pZCBDb25zb2xlOjpncm91cENvbGxhcHNlZChKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMpCiB7CiAgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKHBhZ2UoKSwgQ29u
c29sZUFQSU1lc3NhZ2VTb3VyY2UsIFN0YXJ0R3JvdXBDb2xsYXBzZWRNZXNzYWdlVHlwZSwgTG9n
TWVzc2FnZUxldmVsLCBTdHJpbmcoKSwgc3RhdGUsIGFyZ3VtZW50cyk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0NvbnNvbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL0NvbnNvbGUuaAkocmV2aXNpb24gMTU1NzM1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9D
b25zb2xlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDI4ICs1MiwyOCBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q29uc29sZT4gY3JlYXRlKEZyYW1lKiBmcmFtZSkgeyByZXR1cm4g
YWRvcHRSZWYobmV3IENvbnNvbGUoZnJhbWUpKTsgfQogICAgIHZpcnR1YWwgfkNvbnNvbGUoKTsK
IAotICAgIHZvaWQgZGVidWcoU2NyaXB0U3RhdGUqLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50
cz4pOwotICAgIHZvaWQgZXJyb3IoU2NyaXB0U3RhdGUqLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3Vt
ZW50cz4pOwotICAgIHZvaWQgaW5mbyhTY3JpcHRTdGF0ZSosIFBhc3NSZWZQdHI8U2NyaXB0QXJn
dW1lbnRzPik7Ci0gICAgdm9pZCBsb2coU2NyaXB0U3RhdGUqLCBQYXNzUmVmUHRyPFNjcmlwdEFy
Z3VtZW50cz4pOwotICAgIHZvaWQgY2xlYXIoU2NyaXB0U3RhdGUqLCBQYXNzUmVmUHRyPFNjcmlw
dEFyZ3VtZW50cz4pOwotICAgIHZvaWQgd2FybihTY3JpcHRTdGF0ZSosIFBhc3NSZWZQdHI8U2Ny
aXB0QXJndW1lbnRzPik7Ci0gICAgdm9pZCBkaXIoU2NyaXB0U3RhdGUqLCBQYXNzUmVmUHRyPFNj
cmlwdEFyZ3VtZW50cz4pOwotICAgIHZvaWQgZGlyeG1sKFNjcmlwdFN0YXRlKiwgUGFzc1JlZlB0
cjxTY3JpcHRBcmd1bWVudHM+KTsKLSAgICB2b2lkIHRhYmxlKFNjcmlwdFN0YXRlKiwgUGFzc1Jl
ZlB0cjxTY3JpcHRBcmd1bWVudHM+KTsKLSAgICB2b2lkIHRyYWNlKFNjcmlwdFN0YXRlKiwgUGFz
c1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+KTsKLSAgICB2b2lkIGFzc2VydENvbmRpdGlvbihTY3Jp
cHRTdGF0ZSosIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiwgYm9vbCBjb25kaXRpb24pOwot
ICAgIHZvaWQgY291bnQoU2NyaXB0U3RhdGUqLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4p
OworICAgIHZvaWQgZGVidWcoSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3Vt
ZW50cz4pOworICAgIHZvaWQgZXJyb3IoSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFNjcmlw
dEFyZ3VtZW50cz4pOworICAgIHZvaWQgaW5mbyhKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8
U2NyaXB0QXJndW1lbnRzPik7CisgICAgdm9pZCBsb2coSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVm
UHRyPFNjcmlwdEFyZ3VtZW50cz4pOworICAgIHZvaWQgY2xlYXIoSlNDOjpFeGVjU3RhdGUqLCBQ
YXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4pOworICAgIHZvaWQgd2FybihKU0M6OkV4ZWNTdGF0
ZSosIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPik7CisgICAgdm9pZCBkaXIoSlNDOjpFeGVj
U3RhdGUqLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4pOworICAgIHZvaWQgZGlyeG1sKEpT
Qzo6RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+KTsKKyAgICB2b2lkIHRh
YmxlKEpTQzo6RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+KTsKKyAgICB2
b2lkIHRyYWNlKEpTQzo6RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+KTsK
KyAgICB2b2lkIGFzc2VydENvbmRpdGlvbihKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U2Ny
aXB0QXJndW1lbnRzPiwgYm9vbCBjb25kaXRpb24pOworICAgIHZvaWQgY291bnQoSlNDOjpFeGVj
U3RhdGUqLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4pOwogI2lmIEVOQUJMRShKQVZBU0NS
SVBUX0RFQlVHR0VSKQogICAgIGNvbnN0IFByb2ZpbGVzQXJyYXkmIHByb2ZpbGVzKCkgY29uc3Qg
eyByZXR1cm4gbV9wcm9maWxlczsgfQotICAgIHZvaWQgcHJvZmlsZShjb25zdCBTdHJpbmcmLCBT
Y3JpcHRTdGF0ZSopOwotICAgIHZvaWQgcHJvZmlsZUVuZChjb25zdCBTdHJpbmcmLCBTY3JpcHRT
dGF0ZSopOworICAgIHZvaWQgcHJvZmlsZShjb25zdCBTdHJpbmcmLCBKU0M6OkV4ZWNTdGF0ZSop
OworICAgIHZvaWQgcHJvZmlsZUVuZChjb25zdCBTdHJpbmcmLCBKU0M6OkV4ZWNTdGF0ZSopOwog
I2VuZGlmCiAgICAgdm9pZCB0aW1lKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgdGltZUVuZChT
Y3JpcHRTdGF0ZSosIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgdGltZUVuZChKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgdGltZVN0YW1wKFBhc3NSZWZQdHI8U2Ny
aXB0QXJndW1lbnRzPik7Ci0gICAgdm9pZCBncm91cChTY3JpcHRTdGF0ZSosIFBhc3NSZWZQdHI8
U2NyaXB0QXJndW1lbnRzPik7Ci0gICAgdm9pZCBncm91cENvbGxhcHNlZChTY3JpcHRTdGF0ZSos
IFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPik7CisgICAgdm9pZCBncm91cChKU0M6OkV4ZWNT
dGF0ZSosIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPik7CisgICAgdm9pZCBncm91cENvbGxh
cHNlZChKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPik7CiAgICAg
dm9pZCBncm91cEVuZCgpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9D
b250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAkocmV2aXNpb24gMTU1NzM1KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MzcsNyArODM3LDcgQEAgcHVibGljOgogICAgIGJvb2wgYWxsb3dJbmxpbmVFdmVudEhhbmRs
ZXJzKGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBj
b250ZXh0TGluZSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMpIGNvbnN0
OwogICAgIGJvb2wgYWxsb3dJbmxpbmVTY3JpcHQoY29uc3QgU3RyaW5nJiBjb250ZXh0VVJMLCBj
b25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5lLCBDb250ZW50U2VjdXJpdHlQb2xp
Y3k6OlJlcG9ydGluZ1N0YXR1cykgY29uc3Q7CiAgICAgYm9vbCBhbGxvd0lubGluZVN0eWxlKGNv
bnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0
TGluZSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMpIGNvbnN0OwotICAg
IGJvb2wgYWxsb3dFdmFsKFNjcmlwdFN0YXRlKiwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBv
cnRpbmdTdGF0dXMpIGNvbnN0OworICAgIGJvb2wgYWxsb3dFdmFsKEpTQzo6RXhlY1N0YXRlKiwg
Q29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMpIGNvbnN0OwogICAgIGJvb2wg
YWxsb3dTY3JpcHROb25jZShjb25zdCBTdHJpbmcmIG5vbmNlLCBjb25zdCBTdHJpbmcmIGNvbnRl
eHRVUkwsIGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYgY29udGV4dExpbmUsIGNvbnN0IEtVUkwm
KSBjb25zdDsKICAgICBib29sIGFsbG93UGx1Z2luVHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGNv
bnN0IFN0cmluZyYgdHlwZUF0dHJpYnV0ZSwgY29uc3QgS1VSTCYsIENvbnRlbnRTZWN1cml0eVBv
bGljeTo6UmVwb3J0aW5nU3RhdHVzKSBjb25zdDsKIApAQCAtODc1LDcgKzg3NSw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBzZXRDU1BEaXJlY3RpdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHZhbHVlLCBPd25QdHI8Q1NQRGlyZWN0aXZlVHlwZT4mKTsKIAogICAgIFNvdXJjZUxp
c3REaXJlY3RpdmUqIG9wZXJhdGl2ZURpcmVjdGl2ZShTb3VyY2VMaXN0RGlyZWN0aXZlKikgY29u
c3Q7Ci0gICAgdm9pZCByZXBvcnRWaW9sYXRpb24oY29uc3QgU3RyaW5nJiBkaXJlY3RpdmVUZXh0
LCBjb25zdCBTdHJpbmcmIGVmZmVjdGl2ZURpcmVjdGl2ZSwgY29uc3QgU3RyaW5nJiBjb25zb2xl
TWVzc2FnZSwgY29uc3QgS1VSTCYgYmxvY2tlZFVSTCA9IEtVUkwoKSwgY29uc3QgU3RyaW5nJiBj
b250ZXh0VVJMID0gU3RyaW5nKCksIGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYgY29udGV4dExp
bmUgPSBXVEY6Ok9yZGluYWxOdW1iZXI6OmJlZm9yZUZpcnN0KCksIFNjcmlwdFN0YXRlKiA9IDAp
IGNvbnN0OworICAgIHZvaWQgcmVwb3J0VmlvbGF0aW9uKGNvbnN0IFN0cmluZyYgZGlyZWN0aXZl
VGV4dCwgY29uc3QgU3RyaW5nJiBlZmZlY3RpdmVEaXJlY3RpdmUsIGNvbnN0IFN0cmluZyYgY29u
c29sZU1lc3NhZ2UsIGNvbnN0IEtVUkwmIGJsb2NrZWRVUkwgPSBLVVJMKCksIGNvbnN0IFN0cmlu
ZyYgY29udGV4dFVSTCA9IFN0cmluZygpLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRl
eHRMaW5lID0gV1RGOjpPcmRpbmFsTnVtYmVyOjpiZWZvcmVGaXJzdCgpLCBKU0M6OkV4ZWNTdGF0
ZSogPSAwKSBjb25zdDsKIAogICAgIGJvb2wgY2hlY2tFdmFsKFNvdXJjZUxpc3REaXJlY3RpdmUq
KSBjb25zdDsKICAgICBib29sIGNoZWNrSW5saW5lKFNvdXJjZUxpc3REaXJlY3RpdmUqKSBjb25z
dDsKQEAgLTg4NSw3ICs4ODUsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXRFdmFsRGlzYWJs
ZWRFcnJvck1lc3NhZ2UoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIHsgbV9ldmFsRGlzYWJs
ZWRFcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7IH0KIAotICAgIGJvb2wgY2hlY2tFdmFsQW5k
UmVwb3J0VmlvbGF0aW9uKFNvdXJjZUxpc3REaXJlY3RpdmUqLCBjb25zdCBTdHJpbmcmIGNvbnNv
bGVNZXNzYWdlLCBjb25zdCBTdHJpbmcmIGNvbnRleHRVUkwgPSBTdHJpbmcoKSwgY29uc3QgV1RG
OjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSA9IFdURjo6T3JkaW5hbE51bWJlcjo6YmVmb3Jl
Rmlyc3QoKSwgU2NyaXB0U3RhdGUqID0gMCkgY29uc3Q7CisgICAgYm9vbCBjaGVja0V2YWxBbmRS
ZXBvcnRWaW9sYXRpb24oU291cmNlTGlzdERpcmVjdGl2ZSosIGNvbnN0IFN0cmluZyYgY29uc29s
ZU1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCA9IFN0cmluZygpLCBjb25zdCBXVEY6
Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5lID0gV1RGOjpPcmRpbmFsTnVtYmVyOjpiZWZvcmVG
aXJzdCgpLCBKU0M6OkV4ZWNTdGF0ZSogPSAwKSBjb25zdDsKICAgICBib29sIGNoZWNrSW5saW5l
QW5kUmVwb3J0VmlvbGF0aW9uKFNvdXJjZUxpc3REaXJlY3RpdmUqLCBjb25zdCBTdHJpbmcmIGNv
bnNvbGVNZXNzYWdlLCBjb25zdCBTdHJpbmcmIGNvbnRleHRVUkwsIGNvbnN0IFdURjo6T3JkaW5h
bE51bWJlciYgY29udGV4dExpbmUsIGJvb2wgaXNTY3JpcHQpIGNvbnN0OwogICAgIGJvb2wgY2hl
Y2tOb25jZUFuZFJlcG9ydFZpb2xhdGlvbihOb25jZURpcmVjdGl2ZSosIGNvbnN0IFN0cmluZyYg
bm9uY2UsIGNvbnN0IFN0cmluZyYgY29uc29sZU1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgY29udGV4
dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSkgY29uc3Q7CiAKQEAg
LTk0OCw3ICs5NDgsNyBAQCBQYXNzT3duUHRyPENTUERpcmVjdGl2ZUxpc3Q+IENTUERpcmVjdGl2
CiAgICAgcmV0dXJuIGRpcmVjdGl2ZXMucmVsZWFzZSgpOwogfQogCi12b2lkIENTUERpcmVjdGl2
ZUxpc3Q6OnJlcG9ydFZpb2xhdGlvbihjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZVRleHQsIGNvbnN0
IFN0cmluZyYgZWZmZWN0aXZlRGlyZWN0aXZlLCBjb25zdCBTdHJpbmcmIGNvbnNvbGVNZXNzYWdl
LCBjb25zdCBLVVJMJiBibG9ja2VkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRleHRVUkwsIGNvbnN0
IFdURjo6T3JkaW5hbE51bWJlciYgY29udGV4dExpbmUsIFNjcmlwdFN0YXRlKiBzdGF0ZSkgY29u
c3QKK3ZvaWQgQ1NQRGlyZWN0aXZlTGlzdDo6cmVwb3J0VmlvbGF0aW9uKGNvbnN0IFN0cmluZyYg
ZGlyZWN0aXZlVGV4dCwgY29uc3QgU3RyaW5nJiBlZmZlY3RpdmVEaXJlY3RpdmUsIGNvbnN0IFN0
cmluZyYgY29uc29sZU1lc3NhZ2UsIGNvbnN0IEtVUkwmIGJsb2NrZWRVUkwsIGNvbnN0IFN0cmlu
ZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgSlND
OjpFeGVjU3RhdGUqIHN0YXRlKSBjb25zdAogewogICAgIFN0cmluZyBtZXNzYWdlID0gbV9yZXBv
cnRPbmx5ID8gIltSZXBvcnQgT25seV0gIiArIGNvbnNvbGVNZXNzYWdlIDogY29uc29sZU1lc3Nh
Z2U7CiAgICAgbV9wb2xpY3ktPnJlcG9ydFZpb2xhdGlvbihkaXJlY3RpdmVUZXh0LCBlZmZlY3Rp
dmVEaXJlY3RpdmUsIG1lc3NhZ2UsIGJsb2NrZWRVUkwsIG1fcmVwb3J0VVJJcywgbV9oZWFkZXIs
IGNvbnRleHRVUkwsIGNvbnRleHRMaW5lLCBzdGF0ZSk7CkBAIC05ODgsNyArOTg4LDcgQEAgU291
cmNlTGlzdERpcmVjdGl2ZSogQ1NQRGlyZWN0aXZlTGlzdDo6bwogICAgIHJldHVybiBkaXJlY3Rp
dmUgPyBkaXJlY3RpdmUgOiBtX2RlZmF1bHRTcmMuZ2V0KCk7CiB9CiAKLWJvb2wgQ1NQRGlyZWN0
aXZlTGlzdDo6Y2hlY2tFdmFsQW5kUmVwb3J0VmlvbGF0aW9uKFNvdXJjZUxpc3REaXJlY3RpdmUq
IGRpcmVjdGl2ZSwgY29uc3QgU3RyaW5nJiBjb25zb2xlTWVzc2FnZSwgY29uc3QgU3RyaW5nJiBj
b250ZXh0VVJMLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5lLCBTY3JpcHRT
dGF0ZSogc3RhdGUpIGNvbnN0Citib29sIENTUERpcmVjdGl2ZUxpc3Q6OmNoZWNrRXZhbEFuZFJl
cG9ydFZpb2xhdGlvbihTb3VyY2VMaXN0RGlyZWN0aXZlKiBkaXJlY3RpdmUsIGNvbnN0IFN0cmlu
ZyYgY29uc29sZU1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpP
cmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlKSBjb25zdAog
ewogICAgIGlmIChjaGVja0V2YWwoZGlyZWN0aXZlKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC0xMTIwLDcgKzExMjAsNyBAQCBib29sIENTUERpcmVjdGl2ZUxpc3Q6OmFsbG93SW5saW5lU3R5
bGUoCiAgICAgICAgIGNoZWNrSW5saW5lKG9wZXJhdGl2ZURpcmVjdGl2ZShtX3N0eWxlU3JjLmdl
dCgpKSk7CiB9CiAKLWJvb2wgQ1NQRGlyZWN0aXZlTGlzdDo6YWxsb3dFdmFsKFNjcmlwdFN0YXRl
KiBzdGF0ZSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMgcmVwb3J0aW5n
U3RhdHVzKSBjb25zdAorYm9vbCBDU1BEaXJlY3RpdmVMaXN0OjphbGxvd0V2YWwoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyByZXBv
cnRpbmdTdGF0dXMpIGNvbnN0CiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGNv
bnNvbGVNZXNzYWdlLCAoQVNDSUlMaXRlcmFsKCJSZWZ1c2VkIHRvIGV2YWx1YXRlIHNjcmlwdCBi
ZWNhdXNlIGl0IHZpb2xhdGVzIHRoZSBmb2xsb3dpbmcgQ29udGVudCBTZWN1cml0eSBQb2xpY3kg
ZGlyZWN0aXZlOiAiKSkpOwogICAgIHJldHVybiByZXBvcnRpbmdTdGF0dXMgPT0gQ29udGVudFNl
Y3VyaXR5UG9saWN5OjpTZW5kUmVwb3J0ID8KQEAgLTE1MTYsOCArMTUxNiw4IEBAIGJvb2wgaXNB
bGxvd2VkQnlBbGwoY29uc3QgQ1NQRGlyZWN0aXZlTGkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
dGVtcGxhdGU8Ym9vbCAoQ1NQRGlyZWN0aXZlTGlzdDo6KmFsbG93ZWQpKFNjcmlwdFN0YXRlKiBz
dGF0ZSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMpIGNvbnN0PgotYm9v
bCBpc0FsbG93ZWRCeUFsbFdpdGhTdGF0ZShjb25zdCBDU1BEaXJlY3RpdmVMaXN0VmVjdG9yJiBw
b2xpY2llcywgU2NyaXB0U3RhdGUqIHN0YXRlLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9y
dGluZ1N0YXR1cyByZXBvcnRpbmdTdGF0dXMpCit0ZW1wbGF0ZTxib29sIChDU1BEaXJlY3RpdmVM
aXN0OjoqYWxsb3dlZCkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBDb250ZW50U2VjdXJpdHlQb2xp
Y3k6OlJlcG9ydGluZ1N0YXR1cykgY29uc3Q+Citib29sIGlzQWxsb3dlZEJ5QWxsV2l0aFN0YXRl
KGNvbnN0IENTUERpcmVjdGl2ZUxpc3RWZWN0b3ImIHBvbGljaWVzLCBKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzIHJlcG9ydGluZ1N0
YXR1cykKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBvbGljaWVzLnNpemUoKTsgKytp
KSB7CiAgICAgICAgIGlmICghKHBvbGljaWVzW2ldLmdldCgpLT4qYWxsb3dlZCkoc3RhdGUsIHJl
cG9ydGluZ1N0YXR1cykpCkBAIC0xNTgxLDcgKzE1ODEsNyBAQCBib29sIENvbnRlbnRTZWN1cml0
eVBvbGljeTo6YWxsb3dJbmxpbmVTCiAgICAgcmV0dXJuIGlzQWxsb3dlZEJ5QWxsV2l0aENvbnRl
eHQ8JkNTUERpcmVjdGl2ZUxpc3Q6OmFsbG93SW5saW5lU3R5bGU+KG1fcG9saWNpZXMsIGNvbnRl
eHRVUkwsIGNvbnRleHRMaW5lLCByZXBvcnRpbmdTdGF0dXMpOwogfQogCi1ib29sIENvbnRlbnRT
ZWN1cml0eVBvbGljeTo6YWxsb3dFdmFsKFNjcmlwdFN0YXRlKiBzdGF0ZSwgQ29udGVudFNlY3Vy
aXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMgcmVwb3J0aW5nU3RhdHVzKSBjb25zdAorYm9vbCBD
b250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93RXZhbChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIENv
bnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzIHJlcG9ydGluZ1N0YXR1cykgY29u
c3QKIHsKICAgICByZXR1cm4gaXNBbGxvd2VkQnlBbGxXaXRoU3RhdGU8JkNTUERpcmVjdGl2ZUxp
c3Q6OmFsbG93RXZhbD4obV9wb2xpY2llcywgc3RhdGUsIHJlcG9ydGluZ1N0YXR1cyk7CiB9CkBA
IC0xNzM1LDcgKzE3MzUsNyBAQCBzdGF0aWMgdm9pZCBnYXRoZXJTZWN1cml0eVBvbGljeVZpb2xh
dGlvCiB9CiAjZW5kaWYKIAotdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OnJlcG9ydFZpb2xh
dGlvbihjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZVRleHQsIGNvbnN0IFN0cmluZyYgZWZmZWN0aXZl
RGlyZWN0aXZlLCBjb25zdCBTdHJpbmcmIGNvbnNvbGVNZXNzYWdlLCBjb25zdCBLVVJMJiBibG9j
a2VkVVJMLCBjb25zdCBWZWN0b3I8S1VSTD4mIHJlcG9ydFVSSXMsIGNvbnN0IFN0cmluZyYgaGVh
ZGVyLCBjb25zdCBTdHJpbmcmIGNvbnRleHRVUkwsIGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYg
Y29udGV4dExpbmUsIFNjcmlwdFN0YXRlKiBzdGF0ZSkgY29uc3QKK3ZvaWQgQ29udGVudFNlY3Vy
aXR5UG9saWN5OjpyZXBvcnRWaW9sYXRpb24oY29uc3QgU3RyaW5nJiBkaXJlY3RpdmVUZXh0LCBj
b25zdCBTdHJpbmcmIGVmZmVjdGl2ZURpcmVjdGl2ZSwgY29uc3QgU3RyaW5nJiBjb25zb2xlTWVz
c2FnZSwgY29uc3QgS1VSTCYgYmxvY2tlZFVSTCwgY29uc3QgVmVjdG9yPEtVUkw+JiByZXBvcnRV
UklzLCBjb25zdCBTdHJpbmcmIGhlYWRlciwgY29uc3QgU3RyaW5nJiBjb250ZXh0VVJMLCBjb25z
dCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5lLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUp
IGNvbnN0CiB7CiAgICAgbG9nVG9Db25zb2xlKGNvbnNvbGVNZXNzYWdlLCBjb250ZXh0VVJMLCBj
b250ZXh0TGluZSwgc3RhdGUpOwogCkBAIC0xODkxLDcgKzE4OTEsNyBAQCB2b2lkIENvbnRlbnRT
ZWN1cml0eVBvbGljeTo6cmVwb3J0TWlzc2luCiAgICAgbG9nVG9Db25zb2xlKCJUaGUgQ29udGVu
dCBTZWN1cml0eSBQb2xpY3kgJyIgKyBwb2xpY3kgKyAiJyB3YXMgZGVsaXZlcmVkIGluIHJlcG9y
dC1vbmx5IG1vZGUsIGJ1dCBkb2VzIG5vdCBzcGVjaWZ5IGEgJ3JlcG9ydC11cmknOyB0aGUgcG9s
aWN5IHdpbGwgaGF2ZSBubyBlZmZlY3QuIFBsZWFzZSBlaXRoZXIgYWRkIGEgJ3JlcG9ydC11cmkn
IGRpcmVjdGl2ZSwgb3IgZGVsaXZlciB0aGUgcG9saWN5IHZpYSB0aGUgJ0NvbnRlbnQtU2VjdXJp
dHktUG9saWN5JyBoZWFkZXIuIik7CiB9CiAKLXZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5Ojps
b2dUb0NvbnNvbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGNvbnRleHRV
UkwsIGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYgY29udGV4dExpbmUsIFNjcmlwdFN0YXRlKiBz
dGF0ZSkgY29uc3QKK3ZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5Ojpsb2dUb0NvbnNvbGUoY29u
c3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGNvbnRleHRVUkwsIGNvbnN0IFdURjo6
T3JkaW5hbE51bWJlciYgY29udGV4dExpbmUsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkgY29uc3QK
IHsKICAgICAvLyBGSVhNRTogPGh0dHA6Ly93ZWJraXQub3JnL2IvMTE0MzE3PiBDb250ZW50U2Vj
dXJpdHlQb2xpY3k6OmxvZ1RvQ29uc29sZSBzaG91bGQgaW5jbHVkZSBhIGNvbHVtbiBudW1iZXIK
ICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZENvbnNvbGVNZXNzYWdlKFNlY3VyaXR5
TWVzc2FnZVNvdXJjZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIGNvbnRleHRVUkwsIGNv
bnRleHRMaW5lLm9uZUJhc2VkSW50KCksIDAsIHN0YXRlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ29udGVudFNlY3VyaXR5UG9saWN5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9Db250ZW50U2VjdXJpdHlQb2xpY3kuaAkocmV2aXNpb24gMTU1NzM1KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9Db250ZW50U2VjdXJpdHlQb2xpY3kuaAkod29ya2luZyBjb3B5KQpA
QCAtOTEsNyArOTEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBhbGxvd0lubGluZUV2ZW50SGFuZGxl
cnMoY29uc3QgU3RyaW5nJiBjb250ZXh0VVJMLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNv
bnRleHRMaW5lLCBSZXBvcnRpbmdTdGF0dXMgPSBTZW5kUmVwb3J0KSBjb25zdDsKICAgICBib29s
IGFsbG93SW5saW5lU2NyaXB0KGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpP
cmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgUmVwb3J0aW5nU3RhdHVzID0gU2VuZFJlcG9ydCkg
Y29uc3Q7CiAgICAgYm9vbCBhbGxvd0lubGluZVN0eWxlKGNvbnN0IFN0cmluZyYgY29udGV4dFVS
TCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgUmVwb3J0aW5nU3RhdHVz
ID0gU2VuZFJlcG9ydCkgY29uc3Q7Ci0gICAgYm9vbCBhbGxvd0V2YWwoU2NyaXB0U3RhdGUqID0g
MCwgUmVwb3J0aW5nU3RhdHVzID0gU2VuZFJlcG9ydCkgY29uc3Q7CisgICAgYm9vbCBhbGxvd0V2
YWwoSlNDOjpFeGVjU3RhdGUqID0gMCwgUmVwb3J0aW5nU3RhdHVzID0gU2VuZFJlcG9ydCkgY29u
c3Q7CiAgICAgYm9vbCBhbGxvd1NjcmlwdE5vbmNlKGNvbnN0IFN0cmluZyYgbm9uY2UsIGNvbnN0
IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGlu
ZSwgY29uc3QgS1VSTCYgPSBLVVJMKCkpIGNvbnN0OwogICAgIGJvb2wgYWxsb3dQbHVnaW5UeXBl
KGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiB0eXBlQXR0cmlidXRlLCBjb25zdCBL
VVJMJiwgUmVwb3J0aW5nU3RhdHVzID0gU2VuZFJlcG9ydCkgY29uc3Q7CiAKQEAgLTEyNCw3ICsx
MjQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXBvcnRJbnZhbGlkUmVmbGVjdGVkWFNTKGNvbnN0
IFN0cmluZyYpIGNvbnN0OwogICAgIHZvaWQgcmVwb3J0TWlzc2luZ1JlcG9ydFVSSShjb25zdCBT
dHJpbmcmKSBjb25zdDsKICAgICB2b2lkIHJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZlKGNvbnN0
IFN0cmluZyYpIGNvbnN0OwotICAgIHZvaWQgcmVwb3J0VmlvbGF0aW9uKGNvbnN0IFN0cmluZyYg
ZGlyZWN0aXZlVGV4dCwgY29uc3QgU3RyaW5nJiBlZmZlY3RpdmVEaXJlY3RpdmUsIGNvbnN0IFN0
cmluZyYgY29uc29sZU1lc3NhZ2UsIGNvbnN0IEtVUkwmIGJsb2NrZWRVUkwsIGNvbnN0IFZlY3Rv
cjxLVVJMPiYgcmVwb3J0VVJJcywgY29uc3QgU3RyaW5nJiBoZWFkZXIsIGNvbnN0IFN0cmluZyYg
Y29udGV4dFVSTCA9IFN0cmluZygpLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRM
aW5lID0gV1RGOjpPcmRpbmFsTnVtYmVyOjpiZWZvcmVGaXJzdCgpLCBTY3JpcHRTdGF0ZSogPSAw
KSBjb25zdDsKKyAgICB2b2lkIHJlcG9ydFZpb2xhdGlvbihjb25zdCBTdHJpbmcmIGRpcmVjdGl2
ZVRleHQsIGNvbnN0IFN0cmluZyYgZWZmZWN0aXZlRGlyZWN0aXZlLCBjb25zdCBTdHJpbmcmIGNv
bnNvbGVNZXNzYWdlLCBjb25zdCBLVVJMJiBibG9ja2VkVVJMLCBjb25zdCBWZWN0b3I8S1VSTD4m
IHJlcG9ydFVSSXMsIGNvbnN0IFN0cmluZyYgaGVhZGVyLCBjb25zdCBTdHJpbmcmIGNvbnRleHRV
UkwgPSBTdHJpbmcoKSwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSA9IFdU
Rjo6T3JkaW5hbE51bWJlcjo6YmVmb3JlRmlyc3QoKSwgSlNDOjpFeGVjU3RhdGUqID0gMCkgY29u
c3Q7CiAKICAgICB2b2lkIHJlcG9ydEJsb2NrZWRTY3JpcHRFeGVjdXRpb25Ub0luc3BlY3Rvcihj
b25zdCBTdHJpbmcmIGRpcmVjdGl2ZVRleHQpIGNvbnN0OwogCkBAIC0xMzksNyArMTM5LDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBleHBsaWNpdCBDb250ZW50U2VjdXJpdHlQb2xpY3koU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCopOwogCi0gICAgdm9pZCBsb2dUb0NvbnNvbGUoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGNvbnRleHRVUkwgPSBTdHJpbmcoKSwgY29uc3Qg
V1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSA9IFdURjo6T3JkaW5hbE51bWJlcjo6YmVm
b3JlRmlyc3QoKSwgU2NyaXB0U3RhdGUqID0gMCkgY29uc3Q7CisgICAgdm9pZCBsb2dUb0NvbnNv
bGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGNvbnRleHRVUkwgPSBTdHJp
bmcoKSwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSA9IFdURjo6T3JkaW5h
bE51bWJlcjo6YmVmb3JlRmlyc3QoKSwgSlNDOjpFeGVjU3RhdGUqID0gMCkgY29uc3Q7CiAKICAg
ICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAg
Ym9vbCBtX292ZXJyaWRlSW5saW5lU3R5bGVBbGxvd2VkOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlQ29uc29sZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlQ29uc29sZS5jcHAJKHJldmlzaW9uIDE1NTczNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZUNvbnNvbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBQ
YWdlQ29uc29sZTo6YWRkTWVzc2FnZShNZXNzYWdlU291cgogICAgIGFkZE1lc3NhZ2Uoc291cmNl
LCBsZXZlbCwgbWVzc2FnZSwgU3RyaW5nKCksIDAsIDAsIGNhbGxTdGFjaywgMCk7CiB9CiAKLXZv
aWQgUGFnZUNvbnNvbGU6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VM
ZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHVybCwgdW5z
aWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBQYXNzUmVmUHRyPFNjcmlw
dENhbGxTdGFjaz4gY2FsbFN0YWNrLCBTY3JpcHRTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGxvbmcg
cmVxdWVzdElkZW50aWZpZXIpCit2b2lkIFBhZ2VDb25zb2xlOjphZGRNZXNzYWdlKE1lc3NhZ2VT
b3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
Y29uc3QgU3RyaW5nJiB1cmwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51
bWJlciwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaywgSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQogewogICAgIGlmICht
dXRlQ291bnQgJiYgc291cmNlICE9IENvbnNvbGVBUElNZXNzYWdlU291cmNlKQogICAgICAgICBy
ZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZS5oCShyZXZpc2lvbiAxNTU3MzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHByaW50U291cmNlVVJMQW5k
TGluZShjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlcik7CiAgICAg
c3RhdGljIHZvaWQgcHJpbnRNZXNzYWdlU291cmNlQW5kTGV2ZWxQcmVmaXgoTWVzc2FnZVNvdXJj
ZSwgTWVzc2FnZUxldmVsKTsKIAotICAgIHZvaWQgYWRkTWVzc2FnZShNZXNzYWdlU291cmNlLCBN
ZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VV
UkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUGFzc1JlZlB0
cjxTY3JpcHRDYWxsU3RhY2s+ID0gMCwgU2NyaXB0U3RhdGUqID0gMCwgdW5zaWduZWQgbG9uZyBy
ZXF1ZXN0SWRlbnRpZmllciA9IDApOworICAgIHZvaWQgYWRkTWVzc2FnZShNZXNzYWdlU291cmNl
LCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUGFzc1Jl
ZlB0cjxTY3JpcHRDYWxsU3RhY2s+ID0gMCwgSlNDOjpFeGVjU3RhdGUqID0gMCwgdW5zaWduZWQg
bG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOwogICAgIHZvaWQgYWRkTWVzc2FnZShNZXNzYWdl
U291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxT
Y3JpcHRDYWxsU3RhY2s+KTsKICAgICB2b2lkIGFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVz
c2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElk
ZW50aWZpZXIgPSAwLCBEb2N1bWVudCogPSAwKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDE1NTczNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzgsNyArMjc4LDcgQEAgdm9pZCBXb3JrZXJHbG9iYWxTY29wZTo6YWRkQ29uc29sZU1lc3Nh
ZwogICAgIGFkZE1lc3NhZ2VUb1dvcmtlckNvbnNvbGUoc291cmNlLCBsZXZlbCwgbWVzc2FnZSwg
U3RyaW5nKCksIDAsIDAsIDAsIDAsIHJlcXVlc3RJZGVudGlmaWVyKTsKIH0KIAotdm9pZCBXb3Jr
ZXJHbG9iYWxTY29wZTo6YWRkTWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxl
dmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJM
LCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFBhc3NSZWZQdHI8
U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2ssIFNjcmlwdFN0YXRlKiBzdGF0ZSwgdW5zaWduZWQg
bG9uZyByZXF1ZXN0SWRlbnRpZmllcikKK3ZvaWQgV29ya2VyR2xvYmFsU2NvcGU6OmFkZE1lc3Nh
Z2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwg
dW5zaWduZWQgY29sdW1uTnVtYmVyLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0
YWNrLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZp
ZXIpCiB7CiAgICAgaWYgKCFpc0NvbnRleHRUaHJlYWQoKSkgewogICAgICAgICBwb3N0VGFzayhB
ZGRDb25zb2xlTWVzc2FnZVRhc2s6OmNyZWF0ZShzb3VyY2UsIGxldmVsLCBtZXNzYWdlKSk7CkBA
IC0yODksNyArMjg5LDcgQEAgdm9pZCBXb3JrZXJHbG9iYWxTY29wZTo6YWRkTWVzc2FnZShNZXNz
YQogICAgIGFkZE1lc3NhZ2VUb1dvcmtlckNvbnNvbGUoc291cmNlLCBsZXZlbCwgbWVzc2FnZSwg
c291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNhbGxTdGFjaywgc3RhdGUsIHJl
cXVlc3RJZGVudGlmaWVyKTsKIH0KIAotdm9pZCBXb3JrZXJHbG9iYWxTY29wZTo6YWRkTWVzc2Fn
ZVRvV29ya2VyQ29uc29sZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVs
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNpZ25l
ZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFBhc3NSZWZQdHI8U2NyaXB0Q2Fs
bFN0YWNrPiBjYWxsU3RhY2ssIFNjcmlwdFN0YXRlKiBzdGF0ZSwgdW5zaWduZWQgbG9uZyByZXF1
ZXN0SWRlbnRpZmllcikKK3ZvaWQgV29ya2VyR2xvYmFsU2NvcGU6OmFkZE1lc3NhZ2VUb1dvcmtl
ckNvbnNvbGUoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51
bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4g
Y2FsbFN0YWNrLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElk
ZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKGlzQ29udGV4dFRocmVhZCgpKTsKICAgICBpZiAoY2Fs
bFN0YWNrKQpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUu
aAkocmV2aXNpb24gMTU1NzM1KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9i
YWxTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNyArMTQzLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2b2lkIGFwcGx5Q29udGVudFNlY3VyaXR5UG9saWN5RnJvbVN0cmlu
Zyhjb25zdCBTdHJpbmcmIGNvbnRlbnRTZWN1cml0eVBvbGljeSwgQ29udGVudFNlY3VyaXR5UG9s
aWN5OjpIZWFkZXJUeXBlKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgbG9nRXhjZXB0aW9uVG9D
b25zb2xlKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVS
TCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIFBhc3NSZWZQdHI8U2NyaXB0Q2Fs
bFN0YWNrPikgT1ZFUlJJREU7Ci0gICAgICAgIHZvaWQgYWRkTWVzc2FnZVRvV29ya2VyQ29uc29s
ZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29u
c3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVt
bk51bWJlciwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+LCBTY3JpcHRTdGF0ZSogPSAwLCB1
bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7CisgICAgICAgIHZvaWQgYWRkTWVz
c2FnZVRvV29ya2VyQ29uc29sZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1i
ZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+LCBK
U0M6OkV4ZWNTdGF0ZSogPSAwLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7
CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpIE9WRVJSSURFIHsgcmVmKCk7IH0KQEAgLTE1NCw3ICsxNTQsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdl
dERhdGEoKSBPVkVSUklERTsKICAgICAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEmIGVuc3Vy
ZUV2ZW50VGFyZ2V0RGF0YSgpIE9WRVJSSURFOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGRN
ZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
LCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQg
Y29sdW1uTnVtYmVyLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4sIFNjcmlwdFN0YXRlKiA9
IDAsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKSBPVkVSUklERTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNpZ25lZCBs
aW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0
YWNrPiwgSlNDOjpFeGVjU3RhdGUqID0gMCwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmll
ciA9IDApIE9WRVJSSURFOwogICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkQ29uc29sZU1lc3NhZ2Uo
TWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2ln
bmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKSBPVkVSUklERTsKIAogICAgICAgICB2aXJ0
dWFsIEV2ZW50VGFyZ2V0KiBlcnJvckV2ZW50VGFyZ2V0KCkgT1ZFUlJJREU7Cg==
</data>
<flag name="review"
          id="233733"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>