<?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>99594</bug_id>
          
          <creation_ts>2012-10-17 06:50:00 -0700</creation_ts>
          <short_desc>[EFL][WK2] Refactor Ewk_Context</short_desc>
          <delta_ts>2012-10-23 01:41:09 -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>WebKit EFL</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>
          <dependson>100011</dependson>
          <blocked>99321</blocked>
    
    <blocked>99696</blocked>
    
    <blocked>100005</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mikhail Pozdnyakov">mikhail.pozdnyakov</reporter>
          <assigned_to name="Mikhail Pozdnyakov">mikhail.pozdnyakov</assigned_to>
          <cc>cdumez</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>744214</commentid>
    <comment_count>0</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-17 06:50:00 -0700</bug_when>
    <thetext>Ewk_Context should be refactored accordingly to approach from bug#99321</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747458</commentid>
    <comment_count>1</comment_count>
      <attachid>169885</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-22 05:33:29 -0700</bug_when>
    <thetext>Created attachment 169885
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747461</commentid>
    <comment_count>2</comment_count>
      <attachid>169885</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-10-22 05:42:11 -0700</bug_when>
    <thetext>Comment on attachment 169885
patch

r=me but pls have someone else look it over</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747478</commentid>
    <comment_count>3</comment_count>
      <attachid>169885</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-22 06:11:51 -0700</bug_when>
    <thetext>Comment on attachment 169885
patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:117
&gt; +PassRefPtr&lt;Ewk_Context&gt; Ewk_Context::create(const char* injectedBundlePath)

It would be nicer to pass a String here as this is a C++ factory method and we convert it to a String anyway.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:130
&gt; +Ewk_Context* Ewk_Context::defaultContext()

Why don&apos;t we return a PassRefPtr here to promote the use of smart pointers?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:161
&gt; +bool Ewk_Context::registerURLScheme(const char* scheme, Ewk_Url_Scheme_Request_Cb callback, void *userData)

Star on wrong side.
Would be nice if scheme would be a String.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:169
&gt; +    WKSoupRequestManagerRegisterURIScheme(m_requestManager.get(), wkScheme.get());

Let&apos;s use C++ API here instead of the WK C API.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:181
&gt; +void Ewk_Context::addVisitedLink(const char* visitedURL)

Would be nice to pass a String here and use C++ API inside instead of WK C API.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:304
&gt; +    return Ewk_Context::create(adoptWK(WKContextCreate()).get()).leakRef();

What about adding a factory method to Ewk_Context which does not take any argument?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context_private.h:48
&gt; +    static PassRefPtr&lt;Ewk_Context&gt; create(const char* injectedBundlePath);

String argument would be nicer here.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context_private.h:50
&gt; +    static Ewk_Context* defaultContext();

PassRefPtr for consistency?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:902
&gt; +Evas_Object* ewk_view_add_with_context(Evas* canvas, Ewk_Context *context)

Star on wrong side</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747496</commentid>
    <comment_count>4</comment_count>
      <attachid>169899</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-22 06:53:56 -0700</bug_when>
    <thetext>Created attachment 169899
to be landed

Took comments from Chris into consideration</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747500</commentid>
    <comment_count>5</comment_count>
      <attachid>169899</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-22 06:57:22 -0700</bug_when>
    <thetext>Comment on attachment 169899
to be landed

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:297
&gt; +    return Ewk_Context::create(adoptWK(WKContextCreate()).get()).leakRef();

I would add a factory method without no argument for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747501</commentid>
    <comment_count>6</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-22 06:58:31 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 169899 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=169899&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:297
&gt; &gt; +    return Ewk_Context::create(adoptWK(WKContextCreate()).get()).leakRef();
&gt; 
&gt; I would add a factory method without no argument for this.

agree</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747507</commentid>
    <comment_count>7</comment_count>
      <attachid>169902</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-22 07:04:05 -0700</bug_when>
    <thetext>Created attachment 169902
to be landed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747532</commentid>
    <comment_count>8</comment_count>
      <attachid>169902</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-22 07:47:13 -0700</bug_when>
    <thetext>Comment on attachment 169902
to be landed

Clearing flags on attachment: 169902

Committed r132072: &lt;http://trac.webkit.org/changeset/132072&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747533</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-22 07:47:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747637</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-22 09:51:06 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 100011</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747666</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-22 10:30:29 -0700</bug_when>
    <thetext>Backtrace on the bot:
crash log for WebKitTestRunner (pid 4562):
STDOUT: &lt;empty&gt;
STDERR: 1   0x7f93fe6aa55f
STDERR: 2   0x7f93f65c1cb0
STDERR: 3   0x7f93f7cb917b
STDERR: 4   0x7f93f7b3a9c5 WebKit::WebHistoryClient::didNavigateWithNavigationData(WebKit::WebContext*, WebKit::WebPageProxy*, WebKit::WebNavigationDataStore const&amp;, WebKit::WebFrameProxy*)
STDERR: 5   0x7f93f7b8f51f WebKit::WebProcessProxy::didNavigateWithNavigationData(unsigned long, WebKit::WebNavigationDataStore const&amp;, unsigned long)
STDERR: 6   0x7f93f7d0b57b void CoreIPC::callMemberFunction&lt;WebKit::WebProcessProxy, void (WebKit::WebProcessProxy::*)(unsigned long, WebKit::WebNavigationDataStore const&amp;, unsigned long), unsigned long, WebKit::WebNavigationDataStore, unsigned long&gt;(CoreIPC::Arguments3&lt;unsigned long, WebKit::WebNavigationDataStore, unsigned long&gt; const&amp;, WebKit::WebProcessProxy*, void (WebKit::WebProcessProxy::*)(unsigned long, WebKit::WebNavigationDataStore const&amp;, unsigned long))
STDERR: 7   0x7f93f7d0af8b void CoreIPC::handleMessage&lt;Messages::WebProcessProxy::DidNavigateWithNavigationData, WebKit::WebProcessProxy, void (WebKit::WebProcessProxy::*)(unsigned long, WebKit::WebNavigationDataStore const&amp;, unsigned long)&gt;(CoreIPC::MessageDecoder&amp;, WebKit::WebProcessProxy*, void (WebKit::WebProcessProxy::*)(unsigned long, WebKit::WebNavigationDataStore const&amp;, unsigned long))
STDERR: 8   0x7f93f7d0ab04 WebKit::WebProcessProxy::didReceiveWebProcessProxyMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;)
STDERR: 9   0x7f93f7b8e8dd WebKit::WebProcessProxy::didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;)
STDERR: 10  0x7f93f7b156e9 WebKit::WebConnectionToWebProcess::didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;)
STDERR: 11  0x7f93f7a8e62e CoreIPC::Connection::dispatchMessage(CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;)
STDERR: 12  0x7f93f7a8e76b CoreIPC::Connection::dispatchMessage(CoreIPC::Connection::Message&lt;CoreIPC::MessageDecoder&gt;&amp;)
STDERR: 13  0x7f93f7a8e907 CoreIPC::Connection::dispatchOneMessage()
STDERR: 14  0x7f93f7a98a10 WTF::FunctionWrapper&lt;void (CoreIPC::Connection::*)()&gt;::operator()(CoreIPC::Connection*)
STDERR: 15  0x7f93f7a98816 WTF::BoundFunctionImpl&lt;WTF::FunctionWrapper&lt;void (CoreIPC::Connection::*)()&gt;, void (CoreIPC::Connection*)&gt;::operator()()
STDERR: 16  0x7f93fe6dc78e WTF::Function&lt;void ()&gt;::operator()() const
STDERR: 17  0x7f93fae259fe WebCore::RunLoop::performWork()
STDERR: 18  0x7f93fb7e012f WebCore::RunLoop::wakeUpEvent(void*, void*, unsigned int)
STDERR: 19  0x7f93f6f8d7c1
STDERR: 20  0x7f93f6f8c711
STDERR: 21  0x7f93f6f8cc57 ecore_main_loop_begin
STDERR: 22  0x42e887 WTR::TestController::platformRunUntil(bool&amp;, double)
STDERR: 23  0x41c03a WTR::TestController::runUntil(bool&amp;, WTR::TestController::TimeoutDuration)
STDERR: 24  0x41b5b4 WTR::TestController::resetStateToConsistentValues()
STDERR: 25  0x4211fe WTR::TestInvocation::invoke()
STDERR: 26  0x41bd7c WTR::TestController::runTest(char const*)
STDERR: 27  0x41beb5 WTR::TestController::runTestingServerLoop()
STDERR: 28  0x41bf45 WTR::TestController::run()
STDERR: 29  0x419e12 WTR::TestController::TestController(int, char const**)
STDERR: 30  0x42ea01 main
STDERR: 31  0x7f93f5cfe76d __libc_start_main
STDERR: LEAK: 1 WebPageProxy
STDERR: LEAK: 1 WebContext
STDERR: 
STDERR: (process:4569): libsoup-WARNING **: Cache flush finished despite 1 pending requests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747817</commentid>
    <comment_count>12</comment_count>
      <attachid>169902</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-22 13:19:43 -0700</bug_when>
    <thetext>Comment on attachment 169902
to be landed

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

Unrelated to the crashing but I found a leak I believe

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:292
&gt; +    return Ewk_Context::defaultContext().leakRef();

Should be &quot;Ewk_Context::create().get()&quot; since we are not supposed to ref for the app here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748358</commentid>
    <comment_count>13</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-23 01:13:43 -0700</bug_when>
    <thetext>The problem happens because EWK_Context is created new all the time, even for the same instance of WKContext. Each new EWK_Context resets clients for 
WKContext and sets itself as user_data to all the client callbacks.

The crashing test creates the new view and deletes it (after it&apos;s closed) =&gt; corresponding EWK_Context is also deleted, but clients used by essential view&apos;s WKContext (for instance history client) still contain pointer to the deleted EWK_Context =&gt; pointer is dereferenced =&gt; BOOM!

It is a different problem actually beyond the scope of refactoring, but I&apos;m going to include the fix for it to the same patch in order to avoid rebasing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748361</commentid>
    <comment_count>14</comment_count>
      <attachid>170077</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-23 01:17:44 -0700</bug_when>
    <thetext>Created attachment 170077
patch + fix providing uniqueness of corresponding EwkContext and WKContext instances</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748376</commentid>
    <comment_count>15</comment_count>
      <attachid>170077</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-23 01:41:04 -0700</bug_when>
    <thetext>Comment on attachment 170077
patch + fix providing uniqueness of corresponding EwkContext and WKContext instances

Clearing flags on attachment: 170077

Committed r132192: &lt;http://trac.webkit.org/changeset/132192&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748377</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-23 01:41:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169885</attachid>
            <date>2012-10-22 05:33:29 -0700</date>
            <delta_ts>2012-10-22 06:53:56 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bug99594</filename>
            <type>text/plain</type>
            <size>40399</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDYyOTRmMTkzNzczMTk3NmViZDQwMWY0ODViNDI0N2VkNjlhMWViOGMKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
TW9uIE9jdCAyMiAxNToyODoyMCAyMDEyICswMzAwCgogICAgYnVnOTk1OTQKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggMDcyYjg3Mi4uMDdhY2IwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDEyLTEw
LTIyICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgor
CisgICAgICAgIFtFRkxdW1dLMl0gUmVmYWN0b3IgRXdrX0NvbnRleHQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5NTk0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXdrX0NvbnRleHQgaXMgbm93IGVuY2Fw
c3VsYXRlZCB0byBhIEMrKyBjbGFzcyBpbmhlcml0ZWQgZnJvbSBXVEY6OlJlZkNvdW50ZWQuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpoYW5kbGVEb3dubG9hZFJlcXVlc3QpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcDoKKyAgICAgICAgKEV3a19Db250
ZXh0OjpFd2tfQ29udGV4dCk6CisgICAgICAgIChFd2tfQ29udGV4dDo6fkV3a19Db250ZXh0KToK
KyAgICAgICAgKEV3a19Db250ZXh0OjpjcmVhdGUpOgorICAgICAgICAoRXdrX0NvbnRleHQ6OmRl
ZmF1bHRDb250ZXh0KToKKyAgICAgICAgKEV3a19Db250ZXh0Ojpjb29raWVNYW5hZ2VyKToKKyAg
ICAgICAgKEV3a19Db250ZXh0OjpmYXZpY29uRGF0YWJhc2UpOgorICAgICAgICAoRXdrX0NvbnRl
eHQ6OnJlZ2lzdGVyVVJMU2NoZW1lKToKKyAgICAgICAgKEV3a19Db250ZXh0Ojp2aWJyYXRpb25Q
cm92aWRlcik6CisgICAgICAgIChFd2tfQ29udGV4dDo6YWRkVmlzaXRlZExpbmspOgorICAgICAg
ICAoRXdrX0NvbnRleHQ6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoRXdrX0NvbnRleHQ6OmNh
Y2hlTW9kZWwpOgorICAgICAgICAoZXdrX2NvbnRleHRfcmVmKToKKyAgICAgICAgKGV3a19jb250
ZXh0X3VucmVmKToKKyAgICAgICAgKGV3a19jb250ZXh0X2Nvb2tpZV9tYW5hZ2VyX2dldCk6Cisg
ICAgICAgIChld2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldCk6CisgICAgICAgIChFd2tf
Q29udGV4dDo6d2tDb250ZXh0KToKKyAgICAgICAgKEV3a19Db250ZXh0OjphZGREb3dubG9hZEpv
Yik6CisgICAgICAgIChFd2tfQ29udGV4dDo6ZG93bmxvYWRKb2IpOgorICAgICAgICAoRXdrX0Nv
bnRleHQ6OnJlbW92ZURvd25sb2FkSm9iKToKKyAgICAgICAgKEV3a19Db250ZXh0OjpyZXF1ZXN0
TWFuYWdlcik6CisgICAgICAgIChFd2tfQ29udGV4dDo6dXJsU2NoZW1lUmVxdWVzdFJlY2VpdmVk
KToKKyAgICAgICAgKGV3a19jb250ZXh0X2RlZmF1bHRfZ2V0KToKKyAgICAgICAgKGV3a19jb250
ZXh0X25ldyk6CisgICAgICAgIChld2tfY29udGV4dF9uZXdfd2l0aF9pbmplY3RlZF9idW5kbGVf
cGF0aCk6CisgICAgICAgIChld2tfY29udGV4dF91cmxfc2NoZW1lX3JlZ2lzdGVyKToKKyAgICAg
ICAgKGV3a19jb250ZXh0X3ZpYnJhdGlvbl9jbGllbnRfY2FsbGJhY2tzX3NldCk6CisgICAgICAg
IChld2tfY29udGV4dF9oaXN0b3J5X2NhbGxiYWNrc19zZXQpOgorICAgICAgICAoZXdrX2NvbnRl
eHRfdmlzaXRlZF9saW5rX2FkZCk6CisgICAgICAgIChld2tfY29udGV4dF9jYWNoZV9tb2RlbF9z
ZXQpOgorICAgICAgICAoZXdrX2NvbnRleHRfY2FjaGVfbW9kZWxfZ2V0KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnQuY3BwOgorICAgICAg
ICAoZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUpOgorICAgICAgICAoZGlk
UmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKGRpZENyZWF0ZURlc3RpbmF0aW9uKToKKyAgICAg
ICAgKGRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKGRpZEZhaWwpOgorICAgICAgICAoZGlkQ2Fu
Y2VsKToKKyAgICAgICAgKGRpZEZpbmlzaCk6CisgICAgICAgIChld2tfY29udGV4dF9kb3dubG9h
ZF9jbGllbnRfYXR0YWNoKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dF9oaXN0b3J5X2NsaWVudC5jcHA6CisgICAgICAgIChnZXRFd2tIaXN0b3J5Q2xpZW50KToKKyAg
ICAgICAgKGRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKToKKyAgICAgICAgKGRpZFBlcmZv
cm1DbGllbnRSZWRpcmVjdCk6CisgICAgICAgIChkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QpOgor
ICAgICAgICAoZGlkVXBkYXRlSGlzdG9yeVRpdGxlKToKKyAgICAgICAgKHBvcHVsYXRlVmlzaXRl
ZExpbmtzKToKKyAgICAgICAgKGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X2F0dGFjaCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oOgorICAgICAg
ICAoRXdrX0NvbnRleHQpOgorICAgICAgICAoRXdrX0NvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAg
IChFd2tfQ29udGV4dDo6aGlzdG9yeUNsaWVudCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudC5jcHA6CisgICAgICAgIChkaWRS
ZWNlaXZlVVJJUmVxdWVzdCk6CisgICAgICAgIChld2tfY29udGV4dF9yZXF1ZXN0X21hbmFnZXJf
Y2xpZW50X2F0dGFjaCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3Bw
OgorICAgICAgICAoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAgKEV3a19WaWV3X1By
aXZhdGVfRGF0YTo6RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAgKEV3a19WaWV3X1By
aXZhdGVfRGF0YTo6fkV3a19WaWV3X1ByaXZhdGVfRGF0YSk6CisgICAgICAgIChfZXdrX3ZpZXdf
cHJpdl9kZWwpOgorICAgICAgICAoX2V3a192aWV3X2luaXRpYWxpemUpOgorICAgICAgICAoZXdr
X3ZpZXdfYmFzZV9hZGQpOgorICAgICAgICAoZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4dCk6Cisg
ICAgICAgIChld2tfdmlld19jb250ZXh0X2dldCk6CisgICAgICAgIChld2tfdmlld191cGRhdGVf
aWNvbik6CisKIDIwMTItMTAtMjEgIE1pbGlhbiBXb2xmZiAgPG1pbGlhbi53b2xmZkBrZGFiLmNv
bT4KIAogICAgICAgICBbUXRdIFFOWCBidWlsZCBmYWlscyB3aGVuIGJ1aWxkaW5nIGFnYWluc3Qg
UXQgd2l0aG91dCBjbGlwYm9hcmQgc3VwcG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3BwCmluZGV4IDBjYTc1NjkuLjA1NGJmY2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50
SW1wbC5jcHAKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpjb3VudFN0
cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIEZpbgogdm9p
ZCBQYWdlQ2xpZW50SW1wbDo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqIGRv
d25sb2FkKQogewogICAgIFJlZlB0cjxFd2tfRG93bmxvYWRfSm9iPiBld2tEb3dubG9hZCA9IEV3
a19Eb3dubG9hZF9Kb2I6OmNyZWF0ZShkb3dubG9hZCwgbV92aWV3V2lkZ2V0KTsKLSAgICBld2tf
Y29udGV4dF9kb3dubG9hZF9qb2JfYWRkKGV3a192aWV3X2NvbnRleHRfZ2V0KG1fdmlld1dpZGdl
dCksIGV3a0Rvd25sb2FkLmdldCgpKTsKKyAgICBld2tfdmlld19jb250ZXh0X2dldChtX3ZpZXdX
aWRnZXQpLT5hZGREb3dubG9hZEpvYihld2tEb3dubG9hZC5nZXQoKSk7CiB9CiAKICNpZiBVU0Uo
VElMRURfQkFDS0lOR19TVE9SRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19jb250ZXh0LmNwcAppbmRleCA5ZmI4ODkyLi42ZDAwNGJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC02OSwxNDgg
KzY5LDE4MSBAQCBzdHJ1Y3QgRXdrX1VybF9TY2hlbWVfSGFuZGxlciB7CiAgICAgeyB9CiB9Owog
Ci10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBFd2tfVXJsX1NjaGVtZV9IYW5kbGVyPiBVUkxTY2hl
bWVIYW5kbGVyTWFwOwotCi1zdHJ1Y3QgRXdrX0NvbnRleHQgewotICAgIHVuc2lnbmVkIF9fcmVm
OyAvKio8IHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIG9iamVjdCAqLwotICAgIFdLUmV0YWlu
UHRyPFdLQ29udGV4dFJlZj4gY29udGV4dDsKLQotICAgIE93blB0cjxFd2tfQ29va2llX01hbmFn
ZXI+IGNvb2tpZU1hbmFnZXI7Ci0gICAgT3duUHRyPEV3a19GYXZpY29uX0RhdGFiYXNlPiBmYXZp
Y29uRGF0YWJhc2U7Ci0jaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQotICAgIFJlZlB0cjxCYXR0
ZXJ5UHJvdmlkZXI+IGJhdHRlcnlQcm92aWRlcjsKLSNlbmRpZgotI2lmIEVOQUJMRShORVRXT1JL
X0lORk8pCi0gICAgUmVmUHRyPE5ldHdvcmtJbmZvUHJvdmlkZXI+IG5ldHdvcmtJbmZvUHJvdmlk
ZXI7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoVklCUkFUSU9OKQotICAgIFJlZlB0cjxWaWJyYXRpb25Q
cm92aWRlcj4gdmlicmF0aW9uUHJvdmlkZXI7Ci0jZW5kaWYKLSAgICBIYXNoTWFwPHVpbnQ2NF90
LCBSZWZQdHI8RXdrX0Rvd25sb2FkX0pvYj4gPiBkb3dubG9hZEpvYnM7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1NvdXBSZXF1ZXN0TWFuYWdlclJlZj4gcmVxdWVzdE1hbmFnZXI7Ci0gICAgVVJMU2No
ZW1lSGFuZGxlck1hcCB1cmxTY2hlbWVIYW5kbGVyczsKLQotICAgIEV3a19Db250ZXh0X0hpc3Rv
cnlfQ2xpZW50IGhpc3RvcnlDbGllbnQ7Ci0KLSAgICBFd2tfQ29udGV4dChXS1JldGFpblB0cjxX
S0NvbnRleHRSZWY+IGNvbnRleHRSZWYpCi0gICAgICAgIDogX19yZWYoMSkKLSAgICAgICAgLCBj
b250ZXh0KGNvbnRleHRSZWYpCi0gICAgICAgICwgcmVxdWVzdE1hbmFnZXIoV0tDb250ZXh0R2V0
U291cFJlcXVlc3RNYW5hZ2VyKGNvbnRleHRSZWYuZ2V0KCkpKQotICAgICAgICAsIGhpc3RvcnlD
bGllbnQoKQotICAgIHsKK0V3a19Db250ZXh0OjpFd2tfQ29udGV4dChXS0NvbnRleHRSZWYgY29u
dGV4dCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9yZXF1ZXN0TWFuYWdlcihX
S0NvbnRleHRHZXRTb3VwUmVxdWVzdE1hbmFnZXIoY29udGV4dCkpCisgICAgLCBtX2hpc3RvcnlD
bGllbnQoKQorewogI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKLSAgICAgICAgYmF0dGVyeVBy
b3ZpZGVyID0gQmF0dGVyeVByb3ZpZGVyOjpjcmVhdGUoY29udGV4dC5nZXQoKSk7CisgICAgbV9i
YXR0ZXJ5UHJvdmlkZXIgPSBCYXR0ZXJ5UHJvdmlkZXI6OmNyZWF0ZShjb250ZXh0KTsKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKE5FVFdPUktfSU5GTykKLSAgICAgICAgbmV0d29ya0luZm9Qcm92aWRl
ciA9IE5ldHdvcmtJbmZvUHJvdmlkZXI6OmNyZWF0ZShjb250ZXh0LmdldCgpKTsKKyAgICBtX25l
dHdvcmtJbmZvUHJvdmlkZXIgPSBOZXR3b3JrSW5mb1Byb3ZpZGVyOjpjcmVhdGUoY29udGV4dCk7
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSUJSQVRJT04pCi0gICAgICAgIHZpYnJhdGlvblByb3Zp
ZGVyID0gVmlicmF0aW9uUHJvdmlkZXI6OmNyZWF0ZShjb250ZXh0LmdldCgpKTsKKyAgICBtX3Zp
YnJhdGlvblByb3ZpZGVyID0gVmlicmF0aW9uUHJvdmlkZXI6OmNyZWF0ZShjb250ZXh0KTsKICNl
bmRpZgogCiAjaWYgRU5BQkxFKE1FTU9SWV9TQU1QTEVSKQotICAgICAgICBzdGF0aWMgYm9vbCBp
bml0aWFsaXplTWVtb3J5U2FtcGxlciA9IGZhbHNlOwotICAgICAgICBzdGF0aWMgY29uc3QgY2hh
ciBlbnZpcm9ubWVudFZhcmlhYmxlW10gPSAiU0FNUExFX01FTU9SWSI7CisgICAgc3RhdGljIGJv
b2wgaW5pdGlhbGl6ZU1lbW9yeVNhbXBsZXIgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3QgY2hh
ciBlbnZpcm9ubWVudFZhcmlhYmxlW10gPSAiU0FNUExFX01FTU9SWSI7CiAKLSAgICAgICAgaWYg
KCFpbml0aWFsaXplTWVtb3J5U2FtcGxlciAmJiBnZXRlbnYoZW52aXJvbm1lbnRWYXJpYWJsZSkp
IHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBpbnRlcnZhbChBZG9wdFdL
LCBXS0RvdWJsZUNyZWF0ZSgwLjApKTsKLSAgICAgICAgICAgIFdLQ29udGV4dFN0YXJ0TWVtb3J5
U2FtcGxlcihjb250ZXh0LmdldCgpLCBpbnRlcnZhbC5nZXQoKSk7Ci0gICAgICAgICAgICBpbml0
aWFsaXplTWVtb3J5U2FtcGxlciA9IHRydWU7Ci0gICAgICAgIH0KKyAgICBpZiAoIWluaXRpYWxp
emVNZW1vcnlTYW1wbGVyICYmIGdldGVudihlbnZpcm9ubWVudFZhcmlhYmxlKSkgeworICAgICAg
ICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gaW50ZXJ2YWwoQWRvcHRXSywgV0tEb3VibGVDcmVh
dGUoMC4wKSk7CisgICAgICAgIFdLQ29udGV4dFN0YXJ0TWVtb3J5U2FtcGxlcihjb250ZXh0LCBp
bnRlcnZhbC5nZXQoKSk7CisgICAgICAgIGluaXRpYWxpemVNZW1vcnlTYW1wbGVyID0gdHJ1ZTsK
KyAgICB9CiAjZW5kaWYKLSAgICAgICAgZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVu
dF9hdHRhY2godGhpcyk7Ci0gICAgICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9hdHRh
Y2godGhpcyk7Ci0gICAgICAgIGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X2F0dGFjaCh0aGlz
KTsKKwogI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgICAgICBld2tfdGV4dF9jaGVja2VyX2Ns
aWVudF9hdHRhY2goKTsKLSAgICAgICAgaWYgKGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxs
X2NoZWNraW5nX2VuYWJsZWRfZ2V0KCkpIHsKLSAgICAgICAgICAgIC8vIExvYWQgdGhlIGRlZmF1
bHQgbGFuZ3VhZ2UuCi0gICAgICAgICAgICBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFu
Z3VhZ2VzX3NldCgwKTsKLSAgICAgICAgfQotI2VuZGlmCisgICAgZXdrX3RleHRfY2hlY2tlcl9j
bGllbnRfYXR0YWNoKCk7CisgICAgaWYgKGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2No
ZWNraW5nX2VuYWJsZWRfZ2V0KCkpIHsKKyAgICAgICAgLy8gTG9hZCB0aGUgZGVmYXVsdCBsYW5n
dWFnZS4KKyAgICAgICAgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQo
MCk7CiAgICAgfQotfTsKKyNlbmRpZgogCi1Fd2tfQ29udGV4dCogZXdrX2NvbnRleHRfcmVmKEV3
a19Db250ZXh0KiBld2tDb250ZXh0KQotewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChld2tDb250ZXh0LCAwKTsKLSAgICArK2V3a0NvbnRleHQtPl9fcmVmOworICAgIGV3a19j
b250ZXh0X3JlcXVlc3RfbWFuYWdlcl9jbGllbnRfYXR0YWNoKHRoaXMpOworICAgIGV3a19jb250
ZXh0X2Rvd25sb2FkX2NsaWVudF9hdHRhY2godGhpcyk7CisgICAgZXdrX2NvbnRleHRfaGlzdG9y
eV9jbGllbnRfYXR0YWNoKHRoaXMpOworfQogCi0gICAgcmV0dXJuIGV3a0NvbnRleHQ7CitFd2tf
Q29udGV4dDo6fkV3a19Db250ZXh0KCkKK3sKIH0KIAotdm9pZCBld2tfY29udGV4dF91bnJlZihF
d2tfQ29udGV4dCogZXdrQ29udGV4dCkKK1Bhc3NSZWZQdHI8RXdrX0NvbnRleHQ+IEV3a19Db250
ZXh0OjpjcmVhdGUoY29uc3QgY2hhciogaW5qZWN0ZWRCdW5kbGVQYXRoKQogewotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0NvbnRleHQpOwotICAgIEVJTkFfU0FGRVRZX09OX0ZB
TFNFX1JFVFVSTihld2tDb250ZXh0LT5fX3JlZiA+IDApOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChpbmplY3RlZEJ1bmRsZVBhdGgsIDApOwogCi0gICAgaWYgKC0tZXdrQ29u
dGV4dC0+X19yZWYpCi0gICAgICAgIHJldHVybjsKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gcGF0aFJlZihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhpbmplY3Rl
ZEJ1bmRsZVBhdGgpKTsKKyAgICBpZiAoIWZpbGVFeGlzdHModG9JbXBsKHBhdGhSZWYuZ2V0KCkp
LT5zdHJpbmcoKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgV0tSZXRhaW5QdHI8V0tDb250
ZXh0UmVmPiBjb250ZXh0V0sgPSBhZG9wdFdLKFdLQ29udGV4dENyZWF0ZVdpdGhJbmplY3RlZEJ1
bmRsZVBhdGgocGF0aFJlZi5nZXQoKSkpOwogCi0gICAgZGVsZXRlIGV3a0NvbnRleHQ7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBFd2tfQ29udGV4dChjb250ZXh0V0suZ2V0KCkpKTsKIH0KIAot
RXdrX0Nvb2tpZV9NYW5hZ2VyKiBld2tfY29udGV4dF9jb29raWVfbWFuYWdlcl9nZXQoY29uc3Qg
RXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCitFd2tfQ29udGV4dCogRXdrX0NvbnRleHQ6OmRlZmF1
bHRDb250ZXh0KCkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXdrQ29u
dGV4dCwgMCk7CisgICAgc3RhdGljIFJlZlB0cjxFd2tfQ29udGV4dD4gZGVmYXVsdEluc3RhbmNl
ID0gY3JlYXRlKGFkb3B0V0soV0tDb250ZXh0Q3JlYXRlKCkpLmdldCgpKTsKIAotICAgIGlmICgh
ZXdrQ29udGV4dC0+Y29va2llTWFuYWdlcikKLSAgICAgICAgY29uc3RfY2FzdDxFd2tfQ29udGV4
dCo+KGV3a0NvbnRleHQpLT5jb29raWVNYW5hZ2VyID0gRXdrX0Nvb2tpZV9NYW5hZ2VyOjpjcmVh
dGUoV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihld2tDb250ZXh0LT5jb250ZXh0LmdldCgpKSk7
Ci0KLSAgICByZXR1cm4gZXdrQ29udGV4dC0+Y29va2llTWFuYWdlci5nZXQoKTsKKyAgICByZXR1
cm4gZGVmYXVsdEluc3RhbmNlLmdldCgpOwogfQogCi1Fd2tfRmF2aWNvbl9EYXRhYmFzZSogZXdr
X2NvbnRleHRfZmF2aWNvbl9kYXRhYmFzZV9nZXQoY29uc3QgRXdrX0NvbnRleHQqIGV3a0NvbnRl
eHQpCitFd2tfQ29va2llX01hbmFnZXIqIEV3a19Db250ZXh0Ojpjb29raWVNYW5hZ2VyKCkKIHsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXdrQ29udGV4dCwgMCk7CisgICAg
aWYgKCFtX2Nvb2tpZU1hbmFnZXIpCisgICAgICAgIG1fY29va2llTWFuYWdlciA9IEV3a19Db29r
aWVfTWFuYWdlcjo6Y3JlYXRlKFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIobV9jb250ZXh0Lmdl
dCgpKSk7CiAKLSAgICBpZiAoIWV3a0NvbnRleHQtPmZhdmljb25EYXRhYmFzZSkgewotICAgICAg
ICBXS1JldGFpblB0cjxXS0ljb25EYXRhYmFzZVJlZj4gaWNvbkRhdGFiYXNlID0gV0tDb250ZXh0
R2V0SWNvbkRhdGFiYXNlKGV3a0NvbnRleHQtPmNvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiBt
X2Nvb2tpZU1hbmFnZXIuZ2V0KCk7Cit9CisKK0V3a19GYXZpY29uX0RhdGFiYXNlKiBFd2tfQ29u
dGV4dDo6ZmF2aWNvbkRhdGFiYXNlKCkKK3sKKyAgICBpZiAoIW1fZmF2aWNvbkRhdGFiYXNlKSB7
CisgICAgICAgIFdLUmV0YWluUHRyPFdLSWNvbkRhdGFiYXNlUmVmPiBpY29uRGF0YWJhc2UgPSBX
S0NvbnRleHRHZXRJY29uRGF0YWJhc2UobV9jb250ZXh0LmdldCgpKTsKICAgICAgICAgLy8gU2V0
IHRoZSBkYXRhYmFzZSBwYXRoIGlmIGl0IGlzIG5vdCBvcGVuIHlldC4KICAgICAgICAgaWYgKCF0
b0ltcGwoaWNvbkRhdGFiYXNlLmdldCgpKS0+aXNPcGVuKCkpIHsKLSAgICAgICAgICAgIFdlYkNv
bnRleHQqIHdlYkNvbnRleHQgPSB0b0ltcGwoZXdrQ29udGV4dC0+Y29udGV4dC5nZXQoKSk7Cisg
ICAgICAgICAgICBXZWJDb250ZXh0KiB3ZWJDb250ZXh0ID0gdG9JbXBsKG1fY29udGV4dC5nZXQo
KSk7CiAgICAgICAgICAgICBTdHJpbmcgZGF0YWJhc2VQYXRoID0gd2ViQ29udGV4dC0+aWNvbkRh
dGFiYXNlUGF0aCgpICsgIi8iICsgV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpkZWZhdWx0RGF0YWJh
c2VGaWxlbmFtZSgpOwogICAgICAgICAgICAgd2ViQ29udGV4dC0+c2V0SWNvbkRhdGFiYXNlUGF0
aChkYXRhYmFzZVBhdGgpOwogICAgICAgICB9Ci0gICAgICAgIGNvbnN0X2Nhc3Q8RXdrX0NvbnRl
eHQqPihld2tDb250ZXh0KS0+ZmF2aWNvbkRhdGFiYXNlID0gRXdrX0Zhdmljb25fRGF0YWJhc2U6
OmNyZWF0ZShpY29uRGF0YWJhc2UuZ2V0KCkpOworICAgICAgICBtX2Zhdmljb25EYXRhYmFzZSA9
IEV3a19GYXZpY29uX0RhdGFiYXNlOjpjcmVhdGUoaWNvbkRhdGFiYXNlLmdldCgpKTsKICAgICB9
CiAKLSAgICByZXR1cm4gZXdrQ29udGV4dC0+ZmF2aWNvbkRhdGFiYXNlLmdldCgpOworICAgIHJl
dHVybiBtX2Zhdmljb25EYXRhYmFzZS5nZXQoKTsKIH0KIAotV0tDb250ZXh0UmVmIGV3a19jb250
ZXh0X1dLQ29udGV4dF9nZXQoY29uc3QgRXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCitib29sIEV3
a19Db250ZXh0OjpyZWdpc3RlclVSTFNjaGVtZShjb25zdCBjaGFyKiBzY2hlbWUsIEV3a19Vcmxf
U2NoZW1lX1JlcXVlc3RfQ2IgY2FsbGJhY2ssIHZvaWQgKnVzZXJEYXRhKQogewotICAgIHJldHVy
biBld2tDb250ZXh0LT5jb250ZXh0LmdldCgpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzY2hlbWUsIGZhbHNlKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoY2FsbGJhY2ssIGZhbHNlKTsKKworICAgIG1fdXJsU2NoZW1lSGFuZGxlcnMuc2V0KFN0cmlu
Zzo6ZnJvbVVURjgoc2NoZW1lKSwgRXdrX1VybF9TY2hlbWVfSGFuZGxlcihjYWxsYmFjaywgdXNl
ckRhdGEpKTsKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tTY2hlbWUoQWRvcHRXSywg
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc2NoZW1lKSk7CisKKyAgICBXS1NvdXBSZXF1
ZXN0TWFuYWdlclJlZ2lzdGVyVVJJU2NoZW1lKG1fcmVxdWVzdE1hbmFnZXIuZ2V0KCksIHdrU2No
ZW1lLmdldCgpKTsKKworICAgIHJldHVybiB0cnVlOwogfQogCi0vKioKLSAqIEBpbnRlcm5hbAot
ICogQ3JlYXRlIEV3a19Db250ZXh0IGZyb20gV0tDb250ZXh0LgotICovCi1Fd2tfQ29udGV4dCog
ZXdrX2NvbnRleHRfbmV3X2Zyb21fV0tDb250ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQor
I2lmIEVOQUJMRShWSUJSQVRJT04pCitQYXNzUmVmUHRyPFZpYnJhdGlvblByb3ZpZGVyPiBFd2tf
Q29udGV4dDo6dmlicmF0aW9uUHJvdmlkZXIoKQoreworICAgIHJldHVybiBtX3ZpYnJhdGlvblBy
b3ZpZGVyOworfQorI2VuZGlmCisKK3ZvaWQgRXdrX0NvbnRleHQ6OmFkZFZpc2l0ZWRMaW5rKGNv
bnN0IGNoYXIqIHZpc2l0ZWRVUkwpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
dmlzaXRlZFVSTCk7CisKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tWaXNpdGVkVVJM
KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHZpc2l0ZWRVUkwpKTsKKyAg
ICBXS0NvbnRleHRBZGRWaXNpdGVkTGluayhtX2NvbnRleHQuZ2V0KCksIHdrVmlzaXRlZFVSTC5n
ZXQoKSk7Cit9CisKK3ZvaWQgRXdrX0NvbnRleHQ6OnNldENhY2hlTW9kZWwoRXdrX0NhY2hlX01v
ZGVsIGNhY2hlTW9kZWwpCit7CisgICAgV0tDb250ZXh0U2V0Q2FjaGVNb2RlbChtX2NvbnRleHQu
Z2V0KCksIHN0YXRpY19jYXN0PEV3a19DYWNoZV9Nb2RlbD4oY2FjaGVNb2RlbCkpOworfQorCitF
d2tfQ2FjaGVfTW9kZWwgRXdrX0NvbnRleHQ6OmNhY2hlTW9kZWwoKSBjb25zdAoreworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxFd2tfQ2FjaGVfTW9kZWw+KFdLQ29udGV4dEdldENhY2hlTW9kZWwo
bV9jb250ZXh0LmdldCgpKSk7Cit9CisKK0V3a19Db250ZXh0KiBld2tfY29udGV4dF9yZWYoRXdr
X0NvbnRleHQqIGV3a0NvbnRleHQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKGV3a0NvbnRleHQsIDApOworCisgICAgZXdrQ29udGV4dC0+cmVmKCk7CisKKyAgICByZXR1
cm4gZXdrQ29udGV4dDsKK30KKwordm9pZCBld2tfY29udGV4dF91bnJlZihFd2tfQ29udGV4dCog
ZXdrQ29udGV4dCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihld2tDb250ZXh0
KTsKKworICAgIGV3a0NvbnRleHQtPmRlcmVmKCk7Cit9CisKK0V3a19Db29raWVfTWFuYWdlciog
ZXdrX2NvbnRleHRfY29va2llX21hbmFnZXJfZ2V0KGNvbnN0IEV3a19Db250ZXh0KiBld2tDb250
ZXh0KQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChld2tDb250ZXh0LCAw
KTsKKworICAgIHJldHVybiBjb25zdF9jYXN0PEV3a19Db250ZXh0Kj4oZXdrQ29udGV4dCktPmNv
b2tpZU1hbmFnZXIoKTsKK30KKworRXdrX0Zhdmljb25fRGF0YWJhc2UqIGV3a19jb250ZXh0X2Zh
dmljb25fZGF0YWJhc2VfZ2V0KGNvbnN0IEV3a19Db250ZXh0KiBld2tDb250ZXh0KQogewotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjb250ZXh0UmVmLCAwKTsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXdrQ29udGV4dCwgMCk7CisKKyAgICByZXR1cm4g
Y29uc3RfY2FzdDxFd2tfQ29udGV4dCo+KGV3a0NvbnRleHQpLT5mYXZpY29uRGF0YWJhc2UoKTsK
K30KIAotICAgIHJldHVybiBuZXcgRXdrX0NvbnRleHQoY29udGV4dFJlZik7CitXS0NvbnRleHRS
ZWYgRXdrX0NvbnRleHQ6OndrQ29udGV4dCgpCit7CisgICAgcmV0dXJuIG1fY29udGV4dC5nZXQo
KTsKIH0KIAogLyoqCiAgKiBAaW50ZXJuYWwKICAqIFJlZ2lzdGVycyB0aGF0IGEgbmV3IGRvd25s
b2FkIGhhcyBiZWVuIHJlcXVlc3RlZC4KICAqLwotdm9pZCBld2tfY29udGV4dF9kb3dubG9hZF9q
b2JfYWRkKEV3a19Db250ZXh0KiBld2tDb250ZXh0LCBFd2tfRG93bmxvYWRfSm9iKiBld2tEb3du
bG9hZCkKK3ZvaWQgRXdrX0NvbnRleHQ6OmFkZERvd25sb2FkSm9iKEV3a19Eb3dubG9hZF9Kb2Iq
IGV3a0Rvd25sb2FkKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0NvbnRl
eHQpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0Rvd25sb2FkKTsKIAogICAg
IHVpbnQ2NF90IGRvd25sb2FkSWQgPSBld2tEb3dubG9hZC0+aWQoKTsKLSAgICBpZiAoZXdrQ29u
dGV4dC0+ZG93bmxvYWRKb2JzLmNvbnRhaW5zKGRvd25sb2FkSWQpKQorICAgIGlmIChtX2Rvd25s
b2FkSm9icy5jb250YWlucyhkb3dubG9hZElkKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZXdr
Q29udGV4dC0+ZG93bmxvYWRKb2JzLmFkZChkb3dubG9hZElkLCBld2tEb3dubG9hZCk7CisgICAg
bV9kb3dubG9hZEpvYnMuYWRkKGRvd25sb2FkSWQsIGV3a0Rvd25sb2FkKTsKIH0KIAogLyoqCkBA
IC0yMTgsMTEgKzI1MSw5IEBAIHZvaWQgZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX2FkZChFd2tf
Q29udGV4dCogZXdrQ29udGV4dCwgRXdrX0Rvd25sb2FkX0pvYiogZXdrCiAgKiBSZXR1cm5zIHRo
ZSAjRXdrX0Rvd25sb2FkX0pvYiB3aXRoIHRoZSBnaXZlbiBAYSBkb3dubG9hZElkLCBvcgogICog
QGMgMCBpbiBjYXNlIG9mIGZhaWx1cmUuCiAgKi8KLUV3a19Eb3dubG9hZF9Kb2IqIGV3a19jb250
ZXh0X2Rvd25sb2FkX2pvYl9nZXQoY29uc3QgRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIHVpbnQ2
NF90IGRvd25sb2FkSWQpCitFd2tfRG93bmxvYWRfSm9iKiBFd2tfQ29udGV4dDo6ZG93bmxvYWRK
b2IodWludDY0X3QgZG93bmxvYWRJZCkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoZXdrQ29udGV4dCwgMCk7Ci0KLSAgICByZXR1cm4gZXdrQ29udGV4dC0+ZG93bmxvYWRK
b2JzLmdldChkb3dubG9hZElkKS5nZXQoKTsKKyAgICByZXR1cm4gbV9kb3dubG9hZEpvYnMuZ2V0
KGRvd25sb2FkSWQpLmdldCgpOwogfQogCiAvKioKQEAgLTIzMCwxMCArMjYxLDkgQEAgRXdrX0Rv
d25sb2FkX0pvYiogZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX2dldChjb25zdCBFd2tfQ29udGV4
dCogZXdrQ29udGV4dCwgdWkKICAqIFJlbW92ZXMgdGhlICNFd2tfRG93bmxvYWRfSm9iIHdpdGgg
dGhlIGdpdmVuIEBhIGRvd25sb2FkSWQgZnJvbSB0aGUgaW50ZXJuYWwKICAqIEhhc2hNYXAuCiAg
Ki8KLXZvaWQgZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX3JlbW92ZShFd2tfQ29udGV4dCogZXdr
Q29udGV4dCwgdWludDY0X3QgZG93bmxvYWRJZCkKK3ZvaWQgRXdrX0NvbnRleHQ6OnJlbW92ZURv
d25sb2FkSm9iKHVpbnQ2NF90IGRvd25sb2FkSWQpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4oZXdrQ29udGV4dCk7Ci0gICAgZXdrQ29udGV4dC0+ZG93bmxvYWRKb2JzLnJlbW92
ZShkb3dubG9hZElkKTsKKyAgICBtX2Rvd25sb2FkSm9icy5yZW1vdmUoZG93bmxvYWRJZCk7CiB9
CiAKIC8qKgpAQCAtMjQxLDkgKzI3MSw5IEBAIHZvaWQgZXdrX2NvbnRleHRfZG93bmxvYWRfam9i
X3JlbW92ZShFd2tfQ29udGV4dCogZXdrQ29udGV4dCwgdWludDY0X3QgZG93bmxvYWRJCiAgKgog
ICogQHBhcmFtIGV3a0NvbnRleHQgYSAjRXdrX0NvbnRleHQgb2JqZWN0LgogICovCi1XS1NvdXBS
ZXF1ZXN0TWFuYWdlclJlZiBld2tfY29udGV4dF9yZXF1ZXN0X21hbmFnZXJfZ2V0KGNvbnN0IEV3
a19Db250ZXh0KiBld2tDb250ZXh0KQorV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWYgRXdrX0NvbnRl
eHQ6OnJlcXVlc3RNYW5hZ2VyKCkKIHsKLSAgICByZXR1cm4gZXdrQ29udGV4dC0+cmVxdWVzdE1h
bmFnZXIuZ2V0KCk7CisgICAgcmV0dXJuIG1fcmVxdWVzdE1hbmFnZXIuZ2V0KCk7CiB9CiAKIC8q
KgpAQCAtMjUzLDEyICsyODMsMTEgQEAgV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWYgZXdrX2NvbnRl
eHRfcmVxdWVzdF9tYW5hZ2VyX2dldChjb25zdCBFd2tfQ29udGV4dCogZXdrQ28KICAqIEBwYXJh
bSBld2tDb250ZXh0IGEgI0V3a19Db250ZXh0IG9iamVjdC4KICAqIEBwYXJhbSBzY2hlbWVSZXF1
ZXN0IGEgI0V3a19VcmxfU2NoZW1lX1JlcXVlc3Qgb2JqZWN0LgogICovCi12b2lkIGV3a19jb250
ZXh0X3VybF9zY2hlbWVfcmVxdWVzdF9yZWNlaXZlZChFd2tfQ29udGV4dCogZXdrQ29udGV4dCwg
RXdrX1VybF9TY2hlbWVfUmVxdWVzdCogc2NoZW1lUmVxdWVzdCkKK3ZvaWQgRXdrX0NvbnRleHQ6
OnVybFNjaGVtZVJlcXVlc3RSZWNlaXZlZChFd2tfVXJsX1NjaGVtZV9SZXF1ZXN0KiBzY2hlbWVS
ZXF1ZXN0KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0NvbnRleHQpOwog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNjaGVtZVJlcXVlc3QpOwogCi0gICAgRXdr
X1VybF9TY2hlbWVfSGFuZGxlciBoYW5kbGVyID0gZXdrQ29udGV4dC0+dXJsU2NoZW1lSGFuZGxl
cnMuZ2V0KHNjaGVtZVJlcXVlc3QtPnNjaGVtZSgpKTsKKyAgICBFd2tfVXJsX1NjaGVtZV9IYW5k
bGVyIGhhbmRsZXIgPSBtX3VybFNjaGVtZUhhbmRsZXJzLmdldChzY2hlbWVSZXF1ZXN0LT5zY2hl
bWUoKSk7CiAgICAgaWYgKCFoYW5kbGVyLmNhbGxiYWNrKQogICAgICAgICByZXR1cm47CiAKQEAg
LTI2NywzOCArMjk2LDI0IEBAIHZvaWQgZXdrX2NvbnRleHRfdXJsX3NjaGVtZV9yZXF1ZXN0X3Jl
Y2VpdmVkKEV3a19Db250ZXh0KiBld2tDb250ZXh0LCBFd2tfVXJsX1NjCiAKIEV3a19Db250ZXh0
KiBld2tfY29udGV4dF9kZWZhdWx0X2dldCgpCiB7Ci0gICAgc3RhdGljIEV3a19Db250ZXh0IGRl
ZmF1bHRDb250ZXh0KGFkb3B0V0soV0tDb250ZXh0Q3JlYXRlKCkpKTsKLQotICAgIHJldHVybiAm
ZGVmYXVsdENvbnRleHQ7CisgICAgcmV0dXJuIEV3a19Db250ZXh0OjpkZWZhdWx0Q29udGV4dCgp
OwogfQogCiBFd2tfQ29udGV4dCogZXdrX2NvbnRleHRfbmV3KCkKIHsKLSAgICByZXR1cm4gbmV3
IEV3a19Db250ZXh0KGFkb3B0V0soV0tDb250ZXh0Q3JlYXRlKCkpKTsKKyAgICByZXR1cm4gRXdr
X0NvbnRleHQ6OmNyZWF0ZShhZG9wdFdLKFdLQ29udGV4dENyZWF0ZSgpKS5nZXQoKSkubGVha1Jl
ZigpOwogfQogCiBFd2tfQ29udGV4dCogZXdrX2NvbnRleHRfbmV3X3dpdGhfaW5qZWN0ZWRfYnVu
ZGxlX3BhdGgoY29uc3QgY2hhciogcGF0aCkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwocGF0aCwgMCk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGF0aFJl
ZihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhwYXRoKSk7Ci0gICAgaWYg
KCFmaWxlRXhpc3RzKHRvSW1wbChwYXRoUmVmLmdldCgpKS0+c3RyaW5nKCkpKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIHJldHVybiBuZXcgRXdrX0NvbnRleHQoYWRvcHRXSyhXS0NvbnRleHRD
cmVhdGVXaXRoSW5qZWN0ZWRCdW5kbGVQYXRoKHBhdGhSZWYuZ2V0KCkpKSk7CisgICAgcmV0dXJu
IEV3a19Db250ZXh0OjpjcmVhdGUocGF0aCkubGVha1JlZigpOwogfQogCiBFaW5hX0Jvb2wgZXdr
X2NvbnRleHRfdXJsX3NjaGVtZV9yZWdpc3RlcihFd2tfQ29udGV4dCogZXdrQ29udGV4dCwgY29u
c3QgY2hhciogc2NoZW1lLCBFd2tfVXJsX1NjaGVtZV9SZXF1ZXN0X0NiIGNhbGxiYWNrLCB2b2lk
KiB1c2VyRGF0YSkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXdrQ29u
dGV4dCwgZmFsc2UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzY2hlbWUs
IGZhbHNlKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2FsbGJhY2ssIGZh
bHNlKTsKLQotICAgIGV3a0NvbnRleHQtPnVybFNjaGVtZUhhbmRsZXJzLnNldChTdHJpbmc6OmZy
b21VVEY4KHNjaGVtZSksIEV3a19VcmxfU2NoZW1lX0hhbmRsZXIoY2FsbGJhY2ssIHVzZXJEYXRh
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrU2NoZW1lKEFkb3B0V0ssIFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHNjaGVtZSkpOwotICAgIFdLU291cFJlcXVlc3RNYW5h
Z2VyUmVnaXN0ZXJVUklTY2hlbWUoZXdrQ29udGV4dC0+cmVxdWVzdE1hbmFnZXIuZ2V0KCksIHdr
U2NoZW1lLmdldCgpKTsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBld2tDb250ZXh0
LT5yZWdpc3RlclVSTFNjaGVtZShzY2hlbWUsIGNhbGxiYWNrLCB1c2VyRGF0YSk7CiB9CiAKIHZv
aWQgZXdrX2NvbnRleHRfdmlicmF0aW9uX2NsaWVudF9jYWxsYmFja3Nfc2V0KEV3a19Db250ZXh0
KiBld2tDb250ZXh0LCBFd2tfVmlicmF0aW9uX0NsaWVudF9WaWJyYXRlX0NiIHZpYnJhdGUsIEV3
a19WaWJyYXRpb25fQ2xpZW50X1ZpYnJhdGlvbl9DYW5jZWxfQ2IgY2FuY2VsLCB2b2lkKiBkYXRh
KQpAQCAtMzA2LDcgKzMyMSw3IEBAIHZvaWQgZXdrX2NvbnRleHRfdmlicmF0aW9uX2NsaWVudF9j
YWxsYmFja3Nfc2V0KEV3a19Db250ZXh0KiBld2tDb250ZXh0LCBFd2tfVmliCiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4oZXdrQ29udGV4dCk7CiAKICNpZiBFTkFCTEUoVklCUkFUSU9O
KQotICAgIGV3a0NvbnRleHQtPnZpYnJhdGlvblByb3ZpZGVyLT5zZXRWaWJyYXRpb25DbGllbnRD
YWxsYmFja3ModmlicmF0ZSwgY2FuY2VsLCBkYXRhKTsKKyAgICBld2tDb250ZXh0LT52aWJyYXRp
b25Qcm92aWRlcigpLT5zZXRWaWJyYXRpb25DbGllbnRDYWxsYmFja3ModmlicmF0ZSwgY2FuY2Vs
LCBkYXRhKTsKICNlbmRpZgogfQogCkBAIC0zMTQsMjggKzMyOSwyMCBAQCB2b2lkIGV3a19jb250
ZXh0X2hpc3RvcnlfY2FsbGJhY2tzX3NldChFd2tfQ29udGV4dCogZXdrQ29udGV4dCwgRXdrX0hp
c3RvcnlfTmF2aQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0NvbnRleHQp
OwogCi0gICAgZXdrQ29udGV4dC0+aGlzdG9yeUNsaWVudC5uYXZpZ2F0ZV9mdW5jID0gbmF2aWdh
dGU7Ci0gICAgZXdrQ29udGV4dC0+aGlzdG9yeUNsaWVudC5jbGllbnRfcmVkaXJlY3RfZnVuYyA9
IGNsaWVudFJlZGlyZWN0OwotICAgIGV3a0NvbnRleHQtPmhpc3RvcnlDbGllbnQuc2VydmVyX3Jl
ZGlyZWN0X2Z1bmMgPSBzZXJ2ZXJSZWRpcmVjdDsKLSAgICBld2tDb250ZXh0LT5oaXN0b3J5Q2xp
ZW50LnRpdGxlX3VwZGF0ZV9mdW5jID0gdGl0bGVVcGRhdGU7Ci0gICAgZXdrQ29udGV4dC0+aGlz
dG9yeUNsaWVudC5wb3B1bGF0ZV92aXNpdGVkX2xpbmtzX2Z1bmMgPSBwb3B1bGF0ZVZpc2l0ZWRM
aW5rczsKLSAgICBld2tDb250ZXh0LT5oaXN0b3J5Q2xpZW50LnVzZXJfZGF0YSA9IGRhdGE7Cisg
ICAgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQmIGhpc3RvcnlDbGllbnQgPSBld2tDb250ZXh0
LT5oaXN0b3J5Q2xpZW50KCk7CisgICAgaGlzdG9yeUNsaWVudC5uYXZpZ2F0ZV9mdW5jID0gbmF2
aWdhdGU7CisgICAgaGlzdG9yeUNsaWVudC5jbGllbnRfcmVkaXJlY3RfZnVuYyA9IGNsaWVudFJl
ZGlyZWN0OworICAgIGhpc3RvcnlDbGllbnQuc2VydmVyX3JlZGlyZWN0X2Z1bmMgPSBzZXJ2ZXJS
ZWRpcmVjdDsKKyAgICBoaXN0b3J5Q2xpZW50LnRpdGxlX3VwZGF0ZV9mdW5jID0gdGl0bGVVcGRh
dGU7CisgICAgaGlzdG9yeUNsaWVudC5wb3B1bGF0ZV92aXNpdGVkX2xpbmtzX2Z1bmMgPSBwb3B1
bGF0ZVZpc2l0ZWRMaW5rczsKKyAgICBoaXN0b3J5Q2xpZW50LnVzZXJfZGF0YSA9IGRhdGE7CiB9
CiAKLWNvbnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50KiBld2tfY29udGV4dF9oaXN0b3J5
X2NsaWVudF9nZXQoY29uc3QgRXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCi17Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV3a0NvbnRleHQsIDApOwotCi0gICAgcmV0dXJuICZl
d2tDb250ZXh0LT5oaXN0b3J5Q2xpZW50OwotfQogCiB2b2lkIGV3a19jb250ZXh0X3Zpc2l0ZWRf
bGlua19hZGQoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIGNvbnN0IGNoYXIqIHZpc2l0ZWRVUkwp
CiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZXdrQ29udGV4dCk7Ci0gICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odmlzaXRlZFVSTCk7Ci0KLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gd2tWaXNpdGVkVVJMKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKHZpc2l0ZWRVUkwpKTsKLSAgICBXS0NvbnRleHRBZGRWaXNpdGVkTGluayhld2tDb250
ZXh0LT5jb250ZXh0LmdldCgpLCB3a1Zpc2l0ZWRVUkwuZ2V0KCkpOworICAgIGV3a0NvbnRleHQt
PmFkZFZpc2l0ZWRMaW5rKHZpc2l0ZWRVUkwpOwogfQogCiAvLyBFd2tfQ2FjaGVfTW9kZWwgZW51
bSB2YWxpZGF0aW9uCkBAIC0zNDYsMTQgKzM1MywxNiBAQCBDT01QSUxFX0FTU0VSVF9NQVRDSElO
R19FTlVNKEVXS19DQUNIRV9NT0RFTF9QUklNQVJZX1dFQkJST1dTRVIsIGtXS0NhY2hlTW9kZWxQ
cgogRWluYV9Cb29sIGV3a19jb250ZXh0X2NhY2hlX21vZGVsX3NldChFd2tfQ29udGV4dCogZXdr
Q29udGV4dCwgRXdrX0NhY2hlX01vZGVsIGNhY2hlTW9kZWwpCiB7CiAgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKGV3a0NvbnRleHQsIGZhbHNlKTsKLSAgICBXS0NvbnRleHRTZXRD
YWNoZU1vZGVsKGV3a19jb250ZXh0X1dLQ29udGV4dF9nZXQoZXdrQ29udGV4dCksIHN0YXRpY19j
YXN0PEV3a19DYWNoZV9Nb2RlbD4oY2FjaGVNb2RlbCkpOworCisgICAgZXdrQ29udGV4dC0+c2V0
Q2FjaGVNb2RlbChjYWNoZU1vZGVsKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCiBFd2tfQ2Fj
aGVfTW9kZWwgZXdrX2NvbnRleHRfY2FjaGVfbW9kZWxfZ2V0KGNvbnN0IEV3a19Db250ZXh0KiBl
d2tDb250ZXh0KQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChld2tDb250
ZXh0LCBFV0tfQ0FDSEVfTU9ERUxfRE9DVU1FTlRfVklFV0VSKTsKLSAgICBXS0NhY2hlTW9kZWwg
Y2FjaGVNb2RlbCA9IFdLQ29udGV4dEdldENhY2hlTW9kZWwoZXdrX2NvbnRleHRfV0tDb250ZXh0
X2dldChld2tDb250ZXh0KSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEV3a19DYWNoZV9Nb2Rl
bD4oY2FjaGVNb2RlbCk7CisKKyAgICByZXR1cm4gZXdrQ29udGV4dC0+Y2FjaGVNb2RlbCgpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29u
dGV4dF9kb3dubG9hZF9jbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50LmNwcAppbmRleCAxMTY0N2I0Li4yZmE4NmU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dF9kb3dubG9hZF9jbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudC5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgc3Rh
dGljIGlubGluZSBFd2tfQ29udGV4dCogdG9Fd2tDb250ZXh0KGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCiAKIHN0YXRpYyBXS1N0cmluZ1JlZiBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRG
aWxlbmFtZShXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tTdHJpbmdS
ZWYgZmlsZW5hbWUsIGJvb2wqIC8qYWxsb3dPdmVyd3JpdGUqLywgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKIHsKLSAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rv
d25sb2FkX2pvYl9nZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCB0b0ltcGwod2tEb3dubG9h
ZCktPmRvd25sb2FkSUQoKSk7CisgICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSB0b0V3
a0NvbnRleHQoY2xpZW50SW5mbyktPmRvd25sb2FkSm9iKHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93
bmxvYWRJRCgpKTsKICAgICBBU1NFUlQoZG93bmxvYWQpOwogCiAgICAgZG93bmxvYWQtPnNldFN1
Z2dlc3RlZEZpbGVOYW1lKHRvSW1wbChmaWxlbmFtZSktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OwpAQCAtNjcsMTQgKzY3LDE0IEBAIHN0YXRpYyBXS1N0cmluZ1JlZiBkZWNpZGVEZXN0aW5hdGlv
bldpdGhTdWdnZXN0ZWRGaWxlbmFtZShXS0NvbnRleHRSZWYsIFdLRG93bmxvCiAKIHN0YXRpYyB2
b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3du
bG9hZCwgV0tVUkxSZXNwb25zZVJlZiB3a1Jlc3BvbnNlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQogewotICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxv
YWRfam9iX2dldCh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIHRvSW1wbCh3a0Rvd25sb2FkKS0+
ZG93bmxvYWRJRCgpKTsKKyAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IHRvRXdrQ29u
dGV4dChjbGllbnRJbmZvKS0+ZG93bmxvYWRKb2IodG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9h
ZElEKCkpOwogICAgIEFTU0VSVChkb3dubG9hZCk7CiAgICAgZG93bmxvYWQtPnNldFJlc3BvbnNl
KEV3a19VcmxfUmVzcG9uc2U6OmNyZWF0ZSh3a1Jlc3BvbnNlKSk7CiB9CiAKIHN0YXRpYyB2b2lk
IGRpZENyZWF0ZURlc3RpbmF0aW9uKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25s
b2FkLCBXS1N0cmluZ1JlZiAvKnBhdGgqLywgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKLSAg
ICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9n
ZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2Fk
SUQoKSk7CisgICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSB0b0V3a0NvbnRleHQoY2xp
ZW50SW5mbyktPmRvd25sb2FkSm9iKHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpKTsK
ICAgICBBU1NFUlQoZG93bmxvYWQpOwogCiAgICAgZG93bmxvYWQtPnNldFN0YXRlKEVXS19ET1dO
TE9BRF9KT0JfU1RBVEVfRE9XTkxPQURJTkcpOwpAQCAtODIsNyArODIsNyBAQCBzdGF0aWMgdm9p
ZCBkaWRDcmVhdGVEZXN0aW5hdGlvbihXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3du
bG9hZCwgV0tTdHJpbgogCiBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlRGF0YShXS0NvbnRleHRSZWYs
IFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgdWludDY0X3QgbGVuZ3RoLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQogewotICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkID0gZXdrX2NvbnRl
eHRfZG93bmxvYWRfam9iX2dldCh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIHRvSW1wbCh3a0Rv
d25sb2FkKS0+ZG93bmxvYWRJRCgpKTsKKyAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9
IHRvRXdrQ29udGV4dChjbGllbnRJbmZvKS0+ZG93bmxvYWRKb2IodG9JbXBsKHdrRG93bmxvYWQp
LT5kb3dubG9hZElEKCkpOwogICAgIEFTU0VSVChkb3dubG9hZCk7CiAgICAgZG93bmxvYWQtPmlu
Y3JlbWVudFJlY2VpdmVkRGF0YShsZW5ndGgpOwogfQpAQCAtOTAsMzUgKzkwLDM1IEBAIHN0YXRp
YyB2b2lkIGRpZFJlY2VpdmVEYXRhKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25s
b2FkLCB1aW50NjRfdCBsZW5nCiBzdGF0aWMgdm9pZCBkaWRGYWlsKFdLQ29udGV4dFJlZiwgV0tE
b3dubG9hZFJlZiB3a0Rvd25sb2FkLCBXS0Vycm9yUmVmIGVycm9yLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQogewogICAgIHVpbnQ2NF90IGRvd25sb2FkSWQgPSB0b0ltcGwod2tEb3dubG9hZCkt
PmRvd25sb2FkSUQoKTsKLSAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250
ZXh0X2Rvd25sb2FkX2pvYl9nZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElk
KTsKKyAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IHRvRXdrQ29udGV4dChjbGllbnRJ
bmZvKS0+ZG93bmxvYWRKb2IoZG93bmxvYWRJZCk7CiAgICAgQVNTRVJUKGRvd25sb2FkKTsKIAog
ICAgIE93blB0cjxFd2tfRXJyb3I+IGV3a0Vycm9yID0gRXdrX0Vycm9yOjpjcmVhdGUoZXJyb3Ip
OwogICAgIGRvd25sb2FkLT5zZXRTdGF0ZShFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0ZBSUxFRCk7
CiAgICAgZXdrX3ZpZXdfZG93bmxvYWRfam9iX2ZhaWxlZChkb3dubG9hZC0+dmlldygpLCBkb3du
bG9hZCwgZXdrRXJyb3IuZ2V0KCkpOwotICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9yZW1v
dmUodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsKKyAgICB0b0V3a0NvbnRl
eHQoY2xpZW50SW5mbyktPnJlbW92ZURvd25sb2FkSm9iKGRvd25sb2FkSWQpOwogfQogCiBzdGF0
aWMgdm9pZCBkaWRDYW5jZWwoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQs
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7CiAgICAgdWludDY0X3QgZG93bmxvYWRJZCA9IHRv
SW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpOwotICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRv
d25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX2dldCh0b0V3a0NvbnRleHQoY2xpZW50
SW5mbyksIGRvd25sb2FkSWQpOworICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkID0gdG9F
d2tDb250ZXh0KGNsaWVudEluZm8pLT5kb3dubG9hZEpvYihkb3dubG9hZElkKTsKICAgICBBU1NF
UlQoZG93bmxvYWQpOwogCiAgICAgZG93bmxvYWQtPnNldFN0YXRlKEVXS19ET1dOTE9BRF9KT0Jf
U1RBVEVfQ0FOQ0VMTEVEKTsKICAgICBld2tfdmlld19kb3dubG9hZF9qb2JfY2FuY2VsbGVkKGRv
d25sb2FkLT52aWV3KCksIGRvd25sb2FkKTsKLSAgICBld2tfY29udGV4dF9kb3dubG9hZF9qb2Jf
cmVtb3ZlKHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwgZG93bmxvYWRJZCk7CisgICAgdG9Fd2tD
b250ZXh0KGNsaWVudEluZm8pLT5yZW1vdmVEb3dubG9hZEpvYihkb3dubG9hZElkKTsKIH0KIAog
c3RhdGljIHZvaWQgZGlkRmluaXNoKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25s
b2FkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewogICAgIHVpbnQ2NF90IGRvd25sb2FkSWQg
PSB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKTsKLSAgICBFd2tfRG93bmxvYWRfSm9i
KiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9nZXQodG9Fd2tDb250ZXh0KGNs
aWVudEluZm8pLCBkb3dubG9hZElkKTsKKyAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9
IHRvRXdrQ29udGV4dChjbGllbnRJbmZvKS0+ZG93bmxvYWRKb2IoZG93bmxvYWRJZCk7CiAgICAg
QVNTRVJUKGRvd25sb2FkKTsKIAogICAgIGRvd25sb2FkLT5zZXRTdGF0ZShFV0tfRE9XTkxPQURf
Sk9CX1NUQVRFX0ZJTklTSEVEKTsKICAgICBld2tfdmlld19kb3dubG9hZF9qb2JfZmluaXNoZWQo
ZG93bmxvYWQtPnZpZXcoKSwgZG93bmxvYWQpOwotICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX2pv
Yl9yZW1vdmUodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsKKyAgICB0b0V3
a0NvbnRleHQoY2xpZW50SW5mbyktPnJlbW92ZURvd25sb2FkSm9iKGRvd25sb2FkSWQpOwogfQog
CiB2b2lkIGV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9hdHRhY2goRXdrX0NvbnRleHQqIGV3
a0NvbnRleHQpCkBAIC0xMzYsNyArMTM2LDcgQEAgdm9pZCBld2tfY29udGV4dF9kb3dubG9hZF9j
bGllbnRfYXR0YWNoKEV3a19Db250ZXh0KiBld2tDb250ZXh0KQogICAgIHdrRG93bmxvYWRDbGll
bnQuZGlkRmFpbCA9IGRpZEZhaWw7CiAgICAgd2tEb3dubG9hZENsaWVudC5kaWRGaW5pc2ggPSBk
aWRGaW5pc2g7CiAKLSAgICBXS0NvbnRleHRTZXREb3dubG9hZENsaWVudChld2tfY29udGV4dF9X
S0NvbnRleHRfZ2V0KGV3a0NvbnRleHQpLCAmd2tEb3dubG9hZENsaWVudCk7CisgICAgV0tDb250
ZXh0U2V0RG93bmxvYWRDbGllbnQoZXdrQ29udGV4dC0+d2tDb250ZXh0KCksICZ3a0Rvd25sb2Fk
Q2xpZW50KTsKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudC5jcHAKaW5kZXggMTAzOGI0
ZC4uNGY3OTNiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50LmNwcApAQCAtNDEsNzUgKzQx
LDcwIEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKLXN0YXRpYyBpbmxpbmUgY29uc3Qg
RXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQqIGdldEV3a0hpc3RvcnlEZWxlZ2F0ZShjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQorc3RhdGljIGlubGluZSBjb25zdCBFd2tfQ29udGV4dF9IaXN0b3J5
X0NsaWVudCYgZ2V0RXdrSGlzdG9yeUNsaWVudChjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewog
ICAgIEFTU0VSVChjbGllbnRJbmZvKTsKLSAgICByZXR1cm4gZXdrX2NvbnRleHRfaGlzdG9yeV9j
bGllbnRfZ2V0KHN0YXRpY19jYXN0PGNvbnN0IEV3a19Db250ZXh0Kj4oY2xpZW50SW5mbykpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBFd2tfQ29udGV4dCo+KGNsaWVudEluZm8pLT5o
aXN0b3J5Q2xpZW50KCk7CiB9CiAKIHN0YXRpYyB2b2lkIGRpZE5hdmlnYXRlV2l0aE5hdmlnYXRp
b25EYXRhKFdLQ29udGV4dFJlZiwgV0tQYWdlUmVmIHBhZ2UsIFdLTmF2aWdhdGlvbkRhdGFSZWYg
bmF2aWdhdGlvbkRhdGEsIFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7Ci0g
ICAgY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQqIGhpc3RvcnlEZWxlZ2F0ZSA9IGdl
dEV3a0hpc3RvcnlEZWxlZ2F0ZShjbGllbnRJbmZvKTsKLSAgICBBU1NFUlQoaGlzdG9yeURlbGVn
YXRlKTsKKyAgICBjb25zdCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCYgaGlzdG9yeUNsaWVu
dCA9IGdldEV3a0hpc3RvcnlDbGllbnQoY2xpZW50SW5mbyk7CiAKLSAgICBpZiAoIWhpc3RvcnlE
ZWxlZ2F0ZS0+bmF2aWdhdGVfZnVuYykKKyAgICBpZiAoIWhpc3RvcnlDbGllbnQubmF2aWdhdGVf
ZnVuYykKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPEV3a19OYXZpZ2F0aW9uX0RhdGE+
IG5hdmlnYXRpb25EYXRhRXdrID0gRXdrX05hdmlnYXRpb25fRGF0YTo6Y3JlYXRlKG5hdmlnYXRp
b25EYXRhKTsKLSAgICBoaXN0b3J5RGVsZWdhdGUtPm5hdmlnYXRlX2Z1bmMoZXdrX3ZpZXdfZnJv
bV9wYWdlX2dldCh0b0ltcGwocGFnZSkpLCBuYXZpZ2F0aW9uRGF0YUV3ay5nZXQoKSwgaGlzdG9y
eURlbGVnYXRlLT51c2VyX2RhdGEpOworICAgIGhpc3RvcnlDbGllbnQubmF2aWdhdGVfZnVuYyhl
d2tfdmlld19mcm9tX3BhZ2VfZ2V0KHRvSW1wbChwYWdlKSksIG5hdmlnYXRpb25EYXRhRXdrLmdl
dCgpLCBoaXN0b3J5Q2xpZW50LnVzZXJfZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIGRpZFBlcmZv
cm1DbGllbnRSZWRpcmVjdChXS0NvbnRleHRSZWYsIFdLUGFnZVJlZiBwYWdlLCBXS1VSTFJlZiBz
b3VyY2VVUkwsIFdLVVJMUmVmIGRlc3RpbmF0aW9uVVJMLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKQogewotICAgIGNvbnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50KiBo
aXN0b3J5RGVsZWdhdGUgPSBnZXRFd2tIaXN0b3J5RGVsZWdhdGUoY2xpZW50SW5mbyk7Ci0gICAg
QVNTRVJUKGhpc3RvcnlEZWxlZ2F0ZSk7CisgICAgY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9D
bGllbnQmIGhpc3RvcnlDbGllbnQgPSBnZXRFd2tIaXN0b3J5Q2xpZW50KGNsaWVudEluZm8pOwog
Ci0gICAgaWYgKCFoaXN0b3J5RGVsZWdhdGUtPmNsaWVudF9yZWRpcmVjdF9mdW5jKQorICAgIGlm
ICghaGlzdG9yeUNsaWVudC5jbGllbnRfcmVkaXJlY3RfZnVuYykKICAgICAgICAgcmV0dXJuOwog
CiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHNvdXJjZVVSTFN0cmluZyhzb3VyY2VVUkwpOwogICAg
IFdLRWluYVNoYXJlZFN0cmluZyBkZXN0aW5hdGlvblVSTFN0cmluZyhkZXN0aW5hdGlvblVSTCk7
CiAKLSAgICBoaXN0b3J5RGVsZWdhdGUtPmNsaWVudF9yZWRpcmVjdF9mdW5jKGV3a192aWV3X2Zy
b21fcGFnZV9nZXQodG9JbXBsKHBhZ2UpKSwgc291cmNlVVJMU3RyaW5nLCBkZXN0aW5hdGlvblVS
TFN0cmluZywgaGlzdG9yeURlbGVnYXRlLT51c2VyX2RhdGEpOworICAgIGhpc3RvcnlDbGllbnQu
Y2xpZW50X3JlZGlyZWN0X2Z1bmMoZXdrX3ZpZXdfZnJvbV9wYWdlX2dldCh0b0ltcGwocGFnZSkp
LCBzb3VyY2VVUkxTdHJpbmcsIGRlc3RpbmF0aW9uVVJMU3RyaW5nLCBoaXN0b3J5Q2xpZW50LnVz
ZXJfZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIGRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdChXS0Nv
bnRleHRSZWYsIFdLUGFnZVJlZiBwYWdlLCBXS1VSTFJlZiBzb3VyY2VVUkwsIFdLVVJMUmVmIGRl
c3RpbmF0aW9uVVJMLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotICAg
IGNvbnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50KiBoaXN0b3J5RGVsZWdhdGUgPSBnZXRF
d2tIaXN0b3J5RGVsZWdhdGUoY2xpZW50SW5mbyk7Ci0gICAgQVNTRVJUKGhpc3RvcnlEZWxlZ2F0
ZSk7CisgICAgY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQmIGhpc3RvcnlDbGllbnQg
PSBnZXRFd2tIaXN0b3J5Q2xpZW50KGNsaWVudEluZm8pOwogCi0gICAgaWYgKCFoaXN0b3J5RGVs
ZWdhdGUtPnNlcnZlcl9yZWRpcmVjdF9mdW5jKQorICAgIGlmICghaGlzdG9yeUNsaWVudC5zZXJ2
ZXJfcmVkaXJlY3RfZnVuYykKICAgICAgICAgcmV0dXJuOwogCiAgICAgV0tFaW5hU2hhcmVkU3Ry
aW5nIHNvdXJjZVVSTFN0cmluZyhzb3VyY2VVUkwpOwogICAgIFdLRWluYVNoYXJlZFN0cmluZyBk
ZXN0aW5hdGlvblVSTFN0cmluZyhkZXN0aW5hdGlvblVSTCk7CiAKLSAgICBoaXN0b3J5RGVsZWdh
dGUtPnNlcnZlcl9yZWRpcmVjdF9mdW5jKGV3a192aWV3X2Zyb21fcGFnZV9nZXQodG9JbXBsKHBh
Z2UpKSwgc291cmNlVVJMU3RyaW5nLCBkZXN0aW5hdGlvblVSTFN0cmluZywgaGlzdG9yeURlbGVn
YXRlLT51c2VyX2RhdGEpOworICAgIGhpc3RvcnlDbGllbnQuc2VydmVyX3JlZGlyZWN0X2Z1bmMo
ZXdrX3ZpZXdfZnJvbV9wYWdlX2dldCh0b0ltcGwocGFnZSkpLCBzb3VyY2VVUkxTdHJpbmcsIGRl
c3RpbmF0aW9uVVJMU3RyaW5nLCBoaXN0b3J5Q2xpZW50LnVzZXJfZGF0YSk7CiB9CiAKIHN0YXRp
YyB2b2lkIGRpZFVwZGF0ZUhpc3RvcnlUaXRsZShXS0NvbnRleHRSZWYsIFdLUGFnZVJlZiBwYWdl
LCBXS1N0cmluZ1JlZiB0aXRsZSwgV0tVUkxSZWYgVVJMLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKQogewotICAgIGNvbnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50KiBo
aXN0b3J5RGVsZWdhdGUgPSBnZXRFd2tIaXN0b3J5RGVsZWdhdGUoY2xpZW50SW5mbyk7Ci0gICAg
QVNTRVJUKGhpc3RvcnlEZWxlZ2F0ZSk7CisgICAgY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9D
bGllbnQmIGhpc3RvcnlDbGllbnQgPSBnZXRFd2tIaXN0b3J5Q2xpZW50KGNsaWVudEluZm8pOwog
Ci0gICAgaWYgKCFoaXN0b3J5RGVsZWdhdGUtPnRpdGxlX3VwZGF0ZV9mdW5jKQorICAgIGlmICgh
aGlzdG9yeUNsaWVudC50aXRsZV91cGRhdGVfZnVuYykKICAgICAgICAgcmV0dXJuOwogCiAgICAg
V0tFaW5hU2hhcmVkU3RyaW5nIHRpdGxlU3RyaW5nKHRpdGxlKTsKICAgICBXS0VpbmFTaGFyZWRT
dHJpbmcgc3RyaW5nVVJMKFVSTCk7CiAKLSAgICBoaXN0b3J5RGVsZWdhdGUtPnRpdGxlX3VwZGF0
ZV9mdW5jKGV3a192aWV3X2Zyb21fcGFnZV9nZXQodG9JbXBsKHBhZ2UpKSwgdGl0bGVTdHJpbmcs
IHN0cmluZ1VSTCwgaGlzdG9yeURlbGVnYXRlLT51c2VyX2RhdGEpOworICAgIGhpc3RvcnlDbGll
bnQudGl0bGVfdXBkYXRlX2Z1bmMoZXdrX3ZpZXdfZnJvbV9wYWdlX2dldCh0b0ltcGwocGFnZSkp
LCB0aXRsZVN0cmluZywgc3RyaW5nVVJMLCBoaXN0b3J5Q2xpZW50LnVzZXJfZGF0YSk7CiB9CiAK
IHN0YXRpYyB2b2lkIHBvcHVsYXRlVmlzaXRlZExpbmtzKFdLQ29udGV4dFJlZiwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKIHsKLSAgICBjb25zdCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCog
aGlzdG9yeURlbGVnYXRlID0gZ2V0RXdrSGlzdG9yeURlbGVnYXRlKGNsaWVudEluZm8pOwotICAg
IEFTU0VSVChoaXN0b3J5RGVsZWdhdGUpOworICAgIGNvbnN0IEV3a19Db250ZXh0X0hpc3Rvcnlf
Q2xpZW50JiBoaXN0b3J5Q2xpZW50ID0gZ2V0RXdrSGlzdG9yeUNsaWVudChjbGllbnRJbmZvKTsK
IAotICAgIGlmICghaGlzdG9yeURlbGVnYXRlLT5wb3B1bGF0ZV92aXNpdGVkX2xpbmtzX2Z1bmMp
CisgICAgaWYgKCFoaXN0b3J5Q2xpZW50LnBvcHVsYXRlX3Zpc2l0ZWRfbGlua3NfZnVuYykKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaGlzdG9yeURlbGVnYXRlLT5wb3B1bGF0ZV92aXNpdGVkX2xp
bmtzX2Z1bmMoaGlzdG9yeURlbGVnYXRlLT51c2VyX2RhdGEpOworICAgIGhpc3RvcnlDbGllbnQu
cG9wdWxhdGVfdmlzaXRlZF9saW5rc19mdW5jKGhpc3RvcnlDbGllbnQudXNlcl9kYXRhKTsKIH0K
IAogdm9pZCBld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9hdHRhY2goRXdrX0NvbnRleHQqIGV3
a0NvbnRleHQpCkBAIC0xMjYsNSArMTIxLDUgQEAgdm9pZCBld2tfY29udGV4dF9oaXN0b3J5X2Ns
aWVudF9hdHRhY2goRXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCiAgICAgd2tIaXN0b3J5Q2xpZW50
LmRpZFVwZGF0ZUhpc3RvcnlUaXRsZSA9IGRpZFVwZGF0ZUhpc3RvcnlUaXRsZTsKICAgICB3a0hp
c3RvcnlDbGllbnQucG9wdWxhdGVWaXNpdGVkTGlua3MgPSBwb3B1bGF0ZVZpc2l0ZWRMaW5rczsK
IAotICAgIFdLQ29udGV4dFNldEhpc3RvcnlDbGllbnQoZXdrX2NvbnRleHRfV0tDb250ZXh0X2dl
dChld2tDb250ZXh0KSwgJndrSGlzdG9yeUNsaWVudCk7CisgICAgV0tDb250ZXh0U2V0SGlzdG9y
eUNsaWVudChld2tDb250ZXh0LT53a0NvbnRleHQoKSwgJndrSGlzdG9yeUNsaWVudCk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9w
cml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9w
cml2YXRlLmgKaW5kZXggNzA1NzM5YS4uY2ExMjU0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaApAQCAtMjAsMjIg
KzIwLDkwIEBACiAjaWZuZGVmIGV3a19jb250ZXh0X3ByaXZhdGVfaAogI2RlZmluZSBld2tfY29u
dGV4dF9wcml2YXRlX2gKIAotI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CisjaW5jbHVkZSAi
V0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJld2tfY29u
dGV4dF9oaXN0b3J5X2NsaWVudF9wcml2YXRlLmgiCiAKLXR5cGVkZWYgc3RydWN0IEV3a19Db250
ZXh0IEV3a19Db250ZXh0OwotdHlwZWRlZiBzdHJ1Y3QgRXdrX0Rvd25sb2FkX0pvYiBFd2tfRG93
bmxvYWRfSm9iOwotdHlwZWRlZiBzdHJ1Y3QgRXdrX1VybF9TY2hlbWVfUmVxdWVzdCBFd2tfVXJs
X1NjaGVtZV9SZXF1ZXN0OwotdHlwZWRlZiBzdHJ1Y3QgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGll
bnQgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQ7CitjbGFzcyBFd2tfRG93bmxvYWRfSm9iOwor
Y2xhc3MgRXdrX1VybF9TY2hlbWVfUmVxdWVzdDsKK2NsYXNzIEV3a19Db29raWVfTWFuYWdlcjsK
K2NsYXNzIEV3a19GYXZpY29uX0RhdGFiYXNlOworI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykK
K2NsYXNzIEJhdHRlcnlQcm92aWRlcjsKKyNlbmRpZgorI2lmIEVOQUJMRShORVRXT1JLX0lORk8p
CitjbGFzcyBOZXR3b3JrSW5mb1Byb3ZpZGVyOworI2VuZGlmCisjaWYgRU5BQkxFKFZJQlJBVElP
TikKK2NsYXNzIFZpYnJhdGlvblByb3ZpZGVyOworI2VuZGlmCiAKLVdLQ29udGV4dFJlZiBld2tf
Y29udGV4dF9XS0NvbnRleHRfZ2V0KGNvbnN0IEV3a19Db250ZXh0Kik7Ci1Fd2tfQ29udGV4dCog
ZXdrX2NvbnRleHRfbmV3X2Zyb21fV0tDb250ZXh0KFdLQ29udGV4dFJlZik7Ci1XS1NvdXBSZXF1
ZXN0TWFuYWdlclJlZiBld2tfY29udGV4dF9yZXF1ZXN0X21hbmFnZXJfZ2V0KGNvbnN0IEV3a19D
b250ZXh0Kik7Ci12b2lkIGV3a19jb250ZXh0X3VybF9zY2hlbWVfcmVxdWVzdF9yZWNlaXZlZChF
d2tfQ29udGV4dCosIEV3a19VcmxfU2NoZW1lX1JlcXVlc3QqKTsKK2NsYXNzIEV3a19Db250ZXh0
IDogcHVibGljIFJlZkNvdW50ZWQ8RXdrX0NvbnRleHQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxFd2tfQ29udGV4dD4gY3JlYXRlKFdLQ29udGV4dFJlZiBjb250ZXh0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFd2tfQ29udGV4dChjb250ZXh0KSk7Cisg
ICAgfQogCi12b2lkIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9hZGQoRXdrX0NvbnRleHQqLCBF
d2tfRG93bmxvYWRfSm9iKik7Ci1Fd2tfRG93bmxvYWRfSm9iKiBld2tfY29udGV4dF9kb3dubG9h
ZF9qb2JfZ2V0KGNvbnN0IEV3a19Db250ZXh0KiwgdWludDY0X3QgZG93bmxvYWRJZCk7Ci12b2lk
IGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9yZW1vdmUoRXdrX0NvbnRleHQqLCB1aW50NjRfdCBk
b3dubG9hZElkKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxFd2tfQ29udGV4dD4gY3JlYXRlKGNv
bnN0IGNoYXIqIGluamVjdGVkQnVuZGxlUGF0aCk7CiAKLWNvbnN0IEV3a19Db250ZXh0X0hpc3Rv
cnlfQ2xpZW50KiBld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9nZXQoY29uc3QgRXdrX0NvbnRl
eHQqKTsKKyAgICBzdGF0aWMgRXdrX0NvbnRleHQqIGRlZmF1bHRDb250ZXh0KCk7CisKKyAgICB+
RXdrX0NvbnRleHQoKTsKKworICAgIEV3a19Db29raWVfTWFuYWdlciogY29va2llTWFuYWdlcigp
OworCisgICAgRXdrX0Zhdmljb25fRGF0YWJhc2UqIGZhdmljb25EYXRhYmFzZSgpOworCisgICAg
Ym9vbCByZWdpc3RlclVSTFNjaGVtZShjb25zdCBjaGFyKiBzY2hlbWUsIEV3a19VcmxfU2NoZW1l
X1JlcXVlc3RfQ2IgY2FsbGJhY2ssIHZvaWQgKnVzZXJfZGF0YSk7CisKKyNpZiBFTkFCTEUoVklC
UkFUSU9OKQorICAgIFBhc3NSZWZQdHI8VmlicmF0aW9uUHJvdmlkZXI+IHZpYnJhdGlvblByb3Zp
ZGVyKCk7CisjZW5kaWYKKworICAgIHZvaWQgYWRkVmlzaXRlZExpbmsoY29uc3QgY2hhciogdmlz
aXRlZFVSTCk7CisKKyAgICB2b2lkIHNldENhY2hlTW9kZWwoRXdrX0NhY2hlX01vZGVsKTsKKwor
ICAgIEV3a19DYWNoZV9Nb2RlbCBjYWNoZU1vZGVsKCkgY29uc3Q7CisKKyAgICBXS0NvbnRleHRS
ZWYgd2tDb250ZXh0KCk7CisKKyAgICBXS1NvdXBSZXF1ZXN0TWFuYWdlclJlZiByZXF1ZXN0TWFu
YWdlcigpOworCisgICAgdm9pZCB1cmxTY2hlbWVSZXF1ZXN0UmVjZWl2ZWQoRXdrX1VybF9TY2hl
bWVfUmVxdWVzdCopOworCisgICAgdm9pZCBhZGREb3dubG9hZEpvYihFd2tfRG93bmxvYWRfSm9i
Kik7CisgICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWRKb2IodWludDY0X3QgZG93bmxvYWRJ
ZCk7CisgICAgdm9pZCByZW1vdmVEb3dubG9hZEpvYih1aW50NjRfdCBkb3dubG9hZElkKTsKKwor
ICAgIGNvbnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50JiBoaXN0b3J5Q2xpZW50KCkgY29u
c3QgIHsgcmV0dXJuIG1faGlzdG9yeUNsaWVudDsgfQorICAgIEV3a19Db250ZXh0X0hpc3Rvcnlf
Q2xpZW50JiBoaXN0b3J5Q2xpZW50KCkgeyByZXR1cm4gbV9oaXN0b3J5Q2xpZW50OyB9CisKK3By
aXZhdGU6CisgICAgZXhwbGljaXQgRXdrX0NvbnRleHQoV0tDb250ZXh0UmVmKTsKKworICAgIFdL
UmV0YWluUHRyPFdLQ29udGV4dFJlZj4gbV9jb250ZXh0OworCisgICAgT3duUHRyPEV3a19Db29r
aWVfTWFuYWdlcj4gbV9jb29raWVNYW5hZ2VyOworICAgIE93blB0cjxFd2tfRmF2aWNvbl9EYXRh
YmFzZT4gbV9mYXZpY29uRGF0YWJhc2U7CisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorICAg
IFJlZlB0cjxCYXR0ZXJ5UHJvdmlkZXI+IG1fYmF0dGVyeVByb3ZpZGVyOworI2VuZGlmCisjaWYg
RU5BQkxFKE5FVFdPUktfSU5GTykKKyAgICBSZWZQdHI8TmV0d29ya0luZm9Qcm92aWRlcj4gbV9u
ZXR3b3JrSW5mb1Byb3ZpZGVyOworI2VuZGlmCisjaWYgRU5BQkxFKFZJQlJBVElPTikKKyAgICBS
ZWZQdHI8VmlicmF0aW9uUHJvdmlkZXI+IG1fdmlicmF0aW9uUHJvdmlkZXI7CisjZW5kaWYKKyAg
ICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8RXdrX0Rvd25sb2FkX0pvYj4gPiBtX2Rvd25sb2Fk
Sm9iczsKKworICAgIFdLUmV0YWluUHRyPFdLU291cFJlcXVlc3RNYW5hZ2VyUmVmPiBtX3JlcXVl
c3RNYW5hZ2VyOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgY2xhc3MgRXdrX1VybF9T
Y2hlbWVfSGFuZGxlcj4gVVJMU2NoZW1lSGFuZGxlck1hcDsKKyAgICBVUkxTY2hlbWVIYW5kbGVy
TWFwIG1fdXJsU2NoZW1lSGFuZGxlcnM7CisKKyAgICBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVu
dCBtX2hpc3RvcnlDbGllbnQ7Cit9OwogCiAjZW5kaWYgLy8gZXdrX2NvbnRleHRfcHJpdmF0ZV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dF9yZXF1ZXN0X21hbmFnZXJfY2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19jb250ZXh0X3JlcXVlc3RfbWFuYWdlcl9jbGllbnQuY3BwCmluZGV4IGIyNTcz
Y2EuLmZlODAxY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb250ZXh0X3JlcXVlc3RfbWFuYWdlcl9jbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3JlcXVlc3RfbWFuYWdlcl9jbGllbnQu
Y3BwCkBAIC00MSw3ICs0MSw3IEBAIHN0YXRpYyBpbmxpbmUgRXdrX0NvbnRleHQqIHRvRXdrQ29u
dGV4dChjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVVSSVJl
cXVlc3QoV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWYgc291cFJlcXVlc3RNYW5hZ2VyUmVmLCBXS1VS
TFJlZiB1cmxSZWYsIFdLUGFnZVJlZiwgdWludDY0X3QgcmVxdWVzdElELCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQogewogICAgIFJlZlB0cjxFd2tfVXJsX1NjaGVtZV9SZXF1ZXN0PiBzY2hlbWVS
ZXF1ZXN0ID0gRXdrX1VybF9TY2hlbWVfUmVxdWVzdDo6Y3JlYXRlKHNvdXBSZXF1ZXN0TWFuYWdl
clJlZiwgdXJsUmVmLCByZXF1ZXN0SUQpOwotICAgIGV3a19jb250ZXh0X3VybF9zY2hlbWVfcmVx
dWVzdF9yZWNlaXZlZCh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIHNjaGVtZVJlcXVlc3QuZ2V0
KCkpOworICAgIHRvRXdrQ29udGV4dChjbGllbnRJbmZvKS0+dXJsU2NoZW1lUmVxdWVzdFJlY2Vp
dmVkKHNjaGVtZVJlcXVlc3QuZ2V0KCkpOwogfQogCiB2b2lkIGV3a19jb250ZXh0X3JlcXVlc3Rf
bWFuYWdlcl9jbGllbnRfYXR0YWNoKEV3a19Db250ZXh0KiBjb250ZXh0KQpAQCAtNTMsNSArNTMs
NSBAQCB2b2lkIGV3a19jb250ZXh0X3JlcXVlc3RfbWFuYWdlcl9jbGllbnRfYXR0YWNoKEV3a19D
b250ZXh0KiBjb250ZXh0KQogICAgIHdrUmVxdWVzdE1hbmFnZXJDbGllbnQuY2xpZW50SW5mbyA9
IGNvbnRleHQ7CiAgICAgd2tSZXF1ZXN0TWFuYWdlckNsaWVudC5kaWRSZWNlaXZlVVJJUmVxdWVz
dCA9IGRpZFJlY2VpdmVVUklSZXF1ZXN0OwogCi0gICAgV0tTb3VwUmVxdWVzdE1hbmFnZXJTZXRD
bGllbnQoZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2dldChjb250ZXh0KSwgJndrUmVxdWVz
dE1hbmFnZXJDbGllbnQpOworICAgIFdLU291cFJlcXVlc3RNYW5hZ2VyU2V0Q2xpZW50KGNvbnRl
eHQtPnJlcXVlc3RNYW5hZ2VyKCksICZ3a1JlcXVlc3RNYW5hZ2VyQ2xpZW50KTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAppbmRleCBkODYwOGFh
Li5kNTZjMjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Zp
ZXcuY3BwCkBAIC0xMzIsNyArMTMyLDcgQEAgc3RydWN0IEV3a19WaWV3X1ByaXZhdGVfRGF0YSB7
CiAgICAgT3duUHRyPEV3a19TZXR0aW5ncz4gc2V0dGluZ3M7CiAgICAgYm9vbCBhcmVNb3VzZUV2
ZW50c0VuYWJsZWQ7CiAgICAgV0tSZXRhaW5QdHI8V0tDb2xvclBpY2tlclJlc3VsdExpc3RlbmVy
UmVmPiBjb2xvclBpY2tlclJlc3VsdExpc3RlbmVyOwotICAgIEV3a19Db250ZXh0KiBjb250ZXh0
OworICAgIFJlZlB0cjxFd2tfQ29udGV4dD4gY29udGV4dDsKICNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQogICAgIGJvb2wgYXJlVG91Y2hFdmVudHNFbmFibGVkOwogI2VuZGlmCkBAIC0xNTIsNyAr
MTUyLDYgQEAgc3RydWN0IEV3a19WaWV3X1ByaXZhdGVfRGF0YSB7CiAKICAgICBFd2tfVmlld19Q
cml2YXRlX0RhdGEoKQogICAgICAgICA6IGFyZU1vdXNlRXZlbnRzRW5hYmxlZChmYWxzZSkKLSAg
ICAgICAgLCBjb250ZXh0KDApCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICAgICAgLCBh
cmVUb3VjaEV2ZW50c0VuYWJsZWQoZmFsc2UpCiAjZW5kaWYKQEAgLTE3MSw3ICsxNzAsNyBAQCBz
dHJ1Y3QgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhIHsKICAgICB+RXdrX1ZpZXdfUHJpdmF0ZV9EYXRh
KCkKICAgICB7CiAgICAgICAgIC8qIFVucmVnaXN0ZXIgaWNvbiBjaGFuZ2UgY2FsbGJhY2sgKi8K
LSAgICAgICAgRXdrX0Zhdmljb25fRGF0YWJhc2UqIGljb25EYXRhYmFzZSA9IGV3a19jb250ZXh0
X2Zhdmljb25fZGF0YWJhc2VfZ2V0KGNvbnRleHQpOworICAgICAgICBFd2tfRmF2aWNvbl9EYXRh
YmFzZSogaWNvbkRhdGFiYXNlID0gY29udGV4dC0+ZmF2aWNvbkRhdGFiYXNlKCk7CiAgICAgICAg
IGljb25EYXRhYmFzZS0+dW53YXRjaENoYW5nZXMoX2V3a192aWV3X29uX2Zhdmljb25fY2hhbmdl
ZCk7CiAKICAgICAgICAgdm9pZCogaXRlbTsKQEAgLTQ3Nyw3ICs0NzYsNiBAQCBzdGF0aWMgRXdr
X1ZpZXdfUHJpdmF0ZV9EYXRhKiBfZXdrX3ZpZXdfcHJpdl9uZXcoRXdrX1ZpZXdfU21hcnRfRGF0
YSogc21hcnREYXRhKQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfcHJpdl9kZWwoRXdrX1ZpZXdf
UHJpdmF0ZV9EYXRhKiBwcml2KQogewotICAgIGV3a19jb250ZXh0X3VucmVmKHByaXYtPmNvbnRl
eHQpOwogICAgIGRlbGV0ZSBwcml2OwogfQogCkBAIC03OTUsNyArNzkzLDcgQEAgc3RhdGljIGlu
bGluZSBFdmFzX1NtYXJ0KiBfZXdrX3ZpZXdfc21hcnRfY2xhc3NfbmV3KHZvaWQpCiAgICAgcmV0
dXJuIHNtYXJ0OwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfaW5pdGlhbGl6ZShFdmFzX09i
amVjdCogZXdrVmlldywgRXdrX0NvbnRleHQqIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VH
cm91cFJlZikKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19pbml0aWFsaXplKEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBQYXNzUmVmUHRyPEV3a19Db250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBw
YWdlR3JvdXBSZWYpCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
bWFydERhdGEpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHBy
aXYpOwpAQCAtODA3LDkgKzgwNSw5IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19pbml0aWFsaXpl
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfQ29udGV4dCogY29udGV4dCwgV0tQCiAgICAgcHJp
di0+cGFnZUNsaWVudCA9IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGUoZXdrVmlldyk7CiAKICAgICBp
ZiAocGFnZUdyb3VwUmVmKQotICAgICAgICBwcml2LT5wYWdlUHJveHkgPSB0b0ltcGwoZXdrX2Nv
bnRleHRfV0tDb250ZXh0X2dldChjb250ZXh0KSktPmNyZWF0ZVdlYlBhZ2UocHJpdi0+cGFnZUNs
aWVudC5nZXQoKSwgdG9JbXBsKHBhZ2VHcm91cFJlZikpOworICAgICAgICBwcml2LT5wYWdlUHJv
eHkgPSB0b0ltcGwoY29udGV4dC0+d2tDb250ZXh0KCkpLT5jcmVhdGVXZWJQYWdlKHByaXYtPnBh
Z2VDbGllbnQuZ2V0KCksIHRvSW1wbChwYWdlR3JvdXBSZWYpKTsKICAgICBlbHNlCi0gICAgICAg
IHByaXYtPnBhZ2VQcm94eSA9IHRvSW1wbChld2tfY29udGV4dF9XS0NvbnRleHRfZ2V0KGNvbnRl
eHQpKS0+Y3JlYXRlV2ViUGFnZShwcml2LT5wYWdlQ2xpZW50LmdldCgpLCBXZWJQYWdlR3JvdXA6
OmNyZWF0ZSgpLmdldCgpKTsKKyAgICAgICAgcHJpdi0+cGFnZVByb3h5ID0gdG9JbXBsKGNvbnRl
eHQtPndrQ29udGV4dCgpKS0+Y3JlYXRlV2ViUGFnZShwcml2LT5wYWdlQ2xpZW50LmdldCgpLCBX
ZWJQYWdlR3JvdXA6OmNyZWF0ZSgpLmdldCgpKTsKIAogICAgIGFkZFRvUGFnZVZpZXdNYXAoZXdr
Vmlldyk7CiAKQEAgLTgyMiw3ICs4MjAsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfaW5pdGlh
bGl6ZShFdmFzX09iamVjdCogZXdrVmlldywgRXdrX0NvbnRleHQqIGNvbnRleHQsIFdLUAogCiAg
ICAgcHJpdi0+YmFja0ZvcndhcmRMaXN0ID0gRXdrX0JhY2tfRm9yd2FyZF9MaXN0OjpjcmVhdGUo
dG9BUEkocHJpdi0+cGFnZVByb3h5LT5iYWNrRm9yd2FyZExpc3QoKSkpOwogICAgIHByaXYtPnNl
dHRpbmdzID0gYWRvcHRQdHIobmV3IEV3a19TZXR0aW5ncyhXS1BhZ2VHcm91cEdldFByZWZlcmVu
Y2VzKFdLUGFnZUdldFBhZ2VHcm91cCh0b0FQSShwcml2LT5wYWdlUHJveHkuZ2V0KCkpKSkpKTsK
LSAgICBwcml2LT5jb250ZXh0ID0gZXdrX2NvbnRleHRfcmVmKGNvbnRleHQpOworICAgIHByaXYt
PmNvbnRleHQgPSBjb250ZXh0OwogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAg
IHByaXYtPnBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnQgPSBQYWdlVmlld3BvcnRDb250cm9s
bGVyQ2xpZW50RWZsOjpjcmVhdGUoZXdrVmlldyk7CkBAIC04NDEsNyArODM5LDcgQEAgc3RhdGlj
IHZvaWQgX2V3a192aWV3X2luaXRpYWxpemUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19Db250
ZXh0KiBjb250ZXh0LCBXS1AKICNlbmRpZgogCiAgICAgLyogTGlzdGVuIGZvciBmYXZpY29uIGNo
YW5nZXMgKi8KLSAgICBFd2tfRmF2aWNvbl9EYXRhYmFzZSogaWNvbkRhdGFiYXNlID0gZXdrX2Nv
bnRleHRfZmF2aWNvbl9kYXRhYmFzZV9nZXQocHJpdi0+Y29udGV4dCk7CisgICAgRXdrX0Zhdmlj
b25fRGF0YWJhc2UqIGljb25EYXRhYmFzZSA9IHByaXYtPmNvbnRleHQtPmZhdmljb25EYXRhYmFz
ZSgpOwogICAgIGljb25EYXRhYmFzZS0+d2F0Y2hDaGFuZ2VzKEljb25DaGFuZ2VDYWxsYmFja0Rh
dGEoX2V3a192aWV3X29uX2Zhdmljb25fY2hhbmdlZCwgZXdrVmlldykpOwogfQogCkBAIC04ODEs
NyArODc5LDcgQEAgRXZhc19PYmplY3QqIGV3a192aWV3X2Jhc2VfYWRkKEV2YXMqIGNhbnZhcywg
V0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3UKICAgICBpZiAoIWV3a1ZpZXcpCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgX2V3a192aWV3X2luaXRpYWxpemUoZXdrVmlldywgZXdr
X2NvbnRleHRfbmV3X2Zyb21fV0tDb250ZXh0KGNvbnRleHRSZWYpLCBwYWdlR3JvdXBSZWYpOwor
ICAgIF9ld2tfdmlld19pbml0aWFsaXplKGV3a1ZpZXcsIEV3a19Db250ZXh0OjpjcmVhdGUoY29u
dGV4dFJlZiksIHBhZ2VHcm91cFJlZik7CiAKICAgICByZXR1cm4gZXdrVmlldzsKIH0KQEAgLTkw
MSw4ICs4OTksOSBAQCBFdmFzX09iamVjdCogZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXMqIGNhbnZh
cywgRXZhc19TbWFydCogc21hcnQsIEV3a19Db250ZXh0KiBjbwogICAgIHJldHVybiBld2tWaWV3
OwogfQogCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4dChFdmFzKiBjYW52
YXMsIEV3a19Db250ZXh0KiBjb250ZXh0KQorRXZhc19PYmplY3QqIGV3a192aWV3X2FkZF93aXRo
X2NvbnRleHQoRXZhcyogY2FudmFzLCBFd2tfQ29udGV4dCAqY29udGV4dCkKIHsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY29udGV4dCwgMCk7CiAgICAgcmV0dXJuIGV3a192
aWV3X3NtYXJ0X2FkZChjYW52YXMsIF9ld2tfdmlld19zbWFydF9jbGFzc19uZXcoKSwgY29udGV4
dCk7CiB9CiAKQEAgLTkxNiw3ICs5MTUsNyBAQCBFd2tfQ29udGV4dCogZXdrX3ZpZXdfY29udGV4
dF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOwogCi0gICAgcmV0dXJuIHByaXYtPmNvbnRleHQ7
CisgICAgcmV0dXJuIHByaXYtPmNvbnRleHQuZ2V0KCk7CiB9CiAKIC8qKgpAQCAtMTU3Myw3ICsx
NTcyLDcgQEAgdm9pZCBld2tfdmlld191cGRhdGVfaWNvbihFdmFzX09iamVjdCogZXdrVmlldykK
ICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CiAgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICBFd2tf
RmF2aWNvbl9EYXRhYmFzZSogaWNvbkRhdGFiYXNlID0gZXdrX2NvbnRleHRfZmF2aWNvbl9kYXRh
YmFzZV9nZXQocHJpdi0+Y29udGV4dCk7CisgICAgRXdrX0Zhdmljb25fRGF0YWJhc2UqIGljb25E
YXRhYmFzZSA9IHByaXYtPmNvbnRleHQtPmZhdmljb25EYXRhYmFzZSgpOwogICAgIEFTU0VSVChp
Y29uRGF0YWJhc2UpOwogCiAgICAgcHJpdi0+ZmF2aWNvblVSTCA9IGV3a19mYXZpY29uX2RhdGFi
YXNlX2ljb25fdXJsX2dldChpY29uRGF0YWJhc2UsIHByaXYtPnVybCk7Cg==
</data>
<flag name="review"
          id="183323"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169899</attachid>
            <date>2012-10-22 06:53:56 -0700</date>
            <delta_ts>2012-10-22 07:04:05 -0700</delta_ts>
            <desc>to be landed</desc>
            <filename>bug99594_v2</filename>
            <type>text/plain</type>
            <size>40153</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDFhZmM1Y2YxZTBiYmY1YWE1YjhjOWJlZjE0Y2M0ZmI0OGRiZDNmNzkKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
TW9uIE9jdCAyMiAxNjo1MTo0MSAyMDEyICswMzAwCgogICAgYnVnOTk1OTQKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggZTM0MTQzZS4uZThkMTIxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDEyLTEw
LTIyICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgor
CisgICAgICAgIFtFRkxdW1dLMl0gUmVmYWN0b3IgRXdrX0NvbnRleHQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5NTk0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCisKKyAgICAgICAgRXdrX0NvbnRleHQg
aXMgbm93IGVuY2Fwc3VsYXRlZCB0byBhIEMrKyBjbGFzcyBpbmhlcml0ZWQgZnJvbSBXVEY6OlJl
ZkNvdW50ZWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpoYW5kbGVEb3dubG9hZFJlcXVl
c3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcDoKKyAgICAg
ICAgKEV3a19Db250ZXh0OjpFd2tfQ29udGV4dCk6CisgICAgICAgIChFd2tfQ29udGV4dDo6fkV3
a19Db250ZXh0KToKKyAgICAgICAgKEV3a19Db250ZXh0OjpjcmVhdGUpOgorICAgICAgICAoRXdr
X0NvbnRleHQ6OmRlZmF1bHRDb250ZXh0KToKKyAgICAgICAgKEV3a19Db250ZXh0Ojpjb29raWVN
YW5hZ2VyKToKKyAgICAgICAgKEV3a19Db250ZXh0OjpmYXZpY29uRGF0YWJhc2UpOgorICAgICAg
ICAoRXdrX0NvbnRleHQ6OnJlZ2lzdGVyVVJMU2NoZW1lKToKKyAgICAgICAgKEV3a19Db250ZXh0
Ojp2aWJyYXRpb25Qcm92aWRlcik6CisgICAgICAgIChFd2tfQ29udGV4dDo6YWRkVmlzaXRlZExp
bmspOgorICAgICAgICAoRXdrX0NvbnRleHQ6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoRXdr
X0NvbnRleHQ6OmNhY2hlTW9kZWwpOgorICAgICAgICAoZXdrX2NvbnRleHRfcmVmKToKKyAgICAg
ICAgKGV3a19jb250ZXh0X3VucmVmKToKKyAgICAgICAgKGV3a19jb250ZXh0X2Nvb2tpZV9tYW5h
Z2VyX2dldCk6CisgICAgICAgIChld2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldCk6Cisg
ICAgICAgIChFd2tfQ29udGV4dDo6d2tDb250ZXh0KToKKyAgICAgICAgKEV3a19Db250ZXh0Ojph
ZGREb3dubG9hZEpvYik6CisgICAgICAgIChFd2tfQ29udGV4dDo6ZG93bmxvYWRKb2IpOgorICAg
ICAgICAoRXdrX0NvbnRleHQ6OnJlbW92ZURvd25sb2FkSm9iKToKKyAgICAgICAgKEV3a19Db250
ZXh0OjpyZXF1ZXN0TWFuYWdlcik6CisgICAgICAgIChFd2tfQ29udGV4dDo6dXJsU2NoZW1lUmVx
dWVzdFJlY2VpdmVkKToKKyAgICAgICAgKGV3a19jb250ZXh0X2RlZmF1bHRfZ2V0KToKKyAgICAg
ICAgKGV3a19jb250ZXh0X25ldyk6CisgICAgICAgIChld2tfY29udGV4dF9uZXdfd2l0aF9pbmpl
Y3RlZF9idW5kbGVfcGF0aCk6CisgICAgICAgIChld2tfY29udGV4dF91cmxfc2NoZW1lX3JlZ2lz
dGVyKToKKyAgICAgICAgKGV3a19jb250ZXh0X3ZpYnJhdGlvbl9jbGllbnRfY2FsbGJhY2tzX3Nl
dCk6CisgICAgICAgIChld2tfY29udGV4dF9oaXN0b3J5X2NhbGxiYWNrc19zZXQpOgorICAgICAg
ICAoZXdrX2NvbnRleHRfdmlzaXRlZF9saW5rX2FkZCk6CisgICAgICAgIChld2tfY29udGV4dF9j
YWNoZV9tb2RlbF9zZXQpOgorICAgICAgICAoZXdrX2NvbnRleHRfY2FjaGVfbW9kZWxfZ2V0KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnQu
Y3BwOgorICAgICAgICAoZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUpOgor
ICAgICAgICAoZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKGRpZENyZWF0ZURlc3RpbmF0
aW9uKToKKyAgICAgICAgKGRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKGRpZEZhaWwpOgorICAg
ICAgICAoZGlkQ2FuY2VsKToKKyAgICAgICAgKGRpZEZpbmlzaCk6CisgICAgICAgIChld2tfY29u
dGV4dF9kb3dubG9hZF9jbGllbnRfYXR0YWNoKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudC5jcHA6CisgICAgICAgIChnZXRFd2tIaXN0b3J5
Q2xpZW50KToKKyAgICAgICAgKGRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKToKKyAgICAg
ICAgKGRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdCk6CisgICAgICAgIChkaWRQZXJmb3JtU2VydmVy
UmVkaXJlY3QpOgorICAgICAgICAoZGlkVXBkYXRlSGlzdG9yeVRpdGxlKToKKyAgICAgICAgKHBv
cHVsYXRlVmlzaXRlZExpbmtzKToKKyAgICAgICAgKGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50
X2F0dGFjaCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0
ZS5oOgorICAgICAgICAoRXdrX0NvbnRleHQpOgorICAgICAgICAoRXdrX0NvbnRleHQ6OmNyZWF0
ZSk6CisgICAgICAgIChFd2tfQ29udGV4dDo6aGlzdG9yeUNsaWVudCk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudC5jcHA6Cisg
ICAgICAgIChkaWRSZWNlaXZlVVJJUmVxdWVzdCk6CisgICAgICAgIChld2tfY29udGV4dF9yZXF1
ZXN0X21hbmFnZXJfY2xpZW50X2F0dGFjaCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3ZpZXcuY3BwOgorICAgICAgICAoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAg
KEV3a19WaWV3X1ByaXZhdGVfRGF0YTo6RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAg
KEV3a19WaWV3X1ByaXZhdGVfRGF0YTo6fkV3a19WaWV3X1ByaXZhdGVfRGF0YSk6CisgICAgICAg
IChfZXdrX3ZpZXdfcHJpdl9kZWwpOgorICAgICAgICAoX2V3a192aWV3X2luaXRpYWxpemUpOgor
ICAgICAgICAoZXdrX3ZpZXdfYmFzZV9hZGQpOgorICAgICAgICAoZXdrX3ZpZXdfYWRkX3dpdGhf
Y29udGV4dCk6CisgICAgICAgIChld2tfdmlld19jb250ZXh0X2dldCk6CisgICAgICAgIChld2tf
dmlld191cGRhdGVfaWNvbik6CisKIDIwMTItMTAtMjIgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24u
aGF1c21hbm5AZGlnaWEuY29tPgogCiAgICAgICAgIFtRdF0gRml4IGJ1aWxkIHdpdGhvdXQgUXRX
aWRnZXRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdl
Q2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xp
ZW50SW1wbC5jcHAKaW5kZXggMGNhNzU2OS4uMDU0YmZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmNwcApAQCAtMjg0LDcgKzI4
NCw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmNvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVw
cmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmluCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpoYW5k
bGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSogZG93bmxvYWQpCiB7CiAgICAgUmVmUHRy
PEV3a19Eb3dubG9hZF9Kb2I+IGV3a0Rvd25sb2FkID0gRXdrX0Rvd25sb2FkX0pvYjo6Y3JlYXRl
KGRvd25sb2FkLCBtX3ZpZXdXaWRnZXQpOwotICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9h
ZGQoZXdrX3ZpZXdfY29udGV4dF9nZXQobV92aWV3V2lkZ2V0KSwgZXdrRG93bmxvYWQuZ2V0KCkp
OworICAgIGV3a192aWV3X2NvbnRleHRfZ2V0KG1fdmlld1dpZGdldCktPmFkZERvd25sb2FkSm9i
KGV3a0Rvd25sb2FkLmdldCgpKTsKIH0KIAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCmlu
ZGV4IDlmYjg4OTIuLmU1YWZjODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfY29udGV4dC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJXS1N0
cmluZy5oIgogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJJY29uRGF0YWJh
c2UuaCIKKyNpbmNsdWRlICJXZWJTb3VwUmVxdWVzdE1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUg
ImV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2Nv
bnRleHRfaGlzdG9yeV9jbGllbnRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19jb250ZXh0X3By
aXZhdGUuaCIKQEAgLTY5LDc1ICs3MCwxMzAgQEAgc3RydWN0IEV3a19VcmxfU2NoZW1lX0hhbmRs
ZXIgewogICAgIHsgfQogfTsKIAotdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgRXdrX1VybF9TY2hl
bWVfSGFuZGxlcj4gVVJMU2NoZW1lSGFuZGxlck1hcDsKLQotc3RydWN0IEV3a19Db250ZXh0IHsK
LSAgICB1bnNpZ25lZCBfX3JlZjsgLyoqPCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBvYmpl
Y3QgKi8KLSAgICBXS1JldGFpblB0cjxXS0NvbnRleHRSZWY+IGNvbnRleHQ7Ci0KLSAgICBPd25Q
dHI8RXdrX0Nvb2tpZV9NYW5hZ2VyPiBjb29raWVNYW5hZ2VyOwotICAgIE93blB0cjxFd2tfRmF2
aWNvbl9EYXRhYmFzZT4gZmF2aWNvbkRhdGFiYXNlOworRXdrX0NvbnRleHQ6OkV3a19Db250ZXh0
KFdLQ29udGV4dFJlZiBjb250ZXh0KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBt
X3JlcXVlc3RNYW5hZ2VyKFdLQ29udGV4dEdldFNvdXBSZXF1ZXN0TWFuYWdlcihjb250ZXh0KSkK
KyAgICAsIG1faGlzdG9yeUNsaWVudCgpCit7CiAjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQot
ICAgIFJlZlB0cjxCYXR0ZXJ5UHJvdmlkZXI+IGJhdHRlcnlQcm92aWRlcjsKKyAgICBtX2JhdHRl
cnlQcm92aWRlciA9IEJhdHRlcnlQcm92aWRlcjo6Y3JlYXRlKGNvbnRleHQpOwogI2VuZGlmCisK
ICNpZiBFTkFCTEUoTkVUV09SS19JTkZPKQotICAgIFJlZlB0cjxOZXR3b3JrSW5mb1Byb3ZpZGVy
PiBuZXR3b3JrSW5mb1Byb3ZpZGVyOworICAgIG1fbmV0d29ya0luZm9Qcm92aWRlciA9IE5ldHdv
cmtJbmZvUHJvdmlkZXI6OmNyZWF0ZShjb250ZXh0KTsKICNlbmRpZgorCiAjaWYgRU5BQkxFKFZJ
QlJBVElPTikKLSAgICBSZWZQdHI8VmlicmF0aW9uUHJvdmlkZXI+IHZpYnJhdGlvblByb3ZpZGVy
OworICAgIG1fdmlicmF0aW9uUHJvdmlkZXIgPSBWaWJyYXRpb25Qcm92aWRlcjo6Y3JlYXRlKGNv
bnRleHQpOwogI2VuZGlmCi0gICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPEV3a19Eb3dubG9h
ZF9Kb2I+ID4gZG93bmxvYWRKb2JzOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTb3VwUmVxdWVzdE1h
bmFnZXJSZWY+IHJlcXVlc3RNYW5hZ2VyOwotICAgIFVSTFNjaGVtZUhhbmRsZXJNYXAgdXJsU2No
ZW1lSGFuZGxlcnM7CiAKLSAgICBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCBoaXN0b3J5Q2xp
ZW50OworI2lmIEVOQUJMRShNRU1PUllfU0FNUExFUikKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFs
aXplTWVtb3J5U2FtcGxlciA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdCBjaGFyIGVudmlyb25t
ZW50VmFyaWFibGVbXSA9ICJTQU1QTEVfTUVNT1JZIjsKIAotICAgIEV3a19Db250ZXh0KFdLUmV0
YWluUHRyPFdLQ29udGV4dFJlZj4gY29udGV4dFJlZikKLSAgICAgICAgOiBfX3JlZigxKQotICAg
ICAgICAsIGNvbnRleHQoY29udGV4dFJlZikKLSAgICAgICAgLCByZXF1ZXN0TWFuYWdlcihXS0Nv
bnRleHRHZXRTb3VwUmVxdWVzdE1hbmFnZXIoY29udGV4dFJlZi5nZXQoKSkpCi0gICAgICAgICwg
aGlzdG9yeUNsaWVudCgpCi0gICAgewotI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKLSAgICAg
ICAgYmF0dGVyeVByb3ZpZGVyID0gQmF0dGVyeVByb3ZpZGVyOjpjcmVhdGUoY29udGV4dC5nZXQo
KSk7CisgICAgaWYgKCFpbml0aWFsaXplTWVtb3J5U2FtcGxlciAmJiBnZXRlbnYoZW52aXJvbm1l
bnRWYXJpYWJsZSkpIHsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IGludGVydmFs
KEFkb3B0V0ssIFdLRG91YmxlQ3JlYXRlKDAuMCkpOworICAgICAgICBXS0NvbnRleHRTdGFydE1l
bW9yeVNhbXBsZXIoY29udGV4dCwgaW50ZXJ2YWwuZ2V0KCkpOworICAgICAgICBpbml0aWFsaXpl
TWVtb3J5U2FtcGxlciA9IHRydWU7CisgICAgfQogI2VuZGlmCiAKLSNpZiBFTkFCTEUoTkVUV09S
S19JTkZPKQotICAgICAgICBuZXR3b3JrSW5mb1Byb3ZpZGVyID0gTmV0d29ya0luZm9Qcm92aWRl
cjo6Y3JlYXRlKGNvbnRleHQuZ2V0KCkpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIGV3
a190ZXh0X2NoZWNrZXJfY2xpZW50X2F0dGFjaCgpOworICAgIGlmIChld2tfc2V0dGluZ3NfY29u
dGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpKSB7CisgICAgICAgIC8vIExvYWQg
dGhlIGRlZmF1bHQgbGFuZ3VhZ2UuCisgICAgICAgIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2lu
Z19sYW5ndWFnZXNfc2V0KDApOworICAgIH0KICNlbmRpZgogCi0jaWYgRU5BQkxFKFZJQlJBVElP
TikKLSAgICAgICAgdmlicmF0aW9uUHJvdmlkZXIgPSBWaWJyYXRpb25Qcm92aWRlcjo6Y3JlYXRl
KGNvbnRleHQuZ2V0KCkpOwotI2VuZGlmCisgICAgZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2Vy
X2NsaWVudF9hdHRhY2godGhpcyk7CisgICAgZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50X2F0
dGFjaCh0aGlzKTsKKyAgICBld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9hdHRhY2godGhpcyk7
Cit9CiAKLSNpZiBFTkFCTEUoTUVNT1JZX1NBTVBMRVIpCi0gICAgICAgIHN0YXRpYyBib29sIGlu
aXRpYWxpemVNZW1vcnlTYW1wbGVyID0gZmFsc2U7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFy
IGVudmlyb25tZW50VmFyaWFibGVbXSA9ICJTQU1QTEVfTUVNT1JZIjsKK0V3a19Db250ZXh0Ojp+
RXdrX0NvbnRleHQoKQoreworfQogCi0gICAgICAgIGlmICghaW5pdGlhbGl6ZU1lbW9yeVNhbXBs
ZXIgJiYgZ2V0ZW52KGVudmlyb25tZW50VmFyaWFibGUpKSB7Ci0gICAgICAgICAgICBXS1JldGFp
blB0cjxXS0RvdWJsZVJlZj4gaW50ZXJ2YWwoQWRvcHRXSywgV0tEb3VibGVDcmVhdGUoMC4wKSk7
Ci0gICAgICAgICAgICBXS0NvbnRleHRTdGFydE1lbW9yeVNhbXBsZXIoY29udGV4dC5nZXQoKSwg
aW50ZXJ2YWwuZ2V0KCkpOwotICAgICAgICAgICAgaW5pdGlhbGl6ZU1lbW9yeVNhbXBsZXIgPSB0
cnVlOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5h
Z2VyX2NsaWVudF9hdHRhY2godGhpcyk7Ci0gICAgICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX2Ns
aWVudF9hdHRhY2godGhpcyk7Ci0gICAgICAgIGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X2F0
dGFjaCh0aGlzKTsKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICAgICAgZXdrX3RleHRfY2hl
Y2tlcl9jbGllbnRfYXR0YWNoKCk7Ci0gICAgICAgIGlmIChld2tfc2V0dGluZ3NfY29udGludW91
c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpKSB7Ci0gICAgICAgICAgICAvLyBMb2FkIHRo
ZSBkZWZhdWx0IGxhbmd1YWdlLgotICAgICAgICAgICAgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNr
aW5nX2xhbmd1YWdlc19zZXQoMCk7CitQYXNzUmVmUHRyPEV3a19Db250ZXh0PiBFd2tfQ29udGV4
dDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgaW5qZWN0ZWRCdW5kbGVQYXRoKQoreyAgIAorICAgIGlm
ICghZmlsZUV4aXN0cyhpbmplY3RlZEJ1bmRsZVBhdGgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpbmplY3RlZEJ1bmRsZVBhdGhXSyA9IGFkb3B0
V0sodG9Db3BpZWRBUEkoaW5qZWN0ZWRCdW5kbGVQYXRoKSk7CisgICAgV0tSZXRhaW5QdHI8V0tD
b250ZXh0UmVmPiBjb250ZXh0V0sgPSBhZG9wdFdLKFdLQ29udGV4dENyZWF0ZVdpdGhJbmplY3Rl
ZEJ1bmRsZVBhdGgoaW5qZWN0ZWRCdW5kbGVQYXRoV0suZ2V0KCkpKTsKKworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgRXdrX0NvbnRleHQoY29udGV4dFdLLmdldCgpKSk7Cit9CisKK1Bhc3NSZWZQ
dHI8RXdrX0NvbnRleHQ+IEV3a19Db250ZXh0OjpkZWZhdWx0Q29udGV4dCgpCit7CisgICAgc3Rh
dGljIFJlZlB0cjxFd2tfQ29udGV4dD4gZGVmYXVsdEluc3RhbmNlID0gY3JlYXRlKGFkb3B0V0so
V0tDb250ZXh0Q3JlYXRlKCkpLmdldCgpKTsKKworICAgIHJldHVybiBkZWZhdWx0SW5zdGFuY2U7
Cit9CisKK0V3a19Db29raWVfTWFuYWdlciogRXdrX0NvbnRleHQ6OmNvb2tpZU1hbmFnZXIoKQor
eworICAgIGlmICghbV9jb29raWVNYW5hZ2VyKQorICAgICAgICBtX2Nvb2tpZU1hbmFnZXIgPSBF
d2tfQ29va2llX01hbmFnZXI6OmNyZWF0ZShXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKG1fY29u
dGV4dC5nZXQoKSkpOworCisgICAgcmV0dXJuIG1fY29va2llTWFuYWdlci5nZXQoKTsKK30KKwor
RXdrX0Zhdmljb25fRGF0YWJhc2UqIEV3a19Db250ZXh0OjpmYXZpY29uRGF0YWJhc2UoKQorewor
ICAgIGlmICghbV9mYXZpY29uRGF0YWJhc2UpIHsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tJY29u
RGF0YWJhc2VSZWY+IGljb25EYXRhYmFzZSA9IFdLQ29udGV4dEdldEljb25EYXRhYmFzZShtX2Nv
bnRleHQuZ2V0KCkpOworICAgICAgICAvLyBTZXQgdGhlIGRhdGFiYXNlIHBhdGggaWYgaXQgaXMg
bm90IG9wZW4geWV0LgorICAgICAgICBpZiAoIXRvSW1wbChpY29uRGF0YWJhc2UuZ2V0KCkpLT5p
c09wZW4oKSkgeworICAgICAgICAgICAgV2ViQ29udGV4dCogd2ViQ29udGV4dCA9IHRvSW1wbCht
X2NvbnRleHQuZ2V0KCkpOworICAgICAgICAgICAgU3RyaW5nIGRhdGFiYXNlUGF0aCA9IHdlYkNv
bnRleHQtPmljb25EYXRhYmFzZVBhdGgoKSArICIvIiArIFdlYkNvcmU6Okljb25EYXRhYmFzZTo6
ZGVmYXVsdERhdGFiYXNlRmlsZW5hbWUoKTsKKyAgICAgICAgICAgIHdlYkNvbnRleHQtPnNldElj
b25EYXRhYmFzZVBhdGgoZGF0YWJhc2VQYXRoKTsKICAgICAgICAgfQotI2VuZGlmCisgICAgICAg
IG1fZmF2aWNvbkRhdGFiYXNlID0gRXdrX0Zhdmljb25fRGF0YWJhc2U6OmNyZWF0ZShpY29uRGF0
YWJhc2UuZ2V0KCkpOwogICAgIH0KLX07CisKKyAgICByZXR1cm4gbV9mYXZpY29uRGF0YWJhc2Uu
Z2V0KCk7Cit9CisKK2Jvb2wgRXdrX0NvbnRleHQ6OnJlZ2lzdGVyVVJMU2NoZW1lKGNvbnN0IFN0
cmluZyYgc2NoZW1lLCBFd2tfVXJsX1NjaGVtZV9SZXF1ZXN0X0NiIGNhbGxiYWNrLCB2b2lkKiB1
c2VyRGF0YSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2FsbGJhY2ss
IGZhbHNlKTsKKworICAgIG1fdXJsU2NoZW1lSGFuZGxlcnMuc2V0KHNjaGVtZSwgRXdrX1VybF9T
Y2hlbWVfSGFuZGxlcihjYWxsYmFjaywgdXNlckRhdGEpKTsKKyAgICB0b0ltcGwobV9yZXF1ZXN0
TWFuYWdlci5nZXQoKSktPnJlZ2lzdGVyVVJJU2NoZW1lKHNjaGVtZSk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworI2lmIEVOQUJMRShWSUJSQVRJT04pCitQYXNzUmVmUHRyPFZpYnJhdGlvblBy
b3ZpZGVyPiBFd2tfQ29udGV4dDo6dmlicmF0aW9uUHJvdmlkZXIoKQoreworICAgIHJldHVybiBt
X3ZpYnJhdGlvblByb3ZpZGVyOworfQorI2VuZGlmCisKK3ZvaWQgRXdrX0NvbnRleHQ6OmFkZFZp
c2l0ZWRMaW5rKGNvbnN0IFN0cmluZyYgdmlzaXRlZFVSTCkKK3sKKyAgICB0b0ltcGwobV9jb250
ZXh0LmdldCgpKS0+YWRkVmlzaXRlZExpbmsodmlzaXRlZFVSTCk7Cit9CisKK3ZvaWQgRXdrX0Nv
bnRleHQ6OnNldENhY2hlTW9kZWwoRXdrX0NhY2hlX01vZGVsIGNhY2hlTW9kZWwpCit7CisgICAg
V0tDb250ZXh0U2V0Q2FjaGVNb2RlbChtX2NvbnRleHQuZ2V0KCksIHN0YXRpY19jYXN0PEV3a19D
YWNoZV9Nb2RlbD4oY2FjaGVNb2RlbCkpOworfQorCitFd2tfQ2FjaGVfTW9kZWwgRXdrX0NvbnRl
eHQ6OmNhY2hlTW9kZWwoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxFd2tfQ2Fj
aGVfTW9kZWw+KFdLQ29udGV4dEdldENhY2hlTW9kZWwobV9jb250ZXh0LmdldCgpKSk7Cit9CiAK
IEV3a19Db250ZXh0KiBld2tfY29udGV4dF9yZWYoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCiB7
CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV3a0NvbnRleHQsIDApOwotICAg
ICsrZXdrQ29udGV4dC0+X19yZWY7CisKKyAgICBld2tDb250ZXh0LT5yZWYoKTsKIAogICAgIHJl
dHVybiBld2tDb250ZXh0OwogfQpAQCAtMTQ1LDcyICsyMDEsNDIgQEAgRXdrX0NvbnRleHQqIGV3
a19jb250ZXh0X3JlZihFd2tfQ29udGV4dCogZXdrQ29udGV4dCkKIHZvaWQgZXdrX2NvbnRleHRf
dW5yZWYoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4oZXdrQ29udGV4dCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fRkFMU0VfUkVUVVJOKGV3
a0NvbnRleHQtPl9fcmVmID4gMCk7Ci0KLSAgICBpZiAoLS1ld2tDb250ZXh0LT5fX3JlZikKLSAg
ICAgICAgcmV0dXJuOwogCi0gICAgZGVsZXRlIGV3a0NvbnRleHQ7CisgICAgZXdrQ29udGV4dC0+
ZGVyZWYoKTsKIH0KIAogRXdrX0Nvb2tpZV9NYW5hZ2VyKiBld2tfY29udGV4dF9jb29raWVfbWFu
YWdlcl9nZXQoY29uc3QgRXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCiB7CiAgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKGV3a0NvbnRleHQsIDApOwogCi0gICAgaWYgKCFld2tDb250
ZXh0LT5jb29raWVNYW5hZ2VyKQotICAgICAgICBjb25zdF9jYXN0PEV3a19Db250ZXh0Kj4oZXdr
Q29udGV4dCktPmNvb2tpZU1hbmFnZXIgPSBFd2tfQ29va2llX01hbmFnZXI6OmNyZWF0ZShXS0Nv
bnRleHRHZXRDb29raWVNYW5hZ2VyKGV3a0NvbnRleHQtPmNvbnRleHQuZ2V0KCkpKTsKLQotICAg
IHJldHVybiBld2tDb250ZXh0LT5jb29raWVNYW5hZ2VyLmdldCgpOworICAgIHJldHVybiBjb25z
dF9jYXN0PEV3a19Db250ZXh0Kj4oZXdrQ29udGV4dCktPmNvb2tpZU1hbmFnZXIoKTsKIH0KIAog
RXdrX0Zhdmljb25fRGF0YWJhc2UqIGV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2VfZ2V0KGNv
bnN0IEV3a19Db250ZXh0KiBld2tDb250ZXh0KQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChld2tDb250ZXh0LCAwKTsKIAotICAgIGlmICghZXdrQ29udGV4dC0+ZmF2aWNv
bkRhdGFiYXNlKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLSWNvbkRhdGFiYXNlUmVmPiBpY29u
RGF0YWJhc2UgPSBXS0NvbnRleHRHZXRJY29uRGF0YWJhc2UoZXdrQ29udGV4dC0+Y29udGV4dC5n
ZXQoKSk7Ci0gICAgICAgIC8vIFNldCB0aGUgZGF0YWJhc2UgcGF0aCBpZiBpdCBpcyBub3Qgb3Bl
biB5ZXQuCi0gICAgICAgIGlmICghdG9JbXBsKGljb25EYXRhYmFzZS5nZXQoKSktPmlzT3Blbigp
KSB7Ci0gICAgICAgICAgICBXZWJDb250ZXh0KiB3ZWJDb250ZXh0ID0gdG9JbXBsKGV3a0NvbnRl
eHQtPmNvbnRleHQuZ2V0KCkpOwotICAgICAgICAgICAgU3RyaW5nIGRhdGFiYXNlUGF0aCA9IHdl
YkNvbnRleHQtPmljb25EYXRhYmFzZVBhdGgoKSArICIvIiArIFdlYkNvcmU6Okljb25EYXRhYmFz
ZTo6ZGVmYXVsdERhdGFiYXNlRmlsZW5hbWUoKTsKLSAgICAgICAgICAgIHdlYkNvbnRleHQtPnNl
dEljb25EYXRhYmFzZVBhdGgoZGF0YWJhc2VQYXRoKTsKLSAgICAgICAgfQotICAgICAgICBjb25z
dF9jYXN0PEV3a19Db250ZXh0Kj4oZXdrQ29udGV4dCktPmZhdmljb25EYXRhYmFzZSA9IEV3a19G
YXZpY29uX0RhdGFiYXNlOjpjcmVhdGUoaWNvbkRhdGFiYXNlLmdldCgpKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gZXdrQ29udGV4dC0+ZmF2aWNvbkRhdGFiYXNlLmdldCgpOworICAgIHJldHVybiBj
b25zdF9jYXN0PEV3a19Db250ZXh0Kj4oZXdrQ29udGV4dCktPmZhdmljb25EYXRhYmFzZSgpOwog
fQogCi1XS0NvbnRleHRSZWYgZXdrX2NvbnRleHRfV0tDb250ZXh0X2dldChjb25zdCBFd2tfQ29u
dGV4dCogZXdrQ29udGV4dCkKK1dLQ29udGV4dFJlZiBFd2tfQ29udGV4dDo6d2tDb250ZXh0KCkK
IHsKLSAgICByZXR1cm4gZXdrQ29udGV4dC0+Y29udGV4dC5nZXQoKTsKLX0KLQotLyoqCi0gKiBA
aW50ZXJuYWwKLSAqIENyZWF0ZSBFd2tfQ29udGV4dCBmcm9tIFdLQ29udGV4dC4KLSAqLwotRXdr
X0NvbnRleHQqIGV3a19jb250ZXh0X25ld19mcm9tX1dLQ29udGV4dChXS0NvbnRleHRSZWYgY29u
dGV4dFJlZikKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY29udGV4dFJl
ZiwgMCk7Ci0KLSAgICByZXR1cm4gbmV3IEV3a19Db250ZXh0KGNvbnRleHRSZWYpOworICAgIHJl
dHVybiBtX2NvbnRleHQuZ2V0KCk7CiB9CiAKIC8qKgogICogQGludGVybmFsCiAgKiBSZWdpc3Rl
cnMgdGhhdCBhIG5ldyBkb3dubG9hZCBoYXMgYmVlbiByZXF1ZXN0ZWQuCiAgKi8KLXZvaWQgZXdr
X2NvbnRleHRfZG93bmxvYWRfam9iX2FkZChFd2tfQ29udGV4dCogZXdrQ29udGV4dCwgRXdrX0Rv
d25sb2FkX0pvYiogZXdrRG93bmxvYWQpCit2b2lkIEV3a19Db250ZXh0OjphZGREb3dubG9hZEpv
YihFd2tfRG93bmxvYWRfSm9iKiBld2tEb3dubG9hZCkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihld2tDb250ZXh0KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihl
d2tEb3dubG9hZCk7CiAKICAgICB1aW50NjRfdCBkb3dubG9hZElkID0gZXdrRG93bmxvYWQtPmlk
KCk7Ci0gICAgaWYgKGV3a0NvbnRleHQtPmRvd25sb2FkSm9icy5jb250YWlucyhkb3dubG9hZElk
KSkKKyAgICBpZiAobV9kb3dubG9hZEpvYnMuY29udGFpbnMoZG93bmxvYWRJZCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGV3a0NvbnRleHQtPmRvd25sb2FkSm9icy5hZGQoZG93bmxvYWRJZCwg
ZXdrRG93bmxvYWQpOworICAgIG1fZG93bmxvYWRKb2JzLmFkZChkb3dubG9hZElkLCBld2tEb3du
bG9hZCk7CiB9CiAKIC8qKgpAQCAtMjE4LDExICsyNDQsOSBAQCB2b2lkIGV3a19jb250ZXh0X2Rv
d25sb2FkX2pvYl9hZGQoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIEV3a19Eb3dubG9hZF9Kb2Iq
IGV3awogICogUmV0dXJucyB0aGUgI0V3a19Eb3dubG9hZF9Kb2Igd2l0aCB0aGUgZ2l2ZW4gQGEg
ZG93bmxvYWRJZCwgb3IKICAqIEBjIDAgaW4gY2FzZSBvZiBmYWlsdXJlLgogICovCi1Fd2tfRG93
bmxvYWRfSm9iKiBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KGNvbnN0IEV3a19Db250ZXh0
KiBld2tDb250ZXh0LCB1aW50NjRfdCBkb3dubG9hZElkKQorRXdrX0Rvd25sb2FkX0pvYiogRXdr
X0NvbnRleHQ6OmRvd25sb2FkSm9iKHVpbnQ2NF90IGRvd25sb2FkSWQpCiB7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV3a0NvbnRleHQsIDApOwotCi0gICAgcmV0dXJuIGV3
a0NvbnRleHQtPmRvd25sb2FkSm9icy5nZXQoZG93bmxvYWRJZCkuZ2V0KCk7CisgICAgcmV0dXJu
IG1fZG93bmxvYWRKb2JzLmdldChkb3dubG9hZElkKS5nZXQoKTsKIH0KIAogLyoqCkBAIC0yMzAs
MTAgKzI1NCw5IEBAIEV3a19Eb3dubG9hZF9Kb2IqIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9n
ZXQoY29uc3QgRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIHVpCiAgKiBSZW1vdmVzIHRoZSAjRXdr
X0Rvd25sb2FkX0pvYiB3aXRoIHRoZSBnaXZlbiBAYSBkb3dubG9hZElkIGZyb20gdGhlIGludGVy
bmFsCiAgKiBIYXNoTWFwLgogICovCi12b2lkIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9yZW1v
dmUoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIHVpbnQ2NF90IGRvd25sb2FkSWQpCit2b2lkIEV3
a19Db250ZXh0OjpyZW1vdmVEb3dubG9hZEpvYih1aW50NjRfdCBkb3dubG9hZElkKQogewotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0NvbnRleHQpOwotICAgIGV3a0NvbnRleHQt
PmRvd25sb2FkSm9icy5yZW1vdmUoZG93bmxvYWRJZCk7CisgICAgbV9kb3dubG9hZEpvYnMucmVt
b3ZlKGRvd25sb2FkSWQpOwogfQogCiAvKioKQEAgLTI0MSw5ICsyNjQsOSBAQCB2b2lkIGV3a19j
b250ZXh0X2Rvd25sb2FkX2pvYl9yZW1vdmUoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIHVpbnQ2
NF90IGRvd25sb2FkSQogICoKICAqIEBwYXJhbSBld2tDb250ZXh0IGEgI0V3a19Db250ZXh0IG9i
amVjdC4KICAqLwotV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWYgZXdrX2NvbnRleHRfcmVxdWVzdF9t
YW5hZ2VyX2dldChjb25zdCBFd2tfQ29udGV4dCogZXdrQ29udGV4dCkKK1dLU291cFJlcXVlc3RN
YW5hZ2VyUmVmIEV3a19Db250ZXh0OjpyZXF1ZXN0TWFuYWdlcigpCiB7Ci0gICAgcmV0dXJuIGV3
a0NvbnRleHQtPnJlcXVlc3RNYW5hZ2VyLmdldCgpOworICAgIHJldHVybiBtX3JlcXVlc3RNYW5h
Z2VyLmdldCgpOwogfQogCiAvKioKQEAgLTI1MywxMiArMjc2LDExIEBAIFdLU291cFJlcXVlc3RN
YW5hZ2VyUmVmIGV3a19jb250ZXh0X3JlcXVlc3RfbWFuYWdlcl9nZXQoY29uc3QgRXdrX0NvbnRl
eHQqIGV3a0NvCiAgKiBAcGFyYW0gZXdrQ29udGV4dCBhICNFd2tfQ29udGV4dCBvYmplY3QuCiAg
KiBAcGFyYW0gc2NoZW1lUmVxdWVzdCBhICNFd2tfVXJsX1NjaGVtZV9SZXF1ZXN0IG9iamVjdC4K
ICAqLwotdm9pZCBld2tfY29udGV4dF91cmxfc2NoZW1lX3JlcXVlc3RfcmVjZWl2ZWQoRXdrX0Nv
bnRleHQqIGV3a0NvbnRleHQsIEV3a19VcmxfU2NoZW1lX1JlcXVlc3QqIHNjaGVtZVJlcXVlc3Qp
Cit2b2lkIEV3a19Db250ZXh0Ojp1cmxTY2hlbWVSZXF1ZXN0UmVjZWl2ZWQoRXdrX1VybF9TY2hl
bWVfUmVxdWVzdCogc2NoZW1lUmVxdWVzdCkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihld2tDb250ZXh0KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzY2hlbWVS
ZXF1ZXN0KTsKIAotICAgIEV3a19VcmxfU2NoZW1lX0hhbmRsZXIgaGFuZGxlciA9IGV3a0NvbnRl
eHQtPnVybFNjaGVtZUhhbmRsZXJzLmdldChzY2hlbWVSZXF1ZXN0LT5zY2hlbWUoKSk7CisgICAg
RXdrX1VybF9TY2hlbWVfSGFuZGxlciBoYW5kbGVyID0gbV91cmxTY2hlbWVIYW5kbGVycy5nZXQo
c2NoZW1lUmVxdWVzdC0+c2NoZW1lKCkpOwogICAgIGlmICghaGFuZGxlci5jYWxsYmFjaykKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0yNjcsMzggKzI4OSwyNyBAQCB2b2lkIGV3a19jb250ZXh0X3Vy
bF9zY2hlbWVfcmVxdWVzdF9yZWNlaXZlZChFd2tfQ29udGV4dCogZXdrQ29udGV4dCwgRXdrX1Vy
bF9TYwogCiBFd2tfQ29udGV4dCogZXdrX2NvbnRleHRfZGVmYXVsdF9nZXQoKQogewotICAgIHN0
YXRpYyBFd2tfQ29udGV4dCBkZWZhdWx0Q29udGV4dChhZG9wdFdLKFdLQ29udGV4dENyZWF0ZSgp
KSk7Ci0KLSAgICByZXR1cm4gJmRlZmF1bHRDb250ZXh0OworICAgIHJldHVybiBFd2tfQ29udGV4
dDo6ZGVmYXVsdENvbnRleHQoKS5sZWFrUmVmKCk7CiB9CiAKIEV3a19Db250ZXh0KiBld2tfY29u
dGV4dF9uZXcoKQogewotICAgIHJldHVybiBuZXcgRXdrX0NvbnRleHQoYWRvcHRXSyhXS0NvbnRl
eHRDcmVhdGUoKSkpOworICAgIHJldHVybiBFd2tfQ29udGV4dDo6Y3JlYXRlKGFkb3B0V0soV0tD
b250ZXh0Q3JlYXRlKCkpLmdldCgpKS5sZWFrUmVmKCk7CiB9CiAKIEV3a19Db250ZXh0KiBld2tf
Y29udGV4dF9uZXdfd2l0aF9pbmplY3RlZF9idW5kbGVfcGF0aChjb25zdCBjaGFyKiBwYXRoKQog
ewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChwYXRoLCAwKTsKIAotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYXRoUmVmKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKHBhdGgpKTsKLSAgICBpZiAoIWZpbGVFeGlzdHModG9JbXBsKHBhdGhSZWYu
Z2V0KCkpLT5zdHJpbmcoKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG5ldyBF
d2tfQ29udGV4dChhZG9wdFdLKFdLQ29udGV4dENyZWF0ZVdpdGhJbmplY3RlZEJ1bmRsZVBhdGgo
cGF0aFJlZi5nZXQoKSkpKTsKKyAgICByZXR1cm4gRXdrX0NvbnRleHQ6OmNyZWF0ZShTdHJpbmc6
OmZyb21VVEY4KHBhdGgpKS5sZWFrUmVmKCk7CiB9CiAKIEVpbmFfQm9vbCBld2tfY29udGV4dF91
cmxfc2NoZW1lX3JlZ2lzdGVyKEV3a19Db250ZXh0KiBld2tDb250ZXh0LCBjb25zdCBjaGFyKiBz
Y2hlbWUsIEV3a19VcmxfU2NoZW1lX1JlcXVlc3RfQ2IgY2FsbGJhY2ssIHZvaWQqIHVzZXJEYXRh
KQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChld2tDb250ZXh0LCBmYWxz
ZSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNjaGVtZSwgZmFsc2UpOwot
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjYWxsYmFjaywgZmFsc2UpOwogCi0g
ICAgZXdrQ29udGV4dC0+dXJsU2NoZW1lSGFuZGxlcnMuc2V0KFN0cmluZzo6ZnJvbVVURjgoc2No
ZW1lKSwgRXdrX1VybF9TY2hlbWVfSGFuZGxlcihjYWxsYmFjaywgdXNlckRhdGEpKTsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tTY2hlbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoc2NoZW1lKSk7Ci0gICAgV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWdpc3Rl
clVSSVNjaGVtZShld2tDb250ZXh0LT5yZXF1ZXN0TWFuYWdlci5nZXQoKSwgd2tTY2hlbWUuZ2V0
KCkpOwotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGV3a0NvbnRleHQtPnJlZ2lzdGVy
VVJMU2NoZW1lKFN0cmluZzo6ZnJvbVVURjgoc2NoZW1lKSwgY2FsbGJhY2ssIHVzZXJEYXRhKTsK
IH0KIAogdm9pZCBld2tfY29udGV4dF92aWJyYXRpb25fY2xpZW50X2NhbGxiYWNrc19zZXQoRXdr
X0NvbnRleHQqIGV3a0NvbnRleHQsIEV3a19WaWJyYXRpb25fQ2xpZW50X1ZpYnJhdGVfQ2Igdmli
cmF0ZSwgRXdrX1ZpYnJhdGlvbl9DbGllbnRfVmlicmF0aW9uX0NhbmNlbF9DYiBjYW5jZWwsIHZv
aWQqIGRhdGEpCkBAIC0zMDYsNyArMzE3LDcgQEAgdm9pZCBld2tfY29udGV4dF92aWJyYXRpb25f
Y2xpZW50X2NhbGxiYWNrc19zZXQoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIEV3a19WaWIKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihld2tDb250ZXh0KTsKIAogI2lmIEVOQUJMRShW
SUJSQVRJT04pCi0gICAgZXdrQ29udGV4dC0+dmlicmF0aW9uUHJvdmlkZXItPnNldFZpYnJhdGlv
bkNsaWVudENhbGxiYWNrcyh2aWJyYXRlLCBjYW5jZWwsIGRhdGEpOworICAgIGV3a0NvbnRleHQt
PnZpYnJhdGlvblByb3ZpZGVyKCktPnNldFZpYnJhdGlvbkNsaWVudENhbGxiYWNrcyh2aWJyYXRl
LCBjYW5jZWwsIGRhdGEpOwogI2VuZGlmCiB9CiAKQEAgLTMxNCwyOCArMzI1LDIyIEBAIHZvaWQg
ZXdrX2NvbnRleHRfaGlzdG9yeV9jYWxsYmFja3Nfc2V0KEV3a19Db250ZXh0KiBld2tDb250ZXh0
LCBFd2tfSGlzdG9yeV9OYXZpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZXdr
Q29udGV4dCk7CiAKLSAgICBld2tDb250ZXh0LT5oaXN0b3J5Q2xpZW50Lm5hdmlnYXRlX2Z1bmMg
PSBuYXZpZ2F0ZTsKLSAgICBld2tDb250ZXh0LT5oaXN0b3J5Q2xpZW50LmNsaWVudF9yZWRpcmVj
dF9mdW5jID0gY2xpZW50UmVkaXJlY3Q7Ci0gICAgZXdrQ29udGV4dC0+aGlzdG9yeUNsaWVudC5z
ZXJ2ZXJfcmVkaXJlY3RfZnVuYyA9IHNlcnZlclJlZGlyZWN0OwotICAgIGV3a0NvbnRleHQtPmhp
c3RvcnlDbGllbnQudGl0bGVfdXBkYXRlX2Z1bmMgPSB0aXRsZVVwZGF0ZTsKLSAgICBld2tDb250
ZXh0LT5oaXN0b3J5Q2xpZW50LnBvcHVsYXRlX3Zpc2l0ZWRfbGlua3NfZnVuYyA9IHBvcHVsYXRl
VmlzaXRlZExpbmtzOwotICAgIGV3a0NvbnRleHQtPmhpc3RvcnlDbGllbnQudXNlcl9kYXRhID0g
ZGF0YTsKKyAgICBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCYgaGlzdG9yeUNsaWVudCA9IGV3
a0NvbnRleHQtPmhpc3RvcnlDbGllbnQoKTsKKyAgICBoaXN0b3J5Q2xpZW50Lm5hdmlnYXRlX2Z1
bmMgPSBuYXZpZ2F0ZTsKKyAgICBoaXN0b3J5Q2xpZW50LmNsaWVudF9yZWRpcmVjdF9mdW5jID0g
Y2xpZW50UmVkaXJlY3Q7CisgICAgaGlzdG9yeUNsaWVudC5zZXJ2ZXJfcmVkaXJlY3RfZnVuYyA9
IHNlcnZlclJlZGlyZWN0OworICAgIGhpc3RvcnlDbGllbnQudGl0bGVfdXBkYXRlX2Z1bmMgPSB0
aXRsZVVwZGF0ZTsKKyAgICBoaXN0b3J5Q2xpZW50LnBvcHVsYXRlX3Zpc2l0ZWRfbGlua3NfZnVu
YyA9IHBvcHVsYXRlVmlzaXRlZExpbmtzOworICAgIGhpc3RvcnlDbGllbnQudXNlcl9kYXRhID0g
ZGF0YTsKIH0KIAotY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQqIGV3a19jb250ZXh0
X2hpc3RvcnlfY2xpZW50X2dldChjb25zdCBFd2tfQ29udGV4dCogZXdrQ29udGV4dCkKLXsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXdrQ29udGV4dCwgMCk7Ci0KLSAgICBy
ZXR1cm4gJmV3a0NvbnRleHQtPmhpc3RvcnlDbGllbnQ7Ci19CiAKIHZvaWQgZXdrX2NvbnRleHRf
dmlzaXRlZF9saW5rX2FkZChFd2tfQ29udGV4dCogZXdrQ29udGV4dCwgY29uc3QgY2hhciogdmlz
aXRlZFVSTCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihld2tDb250ZXh0KTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih2aXNpdGVkVVJMKTsKIAotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB3a1Zpc2l0ZWRVUkwoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcodmlzaXRlZFVSTCkpOwotICAgIFdLQ29udGV4dEFkZFZpc2l0ZWRMaW5r
KGV3a0NvbnRleHQtPmNvbnRleHQuZ2V0KCksIHdrVmlzaXRlZFVSTC5nZXQoKSk7CisgICAgZXdr
Q29udGV4dC0+YWRkVmlzaXRlZExpbmsodmlzaXRlZFVSTCk7CiB9CiAKIC8vIEV3a19DYWNoZV9N
b2RlbCBlbnVtIHZhbGlkYXRpb24KQEAgLTM0NiwxNCArMzUxLDE2IEBAIENPTVBJTEVfQVNTRVJU
X01BVENISU5HX0VOVU0oRVdLX0NBQ0hFX01PREVMX1BSSU1BUllfV0VCQlJPV1NFUiwga1dLQ2Fj
aGVNb2RlbFByCiBFaW5hX0Jvb2wgZXdrX2NvbnRleHRfY2FjaGVfbW9kZWxfc2V0KEV3a19Db250
ZXh0KiBld2tDb250ZXh0LCBFd2tfQ2FjaGVfTW9kZWwgY2FjaGVNb2RlbCkKIHsKICAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXdrQ29udGV4dCwgZmFsc2UpOwotICAgIFdLQ29u
dGV4dFNldENhY2hlTW9kZWwoZXdrX2NvbnRleHRfV0tDb250ZXh0X2dldChld2tDb250ZXh0KSwg
c3RhdGljX2Nhc3Q8RXdrX0NhY2hlX01vZGVsPihjYWNoZU1vZGVsKSk7CisKKyAgICBld2tDb250
ZXh0LT5zZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
IEV3a19DYWNoZV9Nb2RlbCBld2tfY29udGV4dF9jYWNoZV9tb2RlbF9nZXQoY29uc3QgRXdrX0Nv
bnRleHQqIGV3a0NvbnRleHQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KGV3a0NvbnRleHQsIEVXS19DQUNIRV9NT0RFTF9ET0NVTUVOVF9WSUVXRVIpOwotICAgIFdLQ2Fj
aGVNb2RlbCBjYWNoZU1vZGVsID0gV0tDb250ZXh0R2V0Q2FjaGVNb2RlbChld2tfY29udGV4dF9X
S0NvbnRleHRfZ2V0KGV3a0NvbnRleHQpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RXdrX0Nh
Y2hlX01vZGVsPihjYWNoZU1vZGVsKTsKKworICAgIHJldHVybiBld2tDb250ZXh0LT5jYWNoZU1v
ZGVsKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnQuY3BwCmluZGV4IDExNjQ3YjQu
LjJmYTg2ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50LmNwcApAQCAtNTAsNyArNTAs
NyBAQCBzdGF0aWMgaW5saW5lIEV3a19Db250ZXh0KiB0b0V3a0NvbnRleHQoY29uc3Qgdm9pZCog
Y2xpZW50SW5mbykKIAogc3RhdGljIFdLU3RyaW5nUmVmIGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1
Z2dlc3RlZEZpbGVuYW1lKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBX
S1N0cmluZ1JlZiBmaWxlbmFtZSwgYm9vbCogLyphbGxvd092ZXJ3cml0ZSovLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKQogewotICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkID0gZXdrX2Nv
bnRleHRfZG93bmxvYWRfam9iX2dldCh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIHRvSW1wbCh3
a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpKTsKKyAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9h
ZCA9IHRvRXdrQ29udGV4dChjbGllbnRJbmZvKS0+ZG93bmxvYWRKb2IodG9JbXBsKHdrRG93bmxv
YWQpLT5kb3dubG9hZElEKCkpOwogICAgIEFTU0VSVChkb3dubG9hZCk7CiAKICAgICBkb3dubG9h
ZC0+c2V0U3VnZ2VzdGVkRmlsZU5hbWUodG9JbXBsKGZpbGVuYW1lKS0+c3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CkBAIC02NywxNCArNjcsMTQgQEAgc3RhdGljIFdLU3RyaW5nUmVmIGRlY2lkZURl
c3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKFdLQ29udGV4dFJlZiwgV0tEb3dubG8KIAog
c3RhdGljIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJl
ZiB3a0Rvd25sb2FkLCBXS1VSTFJlc3BvbnNlUmVmIHdrUmVzcG9uc2UsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pCiB7Ci0gICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSBld2tfY29udGV4
dF9kb3dubG9hZF9qb2JfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwgdG9JbXBsKHdrRG93
bmxvYWQpLT5kb3dubG9hZElEKCkpOworICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkID0g
dG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLT5kb3dubG9hZEpvYih0b0ltcGwod2tEb3dubG9hZCkt
PmRvd25sb2FkSUQoKSk7CiAgICAgQVNTRVJUKGRvd25sb2FkKTsKICAgICBkb3dubG9hZC0+c2V0
UmVzcG9uc2UoRXdrX1VybF9SZXNwb25zZTo6Y3JlYXRlKHdrUmVzcG9uc2UpKTsKIH0KIAogc3Rh
dGljIHZvaWQgZGlkQ3JlYXRlRGVzdGluYXRpb24oV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVm
IHdrRG93bmxvYWQsIFdLU3RyaW5nUmVmIC8qcGF0aCovLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQogewotICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxv
YWRfam9iX2dldCh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIHRvSW1wbCh3a0Rvd25sb2FkKS0+
ZG93bmxvYWRJRCgpKTsKKyAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IHRvRXdrQ29u
dGV4dChjbGllbnRJbmZvKS0+ZG93bmxvYWRKb2IodG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9h
ZElEKCkpOwogICAgIEFTU0VSVChkb3dubG9hZCk7CiAKICAgICBkb3dubG9hZC0+c2V0U3RhdGUo
RVdLX0RPV05MT0FEX0pPQl9TVEFURV9ET1dOTE9BRElORyk7CkBAIC04Miw3ICs4Miw3IEBAIHN0
YXRpYyB2b2lkIGRpZENyZWF0ZURlc3RpbmF0aW9uKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJl
ZiB3a0Rvd25sb2FkLCBXS1N0cmluCiAKIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVEYXRhKFdLQ29u
dGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCB1aW50NjRfdCBsZW5ndGgsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCiB7Ci0gICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSBl
d2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwgdG9J
bXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOworICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRv
d25sb2FkID0gdG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLT5kb3dubG9hZEpvYih0b0ltcGwod2tE
b3dubG9hZCktPmRvd25sb2FkSUQoKSk7CiAgICAgQVNTRVJUKGRvd25sb2FkKTsKICAgICBkb3du
bG9hZC0+aW5jcmVtZW50UmVjZWl2ZWREYXRhKGxlbmd0aCk7CiB9CkBAIC05MCwzNSArOTAsMzUg
QEAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZURhdGEoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVm
IHdrRG93bmxvYWQsIHVpbnQ2NF90IGxlbmcKIHN0YXRpYyB2b2lkIGRpZEZhaWwoV0tDb250ZXh0
UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdLRXJyb3JSZWYgZXJyb3IsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCiB7CiAgICAgdWludDY0X3QgZG93bmxvYWRJZCA9IHRvSW1wbCh3a0Rv
d25sb2FkKS0+ZG93bmxvYWRJRCgpOwotICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkID0g
ZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX2dldCh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIGRv
d25sb2FkSWQpOworICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkID0gdG9Fd2tDb250ZXh0
KGNsaWVudEluZm8pLT5kb3dubG9hZEpvYihkb3dubG9hZElkKTsKICAgICBBU1NFUlQoZG93bmxv
YWQpOwogCiAgICAgT3duUHRyPEV3a19FcnJvcj4gZXdrRXJyb3IgPSBFd2tfRXJyb3I6OmNyZWF0
ZShlcnJvcik7CiAgICAgZG93bmxvYWQtPnNldFN0YXRlKEVXS19ET1dOTE9BRF9KT0JfU1RBVEVf
RkFJTEVEKTsKICAgICBld2tfdmlld19kb3dubG9hZF9qb2JfZmFpbGVkKGRvd25sb2FkLT52aWV3
KCksIGRvd25sb2FkLCBld2tFcnJvci5nZXQoKSk7Ci0gICAgZXdrX2NvbnRleHRfZG93bmxvYWRf
am9iX3JlbW92ZSh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIGRvd25sb2FkSWQpOworICAgIHRv
RXdrQ29udGV4dChjbGllbnRJbmZvKS0+cmVtb3ZlRG93bmxvYWRKb2IoZG93bmxvYWRJZCk7CiB9
CiAKIHN0YXRpYyB2b2lkIGRpZENhbmNlbChXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tE
b3dubG9hZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKICAgICB1aW50NjRfdCBkb3dubG9h
ZElkID0gdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCk7Ci0gICAgRXdrX0Rvd25sb2Fk
X0pvYiogZG93bmxvYWQgPSBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KHRvRXdrQ29udGV4
dChjbGllbnRJbmZvKSwgZG93bmxvYWRJZCk7CisgICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxv
YWQgPSB0b0V3a0NvbnRleHQoY2xpZW50SW5mbyktPmRvd25sb2FkSm9iKGRvd25sb2FkSWQpOwog
ICAgIEFTU0VSVChkb3dubG9hZCk7CiAKICAgICBkb3dubG9hZC0+c2V0U3RhdGUoRVdLX0RPV05M
T0FEX0pPQl9TVEFURV9DQU5DRUxMRUQpOwogICAgIGV3a192aWV3X2Rvd25sb2FkX2pvYl9jYW5j
ZWxsZWQoZG93bmxvYWQtPnZpZXcoKSwgZG93bmxvYWQpOwotICAgIGV3a19jb250ZXh0X2Rvd25s
b2FkX2pvYl9yZW1vdmUodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsKKyAg
ICB0b0V3a0NvbnRleHQoY2xpZW50SW5mbyktPnJlbW92ZURvd25sb2FkSm9iKGRvd25sb2FkSWQp
OwogfQogCiBzdGF0aWMgdm9pZCBkaWRGaW5pc2goV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVm
IHdrRG93bmxvYWQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7CiAgICAgdWludDY0X3QgZG93
bmxvYWRJZCA9IHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpOwotICAgIEV3a19Eb3du
bG9hZF9Kb2IqIGRvd25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX2dldCh0b0V3a0Nv
bnRleHQoY2xpZW50SW5mbyksIGRvd25sb2FkSWQpOworICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRv
d25sb2FkID0gdG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLT5kb3dubG9hZEpvYihkb3dubG9hZElk
KTsKICAgICBBU1NFUlQoZG93bmxvYWQpOwogCiAgICAgZG93bmxvYWQtPnNldFN0YXRlKEVXS19E
T1dOTE9BRF9KT0JfU1RBVEVfRklOSVNIRUQpOwogICAgIGV3a192aWV3X2Rvd25sb2FkX2pvYl9m
aW5pc2hlZChkb3dubG9hZC0+dmlldygpLCBkb3dubG9hZCk7Ci0gICAgZXdrX2NvbnRleHRfZG93
bmxvYWRfam9iX3JlbW92ZSh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIGRvd25sb2FkSWQpOwor
ICAgIHRvRXdrQ29udGV4dChjbGllbnRJbmZvKS0+cmVtb3ZlRG93bmxvYWRKb2IoZG93bmxvYWRJ
ZCk7CiB9CiAKIHZvaWQgZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50X2F0dGFjaChFd2tfQ29u
dGV4dCogZXdrQ29udGV4dCkKQEAgLTEzNiw3ICsxMzYsNyBAQCB2b2lkIGV3a19jb250ZXh0X2Rv
d25sb2FkX2NsaWVudF9hdHRhY2goRXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCiAgICAgd2tEb3du
bG9hZENsaWVudC5kaWRGYWlsID0gZGlkRmFpbDsKICAgICB3a0Rvd25sb2FkQ2xpZW50LmRpZEZp
bmlzaCA9IGRpZEZpbmlzaDsKIAotICAgIFdLQ29udGV4dFNldERvd25sb2FkQ2xpZW50KGV3a19j
b250ZXh0X1dLQ29udGV4dF9nZXQoZXdrQ29udGV4dCksICZ3a0Rvd25sb2FkQ2xpZW50KTsKKyAg
ICBXS0NvbnRleHRTZXREb3dubG9hZENsaWVudChld2tDb250ZXh0LT53a0NvbnRleHQoKSwgJndr
RG93bmxvYWRDbGllbnQpOwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50LmNwcAppbmRl
eCAxMDM4YjRkLi40Zjc5M2I5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnQuY3BwCkBAIC00
MSw3NSArNDEsNzAgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAotc3RhdGljIGlubGlu
ZSBjb25zdCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCogZ2V0RXdrSGlzdG9yeURlbGVnYXRl
KGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCitzdGF0aWMgaW5saW5lIGNvbnN0IEV3a19Db250ZXh0
X0hpc3RvcnlfQ2xpZW50JiBnZXRFd2tIaXN0b3J5Q2xpZW50KGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCiB7CiAgICAgQVNTRVJUKGNsaWVudEluZm8pOwotICAgIHJldHVybiBld2tfY29udGV4dF9o
aXN0b3J5X2NsaWVudF9nZXQoc3RhdGljX2Nhc3Q8Y29uc3QgRXdrX0NvbnRleHQqPihjbGllbnRJ
bmZvKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEV3a19Db250ZXh0Kj4oY2xpZW50
SW5mbyktPmhpc3RvcnlDbGllbnQoKTsKIH0KIAogc3RhdGljIHZvaWQgZGlkTmF2aWdhdGVXaXRo
TmF2aWdhdGlvbkRhdGEoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcGFnZSwgV0tOYXZpZ2F0aW9u
RGF0YVJlZiBuYXZpZ2F0aW9uRGF0YSwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5m
bykKIHsKLSAgICBjb25zdCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCogaGlzdG9yeURlbGVn
YXRlID0gZ2V0RXdrSGlzdG9yeURlbGVnYXRlKGNsaWVudEluZm8pOwotICAgIEFTU0VSVChoaXN0
b3J5RGVsZWdhdGUpOworICAgIGNvbnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50JiBoaXN0
b3J5Q2xpZW50ID0gZ2V0RXdrSGlzdG9yeUNsaWVudChjbGllbnRJbmZvKTsKIAotICAgIGlmICgh
aGlzdG9yeURlbGVnYXRlLT5uYXZpZ2F0ZV9mdW5jKQorICAgIGlmICghaGlzdG9yeUNsaWVudC5u
YXZpZ2F0ZV9mdW5jKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8RXdrX05hdmlnYXRp
b25fRGF0YT4gbmF2aWdhdGlvbkRhdGFFd2sgPSBFd2tfTmF2aWdhdGlvbl9EYXRhOjpjcmVhdGUo
bmF2aWdhdGlvbkRhdGEpOwotICAgIGhpc3RvcnlEZWxlZ2F0ZS0+bmF2aWdhdGVfZnVuYyhld2tf
dmlld19mcm9tX3BhZ2VfZ2V0KHRvSW1wbChwYWdlKSksIG5hdmlnYXRpb25EYXRhRXdrLmdldCgp
LCBoaXN0b3J5RGVsZWdhdGUtPnVzZXJfZGF0YSk7CisgICAgaGlzdG9yeUNsaWVudC5uYXZpZ2F0
ZV9mdW5jKGV3a192aWV3X2Zyb21fcGFnZV9nZXQodG9JbXBsKHBhZ2UpKSwgbmF2aWdhdGlvbkRh
dGFFd2suZ2V0KCksIGhpc3RvcnlDbGllbnQudXNlcl9kYXRhKTsKIH0KIAogc3RhdGljIHZvaWQg
ZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KFdLQ29udGV4dFJlZiwgV0tQYWdlUmVmIHBhZ2UsIFdL
VVJMUmVmIHNvdXJjZVVSTCwgV0tVUkxSZWYgZGVzdGluYXRpb25VUkwsIFdLRnJhbWVSZWYsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCiB7Ci0gICAgY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9D
bGllbnQqIGhpc3RvcnlEZWxlZ2F0ZSA9IGdldEV3a0hpc3RvcnlEZWxlZ2F0ZShjbGllbnRJbmZv
KTsKLSAgICBBU1NFUlQoaGlzdG9yeURlbGVnYXRlKTsKKyAgICBjb25zdCBFd2tfQ29udGV4dF9I
aXN0b3J5X0NsaWVudCYgaGlzdG9yeUNsaWVudCA9IGdldEV3a0hpc3RvcnlDbGllbnQoY2xpZW50
SW5mbyk7CiAKLSAgICBpZiAoIWhpc3RvcnlEZWxlZ2F0ZS0+Y2xpZW50X3JlZGlyZWN0X2Z1bmMp
CisgICAgaWYgKCFoaXN0b3J5Q2xpZW50LmNsaWVudF9yZWRpcmVjdF9mdW5jKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgc291cmNlVVJMU3RyaW5nKHNvdXJjZVVS
TCk7CiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIGRlc3RpbmF0aW9uVVJMU3RyaW5nKGRlc3RpbmF0
aW9uVVJMKTsKIAotICAgIGhpc3RvcnlEZWxlZ2F0ZS0+Y2xpZW50X3JlZGlyZWN0X2Z1bmMoZXdr
X3ZpZXdfZnJvbV9wYWdlX2dldCh0b0ltcGwocGFnZSkpLCBzb3VyY2VVUkxTdHJpbmcsIGRlc3Rp
bmF0aW9uVVJMU3RyaW5nLCBoaXN0b3J5RGVsZWdhdGUtPnVzZXJfZGF0YSk7CisgICAgaGlzdG9y
eUNsaWVudC5jbGllbnRfcmVkaXJlY3RfZnVuYyhld2tfdmlld19mcm9tX3BhZ2VfZ2V0KHRvSW1w
bChwYWdlKSksIHNvdXJjZVVSTFN0cmluZywgZGVzdGluYXRpb25VUkxTdHJpbmcsIGhpc3RvcnlD
bGllbnQudXNlcl9kYXRhKTsKIH0KIAogc3RhdGljIHZvaWQgZGlkUGVyZm9ybVNlcnZlclJlZGly
ZWN0KFdLQ29udGV4dFJlZiwgV0tQYWdlUmVmIHBhZ2UsIFdLVVJMUmVmIHNvdXJjZVVSTCwgV0tV
UkxSZWYgZGVzdGluYXRpb25VUkwsIFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
CiB7Ci0gICAgY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQqIGhpc3RvcnlEZWxlZ2F0
ZSA9IGdldEV3a0hpc3RvcnlEZWxlZ2F0ZShjbGllbnRJbmZvKTsKLSAgICBBU1NFUlQoaGlzdG9y
eURlbGVnYXRlKTsKKyAgICBjb25zdCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCYgaGlzdG9y
eUNsaWVudCA9IGdldEV3a0hpc3RvcnlDbGllbnQoY2xpZW50SW5mbyk7CiAKLSAgICBpZiAoIWhp
c3RvcnlEZWxlZ2F0ZS0+c2VydmVyX3JlZGlyZWN0X2Z1bmMpCisgICAgaWYgKCFoaXN0b3J5Q2xp
ZW50LnNlcnZlcl9yZWRpcmVjdF9mdW5jKQogICAgICAgICByZXR1cm47CiAKICAgICBXS0VpbmFT
aGFyZWRTdHJpbmcgc291cmNlVVJMU3RyaW5nKHNvdXJjZVVSTCk7CiAgICAgV0tFaW5hU2hhcmVk
U3RyaW5nIGRlc3RpbmF0aW9uVVJMU3RyaW5nKGRlc3RpbmF0aW9uVVJMKTsKIAotICAgIGhpc3Rv
cnlEZWxlZ2F0ZS0+c2VydmVyX3JlZGlyZWN0X2Z1bmMoZXdrX3ZpZXdfZnJvbV9wYWdlX2dldCh0
b0ltcGwocGFnZSkpLCBzb3VyY2VVUkxTdHJpbmcsIGRlc3RpbmF0aW9uVVJMU3RyaW5nLCBoaXN0
b3J5RGVsZWdhdGUtPnVzZXJfZGF0YSk7CisgICAgaGlzdG9yeUNsaWVudC5zZXJ2ZXJfcmVkaXJl
Y3RfZnVuYyhld2tfdmlld19mcm9tX3BhZ2VfZ2V0KHRvSW1wbChwYWdlKSksIHNvdXJjZVVSTFN0
cmluZywgZGVzdGluYXRpb25VUkxTdHJpbmcsIGhpc3RvcnlDbGllbnQudXNlcl9kYXRhKTsKIH0K
IAogc3RhdGljIHZvaWQgZGlkVXBkYXRlSGlzdG9yeVRpdGxlKFdLQ29udGV4dFJlZiwgV0tQYWdl
UmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHRpdGxlLCBXS1VSTFJlZiBVUkwsIFdLRnJhbWVSZWYsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCiB7Ci0gICAgY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9D
bGllbnQqIGhpc3RvcnlEZWxlZ2F0ZSA9IGdldEV3a0hpc3RvcnlEZWxlZ2F0ZShjbGllbnRJbmZv
KTsKLSAgICBBU1NFUlQoaGlzdG9yeURlbGVnYXRlKTsKKyAgICBjb25zdCBFd2tfQ29udGV4dF9I
aXN0b3J5X0NsaWVudCYgaGlzdG9yeUNsaWVudCA9IGdldEV3a0hpc3RvcnlDbGllbnQoY2xpZW50
SW5mbyk7CiAKLSAgICBpZiAoIWhpc3RvcnlEZWxlZ2F0ZS0+dGl0bGVfdXBkYXRlX2Z1bmMpCisg
ICAgaWYgKCFoaXN0b3J5Q2xpZW50LnRpdGxlX3VwZGF0ZV9mdW5jKQogICAgICAgICByZXR1cm47
CiAKICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgdGl0bGVTdHJpbmcodGl0bGUpOwogICAgIFdLRWlu
YVNoYXJlZFN0cmluZyBzdHJpbmdVUkwoVVJMKTsKIAotICAgIGhpc3RvcnlEZWxlZ2F0ZS0+dGl0
bGVfdXBkYXRlX2Z1bmMoZXdrX3ZpZXdfZnJvbV9wYWdlX2dldCh0b0ltcGwocGFnZSkpLCB0aXRs
ZVN0cmluZywgc3RyaW5nVVJMLCBoaXN0b3J5RGVsZWdhdGUtPnVzZXJfZGF0YSk7CisgICAgaGlz
dG9yeUNsaWVudC50aXRsZV91cGRhdGVfZnVuYyhld2tfdmlld19mcm9tX3BhZ2VfZ2V0KHRvSW1w
bChwYWdlKSksIHRpdGxlU3RyaW5nLCBzdHJpbmdVUkwsIGhpc3RvcnlDbGllbnQudXNlcl9kYXRh
KTsKIH0KIAogc3RhdGljIHZvaWQgcG9wdWxhdGVWaXNpdGVkTGlua3MoV0tDb250ZXh0UmVmLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIGNvbnN0IEV3a19Db250ZXh0X0hpc3Rvcnlf
Q2xpZW50KiBoaXN0b3J5RGVsZWdhdGUgPSBnZXRFd2tIaXN0b3J5RGVsZWdhdGUoY2xpZW50SW5m
byk7Ci0gICAgQVNTRVJUKGhpc3RvcnlEZWxlZ2F0ZSk7CisgICAgY29uc3QgRXdrX0NvbnRleHRf
SGlzdG9yeV9DbGllbnQmIGhpc3RvcnlDbGllbnQgPSBnZXRFd2tIaXN0b3J5Q2xpZW50KGNsaWVu
dEluZm8pOwogCi0gICAgaWYgKCFoaXN0b3J5RGVsZWdhdGUtPnBvcHVsYXRlX3Zpc2l0ZWRfbGlu
a3NfZnVuYykKKyAgICBpZiAoIWhpc3RvcnlDbGllbnQucG9wdWxhdGVfdmlzaXRlZF9saW5rc19m
dW5jKQogICAgICAgICByZXR1cm47CiAKLSAgICBoaXN0b3J5RGVsZWdhdGUtPnBvcHVsYXRlX3Zp
c2l0ZWRfbGlua3NfZnVuYyhoaXN0b3J5RGVsZWdhdGUtPnVzZXJfZGF0YSk7CisgICAgaGlzdG9y
eUNsaWVudC5wb3B1bGF0ZV92aXNpdGVkX2xpbmtzX2Z1bmMoaGlzdG9yeUNsaWVudC51c2VyX2Rh
dGEpOwogfQogCiB2b2lkIGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X2F0dGFjaChFd2tfQ29u
dGV4dCogZXdrQ29udGV4dCkKQEAgLTEyNiw1ICsxMjEsNSBAQCB2b2lkIGV3a19jb250ZXh0X2hp
c3RvcnlfY2xpZW50X2F0dGFjaChFd2tfQ29udGV4dCogZXdrQ29udGV4dCkKICAgICB3a0hpc3Rv
cnlDbGllbnQuZGlkVXBkYXRlSGlzdG9yeVRpdGxlID0gZGlkVXBkYXRlSGlzdG9yeVRpdGxlOwog
ICAgIHdrSGlzdG9yeUNsaWVudC5wb3B1bGF0ZVZpc2l0ZWRMaW5rcyA9IHBvcHVsYXRlVmlzaXRl
ZExpbmtzOwogCi0gICAgV0tDb250ZXh0U2V0SGlzdG9yeUNsaWVudChld2tfY29udGV4dF9XS0Nv
bnRleHRfZ2V0KGV3a0NvbnRleHQpLCAmd2tIaXN0b3J5Q2xpZW50KTsKKyAgICBXS0NvbnRleHRT
ZXRIaXN0b3J5Q2xpZW50KGV3a0NvbnRleHQtPndrQ29udGV4dCgpLCAmd2tIaXN0b3J5Q2xpZW50
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0X3ByaXZhdGUuaAppbmRleCA3MDU3MzlhLi44OTVmOWUxOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaApA
QCAtMjAsMjIgKzIwLDkwIEBACiAjaWZuZGVmIGV3a19jb250ZXh0X3ByaXZhdGVfaAogI2RlZmlu
ZSBld2tfY29udGV4dF9wcml2YXRlX2gKIAotI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+Cisj
aW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRl
ICJld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9wcml2YXRlLmgiCiAKLXR5cGVkZWYgc3RydWN0
IEV3a19Db250ZXh0IEV3a19Db250ZXh0OwotdHlwZWRlZiBzdHJ1Y3QgRXdrX0Rvd25sb2FkX0pv
YiBFd2tfRG93bmxvYWRfSm9iOwotdHlwZWRlZiBzdHJ1Y3QgRXdrX1VybF9TY2hlbWVfUmVxdWVz
dCBFd2tfVXJsX1NjaGVtZV9SZXF1ZXN0OwotdHlwZWRlZiBzdHJ1Y3QgRXdrX0NvbnRleHRfSGlz
dG9yeV9DbGllbnQgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQ7CitjbGFzcyBFd2tfRG93bmxv
YWRfSm9iOworY2xhc3MgRXdrX1VybF9TY2hlbWVfUmVxdWVzdDsKK2NsYXNzIEV3a19Db29raWVf
TWFuYWdlcjsKK2NsYXNzIEV3a19GYXZpY29uX0RhdGFiYXNlOworI2lmIEVOQUJMRShCQVRURVJZ
X1NUQVRVUykKK2NsYXNzIEJhdHRlcnlQcm92aWRlcjsKKyNlbmRpZgorI2lmIEVOQUJMRShORVRX
T1JLX0lORk8pCitjbGFzcyBOZXR3b3JrSW5mb1Byb3ZpZGVyOworI2VuZGlmCisjaWYgRU5BQkxF
KFZJQlJBVElPTikKK2NsYXNzIFZpYnJhdGlvblByb3ZpZGVyOworI2VuZGlmCiAKLVdLQ29udGV4
dFJlZiBld2tfY29udGV4dF9XS0NvbnRleHRfZ2V0KGNvbnN0IEV3a19Db250ZXh0Kik7Ci1Fd2tf
Q29udGV4dCogZXdrX2NvbnRleHRfbmV3X2Zyb21fV0tDb250ZXh0KFdLQ29udGV4dFJlZik7Ci1X
S1NvdXBSZXF1ZXN0TWFuYWdlclJlZiBld2tfY29udGV4dF9yZXF1ZXN0X21hbmFnZXJfZ2V0KGNv
bnN0IEV3a19Db250ZXh0Kik7Ci12b2lkIGV3a19jb250ZXh0X3VybF9zY2hlbWVfcmVxdWVzdF9y
ZWNlaXZlZChFd2tfQ29udGV4dCosIEV3a19VcmxfU2NoZW1lX1JlcXVlc3QqKTsKK2NsYXNzIEV3
a19Db250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8RXdrX0NvbnRleHQ+IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxFd2tfQ29udGV4dD4gY3JlYXRlKFdLQ29udGV4dFJlZiBjb250
ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFd2tfQ29udGV4dChjb250
ZXh0KSk7CisgICAgfQogCi12b2lkIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9hZGQoRXdrX0Nv
bnRleHQqLCBFd2tfRG93bmxvYWRfSm9iKik7Ci1Fd2tfRG93bmxvYWRfSm9iKiBld2tfY29udGV4
dF9kb3dubG9hZF9qb2JfZ2V0KGNvbnN0IEV3a19Db250ZXh0KiwgdWludDY0X3QgZG93bmxvYWRJ
ZCk7Ci12b2lkIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9yZW1vdmUoRXdrX0NvbnRleHQqLCB1
aW50NjRfdCBkb3dubG9hZElkKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxFd2tfQ29udGV4dD4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgaW5qZWN0ZWRCdW5kbGVQYXRoKTsKIAotY29uc3QgRXdrX0Nv
bnRleHRfSGlzdG9yeV9DbGllbnQqIGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X2dldChjb25z
dCBFd2tfQ29udGV4dCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV3a19Db250ZXh0PiBkZWZh
dWx0Q29udGV4dCgpOworCisgICAgfkV3a19Db250ZXh0KCk7CisKKyAgICBFd2tfQ29va2llX01h
bmFnZXIqIGNvb2tpZU1hbmFnZXIoKTsKKworICAgIEV3a19GYXZpY29uX0RhdGFiYXNlKiBmYXZp
Y29uRGF0YWJhc2UoKTsKKworICAgIGJvb2wgcmVnaXN0ZXJVUkxTY2hlbWUoY29uc3QgU3RyaW5n
JiBzY2hlbWUsIEV3a19VcmxfU2NoZW1lX1JlcXVlc3RfQ2IgY2FsbGJhY2ssIHZvaWQqIHVzZXJE
YXRhKTsKKworI2lmIEVOQUJMRShWSUJSQVRJT04pCisgICAgUGFzc1JlZlB0cjxWaWJyYXRpb25Q
cm92aWRlcj4gdmlicmF0aW9uUHJvdmlkZXIoKTsKKyNlbmRpZgorCisgICAgdm9pZCBhZGRWaXNp
dGVkTGluayhjb25zdCBTdHJpbmcmIHZpc2l0ZWRVUkwpOworCisgICAgdm9pZCBzZXRDYWNoZU1v
ZGVsKEV3a19DYWNoZV9Nb2RlbCk7CisKKyAgICBFd2tfQ2FjaGVfTW9kZWwgY2FjaGVNb2RlbCgp
IGNvbnN0OworCisgICAgV0tDb250ZXh0UmVmIHdrQ29udGV4dCgpOworCisgICAgV0tTb3VwUmVx
dWVzdE1hbmFnZXJSZWYgcmVxdWVzdE1hbmFnZXIoKTsKKworICAgIHZvaWQgdXJsU2NoZW1lUmVx
dWVzdFJlY2VpdmVkKEV3a19VcmxfU2NoZW1lX1JlcXVlc3QqKTsKKworICAgIHZvaWQgYWRkRG93
bmxvYWRKb2IoRXdrX0Rvd25sb2FkX0pvYiopOworICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRvd25s
b2FkSm9iKHVpbnQ2NF90IGRvd25sb2FkSWQpOworICAgIHZvaWQgcmVtb3ZlRG93bmxvYWRKb2Io
dWludDY0X3QgZG93bmxvYWRJZCk7CisKKyAgICBjb25zdCBFd2tfQ29udGV4dF9IaXN0b3J5X0Ns
aWVudCYgaGlzdG9yeUNsaWVudCgpIGNvbnN0ICB7IHJldHVybiBtX2hpc3RvcnlDbGllbnQ7IH0K
KyAgICBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCYgaGlzdG9yeUNsaWVudCgpIHsgcmV0dXJu
IG1faGlzdG9yeUNsaWVudDsgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IEV3a19Db250ZXh0
KFdLQ29udGV4dFJlZik7CisKKyAgICBXS1JldGFpblB0cjxXS0NvbnRleHRSZWY+IG1fY29udGV4
dDsKKworICAgIE93blB0cjxFd2tfQ29va2llX01hbmFnZXI+IG1fY29va2llTWFuYWdlcjsKKyAg
ICBPd25QdHI8RXdrX0Zhdmljb25fRGF0YWJhc2U+IG1fZmF2aWNvbkRhdGFiYXNlOworI2lmIEVO
QUJMRShCQVRURVJZX1NUQVRVUykKKyAgICBSZWZQdHI8QmF0dGVyeVByb3ZpZGVyPiBtX2JhdHRl
cnlQcm92aWRlcjsKKyNlbmRpZgorI2lmIEVOQUJMRShORVRXT1JLX0lORk8pCisgICAgUmVmUHRy
PE5ldHdvcmtJbmZvUHJvdmlkZXI+IG1fbmV0d29ya0luZm9Qcm92aWRlcjsKKyNlbmRpZgorI2lm
IEVOQUJMRShWSUJSQVRJT04pCisgICAgUmVmUHRyPFZpYnJhdGlvblByb3ZpZGVyPiBtX3ZpYnJh
dGlvblByb3ZpZGVyOworI2VuZGlmCisgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPEV3a19E
b3dubG9hZF9Kb2I+ID4gbV9kb3dubG9hZEpvYnM7CisKKyAgICBXS1JldGFpblB0cjxXS1NvdXBS
ZXF1ZXN0TWFuYWdlclJlZj4gbV9yZXF1ZXN0TWFuYWdlcjsKKworICAgIHR5cGVkZWYgSGFzaE1h
cDxTdHJpbmcsIGNsYXNzIEV3a19VcmxfU2NoZW1lX0hhbmRsZXI+IFVSTFNjaGVtZUhhbmRsZXJN
YXA7CisgICAgVVJMU2NoZW1lSGFuZGxlck1hcCBtX3VybFNjaGVtZUhhbmRsZXJzOworCisgICAg
RXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQgbV9oaXN0b3J5Q2xpZW50OworfTsKIAogI2VuZGlm
IC8vIGV3a19jb250ZXh0X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9yZXF1ZXN0X21hbmFn
ZXJfY2xpZW50LmNwcAppbmRleCBiMjU3M2NhLi5mZTgwMWNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9yZXF1ZXN0X21hbmFnZXJfY2xp
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dF9yZXF1ZXN0X21hbmFnZXJfY2xpZW50LmNwcApAQCAtNDEsNyArNDEsNyBAQCBzdGF0aWMgaW5s
aW5lIEV3a19Db250ZXh0KiB0b0V3a0NvbnRleHQoY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHN0
YXRpYyB2b2lkIGRpZFJlY2VpdmVVUklSZXF1ZXN0KFdLU291cFJlcXVlc3RNYW5hZ2VyUmVmIHNv
dXBSZXF1ZXN0TWFuYWdlclJlZiwgV0tVUkxSZWYgdXJsUmVmLCBXS1BhZ2VSZWYsIHVpbnQ2NF90
IHJlcXVlc3RJRCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKICAgICBSZWZQdHI8RXdrX1Vy
bF9TY2hlbWVfUmVxdWVzdD4gc2NoZW1lUmVxdWVzdCA9IEV3a19VcmxfU2NoZW1lX1JlcXVlc3Q6
OmNyZWF0ZShzb3VwUmVxdWVzdE1hbmFnZXJSZWYsIHVybFJlZiwgcmVxdWVzdElEKTsKLSAgICBl
d2tfY29udGV4dF91cmxfc2NoZW1lX3JlcXVlc3RfcmVjZWl2ZWQodG9Fd2tDb250ZXh0KGNsaWVu
dEluZm8pLCBzY2hlbWVSZXF1ZXN0LmdldCgpKTsKKyAgICB0b0V3a0NvbnRleHQoY2xpZW50SW5m
byktPnVybFNjaGVtZVJlcXVlc3RSZWNlaXZlZChzY2hlbWVSZXF1ZXN0LmdldCgpKTsKIH0KIAog
dm9pZCBld2tfY29udGV4dF9yZXF1ZXN0X21hbmFnZXJfY2xpZW50X2F0dGFjaChFd2tfQ29udGV4
dCogY29udGV4dCkKQEAgLTUzLDUgKzUzLDUgQEAgdm9pZCBld2tfY29udGV4dF9yZXF1ZXN0X21h
bmFnZXJfY2xpZW50X2F0dGFjaChFd2tfQ29udGV4dCogY29udGV4dCkKICAgICB3a1JlcXVlc3RN
YW5hZ2VyQ2xpZW50LmNsaWVudEluZm8gPSBjb250ZXh0OwogICAgIHdrUmVxdWVzdE1hbmFnZXJD
bGllbnQuZGlkUmVjZWl2ZVVSSVJlcXVlc3QgPSBkaWRSZWNlaXZlVVJJUmVxdWVzdDsKIAotICAg
IFdLU291cFJlcXVlc3RNYW5hZ2VyU2V0Q2xpZW50KGV3a19jb250ZXh0X3JlcXVlc3RfbWFuYWdl
cl9nZXQoY29udGV4dCksICZ3a1JlcXVlc3RNYW5hZ2VyQ2xpZW50KTsKKyAgICBXS1NvdXBSZXF1
ZXN0TWFuYWdlclNldENsaWVudChjb250ZXh0LT5yZXF1ZXN0TWFuYWdlcigpLCAmd2tSZXF1ZXN0
TWFuYWdlckNsaWVudCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdmlldy5jcHAKaW5kZXggZDg2MDhhYS4uMjQ2YTI0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcApAQCAtMTMyLDcgKzEzMiw3IEBAIHN0cnVj
dCBFd2tfVmlld19Qcml2YXRlX0RhdGEgewogICAgIE93blB0cjxFd2tfU2V0dGluZ3M+IHNldHRp
bmdzOwogICAgIGJvb2wgYXJlTW91c2VFdmVudHNFbmFibGVkOwogICAgIFdLUmV0YWluUHRyPFdL
Q29sb3JQaWNrZXJSZXN1bHRMaXN0ZW5lclJlZj4gY29sb3JQaWNrZXJSZXN1bHRMaXN0ZW5lcjsK
LSAgICBFd2tfQ29udGV4dCogY29udGV4dDsKKyAgICBSZWZQdHI8RXdrX0NvbnRleHQ+IGNvbnRl
eHQ7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBib29sIGFyZVRvdWNoRXZlbnRzRW5h
YmxlZDsKICNlbmRpZgpAQCAtMTUyLDcgKzE1Miw2IEBAIHN0cnVjdCBFd2tfVmlld19Qcml2YXRl
X0RhdGEgewogCiAgICAgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKCkKICAgICAgICAgOiBhcmVNb3Vz
ZUV2ZW50c0VuYWJsZWQoZmFsc2UpCi0gICAgICAgICwgY29udGV4dCgwKQogI2lmIEVOQUJMRShU
T1VDSF9FVkVOVFMpCiAgICAgICAgICwgYXJlVG91Y2hFdmVudHNFbmFibGVkKGZhbHNlKQogI2Vu
ZGlmCkBAIC0xNzEsNyArMTcwLDcgQEAgc3RydWN0IEV3a19WaWV3X1ByaXZhdGVfRGF0YSB7CiAg
ICAgfkV3a19WaWV3X1ByaXZhdGVfRGF0YSgpCiAgICAgewogICAgICAgICAvKiBVbnJlZ2lzdGVy
IGljb24gY2hhbmdlIGNhbGxiYWNrICovCi0gICAgICAgIEV3a19GYXZpY29uX0RhdGFiYXNlKiBp
Y29uRGF0YWJhc2UgPSBld2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldChjb250ZXh0KTsK
KyAgICAgICAgRXdrX0Zhdmljb25fRGF0YWJhc2UqIGljb25EYXRhYmFzZSA9IGNvbnRleHQtPmZh
dmljb25EYXRhYmFzZSgpOwogICAgICAgICBpY29uRGF0YWJhc2UtPnVud2F0Y2hDaGFuZ2VzKF9l
d2tfdmlld19vbl9mYXZpY29uX2NoYW5nZWQpOwogCiAgICAgICAgIHZvaWQqIGl0ZW07CkBAIC00
NzcsNyArNDc2LDYgQEAgc3RhdGljIEV3a19WaWV3X1ByaXZhdGVfRGF0YSogX2V3a192aWV3X3By
aXZfbmV3KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIAogc3RhdGljIHZvaWQgX2V3
a192aWV3X3ByaXZfZGVsKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdikKIHsKLSAgICBld2tf
Y29udGV4dF91bnJlZihwcml2LT5jb250ZXh0KTsKICAgICBkZWxldGUgcHJpdjsKIH0KIApAQCAt
Nzk1LDcgKzc5Myw3IEBAIHN0YXRpYyBpbmxpbmUgRXZhc19TbWFydCogX2V3a192aWV3X3NtYXJ0
X2NsYXNzX25ldyh2b2lkKQogICAgIHJldHVybiBzbWFydDsKIH0KIAotc3RhdGljIHZvaWQgX2V3
a192aWV3X2luaXRpYWxpemUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19Db250ZXh0KiBjb250
ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
aW5pdGlhbGl6ZShFdmFzX09iamVjdCogZXdrVmlldywgUGFzc1JlZlB0cjxFd2tfQ29udGV4dD4g
Y29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQogewogICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKICAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2KTsKQEAgLTgwNyw5ICs4MDUsOSBAQCBzdGF0aWMg
dm9pZCBfZXdrX3ZpZXdfaW5pdGlhbGl6ZShFdmFzX09iamVjdCogZXdrVmlldywgRXdrX0NvbnRl
eHQqIGNvbnRleHQsIFdLUAogICAgIHByaXYtPnBhZ2VDbGllbnQgPSBQYWdlQ2xpZW50SW1wbDo6
Y3JlYXRlKGV3a1ZpZXcpOwogCiAgICAgaWYgKHBhZ2VHcm91cFJlZikKLSAgICAgICAgcHJpdi0+
cGFnZVByb3h5ID0gdG9JbXBsKGV3a19jb250ZXh0X1dLQ29udGV4dF9nZXQoY29udGV4dCkpLT5j
cmVhdGVXZWJQYWdlKHByaXYtPnBhZ2VDbGllbnQuZ2V0KCksIHRvSW1wbChwYWdlR3JvdXBSZWYp
KTsKKyAgICAgICAgcHJpdi0+cGFnZVByb3h5ID0gdG9JbXBsKGNvbnRleHQtPndrQ29udGV4dCgp
KS0+Y3JlYXRlV2ViUGFnZShwcml2LT5wYWdlQ2xpZW50LmdldCgpLCB0b0ltcGwocGFnZUdyb3Vw
UmVmKSk7CiAgICAgZWxzZQotICAgICAgICBwcml2LT5wYWdlUHJveHkgPSB0b0ltcGwoZXdrX2Nv
bnRleHRfV0tDb250ZXh0X2dldChjb250ZXh0KSktPmNyZWF0ZVdlYlBhZ2UocHJpdi0+cGFnZUNs
aWVudC5nZXQoKSwgV2ViUGFnZUdyb3VwOjpjcmVhdGUoKS5nZXQoKSk7CisgICAgICAgIHByaXYt
PnBhZ2VQcm94eSA9IHRvSW1wbChjb250ZXh0LT53a0NvbnRleHQoKSktPmNyZWF0ZVdlYlBhZ2Uo
cHJpdi0+cGFnZUNsaWVudC5nZXQoKSwgV2ViUGFnZUdyb3VwOjpjcmVhdGUoKS5nZXQoKSk7CiAK
ICAgICBhZGRUb1BhZ2VWaWV3TWFwKGV3a1ZpZXcpOwogCkBAIC04MjIsNyArODIwLDcgQEAgc3Rh
dGljIHZvaWQgX2V3a192aWV3X2luaXRpYWxpemUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19D
b250ZXh0KiBjb250ZXh0LCBXS1AKIAogICAgIHByaXYtPmJhY2tGb3J3YXJkTGlzdCA9IEV3a19C
YWNrX0ZvcndhcmRfTGlzdDo6Y3JlYXRlKHRvQVBJKHByaXYtPnBhZ2VQcm94eS0+YmFja0Zvcndh
cmRMaXN0KCkpKTsKICAgICBwcml2LT5zZXR0aW5ncyA9IGFkb3B0UHRyKG5ldyBFd2tfU2V0dGlu
Z3MoV0tQYWdlR3JvdXBHZXRQcmVmZXJlbmNlcyhXS1BhZ2VHZXRQYWdlR3JvdXAodG9BUEkocHJp
di0+cGFnZVByb3h5LmdldCgpKSkpKSk7Ci0gICAgcHJpdi0+Y29udGV4dCA9IGV3a19jb250ZXh0
X3JlZihjb250ZXh0KTsKKyAgICBwcml2LT5jb250ZXh0ID0gY29udGV4dDsKIAogI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKICAgICBwcml2LT5wYWdlVmlld3BvcnRDb250cm9sbGVyQ2xp
ZW50ID0gUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6Y3JlYXRlKGV3a1ZpZXcpOwpA
QCAtODQxLDcgKzgzOSw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19pbml0aWFsaXplKEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBFd2tfQ29udGV4dCogY29udGV4dCwgV0tQCiAjZW5kaWYKIAogICAg
IC8qIExpc3RlbiBmb3IgZmF2aWNvbiBjaGFuZ2VzICovCi0gICAgRXdrX0Zhdmljb25fRGF0YWJh
c2UqIGljb25EYXRhYmFzZSA9IGV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2VfZ2V0KHByaXYt
PmNvbnRleHQpOworICAgIEV3a19GYXZpY29uX0RhdGFiYXNlKiBpY29uRGF0YWJhc2UgPSBwcml2
LT5jb250ZXh0LT5mYXZpY29uRGF0YWJhc2UoKTsKICAgICBpY29uRGF0YWJhc2UtPndhdGNoQ2hh
bmdlcyhJY29uQ2hhbmdlQ2FsbGJhY2tEYXRhKF9ld2tfdmlld19vbl9mYXZpY29uX2NoYW5nZWQs
IGV3a1ZpZXcpKTsKIH0KIApAQCAtODgxLDcgKzg3OSw3IEBAIEV2YXNfT2JqZWN0KiBld2tfdmll
d19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VH
cm91CiAgICAgaWYgKCFld2tWaWV3KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIF9ld2tfdmll
d19pbml0aWFsaXplKGV3a1ZpZXcsIGV3a19jb250ZXh0X25ld19mcm9tX1dLQ29udGV4dChjb250
ZXh0UmVmKSwgcGFnZUdyb3VwUmVmKTsKKyAgICBfZXdrX3ZpZXdfaW5pdGlhbGl6ZShld2tWaWV3
LCBFd2tfQ29udGV4dDo6Y3JlYXRlKGNvbnRleHRSZWYpLCBwYWdlR3JvdXBSZWYpOwogCiAgICAg
cmV0dXJuIGV3a1ZpZXc7CiB9CkBAIC05MDMsNiArOTAxLDcgQEAgRXZhc19PYmplY3QqIGV3a192
aWV3X3NtYXJ0X2FkZChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBFd2tfQ29udGV4
dCogY28KIAogRXZhc19PYmplY3QqIGV3a192aWV3X2FkZF93aXRoX2NvbnRleHQoRXZhcyogY2Fu
dmFzLCBFd2tfQ29udGV4dCogY29udGV4dCkKIHsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoY29udGV4dCwgMCk7CiAgICAgcmV0dXJuIGV3a192aWV3X3NtYXJ0X2FkZChjYW52
YXMsIF9ld2tfdmlld19zbWFydF9jbGFzc19uZXcoKSwgY29udGV4dCk7CiB9CiAKQEAgLTkxNiw3
ICs5MTUsNyBAQCBFd2tfQ29udGV4dCogZXdrX3ZpZXdfY29udGV4dF9nZXQoY29uc3QgRXZhc19P
YmplY3QqIGV3a1ZpZXcpCiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
bWFydERhdGEsIDApOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEs
IHByaXYsIDApOwogCi0gICAgcmV0dXJuIHByaXYtPmNvbnRleHQ7CisgICAgcmV0dXJuIHByaXYt
PmNvbnRleHQuZ2V0KCk7CiB9CiAKIC8qKgpAQCAtMTU3Myw3ICsxNTcyLDcgQEAgdm9pZCBld2tf
dmlld191cGRhdGVfaWNvbihFdmFzX09iamVjdCogZXdrVmlldykKICAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICBFd2tfRmF2aWNvbl9EYXRhYmFzZSog
aWNvbkRhdGFiYXNlID0gZXdrX2NvbnRleHRfZmF2aWNvbl9kYXRhYmFzZV9nZXQocHJpdi0+Y29u
dGV4dCk7CisgICAgRXdrX0Zhdmljb25fRGF0YWJhc2UqIGljb25EYXRhYmFzZSA9IHByaXYtPmNv
bnRleHQtPmZhdmljb25EYXRhYmFzZSgpOwogICAgIEFTU0VSVChpY29uRGF0YWJhc2UpOwogCiAg
ICAgcHJpdi0+ZmF2aWNvblVSTCA9IGV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25fdXJsX2dldChp
Y29uRGF0YWJhc2UsIHByaXYtPnVybCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169902</attachid>
            <date>2012-10-22 07:04:05 -0700</date>
            <delta_ts>2012-10-23 01:17:44 -0700</delta_ts>
            <desc>to be landed</desc>
            <filename>bug99594_v3</filename>
            <type>text/plain</type>
            <size>40258</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDA2N2M2MTJkMGU5Yjg2Yzg2ZTA2OTYyNGQ2MTZlMzc4NzkzMmQ4YWMKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
TW9uIE9jdCAyMiAxNjo1MTo0MSAyMDEyICswMzAwCgogICAgYnVnOTk1OTQKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggZTM0MTQzZS4uZThkMTIxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDEyLTEw
LTIyICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgor
CisgICAgICAgIFtFRkxdW1dLMl0gUmVmYWN0b3IgRXdrX0NvbnRleHQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5NTk0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCisKKyAgICAgICAgRXdrX0NvbnRleHQg
aXMgbm93IGVuY2Fwc3VsYXRlZCB0byBhIEMrKyBjbGFzcyBpbmhlcml0ZWQgZnJvbSBXVEY6OlJl
ZkNvdW50ZWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpoYW5kbGVEb3dubG9hZFJlcXVl
c3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcDoKKyAgICAg
ICAgKEV3a19Db250ZXh0OjpFd2tfQ29udGV4dCk6CisgICAgICAgIChFd2tfQ29udGV4dDo6fkV3
a19Db250ZXh0KToKKyAgICAgICAgKEV3a19Db250ZXh0OjpjcmVhdGUpOgorICAgICAgICAoRXdr
X0NvbnRleHQ6OmRlZmF1bHRDb250ZXh0KToKKyAgICAgICAgKEV3a19Db250ZXh0Ojpjb29raWVN
YW5hZ2VyKToKKyAgICAgICAgKEV3a19Db250ZXh0OjpmYXZpY29uRGF0YWJhc2UpOgorICAgICAg
ICAoRXdrX0NvbnRleHQ6OnJlZ2lzdGVyVVJMU2NoZW1lKToKKyAgICAgICAgKEV3a19Db250ZXh0
Ojp2aWJyYXRpb25Qcm92aWRlcik6CisgICAgICAgIChFd2tfQ29udGV4dDo6YWRkVmlzaXRlZExp
bmspOgorICAgICAgICAoRXdrX0NvbnRleHQ6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoRXdr
X0NvbnRleHQ6OmNhY2hlTW9kZWwpOgorICAgICAgICAoZXdrX2NvbnRleHRfcmVmKToKKyAgICAg
ICAgKGV3a19jb250ZXh0X3VucmVmKToKKyAgICAgICAgKGV3a19jb250ZXh0X2Nvb2tpZV9tYW5h
Z2VyX2dldCk6CisgICAgICAgIChld2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldCk6Cisg
ICAgICAgIChFd2tfQ29udGV4dDo6d2tDb250ZXh0KToKKyAgICAgICAgKEV3a19Db250ZXh0Ojph
ZGREb3dubG9hZEpvYik6CisgICAgICAgIChFd2tfQ29udGV4dDo6ZG93bmxvYWRKb2IpOgorICAg
ICAgICAoRXdrX0NvbnRleHQ6OnJlbW92ZURvd25sb2FkSm9iKToKKyAgICAgICAgKEV3a19Db250
ZXh0OjpyZXF1ZXN0TWFuYWdlcik6CisgICAgICAgIChFd2tfQ29udGV4dDo6dXJsU2NoZW1lUmVx
dWVzdFJlY2VpdmVkKToKKyAgICAgICAgKGV3a19jb250ZXh0X2RlZmF1bHRfZ2V0KToKKyAgICAg
ICAgKGV3a19jb250ZXh0X25ldyk6CisgICAgICAgIChld2tfY29udGV4dF9uZXdfd2l0aF9pbmpl
Y3RlZF9idW5kbGVfcGF0aCk6CisgICAgICAgIChld2tfY29udGV4dF91cmxfc2NoZW1lX3JlZ2lz
dGVyKToKKyAgICAgICAgKGV3a19jb250ZXh0X3ZpYnJhdGlvbl9jbGllbnRfY2FsbGJhY2tzX3Nl
dCk6CisgICAgICAgIChld2tfY29udGV4dF9oaXN0b3J5X2NhbGxiYWNrc19zZXQpOgorICAgICAg
ICAoZXdrX2NvbnRleHRfdmlzaXRlZF9saW5rX2FkZCk6CisgICAgICAgIChld2tfY29udGV4dF9j
YWNoZV9tb2RlbF9zZXQpOgorICAgICAgICAoZXdrX2NvbnRleHRfY2FjaGVfbW9kZWxfZ2V0KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnQu
Y3BwOgorICAgICAgICAoZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUpOgor
ICAgICAgICAoZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKGRpZENyZWF0ZURlc3RpbmF0
aW9uKToKKyAgICAgICAgKGRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKGRpZEZhaWwpOgorICAg
ICAgICAoZGlkQ2FuY2VsKToKKyAgICAgICAgKGRpZEZpbmlzaCk6CisgICAgICAgIChld2tfY29u
dGV4dF9kb3dubG9hZF9jbGllbnRfYXR0YWNoKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudC5jcHA6CisgICAgICAgIChnZXRFd2tIaXN0b3J5
Q2xpZW50KToKKyAgICAgICAgKGRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKToKKyAgICAg
ICAgKGRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdCk6CisgICAgICAgIChkaWRQZXJmb3JtU2VydmVy
UmVkaXJlY3QpOgorICAgICAgICAoZGlkVXBkYXRlSGlzdG9yeVRpdGxlKToKKyAgICAgICAgKHBv
cHVsYXRlVmlzaXRlZExpbmtzKToKKyAgICAgICAgKGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50
X2F0dGFjaCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0
ZS5oOgorICAgICAgICAoRXdrX0NvbnRleHQpOgorICAgICAgICAoRXdrX0NvbnRleHQ6OmNyZWF0
ZSk6CisgICAgICAgIChFd2tfQ29udGV4dDo6aGlzdG9yeUNsaWVudCk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudC5jcHA6Cisg
ICAgICAgIChkaWRSZWNlaXZlVVJJUmVxdWVzdCk6CisgICAgICAgIChld2tfY29udGV4dF9yZXF1
ZXN0X21hbmFnZXJfY2xpZW50X2F0dGFjaCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3ZpZXcuY3BwOgorICAgICAgICAoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAg
KEV3a19WaWV3X1ByaXZhdGVfRGF0YTo6RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAg
KEV3a19WaWV3X1ByaXZhdGVfRGF0YTo6fkV3a19WaWV3X1ByaXZhdGVfRGF0YSk6CisgICAgICAg
IChfZXdrX3ZpZXdfcHJpdl9kZWwpOgorICAgICAgICAoX2V3a192aWV3X2luaXRpYWxpemUpOgor
ICAgICAgICAoZXdrX3ZpZXdfYmFzZV9hZGQpOgorICAgICAgICAoZXdrX3ZpZXdfYWRkX3dpdGhf
Y29udGV4dCk6CisgICAgICAgIChld2tfdmlld19jb250ZXh0X2dldCk6CisgICAgICAgIChld2tf
dmlld191cGRhdGVfaWNvbik6CisKIDIwMTItMTAtMjIgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24u
aGF1c21hbm5AZGlnaWEuY29tPgogCiAgICAgICAgIFtRdF0gRml4IGJ1aWxkIHdpdGhvdXQgUXRX
aWRnZXRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdl
Q2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xp
ZW50SW1wbC5jcHAKaW5kZXggMGNhNzU2OS4uMDU0YmZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmNwcApAQCAtMjg0LDcgKzI4
NCw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmNvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVw
cmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmluCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpoYW5k
bGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSogZG93bmxvYWQpCiB7CiAgICAgUmVmUHRy
PEV3a19Eb3dubG9hZF9Kb2I+IGV3a0Rvd25sb2FkID0gRXdrX0Rvd25sb2FkX0pvYjo6Y3JlYXRl
KGRvd25sb2FkLCBtX3ZpZXdXaWRnZXQpOwotICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9h
ZGQoZXdrX3ZpZXdfY29udGV4dF9nZXQobV92aWV3V2lkZ2V0KSwgZXdrRG93bmxvYWQuZ2V0KCkp
OworICAgIGV3a192aWV3X2NvbnRleHRfZ2V0KG1fdmlld1dpZGdldCktPmFkZERvd25sb2FkSm9i
KGV3a0Rvd25sb2FkLmdldCgpKTsKIH0KIAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCmlu
ZGV4IDlmYjg4OTIuLjM1ZmMxNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfY29udGV4dC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJXS1N0
cmluZy5oIgogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJJY29uRGF0YWJh
c2UuaCIKKyNpbmNsdWRlICJXZWJTb3VwUmVxdWVzdE1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUg
ImV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2Nv
bnRleHRfaGlzdG9yeV9jbGllbnRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19jb250ZXh0X3By
aXZhdGUuaCIKQEAgLTY5LDc1ICs3MCwxMzAgQEAgc3RydWN0IEV3a19VcmxfU2NoZW1lX0hhbmRs
ZXIgewogICAgIHsgfQogfTsKIAotdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgRXdrX1VybF9TY2hl
bWVfSGFuZGxlcj4gVVJMU2NoZW1lSGFuZGxlck1hcDsKLQotc3RydWN0IEV3a19Db250ZXh0IHsK
LSAgICB1bnNpZ25lZCBfX3JlZjsgLyoqPCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBvYmpl
Y3QgKi8KLSAgICBXS1JldGFpblB0cjxXS0NvbnRleHRSZWY+IGNvbnRleHQ7Ci0KLSAgICBPd25Q
dHI8RXdrX0Nvb2tpZV9NYW5hZ2VyPiBjb29raWVNYW5hZ2VyOwotICAgIE93blB0cjxFd2tfRmF2
aWNvbl9EYXRhYmFzZT4gZmF2aWNvbkRhdGFiYXNlOworRXdrX0NvbnRleHQ6OkV3a19Db250ZXh0
KFdLQ29udGV4dFJlZiBjb250ZXh0KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBt
X3JlcXVlc3RNYW5hZ2VyKFdLQ29udGV4dEdldFNvdXBSZXF1ZXN0TWFuYWdlcihjb250ZXh0KSkK
KyAgICAsIG1faGlzdG9yeUNsaWVudCgpCit7CiAjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQot
ICAgIFJlZlB0cjxCYXR0ZXJ5UHJvdmlkZXI+IGJhdHRlcnlQcm92aWRlcjsKKyAgICBtX2JhdHRl
cnlQcm92aWRlciA9IEJhdHRlcnlQcm92aWRlcjo6Y3JlYXRlKGNvbnRleHQpOwogI2VuZGlmCisK
ICNpZiBFTkFCTEUoTkVUV09SS19JTkZPKQotICAgIFJlZlB0cjxOZXR3b3JrSW5mb1Byb3ZpZGVy
PiBuZXR3b3JrSW5mb1Byb3ZpZGVyOworICAgIG1fbmV0d29ya0luZm9Qcm92aWRlciA9IE5ldHdv
cmtJbmZvUHJvdmlkZXI6OmNyZWF0ZShjb250ZXh0KTsKICNlbmRpZgorCiAjaWYgRU5BQkxFKFZJ
QlJBVElPTikKLSAgICBSZWZQdHI8VmlicmF0aW9uUHJvdmlkZXI+IHZpYnJhdGlvblByb3ZpZGVy
OworICAgIG1fdmlicmF0aW9uUHJvdmlkZXIgPSBWaWJyYXRpb25Qcm92aWRlcjo6Y3JlYXRlKGNv
bnRleHQpOwogI2VuZGlmCi0gICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPEV3a19Eb3dubG9h
ZF9Kb2I+ID4gZG93bmxvYWRKb2JzOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTb3VwUmVxdWVzdE1h
bmFnZXJSZWY+IHJlcXVlc3RNYW5hZ2VyOwotICAgIFVSTFNjaGVtZUhhbmRsZXJNYXAgdXJsU2No
ZW1lSGFuZGxlcnM7CiAKLSAgICBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCBoaXN0b3J5Q2xp
ZW50OworI2lmIEVOQUJMRShNRU1PUllfU0FNUExFUikKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFs
aXplTWVtb3J5U2FtcGxlciA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdCBjaGFyIGVudmlyb25t
ZW50VmFyaWFibGVbXSA9ICJTQU1QTEVfTUVNT1JZIjsKIAotICAgIEV3a19Db250ZXh0KFdLUmV0
YWluUHRyPFdLQ29udGV4dFJlZj4gY29udGV4dFJlZikKLSAgICAgICAgOiBfX3JlZigxKQotICAg
ICAgICAsIGNvbnRleHQoY29udGV4dFJlZikKLSAgICAgICAgLCByZXF1ZXN0TWFuYWdlcihXS0Nv
bnRleHRHZXRTb3VwUmVxdWVzdE1hbmFnZXIoY29udGV4dFJlZi5nZXQoKSkpCi0gICAgICAgICwg
aGlzdG9yeUNsaWVudCgpCi0gICAgewotI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKLSAgICAg
ICAgYmF0dGVyeVByb3ZpZGVyID0gQmF0dGVyeVByb3ZpZGVyOjpjcmVhdGUoY29udGV4dC5nZXQo
KSk7CisgICAgaWYgKCFpbml0aWFsaXplTWVtb3J5U2FtcGxlciAmJiBnZXRlbnYoZW52aXJvbm1l
bnRWYXJpYWJsZSkpIHsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IGludGVydmFs
KEFkb3B0V0ssIFdLRG91YmxlQ3JlYXRlKDAuMCkpOworICAgICAgICBXS0NvbnRleHRTdGFydE1l
bW9yeVNhbXBsZXIoY29udGV4dCwgaW50ZXJ2YWwuZ2V0KCkpOworICAgICAgICBpbml0aWFsaXpl
TWVtb3J5U2FtcGxlciA9IHRydWU7CisgICAgfQogI2VuZGlmCiAKLSNpZiBFTkFCTEUoTkVUV09S
S19JTkZPKQotICAgICAgICBuZXR3b3JrSW5mb1Byb3ZpZGVyID0gTmV0d29ya0luZm9Qcm92aWRl
cjo6Y3JlYXRlKGNvbnRleHQuZ2V0KCkpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIGV3
a190ZXh0X2NoZWNrZXJfY2xpZW50X2F0dGFjaCgpOworICAgIGlmIChld2tfc2V0dGluZ3NfY29u
dGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpKSB7CisgICAgICAgIC8vIExvYWQg
dGhlIGRlZmF1bHQgbGFuZ3VhZ2UuCisgICAgICAgIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2lu
Z19sYW5ndWFnZXNfc2V0KDApOworICAgIH0KICNlbmRpZgogCi0jaWYgRU5BQkxFKFZJQlJBVElP
TikKLSAgICAgICAgdmlicmF0aW9uUHJvdmlkZXIgPSBWaWJyYXRpb25Qcm92aWRlcjo6Y3JlYXRl
KGNvbnRleHQuZ2V0KCkpOwotI2VuZGlmCisgICAgZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2Vy
X2NsaWVudF9hdHRhY2godGhpcyk7CisgICAgZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50X2F0
dGFjaCh0aGlzKTsKKyAgICBld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9hdHRhY2godGhpcyk7
Cit9CiAKLSNpZiBFTkFCTEUoTUVNT1JZX1NBTVBMRVIpCi0gICAgICAgIHN0YXRpYyBib29sIGlu
aXRpYWxpemVNZW1vcnlTYW1wbGVyID0gZmFsc2U7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFy
IGVudmlyb25tZW50VmFyaWFibGVbXSA9ICJTQU1QTEVfTUVNT1JZIjsKK0V3a19Db250ZXh0Ojp+
RXdrX0NvbnRleHQoKQoreworfQogCi0gICAgICAgIGlmICghaW5pdGlhbGl6ZU1lbW9yeVNhbXBs
ZXIgJiYgZ2V0ZW52KGVudmlyb25tZW50VmFyaWFibGUpKSB7Ci0gICAgICAgICAgICBXS1JldGFp
blB0cjxXS0RvdWJsZVJlZj4gaW50ZXJ2YWwoQWRvcHRXSywgV0tEb3VibGVDcmVhdGUoMC4wKSk7
Ci0gICAgICAgICAgICBXS0NvbnRleHRTdGFydE1lbW9yeVNhbXBsZXIoY29udGV4dC5nZXQoKSwg
aW50ZXJ2YWwuZ2V0KCkpOwotICAgICAgICAgICAgaW5pdGlhbGl6ZU1lbW9yeVNhbXBsZXIgPSB0
cnVlOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5h
Z2VyX2NsaWVudF9hdHRhY2godGhpcyk7Ci0gICAgICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX2Ns
aWVudF9hdHRhY2godGhpcyk7Ci0gICAgICAgIGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X2F0
dGFjaCh0aGlzKTsKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICAgICAgZXdrX3RleHRfY2hl
Y2tlcl9jbGllbnRfYXR0YWNoKCk7Ci0gICAgICAgIGlmIChld2tfc2V0dGluZ3NfY29udGludW91
c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpKSB7Ci0gICAgICAgICAgICAvLyBMb2FkIHRo
ZSBkZWZhdWx0IGxhbmd1YWdlLgotICAgICAgICAgICAgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNr
aW5nX2xhbmd1YWdlc19zZXQoMCk7CitQYXNzUmVmUHRyPEV3a19Db250ZXh0PiBFd2tfQ29udGV4
dDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgaW5qZWN0ZWRCdW5kbGVQYXRoKQoreyAgIAorICAgIGlm
ICghZmlsZUV4aXN0cyhpbmplY3RlZEJ1bmRsZVBhdGgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpbmplY3RlZEJ1bmRsZVBhdGhXSyA9IGFkb3B0
V0sodG9Db3BpZWRBUEkoaW5qZWN0ZWRCdW5kbGVQYXRoKSk7CisgICAgV0tSZXRhaW5QdHI8V0tD
b250ZXh0UmVmPiBjb250ZXh0V0sgPSBhZG9wdFdLKFdLQ29udGV4dENyZWF0ZVdpdGhJbmplY3Rl
ZEJ1bmRsZVBhdGgoaW5qZWN0ZWRCdW5kbGVQYXRoV0suZ2V0KCkpKTsKKworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgRXdrX0NvbnRleHQoY29udGV4dFdLLmdldCgpKSk7Cit9CisKK1Bhc3NSZWZQ
dHI8RXdrX0NvbnRleHQ+IEV3a19Db250ZXh0OjpkZWZhdWx0Q29udGV4dCgpCit7CisgICAgc3Rh
dGljIFJlZlB0cjxFd2tfQ29udGV4dD4gZGVmYXVsdEluc3RhbmNlID0gY3JlYXRlKGFkb3B0V0so
V0tDb250ZXh0Q3JlYXRlKCkpLmdldCgpKTsKKworICAgIHJldHVybiBkZWZhdWx0SW5zdGFuY2U7
Cit9CisKK0V3a19Db29raWVfTWFuYWdlciogRXdrX0NvbnRleHQ6OmNvb2tpZU1hbmFnZXIoKQor
eworICAgIGlmICghbV9jb29raWVNYW5hZ2VyKQorICAgICAgICBtX2Nvb2tpZU1hbmFnZXIgPSBF
d2tfQ29va2llX01hbmFnZXI6OmNyZWF0ZShXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKG1fY29u
dGV4dC5nZXQoKSkpOworCisgICAgcmV0dXJuIG1fY29va2llTWFuYWdlci5nZXQoKTsKK30KKwor
RXdrX0Zhdmljb25fRGF0YWJhc2UqIEV3a19Db250ZXh0OjpmYXZpY29uRGF0YWJhc2UoKQorewor
ICAgIGlmICghbV9mYXZpY29uRGF0YWJhc2UpIHsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tJY29u
RGF0YWJhc2VSZWY+IGljb25EYXRhYmFzZSA9IFdLQ29udGV4dEdldEljb25EYXRhYmFzZShtX2Nv
bnRleHQuZ2V0KCkpOworICAgICAgICAvLyBTZXQgdGhlIGRhdGFiYXNlIHBhdGggaWYgaXQgaXMg
bm90IG9wZW4geWV0LgorICAgICAgICBpZiAoIXRvSW1wbChpY29uRGF0YWJhc2UuZ2V0KCkpLT5p
c09wZW4oKSkgeworICAgICAgICAgICAgV2ViQ29udGV4dCogd2ViQ29udGV4dCA9IHRvSW1wbCht
X2NvbnRleHQuZ2V0KCkpOworICAgICAgICAgICAgU3RyaW5nIGRhdGFiYXNlUGF0aCA9IHdlYkNv
bnRleHQtPmljb25EYXRhYmFzZVBhdGgoKSArICIvIiArIFdlYkNvcmU6Okljb25EYXRhYmFzZTo6
ZGVmYXVsdERhdGFiYXNlRmlsZW5hbWUoKTsKKyAgICAgICAgICAgIHdlYkNvbnRleHQtPnNldElj
b25EYXRhYmFzZVBhdGgoZGF0YWJhc2VQYXRoKTsKICAgICAgICAgfQotI2VuZGlmCisgICAgICAg
IG1fZmF2aWNvbkRhdGFiYXNlID0gRXdrX0Zhdmljb25fRGF0YWJhc2U6OmNyZWF0ZShpY29uRGF0
YWJhc2UuZ2V0KCkpOwogICAgIH0KLX07CisKKyAgICByZXR1cm4gbV9mYXZpY29uRGF0YWJhc2Uu
Z2V0KCk7Cit9CisKK2Jvb2wgRXdrX0NvbnRleHQ6OnJlZ2lzdGVyVVJMU2NoZW1lKGNvbnN0IFN0
cmluZyYgc2NoZW1lLCBFd2tfVXJsX1NjaGVtZV9SZXF1ZXN0X0NiIGNhbGxiYWNrLCB2b2lkKiB1
c2VyRGF0YSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2FsbGJhY2ss
IGZhbHNlKTsKKworICAgIG1fdXJsU2NoZW1lSGFuZGxlcnMuc2V0KHNjaGVtZSwgRXdrX1VybF9T
Y2hlbWVfSGFuZGxlcihjYWxsYmFjaywgdXNlckRhdGEpKTsKKyAgICB0b0ltcGwobV9yZXF1ZXN0
TWFuYWdlci5nZXQoKSktPnJlZ2lzdGVyVVJJU2NoZW1lKHNjaGVtZSk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworI2lmIEVOQUJMRShWSUJSQVRJT04pCitQYXNzUmVmUHRyPFZpYnJhdGlvblBy
b3ZpZGVyPiBFd2tfQ29udGV4dDo6dmlicmF0aW9uUHJvdmlkZXIoKQoreworICAgIHJldHVybiBt
X3ZpYnJhdGlvblByb3ZpZGVyOworfQorI2VuZGlmCisKK3ZvaWQgRXdrX0NvbnRleHQ6OmFkZFZp
c2l0ZWRMaW5rKGNvbnN0IFN0cmluZyYgdmlzaXRlZFVSTCkKK3sKKyAgICB0b0ltcGwobV9jb250
ZXh0LmdldCgpKS0+YWRkVmlzaXRlZExpbmsodmlzaXRlZFVSTCk7Cit9CisKK3ZvaWQgRXdrX0Nv
bnRleHQ6OnNldENhY2hlTW9kZWwoRXdrX0NhY2hlX01vZGVsIGNhY2hlTW9kZWwpCit7CisgICAg
V0tDb250ZXh0U2V0Q2FjaGVNb2RlbChtX2NvbnRleHQuZ2V0KCksIHN0YXRpY19jYXN0PEV3a19D
YWNoZV9Nb2RlbD4oY2FjaGVNb2RlbCkpOworfQorCitFd2tfQ2FjaGVfTW9kZWwgRXdrX0NvbnRl
eHQ6OmNhY2hlTW9kZWwoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxFd2tfQ2Fj
aGVfTW9kZWw+KFdLQ29udGV4dEdldENhY2hlTW9kZWwobV9jb250ZXh0LmdldCgpKSk7Cit9CiAK
IEV3a19Db250ZXh0KiBld2tfY29udGV4dF9yZWYoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCiB7
CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV3a0NvbnRleHQsIDApOwotICAg
ICsrZXdrQ29udGV4dC0+X19yZWY7CisKKyAgICBld2tDb250ZXh0LT5yZWYoKTsKIAogICAgIHJl
dHVybiBld2tDb250ZXh0OwogfQpAQCAtMTQ1LDcyICsyMDEsNDIgQEAgRXdrX0NvbnRleHQqIGV3
a19jb250ZXh0X3JlZihFd2tfQ29udGV4dCogZXdrQ29udGV4dCkKIHZvaWQgZXdrX2NvbnRleHRf
dW5yZWYoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4oZXdrQ29udGV4dCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fRkFMU0VfUkVUVVJOKGV3
a0NvbnRleHQtPl9fcmVmID4gMCk7Ci0KLSAgICBpZiAoLS1ld2tDb250ZXh0LT5fX3JlZikKLSAg
ICAgICAgcmV0dXJuOwogCi0gICAgZGVsZXRlIGV3a0NvbnRleHQ7CisgICAgZXdrQ29udGV4dC0+
ZGVyZWYoKTsKIH0KIAogRXdrX0Nvb2tpZV9NYW5hZ2VyKiBld2tfY29udGV4dF9jb29raWVfbWFu
YWdlcl9nZXQoY29uc3QgRXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCiB7CiAgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKGV3a0NvbnRleHQsIDApOwogCi0gICAgaWYgKCFld2tDb250
ZXh0LT5jb29raWVNYW5hZ2VyKQotICAgICAgICBjb25zdF9jYXN0PEV3a19Db250ZXh0Kj4oZXdr
Q29udGV4dCktPmNvb2tpZU1hbmFnZXIgPSBFd2tfQ29va2llX01hbmFnZXI6OmNyZWF0ZShXS0Nv
bnRleHRHZXRDb29raWVNYW5hZ2VyKGV3a0NvbnRleHQtPmNvbnRleHQuZ2V0KCkpKTsKLQotICAg
IHJldHVybiBld2tDb250ZXh0LT5jb29raWVNYW5hZ2VyLmdldCgpOworICAgIHJldHVybiBjb25z
dF9jYXN0PEV3a19Db250ZXh0Kj4oZXdrQ29udGV4dCktPmNvb2tpZU1hbmFnZXIoKTsKIH0KIAog
RXdrX0Zhdmljb25fRGF0YWJhc2UqIGV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2VfZ2V0KGNv
bnN0IEV3a19Db250ZXh0KiBld2tDb250ZXh0KQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChld2tDb250ZXh0LCAwKTsKIAotICAgIGlmICghZXdrQ29udGV4dC0+ZmF2aWNv
bkRhdGFiYXNlKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLSWNvbkRhdGFiYXNlUmVmPiBpY29u
RGF0YWJhc2UgPSBXS0NvbnRleHRHZXRJY29uRGF0YWJhc2UoZXdrQ29udGV4dC0+Y29udGV4dC5n
ZXQoKSk7Ci0gICAgICAgIC8vIFNldCB0aGUgZGF0YWJhc2UgcGF0aCBpZiBpdCBpcyBub3Qgb3Bl
biB5ZXQuCi0gICAgICAgIGlmICghdG9JbXBsKGljb25EYXRhYmFzZS5nZXQoKSktPmlzT3Blbigp
KSB7Ci0gICAgICAgICAgICBXZWJDb250ZXh0KiB3ZWJDb250ZXh0ID0gdG9JbXBsKGV3a0NvbnRl
eHQtPmNvbnRleHQuZ2V0KCkpOwotICAgICAgICAgICAgU3RyaW5nIGRhdGFiYXNlUGF0aCA9IHdl
YkNvbnRleHQtPmljb25EYXRhYmFzZVBhdGgoKSArICIvIiArIFdlYkNvcmU6Okljb25EYXRhYmFz
ZTo6ZGVmYXVsdERhdGFiYXNlRmlsZW5hbWUoKTsKLSAgICAgICAgICAgIHdlYkNvbnRleHQtPnNl
dEljb25EYXRhYmFzZVBhdGgoZGF0YWJhc2VQYXRoKTsKLSAgICAgICAgfQotICAgICAgICBjb25z
dF9jYXN0PEV3a19Db250ZXh0Kj4oZXdrQ29udGV4dCktPmZhdmljb25EYXRhYmFzZSA9IEV3a19G
YXZpY29uX0RhdGFiYXNlOjpjcmVhdGUoaWNvbkRhdGFiYXNlLmdldCgpKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gZXdrQ29udGV4dC0+ZmF2aWNvbkRhdGFiYXNlLmdldCgpOworICAgIHJldHVybiBj
b25zdF9jYXN0PEV3a19Db250ZXh0Kj4oZXdrQ29udGV4dCktPmZhdmljb25EYXRhYmFzZSgpOwog
fQogCi1XS0NvbnRleHRSZWYgZXdrX2NvbnRleHRfV0tDb250ZXh0X2dldChjb25zdCBFd2tfQ29u
dGV4dCogZXdrQ29udGV4dCkKK1dLQ29udGV4dFJlZiBFd2tfQ29udGV4dDo6d2tDb250ZXh0KCkK
IHsKLSAgICByZXR1cm4gZXdrQ29udGV4dC0+Y29udGV4dC5nZXQoKTsKLX0KLQotLyoqCi0gKiBA
aW50ZXJuYWwKLSAqIENyZWF0ZSBFd2tfQ29udGV4dCBmcm9tIFdLQ29udGV4dC4KLSAqLwotRXdr
X0NvbnRleHQqIGV3a19jb250ZXh0X25ld19mcm9tX1dLQ29udGV4dChXS0NvbnRleHRSZWYgY29u
dGV4dFJlZikKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY29udGV4dFJl
ZiwgMCk7Ci0KLSAgICByZXR1cm4gbmV3IEV3a19Db250ZXh0KGNvbnRleHRSZWYpOworICAgIHJl
dHVybiBtX2NvbnRleHQuZ2V0KCk7CiB9CiAKIC8qKgogICogQGludGVybmFsCiAgKiBSZWdpc3Rl
cnMgdGhhdCBhIG5ldyBkb3dubG9hZCBoYXMgYmVlbiByZXF1ZXN0ZWQuCiAgKi8KLXZvaWQgZXdr
X2NvbnRleHRfZG93bmxvYWRfam9iX2FkZChFd2tfQ29udGV4dCogZXdrQ29udGV4dCwgRXdrX0Rv
d25sb2FkX0pvYiogZXdrRG93bmxvYWQpCit2b2lkIEV3a19Db250ZXh0OjphZGREb3dubG9hZEpv
YihFd2tfRG93bmxvYWRfSm9iKiBld2tEb3dubG9hZCkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihld2tDb250ZXh0KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihl
d2tEb3dubG9hZCk7CiAKICAgICB1aW50NjRfdCBkb3dubG9hZElkID0gZXdrRG93bmxvYWQtPmlk
KCk7Ci0gICAgaWYgKGV3a0NvbnRleHQtPmRvd25sb2FkSm9icy5jb250YWlucyhkb3dubG9hZElk
KSkKKyAgICBpZiAobV9kb3dubG9hZEpvYnMuY29udGFpbnMoZG93bmxvYWRJZCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGV3a0NvbnRleHQtPmRvd25sb2FkSm9icy5hZGQoZG93bmxvYWRJZCwg
ZXdrRG93bmxvYWQpOworICAgIG1fZG93bmxvYWRKb2JzLmFkZChkb3dubG9hZElkLCBld2tEb3du
bG9hZCk7CiB9CiAKIC8qKgpAQCAtMjE4LDExICsyNDQsOSBAQCB2b2lkIGV3a19jb250ZXh0X2Rv
d25sb2FkX2pvYl9hZGQoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIEV3a19Eb3dubG9hZF9Kb2Iq
IGV3awogICogUmV0dXJucyB0aGUgI0V3a19Eb3dubG9hZF9Kb2Igd2l0aCB0aGUgZ2l2ZW4gQGEg
ZG93bmxvYWRJZCwgb3IKICAqIEBjIDAgaW4gY2FzZSBvZiBmYWlsdXJlLgogICovCi1Fd2tfRG93
bmxvYWRfSm9iKiBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KGNvbnN0IEV3a19Db250ZXh0
KiBld2tDb250ZXh0LCB1aW50NjRfdCBkb3dubG9hZElkKQorRXdrX0Rvd25sb2FkX0pvYiogRXdr
X0NvbnRleHQ6OmRvd25sb2FkSm9iKHVpbnQ2NF90IGRvd25sb2FkSWQpCiB7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV3a0NvbnRleHQsIDApOwotCi0gICAgcmV0dXJuIGV3
a0NvbnRleHQtPmRvd25sb2FkSm9icy5nZXQoZG93bmxvYWRJZCkuZ2V0KCk7CisgICAgcmV0dXJu
IG1fZG93bmxvYWRKb2JzLmdldChkb3dubG9hZElkKS5nZXQoKTsKIH0KIAogLyoqCkBAIC0yMzAs
MTAgKzI1NCw5IEBAIEV3a19Eb3dubG9hZF9Kb2IqIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9n
ZXQoY29uc3QgRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIHVpCiAgKiBSZW1vdmVzIHRoZSAjRXdr
X0Rvd25sb2FkX0pvYiB3aXRoIHRoZSBnaXZlbiBAYSBkb3dubG9hZElkIGZyb20gdGhlIGludGVy
bmFsCiAgKiBIYXNoTWFwLgogICovCi12b2lkIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9yZW1v
dmUoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIHVpbnQ2NF90IGRvd25sb2FkSWQpCit2b2lkIEV3
a19Db250ZXh0OjpyZW1vdmVEb3dubG9hZEpvYih1aW50NjRfdCBkb3dubG9hZElkKQogewotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0NvbnRleHQpOwotICAgIGV3a0NvbnRleHQt
PmRvd25sb2FkSm9icy5yZW1vdmUoZG93bmxvYWRJZCk7CisgICAgbV9kb3dubG9hZEpvYnMucmVt
b3ZlKGRvd25sb2FkSWQpOwogfQogCiAvKioKQEAgLTI0MSw5ICsyNjQsOSBAQCB2b2lkIGV3a19j
b250ZXh0X2Rvd25sb2FkX2pvYl9yZW1vdmUoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIHVpbnQ2
NF90IGRvd25sb2FkSQogICoKICAqIEBwYXJhbSBld2tDb250ZXh0IGEgI0V3a19Db250ZXh0IG9i
amVjdC4KICAqLwotV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWYgZXdrX2NvbnRleHRfcmVxdWVzdF9t
YW5hZ2VyX2dldChjb25zdCBFd2tfQ29udGV4dCogZXdrQ29udGV4dCkKK1dLU291cFJlcXVlc3RN
YW5hZ2VyUmVmIEV3a19Db250ZXh0OjpyZXF1ZXN0TWFuYWdlcigpCiB7Ci0gICAgcmV0dXJuIGV3
a0NvbnRleHQtPnJlcXVlc3RNYW5hZ2VyLmdldCgpOworICAgIHJldHVybiBtX3JlcXVlc3RNYW5h
Z2VyLmdldCgpOwogfQogCiAvKioKQEAgLTI1MywxMiArMjc2LDExIEBAIFdLU291cFJlcXVlc3RN
YW5hZ2VyUmVmIGV3a19jb250ZXh0X3JlcXVlc3RfbWFuYWdlcl9nZXQoY29uc3QgRXdrX0NvbnRl
eHQqIGV3a0NvCiAgKiBAcGFyYW0gZXdrQ29udGV4dCBhICNFd2tfQ29udGV4dCBvYmplY3QuCiAg
KiBAcGFyYW0gc2NoZW1lUmVxdWVzdCBhICNFd2tfVXJsX1NjaGVtZV9SZXF1ZXN0IG9iamVjdC4K
ICAqLwotdm9pZCBld2tfY29udGV4dF91cmxfc2NoZW1lX3JlcXVlc3RfcmVjZWl2ZWQoRXdrX0Nv
bnRleHQqIGV3a0NvbnRleHQsIEV3a19VcmxfU2NoZW1lX1JlcXVlc3QqIHNjaGVtZVJlcXVlc3Qp
Cit2b2lkIEV3a19Db250ZXh0Ojp1cmxTY2hlbWVSZXF1ZXN0UmVjZWl2ZWQoRXdrX1VybF9TY2hl
bWVfUmVxdWVzdCogc2NoZW1lUmVxdWVzdCkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihld2tDb250ZXh0KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzY2hlbWVS
ZXF1ZXN0KTsKIAotICAgIEV3a19VcmxfU2NoZW1lX0hhbmRsZXIgaGFuZGxlciA9IGV3a0NvbnRl
eHQtPnVybFNjaGVtZUhhbmRsZXJzLmdldChzY2hlbWVSZXF1ZXN0LT5zY2hlbWUoKSk7CisgICAg
RXdrX1VybF9TY2hlbWVfSGFuZGxlciBoYW5kbGVyID0gbV91cmxTY2hlbWVIYW5kbGVycy5nZXQo
c2NoZW1lUmVxdWVzdC0+c2NoZW1lKCkpOwogICAgIGlmICghaGFuZGxlci5jYWxsYmFjaykKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0yNjcsMzggKzI4OSwyNyBAQCB2b2lkIGV3a19jb250ZXh0X3Vy
bF9zY2hlbWVfcmVxdWVzdF9yZWNlaXZlZChFd2tfQ29udGV4dCogZXdrQ29udGV4dCwgRXdrX1Vy
bF9TYwogCiBFd2tfQ29udGV4dCogZXdrX2NvbnRleHRfZGVmYXVsdF9nZXQoKQogewotICAgIHN0
YXRpYyBFd2tfQ29udGV4dCBkZWZhdWx0Q29udGV4dChhZG9wdFdLKFdLQ29udGV4dENyZWF0ZSgp
KSk7Ci0KLSAgICByZXR1cm4gJmRlZmF1bHRDb250ZXh0OworICAgIHJldHVybiBFd2tfQ29udGV4
dDo6ZGVmYXVsdENvbnRleHQoKS5sZWFrUmVmKCk7CiB9CiAKIEV3a19Db250ZXh0KiBld2tfY29u
dGV4dF9uZXcoKQogewotICAgIHJldHVybiBuZXcgRXdrX0NvbnRleHQoYWRvcHRXSyhXS0NvbnRl
eHRDcmVhdGUoKSkpOworICAgIHJldHVybiBFd2tfQ29udGV4dDo6Y3JlYXRlKCkubGVha1JlZigp
OwogfQogCiBFd2tfQ29udGV4dCogZXdrX2NvbnRleHRfbmV3X3dpdGhfaW5qZWN0ZWRfYnVuZGxl
X3BhdGgoY29uc3QgY2hhciogcGF0aCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwocGF0aCwgMCk7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGF0aFJlZihB
ZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhwYXRoKSk7Ci0gICAgaWYgKCFm
aWxlRXhpc3RzKHRvSW1wbChwYXRoUmVmLmdldCgpKS0+c3RyaW5nKCkpKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIHJldHVybiBuZXcgRXdrX0NvbnRleHQoYWRvcHRXSyhXS0NvbnRleHRDcmVh
dGVXaXRoSW5qZWN0ZWRCdW5kbGVQYXRoKHBhdGhSZWYuZ2V0KCkpKSk7CisgICAgcmV0dXJuIEV3
a19Db250ZXh0OjpjcmVhdGUoU3RyaW5nOjpmcm9tVVRGOChwYXRoKSkubGVha1JlZigpOwogfQog
CiBFaW5hX0Jvb2wgZXdrX2NvbnRleHRfdXJsX3NjaGVtZV9yZWdpc3RlcihFd2tfQ29udGV4dCog
ZXdrQ29udGV4dCwgY29uc3QgY2hhciogc2NoZW1lLCBFd2tfVXJsX1NjaGVtZV9SZXF1ZXN0X0Ni
IGNhbGxiYWNrLCB2b2lkKiB1c2VyRGF0YSkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoZXdrQ29udGV4dCwgZmFsc2UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzY2hlbWUsIGZhbHNlKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoY2FsbGJhY2ssIGZhbHNlKTsKIAotICAgIGV3a0NvbnRleHQtPnVybFNjaGVtZUhhbmRsZXJz
LnNldChTdHJpbmc6OmZyb21VVEY4KHNjaGVtZSksIEV3a19VcmxfU2NoZW1lX0hhbmRsZXIoY2Fs
bGJhY2ssIHVzZXJEYXRhKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrU2NoZW1l
KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHNjaGVtZSkpOwotICAgIFdL
U291cFJlcXVlc3RNYW5hZ2VyUmVnaXN0ZXJVUklTY2hlbWUoZXdrQ29udGV4dC0+cmVxdWVzdE1h
bmFnZXIuZ2V0KCksIHdrU2NoZW1lLmdldCgpKTsKLQotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiBld2tDb250ZXh0LT5yZWdpc3RlclVSTFNjaGVtZShTdHJpbmc6OmZyb21VVEY4KHNjaGVt
ZSksIGNhbGxiYWNrLCB1c2VyRGF0YSk7CiB9CiAKIHZvaWQgZXdrX2NvbnRleHRfdmlicmF0aW9u
X2NsaWVudF9jYWxsYmFja3Nfc2V0KEV3a19Db250ZXh0KiBld2tDb250ZXh0LCBFd2tfVmlicmF0
aW9uX0NsaWVudF9WaWJyYXRlX0NiIHZpYnJhdGUsIEV3a19WaWJyYXRpb25fQ2xpZW50X1ZpYnJh
dGlvbl9DYW5jZWxfQ2IgY2FuY2VsLCB2b2lkKiBkYXRhKQpAQCAtMzA2LDcgKzMxNyw3IEBAIHZv
aWQgZXdrX2NvbnRleHRfdmlicmF0aW9uX2NsaWVudF9jYWxsYmFja3Nfc2V0KEV3a19Db250ZXh0
KiBld2tDb250ZXh0LCBFd2tfVmliCiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZXdr
Q29udGV4dCk7CiAKICNpZiBFTkFCTEUoVklCUkFUSU9OKQotICAgIGV3a0NvbnRleHQtPnZpYnJh
dGlvblByb3ZpZGVyLT5zZXRWaWJyYXRpb25DbGllbnRDYWxsYmFja3ModmlicmF0ZSwgY2FuY2Vs
LCBkYXRhKTsKKyAgICBld2tDb250ZXh0LT52aWJyYXRpb25Qcm92aWRlcigpLT5zZXRWaWJyYXRp
b25DbGllbnRDYWxsYmFja3ModmlicmF0ZSwgY2FuY2VsLCBkYXRhKTsKICNlbmRpZgogfQogCkBA
IC0zMTQsMjggKzMyNSwyMiBAQCB2b2lkIGV3a19jb250ZXh0X2hpc3RvcnlfY2FsbGJhY2tzX3Nl
dChFd2tfQ29udGV4dCogZXdrQ29udGV4dCwgRXdrX0hpc3RvcnlfTmF2aQogewogICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0NvbnRleHQpOwogCi0gICAgZXdrQ29udGV4dC0+aGlz
dG9yeUNsaWVudC5uYXZpZ2F0ZV9mdW5jID0gbmF2aWdhdGU7Ci0gICAgZXdrQ29udGV4dC0+aGlz
dG9yeUNsaWVudC5jbGllbnRfcmVkaXJlY3RfZnVuYyA9IGNsaWVudFJlZGlyZWN0OwotICAgIGV3
a0NvbnRleHQtPmhpc3RvcnlDbGllbnQuc2VydmVyX3JlZGlyZWN0X2Z1bmMgPSBzZXJ2ZXJSZWRp
cmVjdDsKLSAgICBld2tDb250ZXh0LT5oaXN0b3J5Q2xpZW50LnRpdGxlX3VwZGF0ZV9mdW5jID0g
dGl0bGVVcGRhdGU7Ci0gICAgZXdrQ29udGV4dC0+aGlzdG9yeUNsaWVudC5wb3B1bGF0ZV92aXNp
dGVkX2xpbmtzX2Z1bmMgPSBwb3B1bGF0ZVZpc2l0ZWRMaW5rczsKLSAgICBld2tDb250ZXh0LT5o
aXN0b3J5Q2xpZW50LnVzZXJfZGF0YSA9IGRhdGE7CisgICAgRXdrX0NvbnRleHRfSGlzdG9yeV9D
bGllbnQmIGhpc3RvcnlDbGllbnQgPSBld2tDb250ZXh0LT5oaXN0b3J5Q2xpZW50KCk7CisgICAg
aGlzdG9yeUNsaWVudC5uYXZpZ2F0ZV9mdW5jID0gbmF2aWdhdGU7CisgICAgaGlzdG9yeUNsaWVu
dC5jbGllbnRfcmVkaXJlY3RfZnVuYyA9IGNsaWVudFJlZGlyZWN0OworICAgIGhpc3RvcnlDbGll
bnQuc2VydmVyX3JlZGlyZWN0X2Z1bmMgPSBzZXJ2ZXJSZWRpcmVjdDsKKyAgICBoaXN0b3J5Q2xp
ZW50LnRpdGxlX3VwZGF0ZV9mdW5jID0gdGl0bGVVcGRhdGU7CisgICAgaGlzdG9yeUNsaWVudC5w
b3B1bGF0ZV92aXNpdGVkX2xpbmtzX2Z1bmMgPSBwb3B1bGF0ZVZpc2l0ZWRMaW5rczsKKyAgICBo
aXN0b3J5Q2xpZW50LnVzZXJfZGF0YSA9IGRhdGE7CiB9CiAKLWNvbnN0IEV3a19Db250ZXh0X0hp
c3RvcnlfQ2xpZW50KiBld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9nZXQoY29uc3QgRXdrX0Nv
bnRleHQqIGV3a0NvbnRleHQpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KGV3a0NvbnRleHQsIDApOwotCi0gICAgcmV0dXJuICZld2tDb250ZXh0LT5oaXN0b3J5Q2xpZW50
OwotfQogCiB2b2lkIGV3a19jb250ZXh0X3Zpc2l0ZWRfbGlua19hZGQoRXdrX0NvbnRleHQqIGV3
a0NvbnRleHQsIGNvbnN0IGNoYXIqIHZpc2l0ZWRVUkwpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4oZXdrQ29udGV4dCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
dmlzaXRlZFVSTCk7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tWaXNpdGVkVVJM
KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHZpc2l0ZWRVUkwpKTsKLSAg
ICBXS0NvbnRleHRBZGRWaXNpdGVkTGluayhld2tDb250ZXh0LT5jb250ZXh0LmdldCgpLCB3a1Zp
c2l0ZWRVUkwuZ2V0KCkpOworICAgIGV3a0NvbnRleHQtPmFkZFZpc2l0ZWRMaW5rKHZpc2l0ZWRV
UkwpOwogfQogCiAvLyBFd2tfQ2FjaGVfTW9kZWwgZW51bSB2YWxpZGF0aW9uCkBAIC0zNDYsMTQg
KzM1MSwxNiBAQCBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKEVXS19DQUNIRV9NT0RFTF9Q
UklNQVJZX1dFQkJST1dTRVIsIGtXS0NhY2hlTW9kZWxQcgogRWluYV9Cb29sIGV3a19jb250ZXh0
X2NhY2hlX21vZGVsX3NldChFd2tfQ29udGV4dCogZXdrQ29udGV4dCwgRXdrX0NhY2hlX01vZGVs
IGNhY2hlTW9kZWwpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV3a0Nv
bnRleHQsIGZhbHNlKTsKLSAgICBXS0NvbnRleHRTZXRDYWNoZU1vZGVsKGV3a19jb250ZXh0X1dL
Q29udGV4dF9nZXQoZXdrQ29udGV4dCksIHN0YXRpY19jYXN0PEV3a19DYWNoZV9Nb2RlbD4oY2Fj
aGVNb2RlbCkpOworCisgICAgZXdrQ29udGV4dC0+c2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKTsK
KwogICAgIHJldHVybiB0cnVlOwogfQogCiBFd2tfQ2FjaGVfTW9kZWwgZXdrX2NvbnRleHRfY2Fj
aGVfbW9kZWxfZ2V0KGNvbnN0IEV3a19Db250ZXh0KiBld2tDb250ZXh0KQogewogICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChld2tDb250ZXh0LCBFV0tfQ0FDSEVfTU9ERUxfRE9D
VU1FTlRfVklFV0VSKTsKLSAgICBXS0NhY2hlTW9kZWwgY2FjaGVNb2RlbCA9IFdLQ29udGV4dEdl
dENhY2hlTW9kZWwoZXdrX2NvbnRleHRfV0tDb250ZXh0X2dldChld2tDb250ZXh0KSk7Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PEV3a19DYWNoZV9Nb2RlbD4oY2FjaGVNb2RlbCk7CisKKyAgICBy
ZXR1cm4gZXdrQ29udGV4dC0+Y2FjaGVNb2RlbCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnQuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfZG93bmxvYWRf
Y2xpZW50LmNwcAppbmRleCAxMTY0N2I0Li4yZmE4NmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2Rvd25sb2Fk
X2NsaWVudC5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgc3RhdGljIGlubGluZSBFd2tfQ29udGV4dCog
dG9Fd2tDb250ZXh0KGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiAKIHN0YXRpYyBXS1N0cmluZ1Jl
ZiBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShXS0NvbnRleHRSZWYsIFdL
RG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tTdHJpbmdSZWYgZmlsZW5hbWUsIGJvb2wqIC8qYWxs
b3dPdmVyd3JpdGUqLywgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKLSAgICBFd2tfRG93bmxv
YWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9nZXQodG9Fd2tDb250
ZXh0KGNsaWVudEluZm8pLCB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKSk7CisgICAg
RXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSB0b0V3a0NvbnRleHQoY2xpZW50SW5mbyktPmRv
d25sb2FkSm9iKHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpKTsKICAgICBBU1NFUlQo
ZG93bmxvYWQpOwogCiAgICAgZG93bmxvYWQtPnNldFN1Z2dlc3RlZEZpbGVOYW1lKHRvSW1wbChm
aWxlbmFtZSktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwpAQCAtNjcsMTQgKzY3LDE0IEBAIHN0
YXRpYyBXS1N0cmluZ1JlZiBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShX
S0NvbnRleHRSZWYsIFdLRG93bmxvCiAKIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShX
S0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tVUkxSZXNwb25zZVJlZiB3
a1Jlc3BvbnNlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIEV3a19Eb3dubG9hZF9K
b2IqIGRvd25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX2dldCh0b0V3a0NvbnRleHQo
Y2xpZW50SW5mbyksIHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpKTsKKyAgICBFd2tf
RG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IHRvRXdrQ29udGV4dChjbGllbnRJbmZvKS0+ZG93bmxv
YWRKb2IodG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOwogICAgIEFTU0VSVChkb3du
bG9hZCk7CiAgICAgZG93bmxvYWQtPnNldFJlc3BvbnNlKEV3a19VcmxfUmVzcG9uc2U6OmNyZWF0
ZSh3a1Jlc3BvbnNlKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGRpZENyZWF0ZURlc3RpbmF0aW9uKFdL
Q29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBXS1N0cmluZ1JlZiAvKnBhdGgq
LywgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKLSAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3du
bG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9nZXQodG9Fd2tDb250ZXh0KGNsaWVudElu
Zm8pLCB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKSk7CisgICAgRXdrX0Rvd25sb2Fk
X0pvYiogZG93bmxvYWQgPSB0b0V3a0NvbnRleHQoY2xpZW50SW5mbyktPmRvd25sb2FkSm9iKHRv
SW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpKTsKICAgICBBU1NFUlQoZG93bmxvYWQpOwog
CiAgICAgZG93bmxvYWQtPnNldFN0YXRlKEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfRE9XTkxPQURJ
TkcpOwpAQCAtODIsNyArODIsNyBAQCBzdGF0aWMgdm9pZCBkaWRDcmVhdGVEZXN0aW5hdGlvbihX
S0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tTdHJpbgogCiBzdGF0aWMg
dm9pZCBkaWRSZWNlaXZlRGF0YShXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9h
ZCwgdWludDY0X3QgbGVuZ3RoLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIEV3a19E
b3dubG9hZF9Kb2IqIGRvd25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX2dldCh0b0V3
a0NvbnRleHQoY2xpZW50SW5mbyksIHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpKTsK
KyAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IHRvRXdrQ29udGV4dChjbGllbnRJbmZv
KS0+ZG93bmxvYWRKb2IodG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOwogICAgIEFT
U0VSVChkb3dubG9hZCk7CiAgICAgZG93bmxvYWQtPmluY3JlbWVudFJlY2VpdmVkRGF0YShsZW5n
dGgpOwogfQpAQCAtOTAsMzUgKzkwLDM1IEBAIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVEYXRhKFdL
Q29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCB1aW50NjRfdCBsZW5nCiBzdGF0
aWMgdm9pZCBkaWRGYWlsKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBX
S0Vycm9yUmVmIGVycm9yLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewogICAgIHVpbnQ2NF90
IGRvd25sb2FkSWQgPSB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKTsKLSAgICBFd2tf
RG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9nZXQodG9F
d2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsKKyAgICBFd2tfRG93bmxvYWRfSm9i
KiBkb3dubG9hZCA9IHRvRXdrQ29udGV4dChjbGllbnRJbmZvKS0+ZG93bmxvYWRKb2IoZG93bmxv
YWRJZCk7CiAgICAgQVNTRVJUKGRvd25sb2FkKTsKIAogICAgIE93blB0cjxFd2tfRXJyb3I+IGV3
a0Vycm9yID0gRXdrX0Vycm9yOjpjcmVhdGUoZXJyb3IpOwogICAgIGRvd25sb2FkLT5zZXRTdGF0
ZShFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0ZBSUxFRCk7CiAgICAgZXdrX3ZpZXdfZG93bmxvYWRf
am9iX2ZhaWxlZChkb3dubG9hZC0+dmlldygpLCBkb3dubG9hZCwgZXdrRXJyb3IuZ2V0KCkpOwot
ICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9yZW1vdmUodG9Fd2tDb250ZXh0KGNsaWVudElu
Zm8pLCBkb3dubG9hZElkKTsKKyAgICB0b0V3a0NvbnRleHQoY2xpZW50SW5mbyktPnJlbW92ZURv
d25sb2FkSm9iKGRvd25sb2FkSWQpOwogfQogCiBzdGF0aWMgdm9pZCBkaWRDYW5jZWwoV0tDb250
ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
CiB7CiAgICAgdWludDY0X3QgZG93bmxvYWRJZCA9IHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxv
YWRJRCgpOwotICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkID0gZXdrX2NvbnRleHRfZG93
bmxvYWRfam9iX2dldCh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIGRvd25sb2FkSWQpOworICAg
IEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkID0gdG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLT5k
b3dubG9hZEpvYihkb3dubG9hZElkKTsKICAgICBBU1NFUlQoZG93bmxvYWQpOwogCiAgICAgZG93
bmxvYWQtPnNldFN0YXRlKEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfQ0FOQ0VMTEVEKTsKICAgICBl
d2tfdmlld19kb3dubG9hZF9qb2JfY2FuY2VsbGVkKGRvd25sb2FkLT52aWV3KCksIGRvd25sb2Fk
KTsKLSAgICBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfcmVtb3ZlKHRvRXdrQ29udGV4dChjbGll
bnRJbmZvKSwgZG93bmxvYWRJZCk7CisgICAgdG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLT5yZW1v
dmVEb3dubG9hZEpvYihkb3dubG9hZElkKTsKIH0KIAogc3RhdGljIHZvaWQgZGlkRmluaXNoKFdL
Q29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKQogewogICAgIHVpbnQ2NF90IGRvd25sb2FkSWQgPSB0b0ltcGwod2tEb3dubG9hZCktPmRv
d25sb2FkSUQoKTsKLSAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250ZXh0
X2Rvd25sb2FkX2pvYl9nZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsK
KyAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IHRvRXdrQ29udGV4dChjbGllbnRJbmZv
KS0+ZG93bmxvYWRKb2IoZG93bmxvYWRJZCk7CiAgICAgQVNTRVJUKGRvd25sb2FkKTsKIAogICAg
IGRvd25sb2FkLT5zZXRTdGF0ZShFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0ZJTklTSEVEKTsKICAg
ICBld2tfdmlld19kb3dubG9hZF9qb2JfZmluaXNoZWQoZG93bmxvYWQtPnZpZXcoKSwgZG93bmxv
YWQpOwotICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9yZW1vdmUodG9Fd2tDb250ZXh0KGNs
aWVudEluZm8pLCBkb3dubG9hZElkKTsKKyAgICB0b0V3a0NvbnRleHQoY2xpZW50SW5mbyktPnJl
bW92ZURvd25sb2FkSm9iKGRvd25sb2FkSWQpOwogfQogCiB2b2lkIGV3a19jb250ZXh0X2Rvd25s
b2FkX2NsaWVudF9hdHRhY2goRXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCkBAIC0xMzYsNyArMTM2
LDcgQEAgdm9pZCBld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRfYXR0YWNoKEV3a19Db250ZXh0
KiBld2tDb250ZXh0KQogICAgIHdrRG93bmxvYWRDbGllbnQuZGlkRmFpbCA9IGRpZEZhaWw7CiAg
ICAgd2tEb3dubG9hZENsaWVudC5kaWRGaW5pc2ggPSBkaWRGaW5pc2g7CiAKLSAgICBXS0NvbnRl
eHRTZXREb3dubG9hZENsaWVudChld2tfY29udGV4dF9XS0NvbnRleHRfZ2V0KGV3a0NvbnRleHQp
LCAmd2tEb3dubG9hZENsaWVudCk7CisgICAgV0tDb250ZXh0U2V0RG93bmxvYWRDbGllbnQoZXdr
Q29udGV4dC0+d2tDb250ZXh0KCksICZ3a0Rvd25sb2FkQ2xpZW50KTsKIH0KIAogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9oaXN0b3J5
X2NsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dF9oaXN0b3J5X2NsaWVudC5jcHAKaW5kZXggMTAzOGI0ZC4uNGY3OTNiOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfaGlzdG9yeV9jbGll
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0
X2hpc3RvcnlfY2xpZW50LmNwcApAQCAtNDEsNzUgKzQxLDcwIEBACiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7CiAKLXN0YXRpYyBpbmxpbmUgY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGll
bnQqIGdldEV3a0hpc3RvcnlEZWxlZ2F0ZShjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorc3RhdGlj
IGlubGluZSBjb25zdCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCYgZ2V0RXdrSGlzdG9yeUNs
aWVudChjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewogICAgIEFTU0VSVChjbGllbnRJbmZvKTsK
LSAgICByZXR1cm4gZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfZ2V0KHN0YXRpY19jYXN0PGNv
bnN0IEV3a19Db250ZXh0Kj4oY2xpZW50SW5mbykpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCBFd2tfQ29udGV4dCo+KGNsaWVudEluZm8pLT5oaXN0b3J5Q2xpZW50KCk7CiB9CiAKIHN0
YXRpYyB2b2lkIGRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKFdLQ29udGV4dFJlZiwgV0tQ
YWdlUmVmIHBhZ2UsIFdLTmF2aWdhdGlvbkRhdGFSZWYgbmF2aWdhdGlvbkRhdGEsIFdLRnJhbWVS
ZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7Ci0gICAgY29uc3QgRXdrX0NvbnRleHRfSGlz
dG9yeV9DbGllbnQqIGhpc3RvcnlEZWxlZ2F0ZSA9IGdldEV3a0hpc3RvcnlEZWxlZ2F0ZShjbGll
bnRJbmZvKTsKLSAgICBBU1NFUlQoaGlzdG9yeURlbGVnYXRlKTsKKyAgICBjb25zdCBFd2tfQ29u
dGV4dF9IaXN0b3J5X0NsaWVudCYgaGlzdG9yeUNsaWVudCA9IGdldEV3a0hpc3RvcnlDbGllbnQo
Y2xpZW50SW5mbyk7CiAKLSAgICBpZiAoIWhpc3RvcnlEZWxlZ2F0ZS0+bmF2aWdhdGVfZnVuYykK
KyAgICBpZiAoIWhpc3RvcnlDbGllbnQubmF2aWdhdGVfZnVuYykKICAgICAgICAgcmV0dXJuOwog
CiAgICAgUmVmUHRyPEV3a19OYXZpZ2F0aW9uX0RhdGE+IG5hdmlnYXRpb25EYXRhRXdrID0gRXdr
X05hdmlnYXRpb25fRGF0YTo6Y3JlYXRlKG5hdmlnYXRpb25EYXRhKTsKLSAgICBoaXN0b3J5RGVs
ZWdhdGUtPm5hdmlnYXRlX2Z1bmMoZXdrX3ZpZXdfZnJvbV9wYWdlX2dldCh0b0ltcGwocGFnZSkp
LCBuYXZpZ2F0aW9uRGF0YUV3ay5nZXQoKSwgaGlzdG9yeURlbGVnYXRlLT51c2VyX2RhdGEpOwor
ICAgIGhpc3RvcnlDbGllbnQubmF2aWdhdGVfZnVuYyhld2tfdmlld19mcm9tX3BhZ2VfZ2V0KHRv
SW1wbChwYWdlKSksIG5hdmlnYXRpb25EYXRhRXdrLmdldCgpLCBoaXN0b3J5Q2xpZW50LnVzZXJf
ZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIGRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdChXS0NvbnRl
eHRSZWYsIFdLUGFnZVJlZiBwYWdlLCBXS1VSTFJlZiBzb3VyY2VVUkwsIFdLVVJMUmVmIGRlc3Rp
bmF0aW9uVVJMLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIGNv
bnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50KiBoaXN0b3J5RGVsZWdhdGUgPSBnZXRFd2tI
aXN0b3J5RGVsZWdhdGUoY2xpZW50SW5mbyk7Ci0gICAgQVNTRVJUKGhpc3RvcnlEZWxlZ2F0ZSk7
CisgICAgY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQmIGhpc3RvcnlDbGllbnQgPSBn
ZXRFd2tIaXN0b3J5Q2xpZW50KGNsaWVudEluZm8pOwogCi0gICAgaWYgKCFoaXN0b3J5RGVsZWdh
dGUtPmNsaWVudF9yZWRpcmVjdF9mdW5jKQorICAgIGlmICghaGlzdG9yeUNsaWVudC5jbGllbnRf
cmVkaXJlY3RfZnVuYykKICAgICAgICAgcmV0dXJuOwogCiAgICAgV0tFaW5hU2hhcmVkU3RyaW5n
IHNvdXJjZVVSTFN0cmluZyhzb3VyY2VVUkwpOwogICAgIFdLRWluYVNoYXJlZFN0cmluZyBkZXN0
aW5hdGlvblVSTFN0cmluZyhkZXN0aW5hdGlvblVSTCk7CiAKLSAgICBoaXN0b3J5RGVsZWdhdGUt
PmNsaWVudF9yZWRpcmVjdF9mdW5jKGV3a192aWV3X2Zyb21fcGFnZV9nZXQodG9JbXBsKHBhZ2Up
KSwgc291cmNlVVJMU3RyaW5nLCBkZXN0aW5hdGlvblVSTFN0cmluZywgaGlzdG9yeURlbGVnYXRl
LT51c2VyX2RhdGEpOworICAgIGhpc3RvcnlDbGllbnQuY2xpZW50X3JlZGlyZWN0X2Z1bmMoZXdr
X3ZpZXdfZnJvbV9wYWdlX2dldCh0b0ltcGwocGFnZSkpLCBzb3VyY2VVUkxTdHJpbmcsIGRlc3Rp
bmF0aW9uVVJMU3RyaW5nLCBoaXN0b3J5Q2xpZW50LnVzZXJfZGF0YSk7CiB9CiAKIHN0YXRpYyB2
b2lkIGRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdChXS0NvbnRleHRSZWYsIFdLUGFnZVJlZiBwYWdl
LCBXS1VSTFJlZiBzb3VyY2VVUkwsIFdLVVJMUmVmIGRlc3RpbmF0aW9uVVJMLCBXS0ZyYW1lUmVm
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIGNvbnN0IEV3a19Db250ZXh0X0hpc3Rv
cnlfQ2xpZW50KiBoaXN0b3J5RGVsZWdhdGUgPSBnZXRFd2tIaXN0b3J5RGVsZWdhdGUoY2xpZW50
SW5mbyk7Ci0gICAgQVNTRVJUKGhpc3RvcnlEZWxlZ2F0ZSk7CisgICAgY29uc3QgRXdrX0NvbnRl
eHRfSGlzdG9yeV9DbGllbnQmIGhpc3RvcnlDbGllbnQgPSBnZXRFd2tIaXN0b3J5Q2xpZW50KGNs
aWVudEluZm8pOwogCi0gICAgaWYgKCFoaXN0b3J5RGVsZWdhdGUtPnNlcnZlcl9yZWRpcmVjdF9m
dW5jKQorICAgIGlmICghaGlzdG9yeUNsaWVudC5zZXJ2ZXJfcmVkaXJlY3RfZnVuYykKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHNvdXJjZVVSTFN0cmluZyhzb3Vy
Y2VVUkwpOwogICAgIFdLRWluYVNoYXJlZFN0cmluZyBkZXN0aW5hdGlvblVSTFN0cmluZyhkZXN0
aW5hdGlvblVSTCk7CiAKLSAgICBoaXN0b3J5RGVsZWdhdGUtPnNlcnZlcl9yZWRpcmVjdF9mdW5j
KGV3a192aWV3X2Zyb21fcGFnZV9nZXQodG9JbXBsKHBhZ2UpKSwgc291cmNlVVJMU3RyaW5nLCBk
ZXN0aW5hdGlvblVSTFN0cmluZywgaGlzdG9yeURlbGVnYXRlLT51c2VyX2RhdGEpOworICAgIGhp
c3RvcnlDbGllbnQuc2VydmVyX3JlZGlyZWN0X2Z1bmMoZXdrX3ZpZXdfZnJvbV9wYWdlX2dldCh0
b0ltcGwocGFnZSkpLCBzb3VyY2VVUkxTdHJpbmcsIGRlc3RpbmF0aW9uVVJMU3RyaW5nLCBoaXN0
b3J5Q2xpZW50LnVzZXJfZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIGRpZFVwZGF0ZUhpc3RvcnlU
aXRsZShXS0NvbnRleHRSZWYsIFdLUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiB0aXRsZSwgV0tV
UkxSZWYgVVJMLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIGNv
bnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50KiBoaXN0b3J5RGVsZWdhdGUgPSBnZXRFd2tI
aXN0b3J5RGVsZWdhdGUoY2xpZW50SW5mbyk7Ci0gICAgQVNTRVJUKGhpc3RvcnlEZWxlZ2F0ZSk7
CisgICAgY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQmIGhpc3RvcnlDbGllbnQgPSBn
ZXRFd2tIaXN0b3J5Q2xpZW50KGNsaWVudEluZm8pOwogCi0gICAgaWYgKCFoaXN0b3J5RGVsZWdh
dGUtPnRpdGxlX3VwZGF0ZV9mdW5jKQorICAgIGlmICghaGlzdG9yeUNsaWVudC50aXRsZV91cGRh
dGVfZnVuYykKICAgICAgICAgcmV0dXJuOwogCiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHRpdGxl
U3RyaW5nKHRpdGxlKTsKICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgc3RyaW5nVVJMKFVSTCk7CiAK
LSAgICBoaXN0b3J5RGVsZWdhdGUtPnRpdGxlX3VwZGF0ZV9mdW5jKGV3a192aWV3X2Zyb21fcGFn
ZV9nZXQodG9JbXBsKHBhZ2UpKSwgdGl0bGVTdHJpbmcsIHN0cmluZ1VSTCwgaGlzdG9yeURlbGVn
YXRlLT51c2VyX2RhdGEpOworICAgIGhpc3RvcnlDbGllbnQudGl0bGVfdXBkYXRlX2Z1bmMoZXdr
X3ZpZXdfZnJvbV9wYWdlX2dldCh0b0ltcGwocGFnZSkpLCB0aXRsZVN0cmluZywgc3RyaW5nVVJM
LCBoaXN0b3J5Q2xpZW50LnVzZXJfZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBvcHVsYXRlVmlz
aXRlZExpbmtzKFdLQ29udGV4dFJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKLSAgICBj
b25zdCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCogaGlzdG9yeURlbGVnYXRlID0gZ2V0RXdr
SGlzdG9yeURlbGVnYXRlKGNsaWVudEluZm8pOwotICAgIEFTU0VSVChoaXN0b3J5RGVsZWdhdGUp
OworICAgIGNvbnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50JiBoaXN0b3J5Q2xpZW50ID0g
Z2V0RXdrSGlzdG9yeUNsaWVudChjbGllbnRJbmZvKTsKIAotICAgIGlmICghaGlzdG9yeURlbGVn
YXRlLT5wb3B1bGF0ZV92aXNpdGVkX2xpbmtzX2Z1bmMpCisgICAgaWYgKCFoaXN0b3J5Q2xpZW50
LnBvcHVsYXRlX3Zpc2l0ZWRfbGlua3NfZnVuYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgaGlz
dG9yeURlbGVnYXRlLT5wb3B1bGF0ZV92aXNpdGVkX2xpbmtzX2Z1bmMoaGlzdG9yeURlbGVnYXRl
LT51c2VyX2RhdGEpOworICAgIGhpc3RvcnlDbGllbnQucG9wdWxhdGVfdmlzaXRlZF9saW5rc19m
dW5jKGhpc3RvcnlDbGllbnQudXNlcl9kYXRhKTsKIH0KIAogdm9pZCBld2tfY29udGV4dF9oaXN0
b3J5X2NsaWVudF9hdHRhY2goRXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCkBAIC0xMjYsNSArMTIx
LDUgQEAgdm9pZCBld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9hdHRhY2goRXdrX0NvbnRleHQq
IGV3a0NvbnRleHQpCiAgICAgd2tIaXN0b3J5Q2xpZW50LmRpZFVwZGF0ZUhpc3RvcnlUaXRsZSA9
IGRpZFVwZGF0ZUhpc3RvcnlUaXRsZTsKICAgICB3a0hpc3RvcnlDbGllbnQucG9wdWxhdGVWaXNp
dGVkTGlua3MgPSBwb3B1bGF0ZVZpc2l0ZWRMaW5rczsKIAotICAgIFdLQ29udGV4dFNldEhpc3Rv
cnlDbGllbnQoZXdrX2NvbnRleHRfV0tDb250ZXh0X2dldChld2tDb250ZXh0KSwgJndrSGlzdG9y
eUNsaWVudCk7CisgICAgV0tDb250ZXh0U2V0SGlzdG9yeUNsaWVudChld2tDb250ZXh0LT53a0Nv
bnRleHQoKSwgJndrSGlzdG9yeUNsaWVudCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmgKaW5kZXggNzA1NzM5YS4u
ZTdkZWZkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2NvbnRleHRfcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb250ZXh0X3ByaXZhdGUuaApAQCAtMjAsMjIgKzIwLDk1IEBACiAjaWZuZGVmIGV3a19j
b250ZXh0X3ByaXZhdGVfaAogI2RlZmluZSBld2tfY29udGV4dF9wcml2YXRlX2gKIAotI2luY2x1
ZGUgPFdlYktpdDIvV0tCYXNlLmg+CisjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAi
V0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9wcml2
YXRlLmgiCiAKLXR5cGVkZWYgc3RydWN0IEV3a19Db250ZXh0IEV3a19Db250ZXh0OwotdHlwZWRl
ZiBzdHJ1Y3QgRXdrX0Rvd25sb2FkX0pvYiBFd2tfRG93bmxvYWRfSm9iOwotdHlwZWRlZiBzdHJ1
Y3QgRXdrX1VybF9TY2hlbWVfUmVxdWVzdCBFd2tfVXJsX1NjaGVtZV9SZXF1ZXN0OwotdHlwZWRl
ZiBzdHJ1Y3QgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQgRXdrX0NvbnRleHRfSGlzdG9yeV9D
bGllbnQ7CitjbGFzcyBFd2tfRG93bmxvYWRfSm9iOworY2xhc3MgRXdrX1VybF9TY2hlbWVfUmVx
dWVzdDsKK2NsYXNzIEV3a19Db29raWVfTWFuYWdlcjsKK2NsYXNzIEV3a19GYXZpY29uX0RhdGFi
YXNlOworI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKK2NsYXNzIEJhdHRlcnlQcm92aWRlcjsK
KyNlbmRpZgorI2lmIEVOQUJMRShORVRXT1JLX0lORk8pCitjbGFzcyBOZXR3b3JrSW5mb1Byb3Zp
ZGVyOworI2VuZGlmCisjaWYgRU5BQkxFKFZJQlJBVElPTikKK2NsYXNzIFZpYnJhdGlvblByb3Zp
ZGVyOworI2VuZGlmCiAKLVdLQ29udGV4dFJlZiBld2tfY29udGV4dF9XS0NvbnRleHRfZ2V0KGNv
bnN0IEV3a19Db250ZXh0Kik7Ci1Fd2tfQ29udGV4dCogZXdrX2NvbnRleHRfbmV3X2Zyb21fV0tD
b250ZXh0KFdLQ29udGV4dFJlZik7Ci1XS1NvdXBSZXF1ZXN0TWFuYWdlclJlZiBld2tfY29udGV4
dF9yZXF1ZXN0X21hbmFnZXJfZ2V0KGNvbnN0IEV3a19Db250ZXh0Kik7Ci12b2lkIGV3a19jb250
ZXh0X3VybF9zY2hlbWVfcmVxdWVzdF9yZWNlaXZlZChFd2tfQ29udGV4dCosIEV3a19VcmxfU2No
ZW1lX1JlcXVlc3QqKTsKK2NsYXNzIEV3a19Db250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8RXdr
X0NvbnRleHQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxFd2tfQ29udGV4dD4g
Y3JlYXRlKFdLQ29udGV4dFJlZiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBFd2tfQ29udGV4dChjb250ZXh0KSk7CisgICAgfQogCi12b2lkIGV3a19jb250ZXh0
X2Rvd25sb2FkX2pvYl9hZGQoRXdrX0NvbnRleHQqLCBFd2tfRG93bmxvYWRfSm9iKik7Ci1Fd2tf
RG93bmxvYWRfSm9iKiBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KGNvbnN0IEV3a19Db250
ZXh0KiwgdWludDY0X3QgZG93bmxvYWRJZCk7Ci12b2lkIGV3a19jb250ZXh0X2Rvd25sb2FkX2pv
Yl9yZW1vdmUoRXdrX0NvbnRleHQqLCB1aW50NjRfdCBkb3dubG9hZElkKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxFd2tfQ29udGV4dD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgRXdrX0NvbnRleHQoYWRvcHRXSyhXS0NvbnRleHRDcmVhdGUoKSkuZ2V0KCkp
KTsKKyAgICB9CiAKLWNvbnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50KiBld2tfY29udGV4
dF9oaXN0b3J5X2NsaWVudF9nZXQoY29uc3QgRXdrX0NvbnRleHQqKTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxFd2tfQ29udGV4dD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgaW5qZWN0ZWRCdW5kbGVQ
YXRoKTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV3a19Db250ZXh0PiBkZWZhdWx0Q29udGV4
dCgpOworCisgICAgfkV3a19Db250ZXh0KCk7CisKKyAgICBFd2tfQ29va2llX01hbmFnZXIqIGNv
b2tpZU1hbmFnZXIoKTsKKworICAgIEV3a19GYXZpY29uX0RhdGFiYXNlKiBmYXZpY29uRGF0YWJh
c2UoKTsKKworICAgIGJvb2wgcmVnaXN0ZXJVUkxTY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUs
IEV3a19VcmxfU2NoZW1lX1JlcXVlc3RfQ2IgY2FsbGJhY2ssIHZvaWQqIHVzZXJEYXRhKTsKKwor
I2lmIEVOQUJMRShWSUJSQVRJT04pCisgICAgUGFzc1JlZlB0cjxWaWJyYXRpb25Qcm92aWRlcj4g
dmlicmF0aW9uUHJvdmlkZXIoKTsKKyNlbmRpZgorCisgICAgdm9pZCBhZGRWaXNpdGVkTGluayhj
b25zdCBTdHJpbmcmIHZpc2l0ZWRVUkwpOworCisgICAgdm9pZCBzZXRDYWNoZU1vZGVsKEV3a19D
YWNoZV9Nb2RlbCk7CisKKyAgICBFd2tfQ2FjaGVfTW9kZWwgY2FjaGVNb2RlbCgpIGNvbnN0Owor
CisgICAgV0tDb250ZXh0UmVmIHdrQ29udGV4dCgpOworCisgICAgV0tTb3VwUmVxdWVzdE1hbmFn
ZXJSZWYgcmVxdWVzdE1hbmFnZXIoKTsKKworICAgIHZvaWQgdXJsU2NoZW1lUmVxdWVzdFJlY2Vp
dmVkKEV3a19VcmxfU2NoZW1lX1JlcXVlc3QqKTsKKworICAgIHZvaWQgYWRkRG93bmxvYWRKb2Io
RXdrX0Rvd25sb2FkX0pvYiopOworICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkSm9iKHVp
bnQ2NF90IGRvd25sb2FkSWQpOworICAgIHZvaWQgcmVtb3ZlRG93bmxvYWRKb2IodWludDY0X3Qg
ZG93bmxvYWRJZCk7CisKKyAgICBjb25zdCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCYgaGlz
dG9yeUNsaWVudCgpIGNvbnN0ICB7IHJldHVybiBtX2hpc3RvcnlDbGllbnQ7IH0KKyAgICBFd2tf
Q29udGV4dF9IaXN0b3J5X0NsaWVudCYgaGlzdG9yeUNsaWVudCgpIHsgcmV0dXJuIG1faGlzdG9y
eUNsaWVudDsgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IEV3a19Db250ZXh0KFdLQ29udGV4
dFJlZik7CisKKyAgICBXS1JldGFpblB0cjxXS0NvbnRleHRSZWY+IG1fY29udGV4dDsKKworICAg
IE93blB0cjxFd2tfQ29va2llX01hbmFnZXI+IG1fY29va2llTWFuYWdlcjsKKyAgICBPd25QdHI8
RXdrX0Zhdmljb25fRGF0YWJhc2U+IG1fZmF2aWNvbkRhdGFiYXNlOworI2lmIEVOQUJMRShCQVRU
RVJZX1NUQVRVUykKKyAgICBSZWZQdHI8QmF0dGVyeVByb3ZpZGVyPiBtX2JhdHRlcnlQcm92aWRl
cjsKKyNlbmRpZgorI2lmIEVOQUJMRShORVRXT1JLX0lORk8pCisgICAgUmVmUHRyPE5ldHdvcmtJ
bmZvUHJvdmlkZXI+IG1fbmV0d29ya0luZm9Qcm92aWRlcjsKKyNlbmRpZgorI2lmIEVOQUJMRShW
SUJSQVRJT04pCisgICAgUmVmUHRyPFZpYnJhdGlvblByb3ZpZGVyPiBtX3ZpYnJhdGlvblByb3Zp
ZGVyOworI2VuZGlmCisgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPEV3a19Eb3dubG9hZF9K
b2I+ID4gbV9kb3dubG9hZEpvYnM7CisKKyAgICBXS1JldGFpblB0cjxXS1NvdXBSZXF1ZXN0TWFu
YWdlclJlZj4gbV9yZXF1ZXN0TWFuYWdlcjsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IGNsYXNzIEV3a19VcmxfU2NoZW1lX0hhbmRsZXI+IFVSTFNjaGVtZUhhbmRsZXJNYXA7CisgICAg
VVJMU2NoZW1lSGFuZGxlck1hcCBtX3VybFNjaGVtZUhhbmRsZXJzOworCisgICAgRXdrX0NvbnRl
eHRfSGlzdG9yeV9DbGllbnQgbV9oaXN0b3J5Q2xpZW50OworfTsKIAogI2VuZGlmIC8vIGV3a19j
b250ZXh0X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9yZXF1ZXN0X21hbmFnZXJfY2xpZW50
LmNwcAppbmRleCBiMjU3M2NhLi5mZTgwMWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9yZXF1ZXN0X21hbmFnZXJfY2xpZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9yZXF1ZXN0
X21hbmFnZXJfY2xpZW50LmNwcApAQCAtNDEsNyArNDEsNyBAQCBzdGF0aWMgaW5saW5lIEV3a19D
b250ZXh0KiB0b0V3a0NvbnRleHQoY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHN0YXRpYyB2b2lk
IGRpZFJlY2VpdmVVUklSZXF1ZXN0KFdLU291cFJlcXVlc3RNYW5hZ2VyUmVmIHNvdXBSZXF1ZXN0
TWFuYWdlclJlZiwgV0tVUkxSZWYgdXJsUmVmLCBXS1BhZ2VSZWYsIHVpbnQ2NF90IHJlcXVlc3RJ
RCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKICAgICBSZWZQdHI8RXdrX1VybF9TY2hlbWVf
UmVxdWVzdD4gc2NoZW1lUmVxdWVzdCA9IEV3a19VcmxfU2NoZW1lX1JlcXVlc3Q6OmNyZWF0ZShz
b3VwUmVxdWVzdE1hbmFnZXJSZWYsIHVybFJlZiwgcmVxdWVzdElEKTsKLSAgICBld2tfY29udGV4
dF91cmxfc2NoZW1lX3JlcXVlc3RfcmVjZWl2ZWQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBz
Y2hlbWVSZXF1ZXN0LmdldCgpKTsKKyAgICB0b0V3a0NvbnRleHQoY2xpZW50SW5mbyktPnVybFNj
aGVtZVJlcXVlc3RSZWNlaXZlZChzY2hlbWVSZXF1ZXN0LmdldCgpKTsKIH0KIAogdm9pZCBld2tf
Y29udGV4dF9yZXF1ZXN0X21hbmFnZXJfY2xpZW50X2F0dGFjaChFd2tfQ29udGV4dCogY29udGV4
dCkKQEAgLTUzLDUgKzUzLDUgQEAgdm9pZCBld2tfY29udGV4dF9yZXF1ZXN0X21hbmFnZXJfY2xp
ZW50X2F0dGFjaChFd2tfQ29udGV4dCogY29udGV4dCkKICAgICB3a1JlcXVlc3RNYW5hZ2VyQ2xp
ZW50LmNsaWVudEluZm8gPSBjb250ZXh0OwogICAgIHdrUmVxdWVzdE1hbmFnZXJDbGllbnQuZGlk
UmVjZWl2ZVVSSVJlcXVlc3QgPSBkaWRSZWNlaXZlVVJJUmVxdWVzdDsKIAotICAgIFdLU291cFJl
cXVlc3RNYW5hZ2VyU2V0Q2xpZW50KGV3a19jb250ZXh0X3JlcXVlc3RfbWFuYWdlcl9nZXQoY29u
dGV4dCksICZ3a1JlcXVlc3RNYW5hZ2VyQ2xpZW50KTsKKyAgICBXS1NvdXBSZXF1ZXN0TWFuYWdl
clNldENsaWVudChjb250ZXh0LT5yZXF1ZXN0TWFuYWdlcigpLCAmd2tSZXF1ZXN0TWFuYWdlckNs
aWVudCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5j
cHAKaW5kZXggZDg2MDhhYS4uMjQ2YTI0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a192aWV3LmNwcApAQCAtMTMyLDcgKzEzMiw3IEBAIHN0cnVjdCBFd2tfVmll
d19Qcml2YXRlX0RhdGEgewogICAgIE93blB0cjxFd2tfU2V0dGluZ3M+IHNldHRpbmdzOwogICAg
IGJvb2wgYXJlTW91c2VFdmVudHNFbmFibGVkOwogICAgIFdLUmV0YWluUHRyPFdLQ29sb3JQaWNr
ZXJSZXN1bHRMaXN0ZW5lclJlZj4gY29sb3JQaWNrZXJSZXN1bHRMaXN0ZW5lcjsKLSAgICBFd2tf
Q29udGV4dCogY29udGV4dDsKKyAgICBSZWZQdHI8RXdrX0NvbnRleHQ+IGNvbnRleHQ7CiAjaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBib29sIGFyZVRvdWNoRXZlbnRzRW5hYmxlZDsKICNl
bmRpZgpAQCAtMTUyLDcgKzE1Miw2IEBAIHN0cnVjdCBFd2tfVmlld19Qcml2YXRlX0RhdGEgewog
CiAgICAgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKCkKICAgICAgICAgOiBhcmVNb3VzZUV2ZW50c0Vu
YWJsZWQoZmFsc2UpCi0gICAgICAgICwgY29udGV4dCgwKQogI2lmIEVOQUJMRShUT1VDSF9FVkVO
VFMpCiAgICAgICAgICwgYXJlVG91Y2hFdmVudHNFbmFibGVkKGZhbHNlKQogI2VuZGlmCkBAIC0x
NzEsNyArMTcwLDcgQEAgc3RydWN0IEV3a19WaWV3X1ByaXZhdGVfRGF0YSB7CiAgICAgfkV3a19W
aWV3X1ByaXZhdGVfRGF0YSgpCiAgICAgewogICAgICAgICAvKiBVbnJlZ2lzdGVyIGljb24gY2hh
bmdlIGNhbGxiYWNrICovCi0gICAgICAgIEV3a19GYXZpY29uX0RhdGFiYXNlKiBpY29uRGF0YWJh
c2UgPSBld2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldChjb250ZXh0KTsKKyAgICAgICAg
RXdrX0Zhdmljb25fRGF0YWJhc2UqIGljb25EYXRhYmFzZSA9IGNvbnRleHQtPmZhdmljb25EYXRh
YmFzZSgpOwogICAgICAgICBpY29uRGF0YWJhc2UtPnVud2F0Y2hDaGFuZ2VzKF9ld2tfdmlld19v
bl9mYXZpY29uX2NoYW5nZWQpOwogCiAgICAgICAgIHZvaWQqIGl0ZW07CkBAIC00NzcsNyArNDc2
LDYgQEAgc3RhdGljIEV3a19WaWV3X1ByaXZhdGVfRGF0YSogX2V3a192aWV3X3ByaXZfbmV3KEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIAogc3RhdGljIHZvaWQgX2V3a192aWV3X3By
aXZfZGVsKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdikKIHsKLSAgICBld2tfY29udGV4dF91
bnJlZihwcml2LT5jb250ZXh0KTsKICAgICBkZWxldGUgcHJpdjsKIH0KIApAQCAtNzk1LDcgKzc5
Myw3IEBAIHN0YXRpYyBpbmxpbmUgRXZhc19TbWFydCogX2V3a192aWV3X3NtYXJ0X2NsYXNzX25l
dyh2b2lkKQogICAgIHJldHVybiBzbWFydDsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X2lu
aXRpYWxpemUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19Db250ZXh0KiBjb250ZXh0LCBXS1Bh
Z2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfaW5pdGlhbGl6
ZShFdmFzX09iamVjdCogZXdrVmlldywgUGFzc1JlZlB0cjxFd2tfQ29udGV4dD4gY29udGV4dCwg
V0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc21hcnREYXRhLCBwcml2KTsKQEAgLTgwNyw5ICs4MDUsOSBAQCBzdGF0aWMgdm9pZCBfZXdr
X3ZpZXdfaW5pdGlhbGl6ZShFdmFzX09iamVjdCogZXdrVmlldywgRXdrX0NvbnRleHQqIGNvbnRl
eHQsIFdLUAogICAgIHByaXYtPnBhZ2VDbGllbnQgPSBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlKGV3
a1ZpZXcpOwogCiAgICAgaWYgKHBhZ2VHcm91cFJlZikKLSAgICAgICAgcHJpdi0+cGFnZVByb3h5
ID0gdG9JbXBsKGV3a19jb250ZXh0X1dLQ29udGV4dF9nZXQoY29udGV4dCkpLT5jcmVhdGVXZWJQ
YWdlKHByaXYtPnBhZ2VDbGllbnQuZ2V0KCksIHRvSW1wbChwYWdlR3JvdXBSZWYpKTsKKyAgICAg
ICAgcHJpdi0+cGFnZVByb3h5ID0gdG9JbXBsKGNvbnRleHQtPndrQ29udGV4dCgpKS0+Y3JlYXRl
V2ViUGFnZShwcml2LT5wYWdlQ2xpZW50LmdldCgpLCB0b0ltcGwocGFnZUdyb3VwUmVmKSk7CiAg
ICAgZWxzZQotICAgICAgICBwcml2LT5wYWdlUHJveHkgPSB0b0ltcGwoZXdrX2NvbnRleHRfV0tD
b250ZXh0X2dldChjb250ZXh0KSktPmNyZWF0ZVdlYlBhZ2UocHJpdi0+cGFnZUNsaWVudC5nZXQo
KSwgV2ViUGFnZUdyb3VwOjpjcmVhdGUoKS5nZXQoKSk7CisgICAgICAgIHByaXYtPnBhZ2VQcm94
eSA9IHRvSW1wbChjb250ZXh0LT53a0NvbnRleHQoKSktPmNyZWF0ZVdlYlBhZ2UocHJpdi0+cGFn
ZUNsaWVudC5nZXQoKSwgV2ViUGFnZUdyb3VwOjpjcmVhdGUoKS5nZXQoKSk7CiAKICAgICBhZGRU
b1BhZ2VWaWV3TWFwKGV3a1ZpZXcpOwogCkBAIC04MjIsNyArODIwLDcgQEAgc3RhdGljIHZvaWQg
X2V3a192aWV3X2luaXRpYWxpemUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19Db250ZXh0KiBj
b250ZXh0LCBXS1AKIAogICAgIHByaXYtPmJhY2tGb3J3YXJkTGlzdCA9IEV3a19CYWNrX0Zvcndh
cmRfTGlzdDo6Y3JlYXRlKHRvQVBJKHByaXYtPnBhZ2VQcm94eS0+YmFja0ZvcndhcmRMaXN0KCkp
KTsKICAgICBwcml2LT5zZXR0aW5ncyA9IGFkb3B0UHRyKG5ldyBFd2tfU2V0dGluZ3MoV0tQYWdl
R3JvdXBHZXRQcmVmZXJlbmNlcyhXS1BhZ2VHZXRQYWdlR3JvdXAodG9BUEkocHJpdi0+cGFnZVBy
b3h5LmdldCgpKSkpKSk7Ci0gICAgcHJpdi0+Y29udGV4dCA9IGV3a19jb250ZXh0X3JlZihjb250
ZXh0KTsKKyAgICBwcml2LT5jb250ZXh0ID0gY29udGV4dDsKIAogI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKICAgICBwcml2LT5wYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50ID0gUGFn
ZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6Y3JlYXRlKGV3a1ZpZXcpOwpAQCAtODQxLDcg
KzgzOSw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19pbml0aWFsaXplKEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFd2tfQ29udGV4dCogY29udGV4dCwgV0tQCiAjZW5kaWYKIAogICAgIC8qIExpc3Rl
biBmb3IgZmF2aWNvbiBjaGFuZ2VzICovCi0gICAgRXdrX0Zhdmljb25fRGF0YWJhc2UqIGljb25E
YXRhYmFzZSA9IGV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2VfZ2V0KHByaXYtPmNvbnRleHQp
OworICAgIEV3a19GYXZpY29uX0RhdGFiYXNlKiBpY29uRGF0YWJhc2UgPSBwcml2LT5jb250ZXh0
LT5mYXZpY29uRGF0YWJhc2UoKTsKICAgICBpY29uRGF0YWJhc2UtPndhdGNoQ2hhbmdlcyhJY29u
Q2hhbmdlQ2FsbGJhY2tEYXRhKF9ld2tfdmlld19vbl9mYXZpY29uX2NoYW5nZWQsIGV3a1ZpZXcp
KTsKIH0KIApAQCAtODgxLDcgKzg3OSw3IEBAIEV2YXNfT2JqZWN0KiBld2tfdmlld19iYXNlX2Fk
ZChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91CiAgICAg
aWYgKCFld2tWaWV3KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIF9ld2tfdmlld19pbml0aWFs
aXplKGV3a1ZpZXcsIGV3a19jb250ZXh0X25ld19mcm9tX1dLQ29udGV4dChjb250ZXh0UmVmKSwg
cGFnZUdyb3VwUmVmKTsKKyAgICBfZXdrX3ZpZXdfaW5pdGlhbGl6ZShld2tWaWV3LCBFd2tfQ29u
dGV4dDo6Y3JlYXRlKGNvbnRleHRSZWYpLCBwYWdlR3JvdXBSZWYpOwogCiAgICAgcmV0dXJuIGV3
a1ZpZXc7CiB9CkBAIC05MDMsNiArOTAxLDcgQEAgRXZhc19PYmplY3QqIGV3a192aWV3X3NtYXJ0
X2FkZChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBFd2tfQ29udGV4dCogY28KIAog
RXZhc19PYmplY3QqIGV3a192aWV3X2FkZF93aXRoX2NvbnRleHQoRXZhcyogY2FudmFzLCBFd2tf
Q29udGV4dCogY29udGV4dCkKIHsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
Y29udGV4dCwgMCk7CiAgICAgcmV0dXJuIGV3a192aWV3X3NtYXJ0X2FkZChjYW52YXMsIF9ld2tf
dmlld19zbWFydF9jbGFzc19uZXcoKSwgY29udGV4dCk7CiB9CiAKQEAgLTkxNiw3ICs5MTUsNyBA
QCBFd2tfQ29udGV4dCogZXdrX3ZpZXdfY29udGV4dF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a1ZpZXcpCiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEs
IDApOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDAp
OwogCi0gICAgcmV0dXJuIHByaXYtPmNvbnRleHQ7CisgICAgcmV0dXJuIHByaXYtPmNvbnRleHQu
Z2V0KCk7CiB9CiAKIC8qKgpAQCAtMTU3Myw3ICsxNTcyLDcgQEAgdm9pZCBld2tfdmlld191cGRh
dGVfaWNvbihFdmFzX09iamVjdCogZXdrVmlldykKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICBFd2tfRmF2aWNvbl9EYXRhYmFzZSogaWNvbkRhdGFi
YXNlID0gZXdrX2NvbnRleHRfZmF2aWNvbl9kYXRhYmFzZV9nZXQocHJpdi0+Y29udGV4dCk7Cisg
ICAgRXdrX0Zhdmljb25fRGF0YWJhc2UqIGljb25EYXRhYmFzZSA9IHByaXYtPmNvbnRleHQtPmZh
dmljb25EYXRhYmFzZSgpOwogICAgIEFTU0VSVChpY29uRGF0YWJhc2UpOwogCiAgICAgcHJpdi0+
ZmF2aWNvblVSTCA9IGV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25fdXJsX2dldChpY29uRGF0YWJh
c2UsIHByaXYtPnVybCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170077</attachid>
            <date>2012-10-23 01:17:44 -0700</date>
            <delta_ts>2012-10-23 01:41:04 -0700</delta_ts>
            <desc>patch + fix providing uniqueness of corresponding EwkContext and WKContext instances</desc>
            <filename>bug99594_v4</filename>
            <type>text/plain</type>
            <size>41121</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDMyODk5MGNiMDJlZTZiNTI1NTVkM2NlM2RhZTc3NGJiYTQxYTUyMzIKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
VHVlIE9jdCAyMyAxMDo1NToyMSAyMDEyICswMzAwCgogICAgYnVnOTk1OTQKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggNmRjN2I0ZC4uMWE4MDhjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDEyLTEw
LTIzICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgor
CisgICAgICAgIFtFRkxdW1dLMl0gUmVmYWN0b3IgRXdrX0NvbnRleHQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5NTk0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXdrX0NvbnRleHQgaXMgbm93IGVuY2Fw
c3VsYXRlZCB0byBhIEMrKyBjbGFzcyBpbmhlcml0ZWQgZnJvbSBXVEY6OlJlZkNvdW50ZWQuCisg
ICAgICAgIEFsc28gdGhlIHNhbWUgaW5zdGFuY2Ugb2YgRXdrX0NvbnRleHQgaXMgcmV0dXJuZWQg
Zm9yIHRoZSBzYW1lIGluc3RhbmNlIG9mCisgICAgICAgIFdLQ29udGV4dCwgc28gbWVtb3J5IGxl
YWsgaW4gZXdrX3ZpZXcgaXMgYWxzbyBmaXhlZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL1BhZ2VDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6
OmhhbmRsZURvd25sb2FkUmVxdWVzdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2NvbnRleHQuY3BwOgorICAgICAgICAoY29udGV4dE1hcCk6CisgICAgICAgIChFd2tfQ29udGV4
dDo6RXdrX0NvbnRleHQpOgorICAgICAgICAoRXdrX0NvbnRleHQ6On5Fd2tfQ29udGV4dCk6Cisg
ICAgICAgIChFd2tfQ29udGV4dDo6Y3JlYXRlKToKKyAgICAgICAgKEV3a19Db250ZXh0OjpkZWZh
dWx0Q29udGV4dCk6CisgICAgICAgIChFd2tfQ29udGV4dDo6Y29va2llTWFuYWdlcik6CisgICAg
ICAgIChFd2tfQ29udGV4dDo6ZmF2aWNvbkRhdGFiYXNlKToKKyAgICAgICAgKEV3a19Db250ZXh0
OjpyZWdpc3RlclVSTFNjaGVtZSk6CisgICAgICAgIChFd2tfQ29udGV4dDo6dmlicmF0aW9uUHJv
dmlkZXIpOgorICAgICAgICAoRXdrX0NvbnRleHQ6OmFkZFZpc2l0ZWRMaW5rKToKKyAgICAgICAg
KEV3a19Db250ZXh0OjpzZXRDYWNoZU1vZGVsKToKKyAgICAgICAgKEV3a19Db250ZXh0OjpjYWNo
ZU1vZGVsKToKKyAgICAgICAgKGV3a19jb250ZXh0X3JlZik6CisgICAgICAgIChld2tfY29udGV4
dF91bnJlZik6CisgICAgICAgIChld2tfY29udGV4dF9jb29raWVfbWFuYWdlcl9nZXQpOgorICAg
ICAgICAoZXdrX2NvbnRleHRfZmF2aWNvbl9kYXRhYmFzZV9nZXQpOgorICAgICAgICAoRXdrX0Nv
bnRleHQ6OndrQ29udGV4dCk6CisgICAgICAgIChFd2tfQ29udGV4dDo6YWRkRG93bmxvYWRKb2Ip
OgorICAgICAgICAoRXdrX0NvbnRleHQ6OmRvd25sb2FkSm9iKToKKyAgICAgICAgKEV3a19Db250
ZXh0OjpyZW1vdmVEb3dubG9hZEpvYik6CisgICAgICAgIChFd2tfQ29udGV4dDo6cmVxdWVzdE1h
bmFnZXIpOgorICAgICAgICAoRXdrX0NvbnRleHQ6OnVybFNjaGVtZVJlcXVlc3RSZWNlaXZlZCk6
CisgICAgICAgIChld2tfY29udGV4dF9kZWZhdWx0X2dldCk6CisgICAgICAgIChld2tfY29udGV4
dF9uZXcpOgorICAgICAgICAoZXdrX2NvbnRleHRfbmV3X3dpdGhfaW5qZWN0ZWRfYnVuZGxlX3Bh
dGgpOgorICAgICAgICAoZXdrX2NvbnRleHRfdXJsX3NjaGVtZV9yZWdpc3Rlcik6CisgICAgICAg
IChld2tfY29udGV4dF92aWJyYXRpb25fY2xpZW50X2NhbGxiYWNrc19zZXQpOgorICAgICAgICAo
ZXdrX2NvbnRleHRfaGlzdG9yeV9jYWxsYmFja3Nfc2V0KToKKyAgICAgICAgKGV3a19jb250ZXh0
X3Zpc2l0ZWRfbGlua19hZGQpOgorICAgICAgICAoZXdrX2NvbnRleHRfY2FjaGVfbW9kZWxfc2V0
KToKKyAgICAgICAgKGV3a19jb250ZXh0X2NhY2hlX21vZGVsX2dldCk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50LmNwcDoKKyAgICAgICAg
KGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKToKKyAgICAgICAgKGRpZFJl
Y2VpdmVSZXNwb25zZSk6CisgICAgICAgIChkaWRDcmVhdGVEZXN0aW5hdGlvbik6CisgICAgICAg
IChkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChkaWRGYWlsKToKKyAgICAgICAgKGRpZENhbmNl
bCk6CisgICAgICAgIChkaWRGaW5pc2gpOgorICAgICAgICAoZXdrX2NvbnRleHRfZG93bmxvYWRf
Y2xpZW50X2F0dGFjaCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRf
aGlzdG9yeV9jbGllbnQuY3BwOgorICAgICAgICAoZ2V0RXdrSGlzdG9yeUNsaWVudCk6CisgICAg
ICAgIChkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSk6CisgICAgICAgIChkaWRQZXJmb3Jt
Q2xpZW50UmVkaXJlY3QpOgorICAgICAgICAoZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KToKKyAg
ICAgICAgKGRpZFVwZGF0ZUhpc3RvcnlUaXRsZSk6CisgICAgICAgIChwb3B1bGF0ZVZpc2l0ZWRM
aW5rcyk6CisgICAgICAgIChld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9hdHRhY2gpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaDoKKyAgICAgICAg
KEV3a19Db250ZXh0KToKKyAgICAgICAgKEV3a19Db250ZXh0OjpoaXN0b3J5Q2xpZW50KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9yZXF1ZXN0X21hbmFnZXJfY2xp
ZW50LmNwcDoKKyAgICAgICAgKGRpZFJlY2VpdmVVUklSZXF1ZXN0KToKKyAgICAgICAgKGV3a19j
b250ZXh0X3JlcXVlc3RfbWFuYWdlcl9jbGllbnRfYXR0YWNoKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdmlldy5jcHA6CisgICAgICAgIChFd2tfVmlld19Qcml2YXRlX0RhdGEp
OgorICAgICAgICAoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhOjpFd2tfVmlld19Qcml2YXRlX0RhdGEp
OgorICAgICAgICAoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhOjp+RXdrX1ZpZXdfUHJpdmF0ZV9EYXRh
KToKKyAgICAgICAgKF9ld2tfdmlld19wcml2X2RlbCk6CisgICAgICAgIChfZXdrX3ZpZXdfaW5p
dGlhbGl6ZSk6CisgICAgICAgIChld2tfdmlld19iYXNlX2FkZCk6CisgICAgICAgIChld2tfdmll
d19hZGRfd2l0aF9jb250ZXh0KToKKyAgICAgICAgKGV3a192aWV3X2NvbnRleHRfZ2V0KToKKyAg
ICAgICAgKGV3a192aWV3X3VwZGF0ZV9pY29uKToKKwogMjAxMi0xMC0yMiAgQW5kZXJzIENhcmxz
c29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEhhbmRsZSBBcmd1bWVudENvZGVy
IHRlbXBsYXRlIHNwZWNpYWxpemF0aW9ucyB0aGF0IHRha2UgdGhlIEFyZ3VtZW50RW5jb2RlciBh
cyBhIHJlZmVyZW5jZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvUGFnZUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
UGFnZUNsaWVudEltcGwuY3BwCmluZGV4IDBjYTc1NjkuLjA1NGJmY2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5jcHAKQEAgLTI4
NCw3ICsyODQsNyBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpjb3VudFN0cmluZ01hdGNoZXNJbkN1
c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIEZpbgogdm9pZCBQYWdlQ2xpZW50SW1w
bDo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqIGRvd25sb2FkKQogewogICAg
IFJlZlB0cjxFd2tfRG93bmxvYWRfSm9iPiBld2tEb3dubG9hZCA9IEV3a19Eb3dubG9hZF9Kb2I6
OmNyZWF0ZShkb3dubG9hZCwgbV92aWV3V2lkZ2V0KTsKLSAgICBld2tfY29udGV4dF9kb3dubG9h
ZF9qb2JfYWRkKGV3a192aWV3X2NvbnRleHRfZ2V0KG1fdmlld1dpZGdldCksIGV3a0Rvd25sb2Fk
LmdldCgpKTsKKyAgICBld2tfdmlld19jb250ZXh0X2dldChtX3ZpZXdXaWRnZXQpLT5hZGREb3du
bG9hZEpvYihld2tEb3dubG9hZC5nZXQoKSk7CiB9CiAKICNpZiBVU0UoVElMRURfQkFDS0lOR19T
VE9SRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0
LmNwcAppbmRleCA5ZmI4ODkyLi4zMjk5MWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVk
ZSAiV0tTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViSWNv
bkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiV2ViU291cFJlcXVlc3RNYW5hZ2VyUHJveHkuaCIKICNp
bmNsdWRlICJld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRfcHJpdmF0ZS5oIgogI2luY2x1ZGUg
ImV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfY29u
dGV4dF9wcml2YXRlLmgiCkBAIC02OSwxNDggKzcwLDE5OSBAQCBzdHJ1Y3QgRXdrX1VybF9TY2hl
bWVfSGFuZGxlciB7CiAgICAgeyB9CiB9OwogCi10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBFd2tf
VXJsX1NjaGVtZV9IYW5kbGVyPiBVUkxTY2hlbWVIYW5kbGVyTWFwOwordHlwZWRlZiBIYXNoTWFw
PFdLQ29udGV4dFJlZiwgRXdrX0NvbnRleHQqPiBDb250ZXh0TWFwOwogCi1zdHJ1Y3QgRXdrX0Nv
bnRleHQgewotICAgIHVuc2lnbmVkIF9fcmVmOyAvKio8IHRoZSByZWZlcmVuY2UgY291bnQgb2Yg
dGhlIG9iamVjdCAqLwotICAgIFdLUmV0YWluUHRyPFdLQ29udGV4dFJlZj4gY29udGV4dDsKLQot
ICAgIE93blB0cjxFd2tfQ29va2llX01hbmFnZXI+IGNvb2tpZU1hbmFnZXI7Ci0gICAgT3duUHRy
PEV3a19GYXZpY29uX0RhdGFiYXNlPiBmYXZpY29uRGF0YWJhc2U7Ci0jaWYgRU5BQkxFKEJBVFRF
UllfU1RBVFVTKQotICAgIFJlZlB0cjxCYXR0ZXJ5UHJvdmlkZXI+IGJhdHRlcnlQcm92aWRlcjsK
LSNlbmRpZgotI2lmIEVOQUJMRShORVRXT1JLX0lORk8pCi0gICAgUmVmUHRyPE5ldHdvcmtJbmZv
UHJvdmlkZXI+IG5ldHdvcmtJbmZvUHJvdmlkZXI7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoVklCUkFU
SU9OKQotICAgIFJlZlB0cjxWaWJyYXRpb25Qcm92aWRlcj4gdmlicmF0aW9uUHJvdmlkZXI7Ci0j
ZW5kaWYKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8RXdrX0Rvd25sb2FkX0pvYj4gPiBk
b3dubG9hZEpvYnM7Ci0KLSAgICBXS1JldGFpblB0cjxXS1NvdXBSZXF1ZXN0TWFuYWdlclJlZj4g
cmVxdWVzdE1hbmFnZXI7Ci0gICAgVVJMU2NoZW1lSGFuZGxlck1hcCB1cmxTY2hlbWVIYW5kbGVy
czsKK3N0YXRpYyBpbmxpbmUgQ29udGV4dE1hcCYgY29udGV4dE1hcCgpCit7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChDb250ZXh0TWFwLCBtYXAsICgpKTsKKyAgICByZXR1cm4gbWFwOworfQog
Ci0gICAgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQgaGlzdG9yeUNsaWVudDsKK0V3a19Db250
ZXh0OjpFd2tfQ29udGV4dChXS0NvbnRleHRSZWYgY29udGV4dCkKKyAgICA6IG1fY29udGV4dChj
b250ZXh0KQorICAgICwgbV9yZXF1ZXN0TWFuYWdlcihXS0NvbnRleHRHZXRTb3VwUmVxdWVzdE1h
bmFnZXIoY29udGV4dCkpCisgICAgLCBtX2hpc3RvcnlDbGllbnQoKQoreworICAgIENvbnRleHRN
YXA6OkFkZFJlc3VsdCByZXN1bHQgPSBjb250ZXh0TWFwKCkuYWRkKGNvbnRleHQsIHRoaXMpOwor
ICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAKLSAgICBFd2tf
Q29udGV4dChXS1JldGFpblB0cjxXS0NvbnRleHRSZWY+IGNvbnRleHRSZWYpCi0gICAgICAgIDog
X19yZWYoMSkKLSAgICAgICAgLCBjb250ZXh0KGNvbnRleHRSZWYpCi0gICAgICAgICwgcmVxdWVz
dE1hbmFnZXIoV0tDb250ZXh0R2V0U291cFJlcXVlc3RNYW5hZ2VyKGNvbnRleHRSZWYuZ2V0KCkp
KQotICAgICAgICAsIGhpc3RvcnlDbGllbnQoKQotICAgIHsKICNpZiBFTkFCTEUoQkFUVEVSWV9T
VEFUVVMpCi0gICAgICAgIGJhdHRlcnlQcm92aWRlciA9IEJhdHRlcnlQcm92aWRlcjo6Y3JlYXRl
KGNvbnRleHQuZ2V0KCkpOworICAgIG1fYmF0dGVyeVByb3ZpZGVyID0gQmF0dGVyeVByb3ZpZGVy
OjpjcmVhdGUoY29udGV4dCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShORVRXT1JLX0lORk8pCi0g
ICAgICAgIG5ldHdvcmtJbmZvUHJvdmlkZXIgPSBOZXR3b3JrSW5mb1Byb3ZpZGVyOjpjcmVhdGUo
Y29udGV4dC5nZXQoKSk7CisgICAgbV9uZXR3b3JrSW5mb1Byb3ZpZGVyID0gTmV0d29ya0luZm9Q
cm92aWRlcjo6Y3JlYXRlKGNvbnRleHQpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoVklCUkFUSU9O
KQotICAgICAgICB2aWJyYXRpb25Qcm92aWRlciA9IFZpYnJhdGlvblByb3ZpZGVyOjpjcmVhdGUo
Y29udGV4dC5nZXQoKSk7CisgICAgbV92aWJyYXRpb25Qcm92aWRlciA9IFZpYnJhdGlvblByb3Zp
ZGVyOjpjcmVhdGUoY29udGV4dCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRU1PUllfU0FNUExF
UikKLSAgICAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZU1lbW9yeVNhbXBsZXIgPSBmYWxzZTsK
LSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgZW52aXJvbm1lbnRWYXJpYWJsZVtdID0gIlNBTVBM
RV9NRU1PUlkiOworICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVNZW1vcnlTYW1wbGVyID0gZmFs
c2U7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgZW52aXJvbm1lbnRWYXJpYWJsZVtdID0gIlNBTVBM
RV9NRU1PUlkiOwogCi0gICAgICAgIGlmICghaW5pdGlhbGl6ZU1lbW9yeVNhbXBsZXIgJiYgZ2V0
ZW52KGVudmlyb25tZW50VmFyaWFibGUpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS0Rv
dWJsZVJlZj4gaW50ZXJ2YWwoQWRvcHRXSywgV0tEb3VibGVDcmVhdGUoMC4wKSk7Ci0gICAgICAg
ICAgICBXS0NvbnRleHRTdGFydE1lbW9yeVNhbXBsZXIoY29udGV4dC5nZXQoKSwgaW50ZXJ2YWwu
Z2V0KCkpOwotICAgICAgICAgICAgaW5pdGlhbGl6ZU1lbW9yeVNhbXBsZXIgPSB0cnVlOwotICAg
ICAgICB9CisgICAgaWYgKCFpbml0aWFsaXplTWVtb3J5U2FtcGxlciAmJiBnZXRlbnYoZW52aXJv
bm1lbnRWYXJpYWJsZSkpIHsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IGludGVy
dmFsKEFkb3B0V0ssIFdLRG91YmxlQ3JlYXRlKDAuMCkpOworICAgICAgICBXS0NvbnRleHRTdGFy
dE1lbW9yeVNhbXBsZXIoY29udGV4dCwgaW50ZXJ2YWwuZ2V0KCkpOworICAgICAgICBpbml0aWFs
aXplTWVtb3J5U2FtcGxlciA9IHRydWU7CisgICAgfQogI2VuZGlmCi0gICAgICAgIGV3a19jb250
ZXh0X3JlcXVlc3RfbWFuYWdlcl9jbGllbnRfYXR0YWNoKHRoaXMpOwotICAgICAgICBld2tfY29u
dGV4dF9kb3dubG9hZF9jbGllbnRfYXR0YWNoKHRoaXMpOwotICAgICAgICBld2tfY29udGV4dF9o
aXN0b3J5X2NsaWVudF9hdHRhY2godGhpcyk7CisKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAg
ICAgICAgZXdrX3RleHRfY2hlY2tlcl9jbGllbnRfYXR0YWNoKCk7Ci0gICAgICAgIGlmIChld2tf
c2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpKSB7Ci0gICAg
ICAgICAgICAvLyBMb2FkIHRoZSBkZWZhdWx0IGxhbmd1YWdlLgotICAgICAgICAgICAgZXdrX3Nl
dHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoMCk7Ci0gICAgICAgIH0KLSNlbmRp
ZgorICAgIGV3a190ZXh0X2NoZWNrZXJfY2xpZW50X2F0dGFjaCgpOworICAgIGlmIChld2tfc2V0
dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpKSB7CisgICAgICAg
IC8vIExvYWQgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UuCisgICAgICAgIGV3a19zZXR0aW5nc19zcGVs
bF9jaGVja2luZ19sYW5ndWFnZXNfc2V0KDApOwogICAgIH0KLX07CisjZW5kaWYKIAotRXdrX0Nv
bnRleHQqIGV3a19jb250ZXh0X3JlZihFd2tfQ29udGV4dCogZXdrQ29udGV4dCkKKyAgICBld2tf
Y29udGV4dF9yZXF1ZXN0X21hbmFnZXJfY2xpZW50X2F0dGFjaCh0aGlzKTsKKyAgICBld2tfY29u
dGV4dF9kb3dubG9hZF9jbGllbnRfYXR0YWNoKHRoaXMpOworICAgIGV3a19jb250ZXh0X2hpc3Rv
cnlfY2xpZW50X2F0dGFjaCh0aGlzKTsKK30KKworRXdrX0NvbnRleHQ6On5Fd2tfQ29udGV4dCgp
CiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV3a0NvbnRleHQsIDApOwot
ICAgICsrZXdrQ29udGV4dC0+X19yZWY7CisgICAgQVNTRVJUKGNvbnRleHRNYXAoKS5nZXQobV9j
b250ZXh0LmdldCgpKSA9PSB0aGlzKTsKKyAgICBjb250ZXh0TWFwKCkucmVtb3ZlKG1fY29udGV4
dC5nZXQoKSk7Cit9CiAKLSAgICByZXR1cm4gZXdrQ29udGV4dDsKK1Bhc3NSZWZQdHI8RXdrX0Nv
bnRleHQ+IEV3a19Db250ZXh0OjpjcmVhdGUoV0tDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAg
aWYgKGNvbnRleHRNYXAoKS5jb250YWlucyhjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIGNvbnRl
eHRNYXAoKS5nZXQoY29udGV4dCk7IC8vIFdpbGwgYmUgcmVmLWVkIGF1dG9tYXRpY2FsbHkuCisK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV3a19Db250ZXh0KGNvbnRleHQpKTsKIH0KIAotdm9p
ZCBld2tfY29udGV4dF91bnJlZihFd2tfQ29udGV4dCogZXdrQ29udGV4dCkKK1Bhc3NSZWZQdHI8
RXdrX0NvbnRleHQ+IEV3a19Db250ZXh0OjpjcmVhdGUoKQogewotICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKGV3a0NvbnRleHQpOwotICAgIEVJTkFfU0FGRVRZX09OX0ZBTFNFX1JFVFVS
Tihld2tDb250ZXh0LT5fX3JlZiA+IDApOworICAgIHJldHVybiBjcmVhdGUoYWRvcHRXSyhXS0Nv
bnRleHRDcmVhdGUoKSkuZ2V0KCkpOworfQogCi0gICAgaWYgKC0tZXdrQ29udGV4dC0+X19yZWYp
Ci0gICAgICAgIHJldHVybjsKK1Bhc3NSZWZQdHI8RXdrX0NvbnRleHQ+IEV3a19Db250ZXh0Ojpj
cmVhdGUoY29uc3QgU3RyaW5nJiBpbmplY3RlZEJ1bmRsZVBhdGgpCit7ICAgCisgICAgaWYgKCFm
aWxlRXhpc3RzKGluamVjdGVkQnVuZGxlUGF0aCkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGluamVjdGVkQnVuZGxlUGF0aFdLID0gYWRvcHRXSyh0
b0NvcGllZEFQSShpbmplY3RlZEJ1bmRsZVBhdGgpKTsKKyAgICBXS1JldGFpblB0cjxXS0NvbnRl
eHRSZWY+IGNvbnRleHRXSyA9IGFkb3B0V0soV0tDb250ZXh0Q3JlYXRlV2l0aEluamVjdGVkQnVu
ZGxlUGF0aChpbmplY3RlZEJ1bmRsZVBhdGhXSy5nZXQoKSkpOwogCi0gICAgZGVsZXRlIGV3a0Nv
bnRleHQ7CisgICAgcmV0dXJuIGNyZWF0ZShjb250ZXh0V0suZ2V0KCkpOwogfQogCi1Fd2tfQ29v
a2llX01hbmFnZXIqIGV3a19jb250ZXh0X2Nvb2tpZV9tYW5hZ2VyX2dldChjb25zdCBFd2tfQ29u
dGV4dCogZXdrQ29udGV4dCkKK1Bhc3NSZWZQdHI8RXdrX0NvbnRleHQ+IEV3a19Db250ZXh0Ojpk
ZWZhdWx0Q29udGV4dCgpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV3
a0NvbnRleHQsIDApOwotCi0gICAgaWYgKCFld2tDb250ZXh0LT5jb29raWVNYW5hZ2VyKQotICAg
ICAgICBjb25zdF9jYXN0PEV3a19Db250ZXh0Kj4oZXdrQ29udGV4dCktPmNvb2tpZU1hbmFnZXIg
PSBFd2tfQ29va2llX01hbmFnZXI6OmNyZWF0ZShXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKGV3
a0NvbnRleHQtPmNvbnRleHQuZ2V0KCkpKTsKKyAgICBzdGF0aWMgUmVmUHRyPEV3a19Db250ZXh0
PiBkZWZhdWx0SW5zdGFuY2UgPSBjcmVhdGUoYWRvcHRXSyhXS0NvbnRleHRDcmVhdGUoKSkuZ2V0
KCkpOwogCi0gICAgcmV0dXJuIGV3a0NvbnRleHQtPmNvb2tpZU1hbmFnZXIuZ2V0KCk7CisgICAg
cmV0dXJuIGRlZmF1bHRJbnN0YW5jZTsKIH0KIAotRXdrX0Zhdmljb25fRGF0YWJhc2UqIGV3a19j
b250ZXh0X2Zhdmljb25fZGF0YWJhc2VfZ2V0KGNvbnN0IEV3a19Db250ZXh0KiBld2tDb250ZXh0
KQorRXdrX0Nvb2tpZV9NYW5hZ2VyKiBFd2tfQ29udGV4dDo6Y29va2llTWFuYWdlcigpCiB7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV3a0NvbnRleHQsIDApOworICAgIGlm
ICghbV9jb29raWVNYW5hZ2VyKQorICAgICAgICBtX2Nvb2tpZU1hbmFnZXIgPSBFd2tfQ29va2ll
X01hbmFnZXI6OmNyZWF0ZShXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKG1fY29udGV4dC5nZXQo
KSkpOworCisgICAgcmV0dXJuIG1fY29va2llTWFuYWdlci5nZXQoKTsKK30KIAotICAgIGlmICgh
ZXdrQ29udGV4dC0+ZmF2aWNvbkRhdGFiYXNlKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLSWNv
bkRhdGFiYXNlUmVmPiBpY29uRGF0YWJhc2UgPSBXS0NvbnRleHRHZXRJY29uRGF0YWJhc2UoZXdr
Q29udGV4dC0+Y29udGV4dC5nZXQoKSk7CitFd2tfRmF2aWNvbl9EYXRhYmFzZSogRXdrX0NvbnRl
eHQ6OmZhdmljb25EYXRhYmFzZSgpCit7CisgICAgaWYgKCFtX2Zhdmljb25EYXRhYmFzZSkgewor
ICAgICAgICBXS1JldGFpblB0cjxXS0ljb25EYXRhYmFzZVJlZj4gaWNvbkRhdGFiYXNlID0gV0tD
b250ZXh0R2V0SWNvbkRhdGFiYXNlKG1fY29udGV4dC5nZXQoKSk7CiAgICAgICAgIC8vIFNldCB0
aGUgZGF0YWJhc2UgcGF0aCBpZiBpdCBpcyBub3Qgb3BlbiB5ZXQuCiAgICAgICAgIGlmICghdG9J
bXBsKGljb25EYXRhYmFzZS5nZXQoKSktPmlzT3BlbigpKSB7Ci0gICAgICAgICAgICBXZWJDb250
ZXh0KiB3ZWJDb250ZXh0ID0gdG9JbXBsKGV3a0NvbnRleHQtPmNvbnRleHQuZ2V0KCkpOworICAg
ICAgICAgICAgV2ViQ29udGV4dCogd2ViQ29udGV4dCA9IHRvSW1wbChtX2NvbnRleHQuZ2V0KCkp
OwogICAgICAgICAgICAgU3RyaW5nIGRhdGFiYXNlUGF0aCA9IHdlYkNvbnRleHQtPmljb25EYXRh
YmFzZVBhdGgoKSArICIvIiArIFdlYkNvcmU6Okljb25EYXRhYmFzZTo6ZGVmYXVsdERhdGFiYXNl
RmlsZW5hbWUoKTsKICAgICAgICAgICAgIHdlYkNvbnRleHQtPnNldEljb25EYXRhYmFzZVBhdGgo
ZGF0YWJhc2VQYXRoKTsKICAgICAgICAgfQotICAgICAgICBjb25zdF9jYXN0PEV3a19Db250ZXh0
Kj4oZXdrQ29udGV4dCktPmZhdmljb25EYXRhYmFzZSA9IEV3a19GYXZpY29uX0RhdGFiYXNlOjpj
cmVhdGUoaWNvbkRhdGFiYXNlLmdldCgpKTsKKyAgICAgICAgbV9mYXZpY29uRGF0YWJhc2UgPSBF
d2tfRmF2aWNvbl9EYXRhYmFzZTo6Y3JlYXRlKGljb25EYXRhYmFzZS5nZXQoKSk7CiAgICAgfQog
Ci0gICAgcmV0dXJuIGV3a0NvbnRleHQtPmZhdmljb25EYXRhYmFzZS5nZXQoKTsKKyAgICByZXR1
cm4gbV9mYXZpY29uRGF0YWJhc2UuZ2V0KCk7CiB9CiAKLVdLQ29udGV4dFJlZiBld2tfY29udGV4
dF9XS0NvbnRleHRfZ2V0KGNvbnN0IEV3a19Db250ZXh0KiBld2tDb250ZXh0KQorYm9vbCBFd2tf
Q29udGV4dDo6cmVnaXN0ZXJVUkxTY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUsIEV3a19Vcmxf
U2NoZW1lX1JlcXVlc3RfQ2IgY2FsbGJhY2ssIHZvaWQqIHVzZXJEYXRhKQogewotICAgIHJldHVy
biBld2tDb250ZXh0LT5jb250ZXh0LmdldCgpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChjYWxsYmFjaywgZmFsc2UpOworCisgICAgbV91cmxTY2hlbWVIYW5kbGVycy5zZXQo
c2NoZW1lLCBFd2tfVXJsX1NjaGVtZV9IYW5kbGVyKGNhbGxiYWNrLCB1c2VyRGF0YSkpOworICAg
IHRvSW1wbChtX3JlcXVlc3RNYW5hZ2VyLmdldCgpKS0+cmVnaXN0ZXJVUklTY2hlbWUoc2NoZW1l
KTsKKworICAgIHJldHVybiB0cnVlOwogfQogCi0vKioKLSAqIEBpbnRlcm5hbAotICogQ3JlYXRl
IEV3a19Db250ZXh0IGZyb20gV0tDb250ZXh0LgotICovCi1Fd2tfQ29udGV4dCogZXdrX2NvbnRl
eHRfbmV3X2Zyb21fV0tDb250ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQorI2lmIEVOQUJM
RShWSUJSQVRJT04pCitQYXNzUmVmUHRyPFZpYnJhdGlvblByb3ZpZGVyPiBFd2tfQ29udGV4dDo6
dmlicmF0aW9uUHJvdmlkZXIoKQoreworICAgIHJldHVybiBtX3ZpYnJhdGlvblByb3ZpZGVyOwor
fQorI2VuZGlmCisKK3ZvaWQgRXdrX0NvbnRleHQ6OmFkZFZpc2l0ZWRMaW5rKGNvbnN0IFN0cmlu
ZyYgdmlzaXRlZFVSTCkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY29u
dGV4dFJlZiwgMCk7CisgICAgdG9JbXBsKG1fY29udGV4dC5nZXQoKSktPmFkZFZpc2l0ZWRMaW5r
KHZpc2l0ZWRVUkwpOworfQorCit2b2lkIEV3a19Db250ZXh0OjpzZXRDYWNoZU1vZGVsKEV3a19D
YWNoZV9Nb2RlbCBjYWNoZU1vZGVsKQoreworICAgIFdLQ29udGV4dFNldENhY2hlTW9kZWwobV9j
b250ZXh0LmdldCgpLCBzdGF0aWNfY2FzdDxFd2tfQ2FjaGVfTW9kZWw+KGNhY2hlTW9kZWwpKTsK
K30KKworRXdrX0NhY2hlX01vZGVsIEV3a19Db250ZXh0OjpjYWNoZU1vZGVsKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RXdrX0NhY2hlX01vZGVsPihXS0NvbnRleHRHZXRDYWNo
ZU1vZGVsKG1fY29udGV4dC5nZXQoKSkpOworfQorCitFd2tfQ29udGV4dCogZXdrX2NvbnRleHRf
cmVmKEV3a19Db250ZXh0KiBld2tDb250ZXh0KQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChld2tDb250ZXh0LCAwKTsKKworICAgIGV3a0NvbnRleHQtPnJlZigpOworCisg
ICAgcmV0dXJuIGV3a0NvbnRleHQ7Cit9CisKK3ZvaWQgZXdrX2NvbnRleHRfdW5yZWYoRXdrX0Nv
bnRleHQqIGV3a0NvbnRleHQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZXdr
Q29udGV4dCk7CisKKyAgICBld2tDb250ZXh0LT5kZXJlZigpOworfQorCitFd2tfQ29va2llX01h
bmFnZXIqIGV3a19jb250ZXh0X2Nvb2tpZV9tYW5hZ2VyX2dldChjb25zdCBFd2tfQ29udGV4dCog
ZXdrQ29udGV4dCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXdrQ29u
dGV4dCwgMCk7CisKKyAgICByZXR1cm4gY29uc3RfY2FzdDxFd2tfQ29udGV4dCo+KGV3a0NvbnRl
eHQpLT5jb29raWVNYW5hZ2VyKCk7Cit9CiAKLSAgICByZXR1cm4gbmV3IEV3a19Db250ZXh0KGNv
bnRleHRSZWYpOworRXdrX0Zhdmljb25fRGF0YWJhc2UqIGV3a19jb250ZXh0X2Zhdmljb25fZGF0
YWJhc2VfZ2V0KGNvbnN0IEV3a19Db250ZXh0KiBld2tDb250ZXh0KQoreworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChld2tDb250ZXh0LCAwKTsKKworICAgIHJldHVybiBjb25z
dF9jYXN0PEV3a19Db250ZXh0Kj4oZXdrQ29udGV4dCktPmZhdmljb25EYXRhYmFzZSgpOworfQor
CitXS0NvbnRleHRSZWYgRXdrX0NvbnRleHQ6OndrQ29udGV4dCgpCit7CisgICAgcmV0dXJuIG1f
Y29udGV4dC5nZXQoKTsKIH0KIAogLyoqCiAgKiBAaW50ZXJuYWwKICAqIFJlZ2lzdGVycyB0aGF0
IGEgbmV3IGRvd25sb2FkIGhhcyBiZWVuIHJlcXVlc3RlZC4KICAqLwotdm9pZCBld2tfY29udGV4
dF9kb3dubG9hZF9qb2JfYWRkKEV3a19Db250ZXh0KiBld2tDb250ZXh0LCBFd2tfRG93bmxvYWRf
Sm9iKiBld2tEb3dubG9hZCkKK3ZvaWQgRXdrX0NvbnRleHQ6OmFkZERvd25sb2FkSm9iKEV3a19E
b3dubG9hZF9Kb2IqIGV3a0Rvd25sb2FkKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKGV3a0NvbnRleHQpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0Rvd25s
b2FkKTsKIAogICAgIHVpbnQ2NF90IGRvd25sb2FkSWQgPSBld2tEb3dubG9hZC0+aWQoKTsKLSAg
ICBpZiAoZXdrQ29udGV4dC0+ZG93bmxvYWRKb2JzLmNvbnRhaW5zKGRvd25sb2FkSWQpKQorICAg
IGlmIChtX2Rvd25sb2FkSm9icy5jb250YWlucyhkb3dubG9hZElkKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgZXdrQ29udGV4dC0+ZG93bmxvYWRKb2JzLmFkZChkb3dubG9hZElkLCBld2tEb3du
bG9hZCk7CisgICAgbV9kb3dubG9hZEpvYnMuYWRkKGRvd25sb2FkSWQsIGV3a0Rvd25sb2FkKTsK
IH0KIAogLyoqCkBAIC0yMTgsMTEgKzI3MCw5IEBAIHZvaWQgZXdrX2NvbnRleHRfZG93bmxvYWRf
am9iX2FkZChFd2tfQ29udGV4dCogZXdrQ29udGV4dCwgRXdrX0Rvd25sb2FkX0pvYiogZXdrCiAg
KiBSZXR1cm5zIHRoZSAjRXdrX0Rvd25sb2FkX0pvYiB3aXRoIHRoZSBnaXZlbiBAYSBkb3dubG9h
ZElkLCBvcgogICogQGMgMCBpbiBjYXNlIG9mIGZhaWx1cmUuCiAgKi8KLUV3a19Eb3dubG9hZF9K
b2IqIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9nZXQoY29uc3QgRXdrX0NvbnRleHQqIGV3a0Nv
bnRleHQsIHVpbnQ2NF90IGRvd25sb2FkSWQpCitFd2tfRG93bmxvYWRfSm9iKiBFd2tfQ29udGV4
dDo6ZG93bmxvYWRKb2IodWludDY0X3QgZG93bmxvYWRJZCkKIHsKLSAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoZXdrQ29udGV4dCwgMCk7Ci0KLSAgICByZXR1cm4gZXdrQ29udGV4
dC0+ZG93bmxvYWRKb2JzLmdldChkb3dubG9hZElkKS5nZXQoKTsKKyAgICByZXR1cm4gbV9kb3du
bG9hZEpvYnMuZ2V0KGRvd25sb2FkSWQpLmdldCgpOwogfQogCiAvKioKQEAgLTIzMCwxMCArMjgw
LDkgQEAgRXdrX0Rvd25sb2FkX0pvYiogZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX2dldChjb25z
dCBFd2tfQ29udGV4dCogZXdrQ29udGV4dCwgdWkKICAqIFJlbW92ZXMgdGhlICNFd2tfRG93bmxv
YWRfSm9iIHdpdGggdGhlIGdpdmVuIEBhIGRvd25sb2FkSWQgZnJvbSB0aGUgaW50ZXJuYWwKICAq
IEhhc2hNYXAuCiAgKi8KLXZvaWQgZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX3JlbW92ZShFd2tf
Q29udGV4dCogZXdrQ29udGV4dCwgdWludDY0X3QgZG93bmxvYWRJZCkKK3ZvaWQgRXdrX0NvbnRl
eHQ6OnJlbW92ZURvd25sb2FkSm9iKHVpbnQ2NF90IGRvd25sb2FkSWQpCiB7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4oZXdrQ29udGV4dCk7Ci0gICAgZXdrQ29udGV4dC0+ZG93bmxv
YWRKb2JzLnJlbW92ZShkb3dubG9hZElkKTsKKyAgICBtX2Rvd25sb2FkSm9icy5yZW1vdmUoZG93
bmxvYWRJZCk7CiB9CiAKIC8qKgpAQCAtMjQxLDkgKzI5MCw5IEBAIHZvaWQgZXdrX2NvbnRleHRf
ZG93bmxvYWRfam9iX3JlbW92ZShFd2tfQ29udGV4dCogZXdrQ29udGV4dCwgdWludDY0X3QgZG93
bmxvYWRJCiAgKgogICogQHBhcmFtIGV3a0NvbnRleHQgYSAjRXdrX0NvbnRleHQgb2JqZWN0Lgog
ICovCi1XS1NvdXBSZXF1ZXN0TWFuYWdlclJlZiBld2tfY29udGV4dF9yZXF1ZXN0X21hbmFnZXJf
Z2V0KGNvbnN0IEV3a19Db250ZXh0KiBld2tDb250ZXh0KQorV0tTb3VwUmVxdWVzdE1hbmFnZXJS
ZWYgRXdrX0NvbnRleHQ6OnJlcXVlc3RNYW5hZ2VyKCkKIHsKLSAgICByZXR1cm4gZXdrQ29udGV4
dC0+cmVxdWVzdE1hbmFnZXIuZ2V0KCk7CisgICAgcmV0dXJuIG1fcmVxdWVzdE1hbmFnZXIuZ2V0
KCk7CiB9CiAKIC8qKgpAQCAtMjUzLDEyICszMDIsMTEgQEAgV0tTb3VwUmVxdWVzdE1hbmFnZXJS
ZWYgZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2dldChjb25zdCBFd2tfQ29udGV4dCogZXdr
Q28KICAqIEBwYXJhbSBld2tDb250ZXh0IGEgI0V3a19Db250ZXh0IG9iamVjdC4KICAqIEBwYXJh
bSBzY2hlbWVSZXF1ZXN0IGEgI0V3a19VcmxfU2NoZW1lX1JlcXVlc3Qgb2JqZWN0LgogICovCi12
b2lkIGV3a19jb250ZXh0X3VybF9zY2hlbWVfcmVxdWVzdF9yZWNlaXZlZChFd2tfQ29udGV4dCog
ZXdrQ29udGV4dCwgRXdrX1VybF9TY2hlbWVfUmVxdWVzdCogc2NoZW1lUmVxdWVzdCkKK3ZvaWQg
RXdrX0NvbnRleHQ6OnVybFNjaGVtZVJlcXVlc3RSZWNlaXZlZChFd2tfVXJsX1NjaGVtZV9SZXF1
ZXN0KiBzY2hlbWVSZXF1ZXN0KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3
a0NvbnRleHQpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNjaGVtZVJlcXVlc3Qp
OwogCi0gICAgRXdrX1VybF9TY2hlbWVfSGFuZGxlciBoYW5kbGVyID0gZXdrQ29udGV4dC0+dXJs
U2NoZW1lSGFuZGxlcnMuZ2V0KHNjaGVtZVJlcXVlc3QtPnNjaGVtZSgpKTsKKyAgICBFd2tfVXJs
X1NjaGVtZV9IYW5kbGVyIGhhbmRsZXIgPSBtX3VybFNjaGVtZUhhbmRsZXJzLmdldChzY2hlbWVS
ZXF1ZXN0LT5zY2hlbWUoKSk7CiAgICAgaWYgKCFoYW5kbGVyLmNhbGxiYWNrKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTI2NywzOCArMzE1LDI3IEBAIHZvaWQgZXdrX2NvbnRleHRfdXJsX3NjaGVt
ZV9yZXF1ZXN0X3JlY2VpdmVkKEV3a19Db250ZXh0KiBld2tDb250ZXh0LCBFd2tfVXJsX1NjCiAK
IEV3a19Db250ZXh0KiBld2tfY29udGV4dF9kZWZhdWx0X2dldCgpCiB7Ci0gICAgc3RhdGljIEV3
a19Db250ZXh0IGRlZmF1bHRDb250ZXh0KGFkb3B0V0soV0tDb250ZXh0Q3JlYXRlKCkpKTsKLQot
ICAgIHJldHVybiAmZGVmYXVsdENvbnRleHQ7CisgICAgcmV0dXJuIEV3a19Db250ZXh0OjpkZWZh
dWx0Q29udGV4dCgpLmdldCgpOwogfQogCiBFd2tfQ29udGV4dCogZXdrX2NvbnRleHRfbmV3KCkK
IHsKLSAgICByZXR1cm4gbmV3IEV3a19Db250ZXh0KGFkb3B0V0soV0tDb250ZXh0Q3JlYXRlKCkp
KTsKKyAgICByZXR1cm4gRXdrX0NvbnRleHQ6OmNyZWF0ZSgpLmxlYWtSZWYoKTsKIH0KIAogRXdr
X0NvbnRleHQqIGV3a19jb250ZXh0X25ld193aXRoX2luamVjdGVkX2J1bmRsZV9wYXRoKGNvbnN0
IGNoYXIqIHBhdGgpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHBhdGgs
IDApOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhdGhSZWYoQWRvcHRXSywgV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcocGF0aCkpOwotICAgIGlmICghZmlsZUV4aXN0cyh0
b0ltcGwocGF0aFJlZi5nZXQoKSktPnN0cmluZygpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICByZXR1cm4gbmV3IEV3a19Db250ZXh0KGFkb3B0V0soV0tDb250ZXh0Q3JlYXRlV2l0aEluamVj
dGVkQnVuZGxlUGF0aChwYXRoUmVmLmdldCgpKSkpOworICAgIHJldHVybiBFd2tfQ29udGV4dDo6
Y3JlYXRlKFN0cmluZzo6ZnJvbVVURjgocGF0aCkpLmxlYWtSZWYoKTsKIH0KIAogRWluYV9Cb29s
IGV3a19jb250ZXh0X3VybF9zY2hlbWVfcmVnaXN0ZXIoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQs
IGNvbnN0IGNoYXIqIHNjaGVtZSwgRXdrX1VybF9TY2hlbWVfUmVxdWVzdF9DYiBjYWxsYmFjaywg
dm9pZCogdXNlckRhdGEpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV3
a0NvbnRleHQsIGZhbHNlKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2No
ZW1lLCBmYWxzZSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNhbGxiYWNr
LCBmYWxzZSk7CiAKLSAgICBld2tDb250ZXh0LT51cmxTY2hlbWVIYW5kbGVycy5zZXQoU3RyaW5n
Ojpmcm9tVVRGOChzY2hlbWUpLCBFd2tfVXJsX1NjaGVtZV9IYW5kbGVyKGNhbGxiYWNrLCB1c2Vy
RGF0YSkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a1NjaGVtZShBZG9wdFdLLCBX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzY2hlbWUpKTsKLSAgICBXS1NvdXBSZXF1ZXN0
TWFuYWdlclJlZ2lzdGVyVVJJU2NoZW1lKGV3a0NvbnRleHQtPnJlcXVlc3RNYW5hZ2VyLmdldCgp
LCB3a1NjaGVtZS5nZXQoKSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZXdrQ29u
dGV4dC0+cmVnaXN0ZXJVUkxTY2hlbWUoU3RyaW5nOjpmcm9tVVRGOChzY2hlbWUpLCBjYWxsYmFj
aywgdXNlckRhdGEpOwogfQogCiB2b2lkIGV3a19jb250ZXh0X3ZpYnJhdGlvbl9jbGllbnRfY2Fs
bGJhY2tzX3NldChFd2tfQ29udGV4dCogZXdrQ29udGV4dCwgRXdrX1ZpYnJhdGlvbl9DbGllbnRf
VmlicmF0ZV9DYiB2aWJyYXRlLCBFd2tfVmlicmF0aW9uX0NsaWVudF9WaWJyYXRpb25fQ2FuY2Vs
X0NiIGNhbmNlbCwgdm9pZCogZGF0YSkKQEAgLTMwNiw3ICszNDMsNyBAQCB2b2lkIGV3a19jb250
ZXh0X3ZpYnJhdGlvbl9jbGllbnRfY2FsbGJhY2tzX3NldChFd2tfQ29udGV4dCogZXdrQ29udGV4
dCwgRXdrX1ZpYgogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0NvbnRleHQpOwog
CiAjaWYgRU5BQkxFKFZJQlJBVElPTikKLSAgICBld2tDb250ZXh0LT52aWJyYXRpb25Qcm92aWRl
ci0+c2V0VmlicmF0aW9uQ2xpZW50Q2FsbGJhY2tzKHZpYnJhdGUsIGNhbmNlbCwgZGF0YSk7Cisg
ICAgZXdrQ29udGV4dC0+dmlicmF0aW9uUHJvdmlkZXIoKS0+c2V0VmlicmF0aW9uQ2xpZW50Q2Fs
bGJhY2tzKHZpYnJhdGUsIGNhbmNlbCwgZGF0YSk7CiAjZW5kaWYKIH0KIApAQCAtMzE0LDI4ICsz
NTEsMjIgQEAgdm9pZCBld2tfY29udGV4dF9oaXN0b3J5X2NhbGxiYWNrc19zZXQoRXdrX0NvbnRl
eHQqIGV3a0NvbnRleHQsIEV3a19IaXN0b3J5X05hdmkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihld2tDb250ZXh0KTsKIAotICAgIGV3a0NvbnRleHQtPmhpc3RvcnlDbGllbnQu
bmF2aWdhdGVfZnVuYyA9IG5hdmlnYXRlOwotICAgIGV3a0NvbnRleHQtPmhpc3RvcnlDbGllbnQu
Y2xpZW50X3JlZGlyZWN0X2Z1bmMgPSBjbGllbnRSZWRpcmVjdDsKLSAgICBld2tDb250ZXh0LT5o
aXN0b3J5Q2xpZW50LnNlcnZlcl9yZWRpcmVjdF9mdW5jID0gc2VydmVyUmVkaXJlY3Q7Ci0gICAg
ZXdrQ29udGV4dC0+aGlzdG9yeUNsaWVudC50aXRsZV91cGRhdGVfZnVuYyA9IHRpdGxlVXBkYXRl
OwotICAgIGV3a0NvbnRleHQtPmhpc3RvcnlDbGllbnQucG9wdWxhdGVfdmlzaXRlZF9saW5rc19m
dW5jID0gcG9wdWxhdGVWaXNpdGVkTGlua3M7Ci0gICAgZXdrQ29udGV4dC0+aGlzdG9yeUNsaWVu
dC51c2VyX2RhdGEgPSBkYXRhOworICAgIEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50JiBoaXN0
b3J5Q2xpZW50ID0gZXdrQ29udGV4dC0+aGlzdG9yeUNsaWVudCgpOworICAgIGhpc3RvcnlDbGll
bnQubmF2aWdhdGVfZnVuYyA9IG5hdmlnYXRlOworICAgIGhpc3RvcnlDbGllbnQuY2xpZW50X3Jl
ZGlyZWN0X2Z1bmMgPSBjbGllbnRSZWRpcmVjdDsKKyAgICBoaXN0b3J5Q2xpZW50LnNlcnZlcl9y
ZWRpcmVjdF9mdW5jID0gc2VydmVyUmVkaXJlY3Q7CisgICAgaGlzdG9yeUNsaWVudC50aXRsZV91
cGRhdGVfZnVuYyA9IHRpdGxlVXBkYXRlOworICAgIGhpc3RvcnlDbGllbnQucG9wdWxhdGVfdmlz
aXRlZF9saW5rc19mdW5jID0gcG9wdWxhdGVWaXNpdGVkTGlua3M7CisgICAgaGlzdG9yeUNsaWVu
dC51c2VyX2RhdGEgPSBkYXRhOwogfQogCi1jb25zdCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVu
dCogZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfZ2V0KGNvbnN0IEV3a19Db250ZXh0KiBld2tD
b250ZXh0KQotewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChld2tDb250ZXh0
LCAwKTsKLQotICAgIHJldHVybiAmZXdrQ29udGV4dC0+aGlzdG9yeUNsaWVudDsKLX0KIAogdm9p
ZCBld2tfY29udGV4dF92aXNpdGVkX2xpbmtfYWRkKEV3a19Db250ZXh0KiBld2tDb250ZXh0LCBj
b25zdCBjaGFyKiB2aXNpdGVkVVJMKQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KGV3a0NvbnRleHQpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHZpc2l0ZWRVUkwp
OwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrVmlzaXRlZFVSTChBZG9wdFdLLCBX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh2aXNpdGVkVVJMKSk7Ci0gICAgV0tDb250ZXh0
QWRkVmlzaXRlZExpbmsoZXdrQ29udGV4dC0+Y29udGV4dC5nZXQoKSwgd2tWaXNpdGVkVVJMLmdl
dCgpKTsKKyAgICBld2tDb250ZXh0LT5hZGRWaXNpdGVkTGluayh2aXNpdGVkVVJMKTsKIH0KIAog
Ly8gRXdrX0NhY2hlX01vZGVsIGVudW0gdmFsaWRhdGlvbgpAQCAtMzQ2LDE0ICszNzcsMTYgQEAg
Q09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShFV0tfQ0FDSEVfTU9ERUxfUFJJTUFSWV9XRUJC
Uk9XU0VSLCBrV0tDYWNoZU1vZGVsUHIKIEVpbmFfQm9vbCBld2tfY29udGV4dF9jYWNoZV9tb2Rl
bF9zZXQoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIEV3a19DYWNoZV9Nb2RlbCBjYWNoZU1vZGVs
KQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChld2tDb250ZXh0LCBmYWxz
ZSk7Ci0gICAgV0tDb250ZXh0U2V0Q2FjaGVNb2RlbChld2tfY29udGV4dF9XS0NvbnRleHRfZ2V0
KGV3a0NvbnRleHQpLCBzdGF0aWNfY2FzdDxFd2tfQ2FjaGVfTW9kZWw+KGNhY2hlTW9kZWwpKTsK
KworICAgIGV3a0NvbnRleHQtPnNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCk7CisKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogRXdrX0NhY2hlX01vZGVsIGV3a19jb250ZXh0X2NhY2hlX21vZGVsX2dl
dChjb25zdCBFd2tfQ29udGV4dCogZXdrQ29udGV4dCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoZXdrQ29udGV4dCwgRVdLX0NBQ0hFX01PREVMX0RPQ1VNRU5UX1ZJRVdF
Uik7Ci0gICAgV0tDYWNoZU1vZGVsIGNhY2hlTW9kZWwgPSBXS0NvbnRleHRHZXRDYWNoZU1vZGVs
KGV3a19jb250ZXh0X1dLQ29udGV4dF9nZXQoZXdrQ29udGV4dCkpOwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxFd2tfQ2FjaGVfTW9kZWw+KGNhY2hlTW9kZWwpOworCisgICAgcmV0dXJuIGV3a0Nv
bnRleHQtPmNhY2hlTW9kZWwoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudC5jcHAK
aW5kZXggMTE2NDdiNC4uMmZhODZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnQuY3Bw
CkBAIC01MCw3ICs1MCw3IEBAIHN0YXRpYyBpbmxpbmUgRXdrX0NvbnRleHQqIHRvRXdrQ29udGV4
dChjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogCiBzdGF0aWMgV0tTdHJpbmdSZWYgZGVjaWRlRGVz
dGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVm
IHdrRG93bmxvYWQsIFdLU3RyaW5nUmVmIGZpbGVuYW1lLCBib29sKiAvKmFsbG93T3ZlcndyaXRl
Ki8sIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7Ci0gICAgRXdrX0Rvd25sb2FkX0pvYiogZG93
bmxvYWQgPSBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJ
bmZvKSwgdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOworICAgIEV3a19Eb3dubG9h
ZF9Kb2IqIGRvd25sb2FkID0gdG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLT5kb3dubG9hZEpvYih0
b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKSk7CiAgICAgQVNTRVJUKGRvd25sb2FkKTsK
IAogICAgIGRvd25sb2FkLT5zZXRTdWdnZXN0ZWRGaWxlTmFtZSh0b0ltcGwoZmlsZW5hbWUpLT5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKQEAgLTY3LDE0ICs2NywxNCBAQCBzdGF0aWMgV0tTdHJp
bmdSZWYgZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoV0tDb250ZXh0UmVm
LCBXS0Rvd25sbwogCiBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoV0tDb250ZXh0UmVm
LCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdLVVJMUmVzcG9uc2VSZWYgd2tSZXNwb25zZSwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKLSAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9h
ZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9nZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8p
LCB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKSk7CisgICAgRXdrX0Rvd25sb2FkX0pv
YiogZG93bmxvYWQgPSB0b0V3a0NvbnRleHQoY2xpZW50SW5mbyktPmRvd25sb2FkSm9iKHRvSW1w
bCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpKTsKICAgICBBU1NFUlQoZG93bmxvYWQpOwogICAg
IGRvd25sb2FkLT5zZXRSZXNwb25zZShFd2tfVXJsX1Jlc3BvbnNlOjpjcmVhdGUod2tSZXNwb25z
ZSkpOwogfQogCiBzdGF0aWMgdm9pZCBkaWRDcmVhdGVEZXN0aW5hdGlvbihXS0NvbnRleHRSZWYs
IFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tTdHJpbmdSZWYgLypwYXRoKi8sIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCiB7Ci0gICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSBld2tf
Y29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwgdG9JbXBs
KHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOworICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRvd25s
b2FkID0gdG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLT5kb3dubG9hZEpvYih0b0ltcGwod2tEb3du
bG9hZCktPmRvd25sb2FkSUQoKSk7CiAgICAgQVNTRVJUKGRvd25sb2FkKTsKIAogICAgIGRvd25s
b2FkLT5zZXRTdGF0ZShFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0RPV05MT0FESU5HKTsKQEAgLTgy
LDcgKzgyLDcgQEAgc3RhdGljIHZvaWQgZGlkQ3JlYXRlRGVzdGluYXRpb24oV0tDb250ZXh0UmVm
LCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdLU3RyaW4KIAogc3RhdGljIHZvaWQgZGlkUmVj
ZWl2ZURhdGEoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIHVpbnQ2NF90
IGxlbmd0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKLSAgICBFd2tfRG93bmxvYWRfSm9i
KiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9nZXQodG9Fd2tDb250ZXh0KGNs
aWVudEluZm8pLCB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKSk7CisgICAgRXdrX0Rv
d25sb2FkX0pvYiogZG93bmxvYWQgPSB0b0V3a0NvbnRleHQoY2xpZW50SW5mbyktPmRvd25sb2Fk
Sm9iKHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpKTsKICAgICBBU1NFUlQoZG93bmxv
YWQpOwogICAgIGRvd25sb2FkLT5pbmNyZW1lbnRSZWNlaXZlZERhdGEobGVuZ3RoKTsKIH0KQEAg
LTkwLDM1ICs5MCwzNSBAQCBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlRGF0YShXS0NvbnRleHRSZWYs
IFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgdWludDY0X3QgbGVuZwogc3RhdGljIHZvaWQgZGlk
RmFpbChXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tFcnJvclJlZiBl
cnJvciwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKICAgICB1aW50NjRfdCBkb3dubG9hZElk
ID0gdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCk7Ci0gICAgRXdrX0Rvd25sb2FkX0pv
YiogZG93bmxvYWQgPSBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KHRvRXdrQ29udGV4dChj
bGllbnRJbmZvKSwgZG93bmxvYWRJZCk7CisgICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQg
PSB0b0V3a0NvbnRleHQoY2xpZW50SW5mbyktPmRvd25sb2FkSm9iKGRvd25sb2FkSWQpOwogICAg
IEFTU0VSVChkb3dubG9hZCk7CiAKICAgICBPd25QdHI8RXdrX0Vycm9yPiBld2tFcnJvciA9IEV3
a19FcnJvcjo6Y3JlYXRlKGVycm9yKTsKICAgICBkb3dubG9hZC0+c2V0U3RhdGUoRVdLX0RPV05M
T0FEX0pPQl9TVEFURV9GQUlMRUQpOwogICAgIGV3a192aWV3X2Rvd25sb2FkX2pvYl9mYWlsZWQo
ZG93bmxvYWQtPnZpZXcoKSwgZG93bmxvYWQsIGV3a0Vycm9yLmdldCgpKTsKLSAgICBld2tfY29u
dGV4dF9kb3dubG9hZF9qb2JfcmVtb3ZlKHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwgZG93bmxv
YWRJZCk7CisgICAgdG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLT5yZW1vdmVEb3dubG9hZEpvYihk
b3dubG9hZElkKTsKIH0KIAogc3RhdGljIHZvaWQgZGlkQ2FuY2VsKFdLQ29udGV4dFJlZiwgV0tE
b3dubG9hZFJlZiB3a0Rvd25sb2FkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewogICAgIHVp
bnQ2NF90IGRvd25sb2FkSWQgPSB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKTsKLSAg
ICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9n
ZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsKKyAgICBFd2tfRG93bmxv
YWRfSm9iKiBkb3dubG9hZCA9IHRvRXdrQ29udGV4dChjbGllbnRJbmZvKS0+ZG93bmxvYWRKb2Io
ZG93bmxvYWRJZCk7CiAgICAgQVNTRVJUKGRvd25sb2FkKTsKIAogICAgIGRvd25sb2FkLT5zZXRT
dGF0ZShFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0NBTkNFTExFRCk7CiAgICAgZXdrX3ZpZXdfZG93
bmxvYWRfam9iX2NhbmNlbGxlZChkb3dubG9hZC0+dmlldygpLCBkb3dubG9hZCk7Ci0gICAgZXdr
X2NvbnRleHRfZG93bmxvYWRfam9iX3JlbW92ZSh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIGRv
d25sb2FkSWQpOworICAgIHRvRXdrQ29udGV4dChjbGllbnRJbmZvKS0+cmVtb3ZlRG93bmxvYWRK
b2IoZG93bmxvYWRJZCk7CiB9CiAKIHN0YXRpYyB2b2lkIGRpZEZpbmlzaChXS0NvbnRleHRSZWYs
IFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKICAg
ICB1aW50NjRfdCBkb3dubG9hZElkID0gdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCk7
Ci0gICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSBld2tfY29udGV4dF9kb3dubG9hZF9q
b2JfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwgZG93bmxvYWRJZCk7CisgICAgRXdrX0Rv
d25sb2FkX0pvYiogZG93bmxvYWQgPSB0b0V3a0NvbnRleHQoY2xpZW50SW5mbyktPmRvd25sb2Fk
Sm9iKGRvd25sb2FkSWQpOwogICAgIEFTU0VSVChkb3dubG9hZCk7CiAKICAgICBkb3dubG9hZC0+
c2V0U3RhdGUoRVdLX0RPV05MT0FEX0pPQl9TVEFURV9GSU5JU0hFRCk7CiAgICAgZXdrX3ZpZXdf
ZG93bmxvYWRfam9iX2ZpbmlzaGVkKGRvd25sb2FkLT52aWV3KCksIGRvd25sb2FkKTsKLSAgICBl
d2tfY29udGV4dF9kb3dubG9hZF9qb2JfcmVtb3ZlKHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwg
ZG93bmxvYWRJZCk7CisgICAgdG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLT5yZW1vdmVEb3dubG9h
ZEpvYihkb3dubG9hZElkKTsKIH0KIAogdm9pZCBld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRf
YXR0YWNoKEV3a19Db250ZXh0KiBld2tDb250ZXh0KQpAQCAtMTM2LDcgKzEzNiw3IEBAIHZvaWQg
ZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50X2F0dGFjaChFd2tfQ29udGV4dCogZXdrQ29udGV4
dCkKICAgICB3a0Rvd25sb2FkQ2xpZW50LmRpZEZhaWwgPSBkaWRGYWlsOwogICAgIHdrRG93bmxv
YWRDbGllbnQuZGlkRmluaXNoID0gZGlkRmluaXNoOwogCi0gICAgV0tDb250ZXh0U2V0RG93bmxv
YWRDbGllbnQoZXdrX2NvbnRleHRfV0tDb250ZXh0X2dldChld2tDb250ZXh0KSwgJndrRG93bmxv
YWRDbGllbnQpOworICAgIFdLQ29udGV4dFNldERvd25sb2FkQ2xpZW50KGV3a0NvbnRleHQtPndr
Q29udGV4dCgpLCAmd2tEb3dubG9hZENsaWVudCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnQuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfaGlzdG9yeV9j
bGllbnQuY3BwCmluZGV4IDEwMzhiNGQuLjRmNzkzYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9oaXN0b3J5X2Ns
aWVudC5jcHAKQEAgLTQxLDc1ICs0MSw3MCBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0Owog
Ci1zdGF0aWMgaW5saW5lIGNvbnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50KiBnZXRFd2tI
aXN0b3J5RGVsZWdhdGUoY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3N0YXRpYyBpbmxpbmUgY29u
c3QgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQmIGdldEV3a0hpc3RvcnlDbGllbnQoY29uc3Qg
dm9pZCogY2xpZW50SW5mbykKIHsKICAgICBBU1NFUlQoY2xpZW50SW5mbyk7Ci0gICAgcmV0dXJu
IGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X2dldChzdGF0aWNfY2FzdDxjb25zdCBFd2tfQ29u
dGV4dCo+KGNsaWVudEluZm8pKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgRXdrX0Nv
bnRleHQqPihjbGllbnRJbmZvKS0+aGlzdG9yeUNsaWVudCgpOwogfQogCiBzdGF0aWMgdm9pZCBk
aWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YShXS0NvbnRleHRSZWYsIFdLUGFnZVJlZiBwYWdl
LCBXS05hdmlnYXRpb25EYXRhUmVmIG5hdmlnYXRpb25EYXRhLCBXS0ZyYW1lUmVmLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQogewotICAgIGNvbnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50
KiBoaXN0b3J5RGVsZWdhdGUgPSBnZXRFd2tIaXN0b3J5RGVsZWdhdGUoY2xpZW50SW5mbyk7Ci0g
ICAgQVNTRVJUKGhpc3RvcnlEZWxlZ2F0ZSk7CisgICAgY29uc3QgRXdrX0NvbnRleHRfSGlzdG9y
eV9DbGllbnQmIGhpc3RvcnlDbGllbnQgPSBnZXRFd2tIaXN0b3J5Q2xpZW50KGNsaWVudEluZm8p
OwogCi0gICAgaWYgKCFoaXN0b3J5RGVsZWdhdGUtPm5hdmlnYXRlX2Z1bmMpCisgICAgaWYgKCFo
aXN0b3J5Q2xpZW50Lm5hdmlnYXRlX2Z1bmMpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0
cjxFd2tfTmF2aWdhdGlvbl9EYXRhPiBuYXZpZ2F0aW9uRGF0YUV3ayA9IEV3a19OYXZpZ2F0aW9u
X0RhdGE6OmNyZWF0ZShuYXZpZ2F0aW9uRGF0YSk7Ci0gICAgaGlzdG9yeURlbGVnYXRlLT5uYXZp
Z2F0ZV9mdW5jKGV3a192aWV3X2Zyb21fcGFnZV9nZXQodG9JbXBsKHBhZ2UpKSwgbmF2aWdhdGlv
bkRhdGFFd2suZ2V0KCksIGhpc3RvcnlEZWxlZ2F0ZS0+dXNlcl9kYXRhKTsKKyAgICBoaXN0b3J5
Q2xpZW50Lm5hdmlnYXRlX2Z1bmMoZXdrX3ZpZXdfZnJvbV9wYWdlX2dldCh0b0ltcGwocGFnZSkp
LCBuYXZpZ2F0aW9uRGF0YUV3ay5nZXQoKSwgaGlzdG9yeUNsaWVudC51c2VyX2RhdGEpOwogfQog
CiBzdGF0aWMgdm9pZCBkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QoV0tDb250ZXh0UmVmLCBXS1Bh
Z2VSZWYgcGFnZSwgV0tVUkxSZWYgc291cmNlVVJMLCBXS1VSTFJlZiBkZXN0aW5hdGlvblVSTCwg
V0tGcmFtZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKLSAgICBjb25zdCBFd2tfQ29u
dGV4dF9IaXN0b3J5X0NsaWVudCogaGlzdG9yeURlbGVnYXRlID0gZ2V0RXdrSGlzdG9yeURlbGVn
YXRlKGNsaWVudEluZm8pOwotICAgIEFTU0VSVChoaXN0b3J5RGVsZWdhdGUpOworICAgIGNvbnN0
IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50JiBoaXN0b3J5Q2xpZW50ID0gZ2V0RXdrSGlzdG9y
eUNsaWVudChjbGllbnRJbmZvKTsKIAotICAgIGlmICghaGlzdG9yeURlbGVnYXRlLT5jbGllbnRf
cmVkaXJlY3RfZnVuYykKKyAgICBpZiAoIWhpc3RvcnlDbGllbnQuY2xpZW50X3JlZGlyZWN0X2Z1
bmMpCiAgICAgICAgIHJldHVybjsKIAogICAgIFdLRWluYVNoYXJlZFN0cmluZyBzb3VyY2VVUkxT
dHJpbmcoc291cmNlVVJMKTsKICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgZGVzdGluYXRpb25VUkxT
dHJpbmcoZGVzdGluYXRpb25VUkwpOwogCi0gICAgaGlzdG9yeURlbGVnYXRlLT5jbGllbnRfcmVk
aXJlY3RfZnVuYyhld2tfdmlld19mcm9tX3BhZ2VfZ2V0KHRvSW1wbChwYWdlKSksIHNvdXJjZVVS
TFN0cmluZywgZGVzdGluYXRpb25VUkxTdHJpbmcsIGhpc3RvcnlEZWxlZ2F0ZS0+dXNlcl9kYXRh
KTsKKyAgICBoaXN0b3J5Q2xpZW50LmNsaWVudF9yZWRpcmVjdF9mdW5jKGV3a192aWV3X2Zyb21f
cGFnZV9nZXQodG9JbXBsKHBhZ2UpKSwgc291cmNlVVJMU3RyaW5nLCBkZXN0aW5hdGlvblVSTFN0
cmluZywgaGlzdG9yeUNsaWVudC51c2VyX2RhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBkaWRQZXJm
b3JtU2VydmVyUmVkaXJlY3QoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcGFnZSwgV0tVUkxSZWYg
c291cmNlVVJMLCBXS1VSTFJlZiBkZXN0aW5hdGlvblVSTCwgV0tGcmFtZVJlZiwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKIHsKLSAgICBjb25zdCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCog
aGlzdG9yeURlbGVnYXRlID0gZ2V0RXdrSGlzdG9yeURlbGVnYXRlKGNsaWVudEluZm8pOwotICAg
IEFTU0VSVChoaXN0b3J5RGVsZWdhdGUpOworICAgIGNvbnN0IEV3a19Db250ZXh0X0hpc3Rvcnlf
Q2xpZW50JiBoaXN0b3J5Q2xpZW50ID0gZ2V0RXdrSGlzdG9yeUNsaWVudChjbGllbnRJbmZvKTsK
IAotICAgIGlmICghaGlzdG9yeURlbGVnYXRlLT5zZXJ2ZXJfcmVkaXJlY3RfZnVuYykKKyAgICBp
ZiAoIWhpc3RvcnlDbGllbnQuc2VydmVyX3JlZGlyZWN0X2Z1bmMpCiAgICAgICAgIHJldHVybjsK
IAogICAgIFdLRWluYVNoYXJlZFN0cmluZyBzb3VyY2VVUkxTdHJpbmcoc291cmNlVVJMKTsKICAg
ICBXS0VpbmFTaGFyZWRTdHJpbmcgZGVzdGluYXRpb25VUkxTdHJpbmcoZGVzdGluYXRpb25VUkwp
OwogCi0gICAgaGlzdG9yeURlbGVnYXRlLT5zZXJ2ZXJfcmVkaXJlY3RfZnVuYyhld2tfdmlld19m
cm9tX3BhZ2VfZ2V0KHRvSW1wbChwYWdlKSksIHNvdXJjZVVSTFN0cmluZywgZGVzdGluYXRpb25V
UkxTdHJpbmcsIGhpc3RvcnlEZWxlZ2F0ZS0+dXNlcl9kYXRhKTsKKyAgICBoaXN0b3J5Q2xpZW50
LnNlcnZlcl9yZWRpcmVjdF9mdW5jKGV3a192aWV3X2Zyb21fcGFnZV9nZXQodG9JbXBsKHBhZ2Up
KSwgc291cmNlVVJMU3RyaW5nLCBkZXN0aW5hdGlvblVSTFN0cmluZywgaGlzdG9yeUNsaWVudC51
c2VyX2RhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBkaWRVcGRhdGVIaXN0b3J5VGl0bGUoV0tDb250
ZXh0UmVmLCBXS1BhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgdGl0bGUsIFdLVVJMUmVmIFVSTCwg
V0tGcmFtZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKLSAgICBjb25zdCBFd2tfQ29u
dGV4dF9IaXN0b3J5X0NsaWVudCogaGlzdG9yeURlbGVnYXRlID0gZ2V0RXdrSGlzdG9yeURlbGVn
YXRlKGNsaWVudEluZm8pOwotICAgIEFTU0VSVChoaXN0b3J5RGVsZWdhdGUpOworICAgIGNvbnN0
IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50JiBoaXN0b3J5Q2xpZW50ID0gZ2V0RXdrSGlzdG9y
eUNsaWVudChjbGllbnRJbmZvKTsKIAotICAgIGlmICghaGlzdG9yeURlbGVnYXRlLT50aXRsZV91
cGRhdGVfZnVuYykKKyAgICBpZiAoIWhpc3RvcnlDbGllbnQudGl0bGVfdXBkYXRlX2Z1bmMpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIFdLRWluYVNoYXJlZFN0cmluZyB0aXRsZVN0cmluZyh0aXRs
ZSk7CiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHN0cmluZ1VSTChVUkwpOwogCi0gICAgaGlzdG9y
eURlbGVnYXRlLT50aXRsZV91cGRhdGVfZnVuYyhld2tfdmlld19mcm9tX3BhZ2VfZ2V0KHRvSW1w
bChwYWdlKSksIHRpdGxlU3RyaW5nLCBzdHJpbmdVUkwsIGhpc3RvcnlEZWxlZ2F0ZS0+dXNlcl9k
YXRhKTsKKyAgICBoaXN0b3J5Q2xpZW50LnRpdGxlX3VwZGF0ZV9mdW5jKGV3a192aWV3X2Zyb21f
cGFnZV9nZXQodG9JbXBsKHBhZ2UpKSwgdGl0bGVTdHJpbmcsIHN0cmluZ1VSTCwgaGlzdG9yeUNs
aWVudC51c2VyX2RhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBwb3B1bGF0ZVZpc2l0ZWRMaW5rcyhX
S0NvbnRleHRSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7Ci0gICAgY29uc3QgRXdrX0Nv
bnRleHRfSGlzdG9yeV9DbGllbnQqIGhpc3RvcnlEZWxlZ2F0ZSA9IGdldEV3a0hpc3RvcnlEZWxl
Z2F0ZShjbGllbnRJbmZvKTsKLSAgICBBU1NFUlQoaGlzdG9yeURlbGVnYXRlKTsKKyAgICBjb25z
dCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCYgaGlzdG9yeUNsaWVudCA9IGdldEV3a0hpc3Rv
cnlDbGllbnQoY2xpZW50SW5mbyk7CiAKLSAgICBpZiAoIWhpc3RvcnlEZWxlZ2F0ZS0+cG9wdWxh
dGVfdmlzaXRlZF9saW5rc19mdW5jKQorICAgIGlmICghaGlzdG9yeUNsaWVudC5wb3B1bGF0ZV92
aXNpdGVkX2xpbmtzX2Z1bmMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGhpc3RvcnlEZWxlZ2F0
ZS0+cG9wdWxhdGVfdmlzaXRlZF9saW5rc19mdW5jKGhpc3RvcnlEZWxlZ2F0ZS0+dXNlcl9kYXRh
KTsKKyAgICBoaXN0b3J5Q2xpZW50LnBvcHVsYXRlX3Zpc2l0ZWRfbGlua3NfZnVuYyhoaXN0b3J5
Q2xpZW50LnVzZXJfZGF0YSk7CiB9CiAKIHZvaWQgZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRf
YXR0YWNoKEV3a19Db250ZXh0KiBld2tDb250ZXh0KQpAQCAtMTI2LDUgKzEyMSw1IEBAIHZvaWQg
ZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfYXR0YWNoKEV3a19Db250ZXh0KiBld2tDb250ZXh0
KQogICAgIHdrSGlzdG9yeUNsaWVudC5kaWRVcGRhdGVIaXN0b3J5VGl0bGUgPSBkaWRVcGRhdGVI
aXN0b3J5VGl0bGU7CiAgICAgd2tIaXN0b3J5Q2xpZW50LnBvcHVsYXRlVmlzaXRlZExpbmtzID0g
cG9wdWxhdGVWaXNpdGVkTGlua3M7CiAKLSAgICBXS0NvbnRleHRTZXRIaXN0b3J5Q2xpZW50KGV3
a19jb250ZXh0X1dLQ29udGV4dF9nZXQoZXdrQ29udGV4dCksICZ3a0hpc3RvcnlDbGllbnQpOwor
ICAgIFdLQ29udGV4dFNldEhpc3RvcnlDbGllbnQoZXdrQ29udGV4dC0+d2tDb250ZXh0KCksICZ3
a0hpc3RvcnlDbGllbnQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oCmluZGV4IDcwNTczOWEuLjQ4OWYwNTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3By
aXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dF9wcml2YXRlLmgKQEAgLTIwLDIyICsyMCw4NyBAQAogI2lmbmRlZiBld2tfY29udGV4dF9wcml2
YXRlX2gKICNkZWZpbmUgZXdrX2NvbnRleHRfcHJpdmF0ZV9oCiAKLSNpbmNsdWRlIDxXZWJLaXQy
L1dLQmFzZS5oPgorI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLUmV0YWluUHRy
LmgiCisjaW5jbHVkZSAiZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfcHJpdmF0ZS5oIgogCi10
eXBlZGVmIHN0cnVjdCBFd2tfQ29udGV4dCBFd2tfQ29udGV4dDsKLXR5cGVkZWYgc3RydWN0IEV3
a19Eb3dubG9hZF9Kb2IgRXdrX0Rvd25sb2FkX0pvYjsKLXR5cGVkZWYgc3RydWN0IEV3a19Vcmxf
U2NoZW1lX1JlcXVlc3QgRXdrX1VybF9TY2hlbWVfUmVxdWVzdDsKLXR5cGVkZWYgc3RydWN0IEV3
a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50OworY2xh
c3MgRXdrX0Rvd25sb2FkX0pvYjsKK2NsYXNzIEV3a19VcmxfU2NoZW1lX1JlcXVlc3Q7CitjbGFz
cyBFd2tfQ29va2llX01hbmFnZXI7CitjbGFzcyBFd2tfRmF2aWNvbl9EYXRhYmFzZTsKKyNpZiBF
TkFCTEUoQkFUVEVSWV9TVEFUVVMpCitjbGFzcyBCYXR0ZXJ5UHJvdmlkZXI7CisjZW5kaWYKKyNp
ZiBFTkFCTEUoTkVUV09SS19JTkZPKQorY2xhc3MgTmV0d29ya0luZm9Qcm92aWRlcjsKKyNlbmRp
ZgorI2lmIEVOQUJMRShWSUJSQVRJT04pCitjbGFzcyBWaWJyYXRpb25Qcm92aWRlcjsKKyNlbmRp
ZgogCi1XS0NvbnRleHRSZWYgZXdrX2NvbnRleHRfV0tDb250ZXh0X2dldChjb25zdCBFd2tfQ29u
dGV4dCopOwotRXdrX0NvbnRleHQqIGV3a19jb250ZXh0X25ld19mcm9tX1dLQ29udGV4dChXS0Nv
bnRleHRSZWYpOwotV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWYgZXdrX2NvbnRleHRfcmVxdWVzdF9t
YW5hZ2VyX2dldChjb25zdCBFd2tfQ29udGV4dCopOwotdm9pZCBld2tfY29udGV4dF91cmxfc2No
ZW1lX3JlcXVlc3RfcmVjZWl2ZWQoRXdrX0NvbnRleHQqLCBFd2tfVXJsX1NjaGVtZV9SZXF1ZXN0
Kik7CitjbGFzcyBFd2tfQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPEV3a19Db250ZXh0PiB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RXdrX0NvbnRleHQ+IGNyZWF0ZShXS0Nv
bnRleHRSZWYgY29udGV4dCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RXdrX0NvbnRleHQ+IGNy
ZWF0ZSgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV3a19Db250ZXh0PiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiBpbmplY3RlZEJ1bmRsZVBhdGgpOwogCi12b2lkIGV3a19jb250ZXh0X2Rvd25sb2Fk
X2pvYl9hZGQoRXdrX0NvbnRleHQqLCBFd2tfRG93bmxvYWRfSm9iKik7Ci1Fd2tfRG93bmxvYWRf
Sm9iKiBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KGNvbnN0IEV3a19Db250ZXh0KiwgdWlu
dDY0X3QgZG93bmxvYWRJZCk7Ci12b2lkIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9yZW1vdmUo
RXdrX0NvbnRleHQqLCB1aW50NjRfdCBkb3dubG9hZElkKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxFd2tfQ29udGV4dD4gZGVmYXVsdENvbnRleHQoKTsKIAotY29uc3QgRXdrX0NvbnRleHRfSGlz
dG9yeV9DbGllbnQqIGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X2dldChjb25zdCBFd2tfQ29u
dGV4dCopOworICAgIH5Fd2tfQ29udGV4dCgpOworCisgICAgRXdrX0Nvb2tpZV9NYW5hZ2VyKiBj
b29raWVNYW5hZ2VyKCk7CisKKyAgICBFd2tfRmF2aWNvbl9EYXRhYmFzZSogZmF2aWNvbkRhdGFi
YXNlKCk7CisKKyAgICBib29sIHJlZ2lzdGVyVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1l
LCBFd2tfVXJsX1NjaGVtZV9SZXF1ZXN0X0NiIGNhbGxiYWNrLCB2b2lkKiB1c2VyRGF0YSk7CisK
KyNpZiBFTkFCTEUoVklCUkFUSU9OKQorICAgIFBhc3NSZWZQdHI8VmlicmF0aW9uUHJvdmlkZXI+
IHZpYnJhdGlvblByb3ZpZGVyKCk7CisjZW5kaWYKKworICAgIHZvaWQgYWRkVmlzaXRlZExpbmso
Y29uc3QgU3RyaW5nJiB2aXNpdGVkVVJMKTsKKworICAgIHZvaWQgc2V0Q2FjaGVNb2RlbChFd2tf
Q2FjaGVfTW9kZWwpOworCisgICAgRXdrX0NhY2hlX01vZGVsIGNhY2hlTW9kZWwoKSBjb25zdDsK
KworICAgIFdLQ29udGV4dFJlZiB3a0NvbnRleHQoKTsKKworICAgIFdLU291cFJlcXVlc3RNYW5h
Z2VyUmVmIHJlcXVlc3RNYW5hZ2VyKCk7CisKKyAgICB2b2lkIHVybFNjaGVtZVJlcXVlc3RSZWNl
aXZlZChFd2tfVXJsX1NjaGVtZV9SZXF1ZXN0Kik7CisKKyAgICB2b2lkIGFkZERvd25sb2FkSm9i
KEV3a19Eb3dubG9hZF9Kb2IqKTsKKyAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZEpvYih1
aW50NjRfdCBkb3dubG9hZElkKTsKKyAgICB2b2lkIHJlbW92ZURvd25sb2FkSm9iKHVpbnQ2NF90
IGRvd25sb2FkSWQpOworCisgICAgY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQmIGhp
c3RvcnlDbGllbnQoKSBjb25zdCAgeyByZXR1cm4gbV9oaXN0b3J5Q2xpZW50OyB9CisgICAgRXdr
X0NvbnRleHRfSGlzdG9yeV9DbGllbnQmIGhpc3RvcnlDbGllbnQoKSB7IHJldHVybiBtX2hpc3Rv
cnlDbGllbnQ7IH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBFd2tfQ29udGV4dChXS0NvbnRl
eHRSZWYpOworCisgICAgV0tSZXRhaW5QdHI8V0tDb250ZXh0UmVmPiBtX2NvbnRleHQ7CisKKyAg
ICBPd25QdHI8RXdrX0Nvb2tpZV9NYW5hZ2VyPiBtX2Nvb2tpZU1hbmFnZXI7CisgICAgT3duUHRy
PEV3a19GYXZpY29uX0RhdGFiYXNlPiBtX2Zhdmljb25EYXRhYmFzZTsKKyNpZiBFTkFCTEUoQkFU
VEVSWV9TVEFUVVMpCisgICAgUmVmUHRyPEJhdHRlcnlQcm92aWRlcj4gbV9iYXR0ZXJ5UHJvdmlk
ZXI7CisjZW5kaWYKKyNpZiBFTkFCTEUoTkVUV09SS19JTkZPKQorICAgIFJlZlB0cjxOZXR3b3Jr
SW5mb1Byb3ZpZGVyPiBtX25ldHdvcmtJbmZvUHJvdmlkZXI7CisjZW5kaWYKKyNpZiBFTkFCTEUo
VklCUkFUSU9OKQorICAgIFJlZlB0cjxWaWJyYXRpb25Qcm92aWRlcj4gbV92aWJyYXRpb25Qcm92
aWRlcjsKKyNlbmRpZgorICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxFd2tfRG93bmxvYWRf
Sm9iPiA+IG1fZG93bmxvYWRKb2JzOworCisgICAgV0tSZXRhaW5QdHI8V0tTb3VwUmVxdWVzdE1h
bmFnZXJSZWY+IG1fcmVxdWVzdE1hbmFnZXI7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5n
LCBjbGFzcyBFd2tfVXJsX1NjaGVtZV9IYW5kbGVyPiBVUkxTY2hlbWVIYW5kbGVyTWFwOworICAg
IFVSTFNjaGVtZUhhbmRsZXJNYXAgbV91cmxTY2hlbWVIYW5kbGVyczsKKworICAgIEV3a19Db250
ZXh0X0hpc3RvcnlfQ2xpZW50IG1faGlzdG9yeUNsaWVudDsKK307CiAKICNlbmRpZiAvLyBld2tf
Y29udGV4dF9wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19jb250ZXh0X3JlcXVlc3RfbWFuYWdlcl9jbGllbnQuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVu
dC5jcHAKaW5kZXggYjI1NzNjYS4uZmU4MDFjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudC5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcmVxdWVz
dF9tYW5hZ2VyX2NsaWVudC5jcHAKQEAgLTQxLDcgKzQxLDcgQEAgc3RhdGljIGlubGluZSBFd2tf
Q29udGV4dCogdG9Fd2tDb250ZXh0KGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiBzdGF0aWMgdm9p
ZCBkaWRSZWNlaXZlVVJJUmVxdWVzdChXS1NvdXBSZXF1ZXN0TWFuYWdlclJlZiBzb3VwUmVxdWVz
dE1hbmFnZXJSZWYsIFdLVVJMUmVmIHVybFJlZiwgV0tQYWdlUmVmLCB1aW50NjRfdCByZXF1ZXN0
SUQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7CiAgICAgUmVmUHRyPEV3a19VcmxfU2NoZW1l
X1JlcXVlc3Q+IHNjaGVtZVJlcXVlc3QgPSBFd2tfVXJsX1NjaGVtZV9SZXF1ZXN0OjpjcmVhdGUo
c291cFJlcXVlc3RNYW5hZ2VyUmVmLCB1cmxSZWYsIHJlcXVlc3RJRCk7Ci0gICAgZXdrX2NvbnRl
eHRfdXJsX3NjaGVtZV9yZXF1ZXN0X3JlY2VpdmVkKHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwg
c2NoZW1lUmVxdWVzdC5nZXQoKSk7CisgICAgdG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLT51cmxT
Y2hlbWVSZXF1ZXN0UmVjZWl2ZWQoc2NoZW1lUmVxdWVzdC5nZXQoKSk7CiB9CiAKIHZvaWQgZXdr
X2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudF9hdHRhY2goRXdrX0NvbnRleHQqIGNvbnRl
eHQpCkBAIC01Myw1ICs1Myw1IEBAIHZvaWQgZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2Ns
aWVudF9hdHRhY2goRXdrX0NvbnRleHQqIGNvbnRleHQpCiAgICAgd2tSZXF1ZXN0TWFuYWdlckNs
aWVudC5jbGllbnRJbmZvID0gY29udGV4dDsKICAgICB3a1JlcXVlc3RNYW5hZ2VyQ2xpZW50LmRp
ZFJlY2VpdmVVUklSZXF1ZXN0ID0gZGlkUmVjZWl2ZVVSSVJlcXVlc3Q7CiAKLSAgICBXS1NvdXBS
ZXF1ZXN0TWFuYWdlclNldENsaWVudChld2tfY29udGV4dF9yZXF1ZXN0X21hbmFnZXJfZ2V0KGNv
bnRleHQpLCAmd2tSZXF1ZXN0TWFuYWdlckNsaWVudCk7CisgICAgV0tTb3VwUmVxdWVzdE1hbmFn
ZXJTZXRDbGllbnQoY29udGV4dC0+cmVxdWVzdE1hbmFnZXIoKSwgJndrUmVxdWVzdE1hbmFnZXJD
bGllbnQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcu
Y3BwCmluZGV4IDFhYjg5YWYuLjljNDdkODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKQEAgLTEzMSw3ICsxMzEsNyBAQCBzdHJ1Y3QgRXdrX1Zp
ZXdfUHJpdmF0ZV9EYXRhIHsKICAgICBPd25QdHI8RXdrX1NldHRpbmdzPiBzZXR0aW5nczsKICAg
ICBib29sIGFyZU1vdXNlRXZlbnRzRW5hYmxlZDsKICAgICBXS1JldGFpblB0cjxXS0NvbG9yUGlj
a2VyUmVzdWx0TGlzdGVuZXJSZWY+IGNvbG9yUGlja2VyUmVzdWx0TGlzdGVuZXI7Ci0gICAgRXdr
X0NvbnRleHQqIGNvbnRleHQ7CisgICAgUmVmUHRyPEV3a19Db250ZXh0PiBjb250ZXh0OwogI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgYm9vbCBhcmVUb3VjaEV2ZW50c0VuYWJsZWQ7CiAj
ZW5kaWYKQEAgLTE1MSw3ICsxNTEsNiBAQCBzdHJ1Y3QgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhIHsK
IAogICAgIEV3a19WaWV3X1ByaXZhdGVfRGF0YSgpCiAgICAgICAgIDogYXJlTW91c2VFdmVudHNF
bmFibGVkKGZhbHNlKQotICAgICAgICAsIGNvbnRleHQoMCkKICNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQogICAgICAgICAsIGFyZVRvdWNoRXZlbnRzRW5hYmxlZChmYWxzZSkKICNlbmRpZgpAQCAt
MTcwLDcgKzE2OSw3IEBAIHN0cnVjdCBFd2tfVmlld19Qcml2YXRlX0RhdGEgewogICAgIH5Fd2tf
Vmlld19Qcml2YXRlX0RhdGEoKQogICAgIHsKICAgICAgICAgLyogVW5yZWdpc3RlciBpY29uIGNo
YW5nZSBjYWxsYmFjayAqLwotICAgICAgICBFd2tfRmF2aWNvbl9EYXRhYmFzZSogaWNvbkRhdGFi
YXNlID0gZXdrX2NvbnRleHRfZmF2aWNvbl9kYXRhYmFzZV9nZXQoY29udGV4dCk7CisgICAgICAg
IEV3a19GYXZpY29uX0RhdGFiYXNlKiBpY29uRGF0YWJhc2UgPSBjb250ZXh0LT5mYXZpY29uRGF0
YWJhc2UoKTsKICAgICAgICAgaWNvbkRhdGFiYXNlLT51bndhdGNoQ2hhbmdlcyhfZXdrX3ZpZXdf
b25fZmF2aWNvbl9jaGFuZ2VkKTsKIAogICAgICAgICB2b2lkKiBpdGVtOwpAQCAtNDc2LDcgKzQ3
NSw2IEBAIHN0YXRpYyBFd2tfVmlld19Qcml2YXRlX0RhdGEqIF9ld2tfdmlld19wcml2X25ldyhF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19w
cml2X2RlbChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYpCiB7Ci0gICAgZXdrX2NvbnRleHRf
dW5yZWYocHJpdi0+Y29udGV4dCk7CiAgICAgZGVsZXRlIHByaXY7CiB9CiAKQEAgLTc5NCw3ICs3
OTIsNyBAQCBzdGF0aWMgaW5saW5lIEV2YXNfU21hcnQqIF9ld2tfdmlld19zbWFydF9jbGFzc19u
ZXcodm9pZCkKICAgICByZXR1cm4gc21hcnQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19p
bml0aWFsaXplKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfQ29udGV4dCogY29udGV4dCwgV0tQ
YWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQorc3RhdGljIHZvaWQgX2V3a192aWV3X2luaXRpYWxp
emUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIFBhc3NSZWZQdHI8RXdrX0NvbnRleHQ+IGNvbnRleHQs
IFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKIHsKICAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNtYXJ0RGF0YSwgcHJpdik7CkBAIC04MDYsOSArODA0LDkgQEAgc3RhdGljIHZvaWQgX2V3
a192aWV3X2luaXRpYWxpemUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19Db250ZXh0KiBjb250
ZXh0LCBXS1AKICAgICBwcml2LT5wYWdlQ2xpZW50ID0gUGFnZUNsaWVudEltcGw6OmNyZWF0ZShl
d2tWaWV3KTsKIAogICAgIGlmIChwYWdlR3JvdXBSZWYpCi0gICAgICAgIHByaXYtPnBhZ2VQcm94
eSA9IHRvSW1wbChld2tfY29udGV4dF9XS0NvbnRleHRfZ2V0KGNvbnRleHQpKS0+Y3JlYXRlV2Vi
UGFnZShwcml2LT5wYWdlQ2xpZW50LmdldCgpLCB0b0ltcGwocGFnZUdyb3VwUmVmKSk7CisgICAg
ICAgIHByaXYtPnBhZ2VQcm94eSA9IHRvSW1wbChjb250ZXh0LT53a0NvbnRleHQoKSktPmNyZWF0
ZVdlYlBhZ2UocHJpdi0+cGFnZUNsaWVudC5nZXQoKSwgdG9JbXBsKHBhZ2VHcm91cFJlZikpOwog
ICAgIGVsc2UKLSAgICAgICAgcHJpdi0+cGFnZVByb3h5ID0gdG9JbXBsKGV3a19jb250ZXh0X1dL
Q29udGV4dF9nZXQoY29udGV4dCkpLT5jcmVhdGVXZWJQYWdlKHByaXYtPnBhZ2VDbGllbnQuZ2V0
KCksIFdlYlBhZ2VHcm91cDo6Y3JlYXRlKCkuZ2V0KCkpOworICAgICAgICBwcml2LT5wYWdlUHJv
eHkgPSB0b0ltcGwoY29udGV4dC0+d2tDb250ZXh0KCkpLT5jcmVhdGVXZWJQYWdlKHByaXYtPnBh
Z2VDbGllbnQuZ2V0KCksIFdlYlBhZ2VHcm91cDo6Y3JlYXRlKCkuZ2V0KCkpOwogCiAgICAgYWRk
VG9QYWdlVmlld01hcChld2tWaWV3KTsKIApAQCAtODIxLDcgKzgxOSw3IEBAIHN0YXRpYyB2b2lk
IF9ld2tfdmlld19pbml0aWFsaXplKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfQ29udGV4dCog
Y29udGV4dCwgV0tQCiAKICAgICBwcml2LT5iYWNrRm9yd2FyZExpc3QgPSBFd2tfQmFja19Gb3J3
YXJkX0xpc3Q6OmNyZWF0ZSh0b0FQSShwcml2LT5wYWdlUHJveHktPmJhY2tGb3J3YXJkTGlzdCgp
KSk7CiAgICAgcHJpdi0+c2V0dGluZ3MgPSBhZG9wdFB0cihuZXcgRXdrX1NldHRpbmdzKFdLUGFn
ZUdyb3VwR2V0UHJlZmVyZW5jZXMoV0tQYWdlR2V0UGFnZUdyb3VwKHRvQVBJKHByaXYtPnBhZ2VQ
cm94eS5nZXQoKSkpKSkpOwotICAgIHByaXYtPmNvbnRleHQgPSBld2tfY29udGV4dF9yZWYoY29u
dGV4dCk7CisgICAgcHJpdi0+Y29udGV4dCA9IGNvbnRleHQ7CiAKICNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCiAgICAgcHJpdi0+cGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudCA9IFBh
Z2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OmNyZWF0ZShld2tWaWV3KTsKQEAgLTg0MSw3
ICs4MzksNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfaW5pdGlhbGl6ZShFdmFzX09iamVjdCog
ZXdrVmlldywgRXdrX0NvbnRleHQqIGNvbnRleHQsIFdLUAogICAgIHByaXYtPnJlc291cmNlTG9h
ZENsaWVudCA9IFJlc291cmNlTG9hZENsaWVudEVmbDo6Y3JlYXRlKGV3a1ZpZXcpOwogCiAgICAg
LyogTGlzdGVuIGZvciBmYXZpY29uIGNoYW5nZXMgKi8KLSAgICBFd2tfRmF2aWNvbl9EYXRhYmFz
ZSogaWNvbkRhdGFiYXNlID0gZXdrX2NvbnRleHRfZmF2aWNvbl9kYXRhYmFzZV9nZXQocHJpdi0+
Y29udGV4dCk7CisgICAgRXdrX0Zhdmljb25fRGF0YWJhc2UqIGljb25EYXRhYmFzZSA9IHByaXYt
PmNvbnRleHQtPmZhdmljb25EYXRhYmFzZSgpOwogICAgIGljb25EYXRhYmFzZS0+d2F0Y2hDaGFu
Z2VzKEljb25DaGFuZ2VDYWxsYmFja0RhdGEoX2V3a192aWV3X29uX2Zhdmljb25fY2hhbmdlZCwg
ZXdrVmlldykpOwogfQogCkBAIC04ODEsNyArODc5LDcgQEAgRXZhc19PYmplY3QqIGV3a192aWV3
X2Jhc2VfYWRkKEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdy
b3UKICAgICBpZiAoIWV3a1ZpZXcpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgX2V3a192aWV3
X2luaXRpYWxpemUoZXdrVmlldywgZXdrX2NvbnRleHRfbmV3X2Zyb21fV0tDb250ZXh0KGNvbnRl
eHRSZWYpLCBwYWdlR3JvdXBSZWYpOworICAgIF9ld2tfdmlld19pbml0aWFsaXplKGV3a1ZpZXcs
IEV3a19Db250ZXh0OjpjcmVhdGUoY29udGV4dFJlZiksIHBhZ2VHcm91cFJlZik7CiAKICAgICBy
ZXR1cm4gZXdrVmlldzsKIH0KQEAgLTkwMyw2ICs5MDEsNyBAQCBFdmFzX09iamVjdCogZXdrX3Zp
ZXdfc21hcnRfYWRkKEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQsIEV3a19Db250ZXh0
KiBjbwogCiBFdmFzX09iamVjdCogZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4dChFdmFzKiBjYW52
YXMsIEV3a19Db250ZXh0KiBjb250ZXh0KQogeworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChjb250ZXh0LCAwKTsKICAgICByZXR1cm4gZXdrX3ZpZXdfc21hcnRfYWRkKGNhbnZh
cywgX2V3a192aWV3X3NtYXJ0X2NsYXNzX25ldygpLCBjb250ZXh0KTsKIH0KIApAQCAtOTE2LDcg
KzkxNSw3IEBAIEV3a19Db250ZXh0KiBld2tfdmlld19jb250ZXh0X2dldChjb25zdCBFdmFzX09i
amVjdCogZXdrVmlldykKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNt
YXJ0RGF0YSwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwg
cHJpdiwgMCk7CiAKLSAgICByZXR1cm4gcHJpdi0+Y29udGV4dDsKKyAgICByZXR1cm4gcHJpdi0+
Y29udGV4dC5nZXQoKTsKIH0KIAogLyoqCkBAIC0xNTQzLDcgKzE1NDIsNyBAQCB2b2lkIGV3a192
aWV3X3VwZGF0ZV9pY29uKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc21hcnREYXRhLCBwcml2KTsKIAotICAgIEV3a19GYXZpY29uX0RhdGFiYXNlKiBp
Y29uRGF0YWJhc2UgPSBld2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldChwcml2LT5jb250
ZXh0KTsKKyAgICBFd2tfRmF2aWNvbl9EYXRhYmFzZSogaWNvbkRhdGFiYXNlID0gcHJpdi0+Y29u
dGV4dC0+ZmF2aWNvbkRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGljb25EYXRhYmFzZSk7CiAKICAg
ICBwcml2LT5mYXZpY29uVVJMID0gZXdrX2Zhdmljb25fZGF0YWJhc2VfaWNvbl91cmxfZ2V0KGlj
b25EYXRhYmFzZSwgcHJpdi0+dXJsKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>