<?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>34266</bug_id>
          
          <creation_ts>2010-01-28 08:08:08 -0800</creation_ts>
          <short_desc>[v8] Crash - WebCore::ScriptController::mainWorldScriptState()</short_desc>
          <delta_ts>2010-01-30 23:40:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yury Semikhatsky">yurys</reporter>
          <assigned_to name="Yury Semikhatsky">yurys</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>185480</commentid>
    <comment_count>0</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-01-28 08:08:08 -0800</bug_when>
    <thetext>There is a crash in Chromium(http://crbug.com/31714) related to ScriptState retrieval logic. ScriptController::currentScriptState assumes that we can always get ScriptState for the current context. However, on page navigation, when the window object has already been cleared, some asynchronous code from the previous page may invoke console.log and despite its context is still valid it will fail on V8Proxy::retrieveFrame. One possible solution would be to remove Frame* pointer from ScriptState and cache ScriptState instance directly on the v8::Context(currently it&apos;s cached on ScriptController and V8IsolatedWorld but v8::Context lifetime matches better ScriptState lifetime).


----------------------------
*        Crash Trace       *
----------------------------
                   [OwnPtr.h:68] - WebCore::ScriptController::mainWorldScriptState()
      [ScriptController.cpp:381] - WebCore::ScriptController::currentScriptState()
        [ScriptCallStack.cpp:58] - WebCore::ScriptCallStack::create(v8::Arguments const&amp;, unsigned int)
              [V8Console.cpp:75] - logCallback
               [builtins.cc:386] - Builtin_HandleApiCall
               [execution.cc:97] - Invoke
              [execution.cc:124] - v8::internal::Execution::TryCall(v8::internal::Handle, v8::internal::Handle, int, v8::internal::Object***, bool*)
                   [api.cc:2426] - v8::Function::Call(v8::Handle, int, v8::Handle*)
               [V8Proxy.cpp:510] - WebCore::V8Proxy::callFunction(v8::Handle, v8::Handle, int, v8::Handle*)
  [V8CustomEventListener.cpp:75] - WebCore::V8EventListener::callListenerFunction(WebCore::ScriptExecutionContext*, v8::Handle, WebCore::Event*)
[V8AbstractEventListener.cpp:145] - WebCore::V8AbstractEventListener::invokeEventHandler(WebCore::ScriptExecutionContext*, WebCore::Event*, v8::Handle)
[V8AbstractEventListener.cpp:89] - WebCore::V8AbstractEventListener::handleEvent(WebCore::ScriptExecutionContext*, WebCore::Event*)
           [EventTarget.cpp:297] - WebCore::EventTarget::fireEventListeners(WebCore::Event*)
           [EventTarget.cpp:262] - WebCore::EventTarget::dispatchEvent(WTF::PassRefPtr)
        [XMLHttpRequest.cpp:276] - WebCore::XMLHttpRequest::callReadyStateChangeListener()
        [XMLHttpRequest.cpp:245] - WebCore::XMLHttpRequest::didFinishLoading(unsigned long)
     [SubresourceLoader.cpp:184] - WebCore::SubresourceLoader::didFinishLoading()
      [weburlloader_impl.cc:532] - webkit_glue::WebURLLoaderImpl::Context::OnCompletedRequest(URLRequestStatus const&amp;, std::string const&amp;)
    [resource_dispatcher.cc:448] - ResourceDispatcher::OnRequestComplete(int, URLRequestStatus const&amp;, std::string const&amp;)
                   [tuple.h:435] - ResourceDispatcher::DispatchMessage(IPC::Message const&amp;)
    [resource_dispatcher.cc:294] - ResourceDispatcher::OnMessageReceived(IPC::Message const&amp;)
           [child_thread.cc:109] - ChildThread::OnMessageReceived(IPC::Message const&amp;)
                   [tuple.h:422] - RunnableMethod &gt;::Run()
           [message_loop.cc:320] - MessageLoop::DeferOrRunPendingTask(MessageLoop::PendingTask const&amp;)
           [message_loop.cc:435] - MessageLoop::DoWork()
       [message_pump_mac.mm:291] - base::MessagePumpCFRunLoopBase::RunWorkSource(void*)
     [CoreFoundation+0x0003e8ca] - __CFRunLoopDoSources0
     [CoreFoundation+0x0003c38e] - __CFRunLoopRun
     [CoreFoundation+0x0003b863] - CFRunLoopRunSpecific
     [CoreFoundation+0x0003b690] - CFRunLoopRunInMode
          [HIToolbox+0x00034f0b] - RunCurrentEventLoopInMode
          [HIToolbox+0x00034cc2] - ReceiveNextEventCommon
          [HIToolbox+0x00034b47] - BlockUntilNextEventMatchingListInMode
             [AppKit+0x00048ac4] - _DPSNextEvent
             [AppKit+0x00048305] - -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:]
             [AppKit+0x0000a49e] - -[NSApplication run]
       [message_pump_mac.mm:677] - base::MessagePumpNSApplication::DoRun(base::MessagePump::Delegate*)
       [message_pump_mac.mm:213] - base::MessagePumpCFRunLoopBase::Run(base::MessagePump::Delegate*)
           [message_loop.cc:205] - MessageLoop::Run()
          [renderer_main.cc:277] - RendererMain(MainFunctionParams const&amp;)
        [chrome_dll_main.cc:668] - ChromeMain
[Google Chrome Helper+0x00000fc5] - null</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185498</commentid>
    <comment_count>1</comment_count>
      <attachid>47621</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-01-28 08:35:07 -0800</bug_when>
    <thetext>Created attachment 47621
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185499</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-28 08:35:47 -0800</bug_when>
    <thetext>Attachment 47621 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/bindings/v8/ScriptState.cpp:63:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185502</commentid>
    <comment_count>3</comment_count>
      <attachid>47621</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-28 08:43:41 -0800</bug_when>
    <thetext>Comment on attachment 47621
patch

This looks great.  A few comments:

1) Please use V8HiddenPropertyNames for the ScriptState hidden property name.

2) Can we make the ScriptState destructor private to ensure that it&apos;s only deleted via the weak callback?

3) Have you tested performance?  Hidden properties are relatively slow, so we need to make sure this isn&apos;t used in any performance critical places.

Also, please fix the style nit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185563</commentid>
    <comment_count>4</comment_count>
      <attachid>47641</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-01-28 12:00:02 -0800</bug_when>
    <thetext>Created attachment 47641
patch addressing reviewers comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185564</commentid>
    <comment_count>5</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-01-28 12:02:43 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 47621 [details])
&gt; This looks great.  A few comments:
&gt; 
&gt; 1) Please use V8HiddenPropertyNames for the ScriptState hidden property name.
&gt; 
Done.

&gt; 2) Can we make the ScriptState destructor private to ensure that it&apos;s only
&gt; deleted via the weak callback?
&gt;
Good point. I&apos;ve added FIXME comment since there is one call to the destructor on the Chromium side and we need to get rid of it first.


&gt; 3) Have you tested performance?  Hidden properties are relatively slow, so we
&gt; need to make sure this isn&apos;t used in any performance critical places.
&gt; 
Non-empty ScriptState is used only for writing console messages and for developer tools so the code is not performance critical.


&gt; Also, please fix the style nit.
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185570</commentid>
    <comment_count>6</comment_count>
      <attachid>47641</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-28 12:22:25 -0800</bug_when>
    <thetext>Comment on attachment 47641
patch addressing reviewers comments

&gt; &gt; 2) Can we make the ScriptState destructor private to ensure that it&apos;s only
&gt; &gt; deleted via the weak callback?
&gt; &gt;
&gt; Good point. I&apos;ve added FIXME comment since there is one call to the destructor
&gt; on the Chromium side and we need to get rid of it first.

Is this call going to cause a double free?  Please ensure that it&apos;s ok before landing.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185577</commentid>
    <comment_count>7</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-01-28 12:33:01 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 47641 [details])
&gt; &gt; &gt; 2) Can we make the ScriptState destructor private to ensure that it&apos;s only
&gt; &gt; &gt; deleted via the weak callback?
&gt; &gt; &gt;
&gt; &gt; Good point. I&apos;ve added FIXME comment since there is one call to the destructor
&gt; &gt; on the Chromium side and we need to get rid of it first.
&gt; 
&gt; Is this call going to cause a double free?  Please ensure that it&apos;s ok before
&gt; landing.
&gt; 
&gt; Thanks!
You&apos;re right, it would cause double disposal. It&apos;s easy to fix by removing m_context.MakeWeak from the obsolete constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185587</commentid>
    <comment_count>8</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-01-28 13:06:22 -0800</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/bindings/js/ScriptController.cpp
	M	WebCore/bindings/js/ScriptController.h
	M	WebCore/bindings/js/ScriptState.cpp
	M	WebCore/bindings/js/ScriptState.h
	M	WebCore/bindings/v8/ScriptCallStack.cpp
	M	WebCore/bindings/v8/ScriptController.cpp
	M	WebCore/bindings/v8/ScriptController.h
	M	WebCore/bindings/v8/ScriptScope.cpp
	M	WebCore/bindings/v8/ScriptScope.h
	M	WebCore/bindings/v8/ScriptState.cpp
	M	WebCore/bindings/v8/ScriptState.h
	M	WebCore/bindings/v8/V8HiddenPropertyName.h
	M	WebCore/bindings/v8/V8IsolatedContext.cpp
	M	WebCore/bindings/v8/V8IsolatedContext.h
	M	WebCore/bindings/v8/V8Utilities.cpp
	M	WebCore/bindings/v8/custom/V8NodeIteratorCustom.cpp
	M	WebCore/bindings/v8/custom/V8TreeWalkerCustom.cpp
	M	WebCore/inspector/InspectorController.cpp
Committed r54012</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185797</commentid>
    <comment_count>9</comment_count>
      <attachid>47695</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-01-29 03:22:58 -0800</bug_when>
    <thetext>Created attachment 47695
patch

This patch can be landed once Chromium is updated to use the new ScriptState methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185862</commentid>
    <comment_count>10</comment_count>
      <attachid>47695</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-01-29 07:13:51 -0800</bug_when>
    <thetext>Comment on attachment 47695
patch

Needs chromium to be ready.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186172</commentid>
    <comment_count>11</comment_count>
      <attachid>47695</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-01-30 23:40:09 -0800</bug_when>
    <thetext>Comment on attachment 47695
patch

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/bindings/v8/ScriptState.cpp
	M	WebCore/bindings/v8/ScriptState.h
Committed r54108</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47621</attachid>
            <date>2010-01-28 08:35:07 -0800</date>
            <delta_ts>2010-01-28 12:00:02 -0800</delta_ts>
            <desc>patch</desc>
            <filename>script-state.patch</filename>
            <type>text/plain</type>
            <size>17588</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ODhkYjRhMS4uNjJjYzcwZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NiBAQAorMjAxMC0wMS0yOCAgWXVyeSBTZW1pa2hh
dHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgU2NyaXB0U3RhdGU6OmZyYW1lIHdoaWNoIGlzIG9u
bHkgdXNlZCBmb3IgcmVwb3J0aW5nIGV4Y2VwdGlvbnMKKyAgICAgICAgaW4gc29tZSBjYXNlcyBp
biBhIHdheSB0aGF0IGRpdmVyZ2VzIGZyb20gdGhlIHJlZ3VsYXIgZXhjZXB0aW9uIHJlcG9ydGlu
ZyBpbgorICAgICAgICB2OCBiaW5kaW5ncy4KKyAgICAgICAgCisgICAgICAgIENhY2hlIFNjcmlw
dFN0YXRlIGRpcmVjdGx5IG9uIHY4OjpDb250ZXh0IGluc3RlYWQgb2YgcHJvdmlkaW5nCisgICAg
ICAgIGltcGxlbWVudGF0aW9ucyBzcGVjaWZpYyBmb3IgaXNvbGF0ZWQgd29ybGRzIGFuZCBTY3Jp
cHRDb250cm9sbGVyLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zNDI2NgorCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5j
cHA6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1haW5Xb3Js
ZFNjcmlwdFN0YXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5oOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENhbGxTdGFjay5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRDYWxsU3RhY2s6OlNjcmlwdENhbGxTdGFjayk6CisgICAgICAgICogYmluZGluZ3Mv
djgvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9s
bGVyOjpjbGVhcldpbmRvd1NoZWxsKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDb250
cm9sbGVyLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0U2NvcGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0U2NvcGU6OlNjcmlwdFNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdFNjb3BlOjpzdWNjZXNzKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRTY29w
ZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdFN0YXRlOjpTY3JpcHRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRTdGF0ZTo6c2NyaXB0U3RhdGVGb3JDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dFN0YXRlOjpjdXJyZW50U2NyaXB0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0U3Rh
dGU6OndlYWtSZWZlcmVuY2VDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjptYWluV29ybGRT
Y3JpcHRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzY3JpcHRTdGF0ZUZyb21QYWdlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRTdGF0ZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOElzb2xhdGVk
Q29udGV4dC5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6cmVwb3J0RXhjZXB0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbmplY3Rl
ZFNjcmlwdEZvck5vZGVJZCk6CisKIDIwMTAtMDEtMjggIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdh
bm92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIu
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwIGIv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCBhYjFkM2E2Li4w
ODNlOTMxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIu
Y3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTM4
MCwxMiArMzgwLDYgQEAgTlBPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVNjcmlwdE9i
amVjdEZvclBsdWdpbkVsZW1lbnQoSFRNTFBsdWdJbkVsZW1lbnQKIAogI2VuZGlmCiAKLVNjcmlw
dFN0YXRlKiBTY3JpcHRDb250cm9sbGVyOjptYWluV29ybGRTY3JpcHRTdGF0ZSgpCi17Ci0gICAg
SlNET01XaW5kb3dTaGVsbCogc2hlbGwgPSB3aW5kb3dTaGVsbChtYWluVGhyZWFkTm9ybWFsV29y
bGQoKSk7Ci0gICAgcmV0dXJuIHNoZWxsLT53aW5kb3coKS0+Z2xvYmFsRXhlYygpOwotfQotCiBK
U09iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6anNPYmplY3RGb3JQbHVnaW5FbGVtZW50KEhUTUxQ
bHVnSW5FbGVtZW50KiBwbHVnaW4pCiB7CiAgICAgLy8gQ2FuJ3QgY3JlYXRlIEpTT2JqZWN0cyB3
aGVuIEphdmFTY3JpcHQgaXMgZGlzYWJsZWQKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0Q29udHJvbGxlci5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9s
bGVyLmgKaW5kZXggZjI2NWFiNS4uZjNlNWFkZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVyLmgKQEAgLTI0LDcgKzI0LDYgQEAKIAogI2luY2x1ZGUgIkpTRE9NV2luZG93U2hl
bGwuaCIKICNpbmNsdWRlICJTY3JpcHRJbnN0YW5jZS5oIgotI2luY2x1ZGUgIlNjcmlwdFN0YXRl
LmgiCiAjaW5jbHVkZSA8cnVudGltZS9Qcm90ZWN0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgogCkBAIC0xNjAsOCArMTU5LDYgQEAgcHVibGljOgogICAgIAogICAgIFhTU0F1ZGl0b3IqIHhz
c0F1ZGl0b3IoKSB7IHJldHVybiBtX1hTU0F1ZGl0b3IuZ2V0KCk7IH0KIAotICAgIFNjcmlwdFN0
YXRlKiBtYWluV29ybGRTY3JpcHRTdGF0ZSgpOwotCiBwcml2YXRlOgogICAgIEpTRE9NV2luZG93
U2hlbGwqIGluaXRTY3JpcHQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCk7CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RhdGUuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRTdGF0ZS5jcHAKaW5kZXggN2E3NjBhZS4uYjlmMzM0YSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRTdGF0ZS5jcHAKQEAgLTM4LDYgKzM4LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorU2NyaXB0U3RhdGUqIG1haW5Xb3JsZFNjcmlwdFN0YXRlKEZyYW1lKiBmcmFtZSkKK3sK
KyAgICBKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCA9IGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hl
bGwobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOworICAgIHJldHVybiBzaGVsbC0+d2luZG93KCkt
Pmdsb2JhbEV4ZWMoKTsKK30KKwogU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlRnJvbU5vZGUoRE9N
V3JhcHBlcldvcmxkKiB3b3JsZCwgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmggYi9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdFN0YXRlLmgKaW5kZXggNjI1NzkyOS4uMGM3YzU3NSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0U3RhdGUuaApAQCAtMzYsNiArMzYsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgY2xhc3MgRE9NV3JhcHBlcldvcmxkOworICAgIGNsYXNzIEZyYW1lOwogICAgIGNsYXNz
IE5vZGU7CiAgICAgY2xhc3MgUGFnZTsKIApAQCAtNDUsNiArNDYsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgLy8gRm9yIG5vdywgdGhlIHNlcGFyYXRpb24gaXMgcHVyZWx5IGJ5IGNvbnZl
bnRpb24uCiAgICAgdHlwZWRlZiBKU0M6OkV4ZWNTdGF0ZSBTY3JpcHRTdGF0ZTsKIAorICAgIFNj
cmlwdFN0YXRlKiBtYWluV29ybGRTY3JpcHRTdGF0ZShGcmFtZSopOworCiAgICAgU2NyaXB0U3Rh
dGUqIHNjcmlwdFN0YXRlRnJvbU5vZGUoRE9NV3JhcHBlcldvcmxkKiwgTm9kZSopOwogICAgIFNj
cmlwdFN0YXRlKiBzY3JpcHRTdGF0ZUZyb21QYWdlKERPTVdyYXBwZXJXb3JsZCosIFBhZ2UqKTsK
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDYWxsU3RhY2suY3BwIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDYWxsU3RhY2suY3BwCmluZGV4IGEwZWVjY2IuLjhl
Y2MwNmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q2FsbFN0YWNrLmNw
cAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENhbGxTdGFjay5jcHAKQEAgLTU1LDcg
KzU1LDcgQEAgU2NyaXB0Q2FsbFN0YWNrKiBTY3JpcHRDYWxsU3RhY2s6OmNyZWF0ZShjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmd1bWVudHMsIHVuc2lnbmUKIAogU2NyaXB0Q2FsbFN0YWNrOjpTY3Jp
cHRDYWxsU3RhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJndW1lbnRzLCB1bnNpZ25lZCBza2lw
QXJndW1lbnRDb3VudCwgU3RyaW5nIHNvdXJjZU5hbWUsIGludCBzb3VyY2VMaW5lTnVtYmVyKQog
ICAgIDogbV9sYXN0Q2FsbGVyKFN0cmluZygpLCBzb3VyY2VOYW1lLCBzb3VyY2VMaW5lTnVtYmVy
LCBhcmd1bWVudHMsIHNraXBBcmd1bWVudENvdW50KQotICAgICwgbV9zY3JpcHRTdGF0ZShTY3Jp
cHRDb250cm9sbGVyOjpjdXJyZW50U2NyaXB0U3RhdGUoKSkKKyAgICAsIG1fc2NyaXB0U3RhdGUo
U2NyaXB0U3RhdGU6OmN1cnJlbnRTY3JpcHRTdGF0ZSgpKQogewogfQogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5n
cy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCA1ZDMwNzhkLi44NmQ1NGQ2IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTQ3LDcgKzQ3LDYgQEAKICNp
bmNsdWRlICJucHJ1bnRpbWVfcHJpdi5oIgogI2luY2x1ZGUgIk5QVjhPYmplY3QuaCIKICNpbmNs
dWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCi0jaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4Qmlu
ZGluZ1N0YXRlLmgiCkBAIC0zNTQsMjQgKzM1Myw2IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6
Z2V0QWxsV29ybGRzKFZlY3RvcjxET01XcmFwcGVyV29ybGQqPiYgd29ybGRzKQogICAgIHdvcmxk
cy5hcHBlbmQobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwogfQogCi1TY3JpcHRTdGF0ZSogU2Ny
aXB0Q29udHJvbGxlcjo6bWFpbldvcmxkU2NyaXB0U3RhdGUoKQotewotICAgIGlmICghbV9tYWlu
V29ybGRTY3JpcHRTdGF0ZSkgewotICAgICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7
Ci0gICAgICAgIG1fbWFpbldvcmxkU2NyaXB0U3RhdGUuc2V0KG5ldyBTY3JpcHRTdGF0ZShtX2Zy
YW1lLCBWOFByb3h5OjptYWluV29ybGRDb250ZXh0KG1fZnJhbWUpKSk7Ci0gICAgfQotICAgIHJl
dHVybiBtX21haW5Xb3JsZFNjcmlwdFN0YXRlLmdldCgpOwotfQotCi1TY3JpcHRTdGF0ZSogU2Ny
aXB0Q29udHJvbGxlcjo6Y3VycmVudFNjcmlwdFN0YXRlKCkKLXsKLSAgICBpZiAoVjhJc29sYXRl
ZENvbnRleHQqIGNvbnRleHQgPSBWOElzb2xhdGVkQ29udGV4dDo6Z2V0RW50ZXJlZCgpKQotICAg
ICAgICByZXR1cm4gY29udGV4dC0+c2NyaXB0U3RhdGUoKTsKLSAgICBGcmFtZSogZnJhbWUgPSBW
OFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yQ3VycmVudENvbnRleHQoKTsKLSAgICBBU1NFUlQoZnJh
bWUpOwotICAgIHJldHVybiBmcmFtZS0+c2NyaXB0KCktPm1haW5Xb3JsZFNjcmlwdFN0YXRlKCk7
Ci19Ci0KIHN0YXRpYyBOUE9iamVjdCogY3JlYXRlTm9TY3JpcHRPYmplY3QoKQogewogICAgIG5v
dEltcGxlbWVudGVkKCk7CkBAIC00MzQsOCArNDE1LDYgQEAgTlBPYmplY3QqIFNjcmlwdENvbnRy
b2xsZXI6OmNyZWF0ZVNjcmlwdE9iamVjdEZvclBsdWdpbkVsZW1lbnQoSFRNTFBsdWdJbkVsZW1l
bnQKIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKCkKIHsKLSAgICBt
X21haW5Xb3JsZFNjcmlwdFN0YXRlLmNsZWFyKCk7Ci0KICAgICAvLyBWOCBiaW5kaW5nIGV4cGVj
dHMgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJXaW5kb3dTaGVsbCBvbmx5IGJlIGNhbGxlZAogICAg
IC8vIHdoZW4gYSBmcmFtZSBpcyBsb2FkaW5nIGEgbmV3IHBhZ2UuIFY4UHJveHk6OmNsZWFyRm9y
TmF2aWdhdGlvbgogICAgIC8vIGNyZWF0ZXMgYSBuZXcgY29udGV4dCBmb3IgdGhlIG5ldyBwYWdl
LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmggYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAppbmRleCA1YTkxMDVmLi45ODE1
YzdhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaApAQCAtNDksNyArNDks
NiBAQCBjbGFzcyBFdmVudDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgSFRNTFBsdWdJbkVsZW1lbnQ7
CiBjbGFzcyBTY3JpcHRTb3VyY2VDb2RlOwotY2xhc3MgU2NyaXB0U3RhdGU7CiBjbGFzcyBTdHJp
bmc7CiBjbGFzcyBXaWRnZXQ7CiBjbGFzcyBYU1NBdWRpdG9yOwpAQCAtMTY3LDEyICsxNjYsNiBA
QCBwdWJsaWM6CiAgICAgdm9pZCBldmFsdWF0ZUluV29ybGQoY29uc3QgU2NyaXB0U291cmNlQ29k
ZSYsIERPTVdyYXBwZXJXb3JsZCopIHsgfQogICAgIHN0YXRpYyB2b2lkIGdldEFsbFdvcmxkcyhW
ZWN0b3I8RE9NV3JhcHBlcldvcmxkKj4mIHdvcmxkcyk7CiAKLSAgICAvLyBTY3JpcHQgc3RhdGUg
Zm9yIHRoZSBtYWluIHdvcmxkIGNvbnRleHQuCi0gICAgU2NyaXB0U3RhdGUqIG1haW5Xb3JsZFNj
cmlwdFN0YXRlKCk7Ci0KLSAgICAvLyBSZXR1cm5zIFNjcmlwdFN0YXRlIGZvciBjdXJyZW50IGNv
bnRleHQuCi0gICAgc3RhdGljIFNjcmlwdFN0YXRlKiBjdXJyZW50U2NyaXB0U3RhdGUoKTsKLQog
cHJpdmF0ZToKICAgICBGcmFtZSogbV9mcmFtZTsKICAgICBjb25zdCBTdHJpbmcqIG1fc291cmNl
VVJMOwpAQCAtMTk1LDkgKzE4OCw2IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICAvLyBUaGUgWFNT
QXVkaXRvciBhc3NvY2lhdGVkIHdpdGggdGhpcyBTY3JpcHRDb250cm9sbGVyLgogICAgIE93blB0
cjxYU1NBdWRpdG9yPiBtX1hTU0F1ZGl0b3I7Ci0KLSAgICAvLyBTY3JpcHQgc3RhdGUgZm9yIHRo
ZSBtYWluIHdvcmxkIGNvbnRleHQuCi0gICAgT3duUHRyPFNjcmlwdFN0YXRlPiBtX21haW5Xb3Js
ZFNjcmlwdFN0YXRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTY29wZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdFNjb3BlLmNwcAppbmRleCA3MjdhYjI1Li5hMWIxM2ExIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFNjb3BlLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdFNjb3BlLmNwcApAQCAtMzMsMTAgKzMzLDYgQEAKIAogI2luY2x1ZGUgIlNjcmlwdFN0
YXRlLmgiCiAKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5j
bHVkZSAiVjhCaW5kaW5nLmgiCi0KICNpbmNsdWRlIDx2OC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC00NSw4ICs0MSw4IEBAIFNjcmlwdFNjb3BlOjpTY3JpcHRTY29wZShTY3JpcHRTdGF0
ZSogc2NyaXB0U3RhdGUsIGJvb2wgcmVwb3J0RXhjZXB0aW9ucykKICAgICA6IG1fY29udGV4dChz
Y3JpcHRTdGF0ZS0+Y29udGV4dCgpKQogICAgICwgbV9zY29wZShtX2NvbnRleHQpCiAgICAgLCBt
X3NjcmlwdFN0YXRlKHNjcmlwdFN0YXRlKQotICAgICwgbV9yZXBvcnRFeGNlcHRpb25zKHJlcG9y
dEV4Y2VwdGlvbnMpCiB7CisgICAgbV9leGNlcHRpb25DYXRjaGVyLlNldFZlcmJvc2UocmVwb3J0
RXhjZXB0aW9ucyk7CiAgICAgQVNTRVJUKCFtX2NvbnRleHQuSXNFbXB0eSgpKTsKIH0KIApAQCAt
NTQsMTEgKzUwLDYgQEAgYm9vbCBTY3JpcHRTY29wZTo6c3VjY2VzcygpCiB7CiAgICAgaWYgKCFt
X2V4Y2VwdGlvbkNhdGNoZXIuSGFzQ2F1Z2h0KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgdjg6OkxvY2FsPHY4OjpNZXNzYWdlPiBtZXNzYWdlID0gbV9leGNlcHRpb25DYXRjaGVyLk1l
c3NhZ2UoKTsKLSAgICBpZiAobV9yZXBvcnRFeGNlcHRpb25zKQotICAgICAgICBtX3NjcmlwdFN0
YXRlLT5mcmFtZSgpLT5kb2N1bWVudCgpLT5yZXBvcnRFeGNlcHRpb24odG9XZWJDb3JlU3RyaW5n
KG1lc3NhZ2UtPkdldCgpKSwgbWVzc2FnZS0+R2V0TGluZU51bWJlcigpLCB0b1dlYkNvcmVTdHJp
bmcobWVzc2FnZS0+R2V0U2NyaXB0UmVzb3VyY2VOYW1lKCkpKTsKLQogICAgIG1fZXhjZXB0aW9u
Q2F0Y2hlci5SZXNldCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0U2NvcGUuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
U2NvcGUuaAppbmRleCA2ZmVlNDU4Li4zZjlhMzMyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdFNjb3BlLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTY29w
ZS5oCkBAIC00OSw3ICs0OSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdjg6OkNv
bnRleHQ6OlNjb3BlIG1fc2NvcGU7CiAgICAgICAgIHY4OjpUcnlDYXRjaCBtX2V4Y2VwdGlvbkNh
dGNoZXI7CiAgICAgICAgIFNjcmlwdFN0YXRlKiBtX3NjcmlwdFN0YXRlOwotICAgICAgICBib29s
IG1fcmVwb3J0RXhjZXB0aW9uczsKICAgICB9OwogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3Rh
dGUuY3BwCmluZGV4IDA4NWZkMmIuLjc2MTFhNTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2NyaXB0U3RhdGUuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3Rh
dGUuY3BwCkBAIC0zNiwyMSArMzYsMjIgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAi
U2NyaXB0Q29udHJvbGxlci5oIgogCisjaW5jbHVkZSA8djguaD4KICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1TY3JpcHRTdGF0ZTo6U2NyaXB0U3RhdGUoRnJhbWUqIGZyYW1lKQotICAgIDog
bV9mcmFtZShmcmFtZSkKLSAgICAsIG1fY29udGV4dCh2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4
dD46Ok5ldyhWOFByb3h5OjptYWluV29ybGRDb250ZXh0KGZyYW1lKSkpCitTY3JpcHRTdGF0ZTo6
U2NyaXB0U3RhdGUoRnJhbWUqLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KQorICAg
IDogbV9jb250ZXh0KHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0Pjo6TmV3KGNvbnRleHQpKQog
eworICAgIG1fY29udGV4dC5NYWtlV2Vhayh0aGlzLCAmU2NyaXB0U3RhdGU6OndlYWtSZWZlcmVu
Y2VDYWxsYmFjayk7CiB9CiAKLVNjcmlwdFN0YXRlOjpTY3JpcHRTdGF0ZShGcmFtZSogZnJhbWUs
IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQpCi0gICAgOiBtX2ZyYW1lKGZyYW1lKQot
ICAgICwgbV9jb250ZXh0KHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0Pjo6TmV3KGNvbnRleHQp
KQorU2NyaXB0U3RhdGU6OlNjcmlwdFN0YXRlKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRl
eHQpCisgICAgOiBtX2NvbnRleHQodjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+OjpOZXcoY29u
dGV4dCkpCiB7CisgICAgbV9jb250ZXh0Lk1ha2VXZWFrKHRoaXMsICZTY3JpcHRTdGF0ZTo6d2Vh
a1JlZmVyZW5jZUNhbGxiYWNrKTsKIH0KIAogU2NyaXB0U3RhdGU6On5TY3JpcHRTdGF0ZSgpCkBA
IC01OSw2ICs2MCw0OCBAQCBTY3JpcHRTdGF0ZTo6flNjcmlwdFN0YXRlKCkKICAgICBtX2NvbnRl
eHQuQ2xlYXIoKTsKIH0KIAorU2NyaXB0U3RhdGUqIFNjcmlwdFN0YXRlOjpzY3JpcHRTdGF0ZUZv
ckNvbnRleHQodjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0KSB7CisgICAgdjg6OkNvbnRl
eHQ6OlNjb3BlIGNvbnRleHRTY29wZShjb250ZXh0KTsKKworICAgIHY4OjpMb2NhbDx2ODo6T2Jq
ZWN0PiBnbG9iYWwgPSBjb250ZXh0LT5HbG9iYWwoKTsKKyAgICAvLyBTa2lwIHByb3h5IG9iamVj
dC4gVGhlIHByb3h5IG9iamVjdCB3aWxsIHN1cnZpdmUgcGFnZSBuYXZpZ2F0aW9uIHdoaWxlIHdl
IG5lZWQKKyAgICAvLyBhbiBvYmplY3Qgd2hvc2UgbGlmZXRpbWUgY29uc2lkZXMgd2l0aCB0aGF0
IG9mIHRoZSBpbnNwZWN0ZWQgY29udGV4dC4KKyAgICBnbG9iYWwgPSB2ODo6TG9jYWw8djg6Ok9i
amVjdD46OkNhc3QoZ2xvYmFsLT5HZXRQcm90b3R5cGUoKSk7CisKKyAgICB2ODo6TG9jYWw8djg6
OlN0cmluZz4ga2V5ID0gdjg6OlN0cmluZzo6TmV3KCJTY3JpcHRTdGF0ZSIpOworICAgIHY4OjpM
b2NhbDx2ODo6VmFsdWU+IHZhbCA9IGdsb2JhbC0+R2V0SGlkZGVuVmFsdWUoa2V5KTsKKyAgICBp
ZiAoIXZhbC5Jc0VtcHR5KCkgJiYgdmFsLT5Jc0V4dGVybmFsKCkpCisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxTY3JpcHRTdGF0ZSo+KHY4OjpFeHRlcm5hbDo6Q2FzdCgqdmFsKS0+VmFsdWUo
KSk7CisKKyAgICBTY3JpcHRTdGF0ZSogc3RhdGUgPSBuZXcgU2NyaXB0U3RhdGUoY29udGV4dCk7
CisgICAgZ2xvYmFsLT5TZXRIaWRkZW5WYWx1ZShrZXksIHY4OjpFeHRlcm5hbDo6TmV3KHN0YXRl
KSk7CisgICAgcmV0dXJuIHN0YXRlOworfQorCitTY3JpcHRTdGF0ZSogU2NyaXB0U3RhdGU6OmN1
cnJlbnRTY3JpcHRTdGF0ZSgpCit7CisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwor
ICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IHY4OjpDb250ZXh0OjpHZXRDdXJy
ZW50KCk7CisgICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIFNjcmlwdFN0
YXRlOjpzY3JpcHRTdGF0ZUZvckNvbnRleHQoY29udGV4dCk7Cit9CisKK3ZvaWQgU2NyaXB0U3Rh
dGU6OndlYWtSZWZlcmVuY2VDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IG9iamVj
dCwgdm9pZCogcGFyYW1ldGVyKQoreworICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IHN0
YXRpY19jYXN0PFNjcmlwdFN0YXRlKj4ocGFyYW1ldGVyKTsKKyAgICBkZWxldGUgc2NyaXB0U3Rh
dGU7Cit9CisKK1NjcmlwdFN0YXRlKiBtYWluV29ybGRTY3JpcHRTdGF0ZShGcmFtZSogZnJhbWUp
Cit7CisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworICAgIFY4UHJveHkqIHByb3h5
ID0gZnJhbWUtPnNjcmlwdCgpLT5wcm94eSgpOworICAgIHJldHVybiBTY3JpcHRTdGF0ZTo6c2Ny
aXB0U3RhdGVGb3JDb250ZXh0KHByb3h5LT5tYWluV29ybGRDb250ZXh0KCkpOworfQorCiBTY3Jp
cHRTdGF0ZSogc2NyaXB0U3RhdGVGcm9tTm9kZShET01XcmFwcGVyV29ybGQqLCBOb2RlKiBub2Rl
KQogewogICAgIC8vIFRoaXMgc2hvdWxkIGJlIG5ldmVyIHJlYWNoZWQgd2l0aCBWOCBiaW5kaW5n
cyAoV2ViS2l0IG9ubHkgdXNlcyBpdApAQCAtNzAsNyArMTEzLDcgQEAgU2NyaXB0U3RhdGUqIHNj
cmlwdFN0YXRlRnJvbU5vZGUoRE9NV3JhcHBlcldvcmxkKiwgTm9kZSogbm9kZSkKIFNjcmlwdFN0
YXRlKiBzY3JpcHRTdGF0ZUZyb21QYWdlKERPTVdyYXBwZXJXb3JsZCosIFBhZ2UqIHBhZ2UpCiB7
CiAgICAgLy8gVGhpcyBzaG91bGQgYmUgb25seSByZWFjaGVkIHdpdGggVjggYmluZGluZ3MgZnJv
bSBzaW5nbGUgcHJvY2VzcyBsYXlvdXQgdGVzdHMuCi0gICAgcmV0dXJuIHBhZ2UtPm1haW5GcmFt
ZSgpLT5zY3JpcHQoKS0+bWFpbldvcmxkU2NyaXB0U3RhdGUoKTsKKyAgICByZXR1cm4gbWFpbldv
cmxkU2NyaXB0U3RhdGUocGFnZS0+bWFpbkZyYW1lKCkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdFN0YXRlLmgKaW5kZXggODEzMDA5Mi4uZDAxYmJhNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRTdGF0ZS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
U3RhdGUuaApAQCAtNDUsOCArNDUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
U2NyaXB0U3RhdGUgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAg
U2NyaXB0U3RhdGUoKSB7IH0KLSAgICAgICAgU2NyaXB0U3RhdGUoRnJhbWUqIGZyYW1lKTsKLSAg
ICAgICAgU2NyaXB0U3RhdGUoRnJhbWUqIGZyYW1lLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBj
b250ZXh0KTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgY29uc3RydWN0b3Igd2lsbCBnbyBhd2F5
IHNob3J0bHkuCisgICAgICAgIFNjcmlwdFN0YXRlKEZyYW1lKiwgdjg6OkhhbmRsZTx2ODo6Q29u
dGV4dD4pOwogICAgICAgICB+U2NyaXB0U3RhdGUoKTsKIAogICAgICAgICBib29sIGhhZEV4Y2Vw
dGlvbigpIHsgcmV0dXJuICFtX2V4Y2VwdGlvbi5Jc0VtcHR5KCk7IH0KQEAgLTU2LDE4ICs1Niwy
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH0KICAgICAgICAgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gZXhjZXB0aW9uKCkgeyByZXR1cm4gbV9leGNlcHRpb247IH0KIAotICAgICAgICBG
cmFtZSogZnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CiAgICAgICAgIHY4OjpMb2Nh
bDx2ODo6Q29udGV4dD4gY29udGV4dCgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcobV9jb250ZXh0KTsKICAgICAgICAgfQog
CisgICAgICAgIHN0YXRpYyBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGVGb3JDb250ZXh0KHY4OjpM
b2NhbDx2ODo6Q29udGV4dD4pOworICAgICAgICBzdGF0aWMgU2NyaXB0U3RhdGUqIGN1cnJlbnRT
Y3JpcHRTdGF0ZSgpOworCiAgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIFNjcmlwdFN0YXRl
KiBjdXJyZW50U2NyaXB0U3RhdGUoKTsKKyAgICAgICAgZnJpZW5kIFNjcmlwdFN0YXRlKiBtYWlu
V29ybGRTY3JpcHRTdGF0ZShGcmFtZSopOworICAgICAgICBleHBsaWNpdCBTY3JpcHRTdGF0ZSh2
ODo6SGFuZGxlPHY4OjpDb250ZXh0Pik7CisKKyAgICAgICAgc3RhdGljIHZvaWQgd2Vha1JlZmVy
ZW5jZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2JqZWN0LCB2b2lkKiBwYXJh
bWV0ZXIpOworCiAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IG1fZXhjZXB0aW9uOwotICAg
ICAgICBGcmFtZSogbV9mcmFtZTsKICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+
IG1fY29udGV4dDsKICAgICB9OwogCisgICAgU2NyaXB0U3RhdGUqIG1haW5Xb3JsZFNjcmlwdFN0
YXRlKEZyYW1lKik7CisKICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGVGcm9tTm9kZShET01X
cmFwcGVyV29ybGQqLCBOb2RlKik7CiAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlRnJvbVBh
Z2UoRE9NV3JhcHBlcldvcmxkKiwgUGFnZSopOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29s
YXRlZENvbnRleHQuY3BwCmluZGV4IDRkYjFlZmUuLjMyMzdlZGUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwCkBAIC04OSwxNCArODksNCBAQCBWOElzb2xhdGVk
Q29udGV4dDo6flY4SXNvbGF0ZWRDb250ZXh0KCkKICAgICBtX2NvbnRleHQtPmRpc3Bvc2VIYW5k
bGUoKTsKIH0KIAotU2NyaXB0U3RhdGUqIFY4SXNvbGF0ZWRDb250ZXh0OjpzY3JpcHRTdGF0ZSgp
Ci17Ci0gICAgaWYgKCFtX3NjcmlwdFN0YXRlKSB7Ci0gICAgICAgIHY4OjpIYW5kbGVTY29wZSBz
Y29wZTsKLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IG1fY29udGV4
dC5nZXQoKS0+Z2V0KCk7Ci0gICAgICAgIG1fc2NyaXB0U3RhdGUuc2V0KG5ldyBTY3JpcHRTdGF0
ZShWOFByb3h5OjpyZXRyaWV2ZUZyYW1lKGNvbnRleHQpLCBjb250ZXh0KSk7Ci0gICAgfQotICAg
IHJldHVybiBtX3NjcmlwdFN0YXRlLmdldCgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmggYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmgKaW5kZXggMzg0NGI1Ny4uNzBj
YTI3MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5o
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuaApAQCAtOTQsOCAr
OTQsNiBAQCBwdWJsaWM6CiAKICAgICBJc29sYXRlZFdvcmxkKiB3b3JsZCgpIGNvbnN0IHsgcmV0
dXJuIG1fd29ybGQuZ2V0KCk7IH0KIAotICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSgpOwot
CiBwcml2YXRlOgogICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdldEdsb2JhbE9i
amVjdCh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KQogICAgIHsKQEAgLTExMSw5ICsx
MDksNiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxTaGFyZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0
PiA+IG1fY29udGV4dDsKIAogICAgIFJlZlB0cjxJc29sYXRlZFdvcmxkPiBtX3dvcmxkOwotCi0g
ICAgLy8gRklYTUU6IGdldCByaWQgb2YgcmVkdW5kYW50IG1fY29udGV4dCBmaWVsZC4gVGhlIGNv
bnRleHQgY2FuIGJlIHJldHJpZXZlZCBmcm9tIHRoZSBTY3JpcHRTdGF0ZS4KLSAgICBPd25QdHI8
U2NyaXB0U3RhdGU+IG1fc2NyaXB0U3RhdGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmNwcCBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhVdGlsaXRpZXMuY3BwCmluZGV4IGM1NDdjYzcuLmZiMWVjYWEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhVdGlsaXRpZXMuY3BwCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhVdGlsaXRpZXMuY3BwCkBAIC0xMzQsMTMgKzEzNCwxNSBAQCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KFNjcmlwdFN0YXRl
KiBzY3JpcHRTdGF0ZSkKICAgICAgICAgcmV0dXJuIHByb3h5LT53b3JrZXJDb250ZXh0KCktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICNlbmRpZgogCi0gICAgaWYgKHNjcmlwdFN0YXRlKQot
ICAgICAgICByZXR1cm4gc2NyaXB0U3RhdGUtPmZyYW1lKCktPmRvY3VtZW50KCktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgRnJhbWUqIGZyYW1lID0gVjhQ
cm94eTo6cmV0cmlldmVGcmFtZUZvckN1cnJlbnRDb250ZXh0KCk7Ci0gICAgICAgIGlmIChmcmFt
ZSkKLSAgICAgICAgICAgIHJldHVybiBmcmFtZS0+ZG9jdW1lbnQoKS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOwotICAgIH0KKyAgICBGcmFtZSogZnJhbWU7CisgICAgaWYgKHNjcmlwdFN0YXRl
KSB7CisgICAgICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKyAgICAgICAgZnJhbWUg
PSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lKHNjcmlwdFN0YXRlLT5jb250ZXh0KCkpOworICAgIH0g
ZWxzZQorICAgICAgICBmcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JDdXJyZW50Q29u
dGV4dCgpOworCisgICAgaWYgKGZyYW1lKQorICAgICAgICByZXR1cm4gZnJhbWUtPmRvY3VtZW50
KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKIAogICAgIHJldHVybiAwOwogfQpAQCAtMTcw
LDcgKzE3Miw3IEBAIHZvaWQgcmVwb3J0RXhjZXB0aW9uKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0
ZSwgdjg6OlRyeUNhdGNoJiBleGNlcHRpb25DYXRjaGVyKQogICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KHNjcmlwdFN0YXRlKTsK
ICAgICAvLyBEdXJpbmcgdGhlIGZyYW1lIHRlYXJkb3duLCB0aGVyZSBtYXkgbm90IGJlIGEgdmFs
aWQgY29udGV4dC4KICAgICBpZiAoY29udGV4dCAmJiAhY29udGV4dC0+aXNEb2N1bWVudCgpKQot
ICAgICAgY29udGV4dC0+cmVwb3J0RXhjZXB0aW9uKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwg
c291cmNlVVJMKTsKKyAgICAgICAgY29udGV4dC0+cmVwb3J0RXhjZXB0aW9uKGVycm9yTWVzc2Fn
ZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKICAgICBleGNlcHRpb25DYXRjaGVyLlJlc2V0KCk7
CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggMGM5
NDdmNy4uNWFiMTM1NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5j
cHAKQEAgLTE4NDUsNyArMTg0NSw3IEBAIFNjcmlwdE9iamVjdCBJbnNwZWN0b3JDb250cm9sbGVy
OjppbmplY3RlZFNjcmlwdEZvck5vZGVJZChsb25nIGlkKQogICAgICAgICBmcmFtZSA9IG1faW5z
cGVjdGVkUGFnZS0+bWFpbkZyYW1lKCk7CiAKICAgICBpZiAoZnJhbWUpCi0gICAgICAgIHJldHVy
biBtX2luamVjdGVkU2NyaXB0SG9zdC0+aW5qZWN0ZWRTY3JpcHRGb3IoZnJhbWUtPnNjcmlwdCgp
LT5tYWluV29ybGRTY3JpcHRTdGF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIG1faW5qZWN0ZWRTY3Jp
cHRIb3N0LT5pbmplY3RlZFNjcmlwdEZvcihtYWluV29ybGRTY3JpcHRTdGF0ZShmcmFtZSkpOwog
CiAgICAgcmV0dXJuIFNjcmlwdE9iamVjdCgpOwogfQo=
</data>
<flag name="review"
          id="30111"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47641</attachid>
            <date>2010-01-28 12:00:02 -0800</date>
            <delta_ts>2010-01-29 03:23:11 -0800</delta_ts>
            <desc>patch addressing reviewers comments</desc>
            <filename>script-state2.patch</filename>
            <type>text/plain</type>
            <size>24413</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MjRlMTVhYi4uYzI4NGI5NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBAQAorMjAxMC0wMS0yOCAgWXVyeSBTZW1pa2hh
dHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgU2NyaXB0U3RhdGU6OmZyYW1lIHdoaWNoIGlzIG9u
bHkgdXNlZCBmb3IgcmVwb3J0aW5nIGV4Y2VwdGlvbnMKKyAgICAgICAgaW4gc29tZSBjYXNlcyBp
biBhIHdheSB0aGF0IGRpdmVyZ2VzIGZyb20gdGhlIHJlZ3VsYXIgZXhjZXB0aW9uIHJlcG9ydGlu
ZyBpbgorICAgICAgICB2OCBiaW5kaW5ncy4KKyAgICAgICAgCisgICAgICAgIENhY2hlIFNjcmlw
dFN0YXRlIGRpcmVjdGx5IG9uIHY4OjpDb250ZXh0IGluc3RlYWQgb2YgcHJvdmlkaW5nCisgICAg
ICAgIGltcGxlbWVudGF0aW9ucyBzcGVjaWZpYyBmb3IgaXNvbGF0ZWQgd29ybGRzIGFuZCBTY3Jp
cHRDb250cm9sbGVyLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zNDI2NgorCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5j
cHA6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1haW5Xb3Js
ZFNjcmlwdFN0YXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5oOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENhbGxTdGFjay5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRDYWxsU3RhY2s6OlNjcmlwdENhbGxTdGFjayk6CisgICAgICAgICogYmluZGluZ3Mv
djgvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9s
bGVyOjpjbGVhcldpbmRvd1NoZWxsKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDb250
cm9sbGVyLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0U2NvcGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0U2NvcGU6OlNjcmlwdFNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdFNjb3BlOjpzdWNjZXNzKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRTY29w
ZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdFN0YXRlOjpTY3JpcHRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRTdGF0ZTo6Zm9yQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTdGF0ZTo6Y3Vy
cmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTdGF0ZTo6ZW1wdHkpOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0U3RhdGU6OndlYWtSZWZlcmVuY2VDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjptYWluV29ybGRTY3JpcHRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzY3JpcHRT
dGF0ZUZyb21QYWdlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRTdGF0ZS5oOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmg6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4
SXNvbGF0ZWRDb250ZXh0Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOE5vZGVJdGVyYXRvckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOE5vZGVJdGVy
YXRvcjo6bmV4dE5vZGVDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOE5vZGVJdGVyYXRv
cjo6cHJldmlvdXNOb2RlQ2FsbGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OFRyZWVXYWxrZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUcmVlV2Fsa2VyOjpw
YXJlbnROb2RlQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VjhUcmVlV2Fsa2VyOjpmaXJz
dENoaWxkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VjhUcmVlV2Fsa2VyOjpsYXN0Q2hp
bGRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOFRyZWVXYWxrZXI6Om5leHROb2RlQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VjhUcmVlV2Fsa2VyOjpwcmV2aW91c05vZGVDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOFRyZWVXYWxrZXI6Om5leHRTaWJsaW5nQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6VjhUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmdDYWxs
YmFjayk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aW5qZWN0ZWRTY3JpcHRGb3JOb2Rl
SWQpOgorCiAyMDEwLTAxLTI4ICBBYXJvbiBCb29kbWFuICA8YWFAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
Q29udHJvbGxlci5jcHAKaW5kZXggYWIxZDNhNi4uMDgzZTkzMSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCkBAIC0zODAsMTIgKzM4MCw2IEBAIE5QT2JqZWN0KiBT
Y3JpcHRDb250cm9sbGVyOjpjcmVhdGVTY3JpcHRPYmplY3RGb3JQbHVnaW5FbGVtZW50KEhUTUxQ
bHVnSW5FbGVtZW50CiAKICNlbmRpZgogCi1TY3JpcHRTdGF0ZSogU2NyaXB0Q29udHJvbGxlcjo6
bWFpbldvcmxkU2NyaXB0U3RhdGUoKQotewotICAgIEpTRE9NV2luZG93U2hlbGwqIHNoZWxsID0g
d2luZG93U2hlbGwobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwotICAgIHJldHVybiBzaGVsbC0+
d2luZG93KCktPmdsb2JhbEV4ZWMoKTsKLX0KLQogSlNPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6
OmpzT2JqZWN0Rm9yUGx1Z2luRWxlbWVudChIVE1MUGx1Z0luRWxlbWVudCogcGx1Z2luKQogewog
ICAgIC8vIENhbid0IGNyZWF0ZSBKU09iamVjdHMgd2hlbiBKYXZhU2NyaXB0IGlzIGRpc2FibGVk
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaCBiL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IGYyNjVhYjUuLmYzZTVh
ZGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCkBAIC0yNCw3ICsyNCw2
IEBACiAKICNpbmNsdWRlICJKU0RPTVdpbmRvd1NoZWxsLmgiCiAjaW5jbHVkZSAiU2NyaXB0SW5z
dGFuY2UuaCIKLSNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvUHJv
dGVjdC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtMTYwLDggKzE1OSw2IEBAIHB1
YmxpYzoKICAgICAKICAgICBYU1NBdWRpdG9yKiB4c3NBdWRpdG9yKCkgeyByZXR1cm4gbV9YU1NB
dWRpdG9yLmdldCgpOyB9CiAKLSAgICBTY3JpcHRTdGF0ZSogbWFpbldvcmxkU2NyaXB0U3RhdGUo
KTsKLQogcHJpdmF0ZToKICAgICBKU0RPTVdpbmRvd1NoZWxsKiBpbml0U2NyaXB0KERPTVdyYXBw
ZXJXb3JsZCogd29ybGQpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dFN0YXRlLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RhdGUuY3BwCmluZGV4IDdh
NzYwYWUuLmI5ZjMzNGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3Rh
dGUuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RhdGUuY3BwCkBAIC0zOCw2
ICszOCwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK1NjcmlwdFN0YXRlKiBtYWluV29y
bGRTY3JpcHRTdGF0ZShGcmFtZSogZnJhbWUpCit7CisgICAgSlNET01XaW5kb3dTaGVsbCogc2hl
bGwgPSBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKG1haW5UaHJlYWROb3JtYWxXb3JsZCgp
KTsKKyAgICByZXR1cm4gc2hlbGwtPndpbmRvdygpLT5nbG9iYWxFeGVjKCk7Cit9CisKIFNjcmlw
dFN0YXRlKiBzY3JpcHRTdGF0ZUZyb21Ob2RlKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIE5vZGUq
IG5vZGUpCiB7CiAgICAgaWYgKCFub2RlKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRTdGF0ZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5oCmluZGV4
IDYyNTc5MjkuLjBjN2M1NzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
U3RhdGUuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmgKQEAgLTM2LDYg
KzM2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIERPTVdyYXBwZXJXb3Js
ZDsKKyAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBOb2RlOwogICAgIGNsYXNzIFBhZ2U7CiAK
QEAgLTQ1LDYgKzQ2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIC8vIEZvciBub3csIHRo
ZSBzZXBhcmF0aW9uIGlzIHB1cmVseSBieSBjb252ZW50aW9uLgogICAgIHR5cGVkZWYgSlNDOjpF
eGVjU3RhdGUgU2NyaXB0U3RhdGU7CiAKKyAgICBTY3JpcHRTdGF0ZSogbWFpbldvcmxkU2NyaXB0
U3RhdGUoRnJhbWUqKTsKKwogICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZUZyb21Ob2RlKERP
TVdyYXBwZXJXb3JsZCosIE5vZGUqKTsKICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGVGcm9t
UGFnZShET01XcmFwcGVyV29ybGQqLCBQYWdlKik7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0Q2FsbFN0YWNrLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
Q2FsbFN0YWNrLmNwcAppbmRleCBhMGVlY2NiLi4yMTA2M2VkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdENhbGxTdGFjay5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY3JpcHRDYWxsU3RhY2suY3BwCkBAIC01NSw3ICs1NSw3IEBAIFNjcmlwdENhbGxTdGFjayog
U2NyaXB0Q2FsbFN0YWNrOjpjcmVhdGUoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJndW1lbnRzLCB1
bnNpZ25lCiAKIFNjcmlwdENhbGxTdGFjazo6U2NyaXB0Q2FsbFN0YWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3VtZW50cywgdW5zaWduZWQgc2tpcEFyZ3VtZW50Q291bnQsIFN0cmluZyBzb3Vy
Y2VOYW1lLCBpbnQgc291cmNlTGluZU51bWJlcikKICAgICA6IG1fbGFzdENhbGxlcihTdHJpbmco
KSwgc291cmNlTmFtZSwgc291cmNlTGluZU51bWJlciwgYXJndW1lbnRzLCBza2lwQXJndW1lbnRD
b3VudCkKLSAgICAsIG1fc2NyaXB0U3RhdGUoU2NyaXB0Q29udHJvbGxlcjo6Y3VycmVudFNjcmlw
dFN0YXRlKCkpCisgICAgLCBtX3NjcmlwdFN0YXRlKFNjcmlwdFN0YXRlOjpjdXJyZW50KCkpCiB7
CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5j
cHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDVkMzA3
OGQuLjg2ZDU0ZDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJv
bGxlci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcApA
QCAtNDcsNyArNDcsNiBAQAogI2luY2x1ZGUgIm5wcnVudGltZV9wcml2LmgiCiAjaW5jbHVkZSAi
TlBWOE9iamVjdC5oIgogI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKLSNpbmNsdWRlICJT
Y3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5n
LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKQEAgLTM1NCwyNCArMzUzLDYgQEAgdm9p
ZCBTY3JpcHRDb250cm9sbGVyOjpnZXRBbGxXb3JsZHMoVmVjdG9yPERPTVdyYXBwZXJXb3JsZCo+
JiB3b3JsZHMpCiAgICAgd29ybGRzLmFwcGVuZChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CiB9
CiAKLVNjcmlwdFN0YXRlKiBTY3JpcHRDb250cm9sbGVyOjptYWluV29ybGRTY3JpcHRTdGF0ZSgp
Ci17Ci0gICAgaWYgKCFtX21haW5Xb3JsZFNjcmlwdFN0YXRlKSB7Ci0gICAgICAgIHY4OjpIYW5k
bGVTY29wZSBoYW5kbGVTY29wZTsKLSAgICAgICAgbV9tYWluV29ybGRTY3JpcHRTdGF0ZS5zZXQo
bmV3IFNjcmlwdFN0YXRlKG1fZnJhbWUsIFY4UHJveHk6Om1haW5Xb3JsZENvbnRleHQobV9mcmFt
ZSkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fbWFpbldvcmxkU2NyaXB0U3RhdGUuZ2V0KCk7Ci19
Ci0KLVNjcmlwdFN0YXRlKiBTY3JpcHRDb250cm9sbGVyOjpjdXJyZW50U2NyaXB0U3RhdGUoKQot
ewotICAgIGlmIChWOElzb2xhdGVkQ29udGV4dCogY29udGV4dCA9IFY4SXNvbGF0ZWRDb250ZXh0
OjpnZXRFbnRlcmVkKCkpCi0gICAgICAgIHJldHVybiBjb250ZXh0LT5zY3JpcHRTdGF0ZSgpOwot
ICAgIEZyYW1lKiBmcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JDdXJyZW50Q29udGV4
dCgpOwotICAgIEFTU0VSVChmcmFtZSk7Ci0gICAgcmV0dXJuIGZyYW1lLT5zY3JpcHQoKS0+bWFp
bldvcmxkU2NyaXB0U3RhdGUoKTsKLX0KLQogc3RhdGljIE5QT2JqZWN0KiBjcmVhdGVOb1Njcmlw
dE9iamVjdCgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKQEAgLTQzNCw4ICs0MTUsNiBAQCBO
UE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlU2NyaXB0T2JqZWN0Rm9yUGx1Z2luRWxl
bWVudChIVE1MUGx1Z0luRWxlbWVudAogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyV2lu
ZG93U2hlbGwoKQogewotICAgIG1fbWFpbldvcmxkU2NyaXB0U3RhdGUuY2xlYXIoKTsKLQogICAg
IC8vIFY4IGJpbmRpbmcgZXhwZWN0cyBTY3JpcHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxs
IG9ubHkgYmUgY2FsbGVkCiAgICAgLy8gd2hlbiBhIGZyYW1lIGlzIGxvYWRpbmcgYSBuZXcgcGFn
ZS4gVjhQcm94eTo6Y2xlYXJGb3JOYXZpZ2F0aW9uCiAgICAgLy8gY3JlYXRlcyBhIG5ldyBjb250
ZXh0IGZvciB0aGUgbmV3IHBhZ2UuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdENvbnRyb2xsZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5o
CmluZGV4IDVhOTEwNWYuLjk4MTVjN2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0Q29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJv
bGxlci5oCkBAIC00OSw3ICs0OSw2IEBAIGNsYXNzIEV2ZW50OwogY2xhc3MgRnJhbWU7CiBjbGFz
cyBIVE1MUGx1Z0luRWxlbWVudDsKIGNsYXNzIFNjcmlwdFNvdXJjZUNvZGU7Ci1jbGFzcyBTY3Jp
cHRTdGF0ZTsKIGNsYXNzIFN0cmluZzsKIGNsYXNzIFdpZGdldDsKIGNsYXNzIFhTU0F1ZGl0b3I7
CkBAIC0xNjcsMTIgKzE2Niw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGV2YWx1YXRlSW5Xb3JsZChj
b25zdCBTY3JpcHRTb3VyY2VDb2RlJiwgRE9NV3JhcHBlcldvcmxkKikgeyB9CiAgICAgc3RhdGlj
IHZvaWQgZ2V0QWxsV29ybGRzKFZlY3RvcjxET01XcmFwcGVyV29ybGQqPiYgd29ybGRzKTsKIAot
ICAgIC8vIFNjcmlwdCBzdGF0ZSBmb3IgdGhlIG1haW4gd29ybGQgY29udGV4dC4KLSAgICBTY3Jp
cHRTdGF0ZSogbWFpbldvcmxkU2NyaXB0U3RhdGUoKTsKLQotICAgIC8vIFJldHVybnMgU2NyaXB0
U3RhdGUgZm9yIGN1cnJlbnQgY29udGV4dC4KLSAgICBzdGF0aWMgU2NyaXB0U3RhdGUqIGN1cnJl
bnRTY3JpcHRTdGF0ZSgpOwotCiBwcml2YXRlOgogICAgIEZyYW1lKiBtX2ZyYW1lOwogICAgIGNv
bnN0IFN0cmluZyogbV9zb3VyY2VVUkw7CkBAIC0xOTUsOSArMTg4LDYgQEAgcHJpdmF0ZToKICNl
bmRpZgogICAgIC8vIFRoZSBYU1NBdWRpdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFNjcmlwdENv
bnRyb2xsZXIuCiAgICAgT3duUHRyPFhTU0F1ZGl0b3I+IG1fWFNTQXVkaXRvcjsKLQotICAgIC8v
IFNjcmlwdCBzdGF0ZSBmb3IgdGhlIG1haW4gd29ybGQgY29udGV4dC4KLSAgICBPd25QdHI8U2Ny
aXB0U3RhdGU+IG1fbWFpbldvcmxkU2NyaXB0U3RhdGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFNjb3BlLmNwcCBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U2NvcGUuY3BwCmluZGV4IDcyN2FiMjUuLmExYjEz
YTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U2NvcGUuY3BwCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U2NvcGUuY3BwCkBAIC0zMywxMCArMzMsNiBAQAog
CiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKIAotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5j
bHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJWOEJpbmRpbmcuaCIKLQogI2luY2x1ZGUgPHY4Lmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ1LDggKzQxLDggQEAgU2NyaXB0U2NvcGU6OlNj
cmlwdFNjb3BlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgYm9vbCByZXBvcnRFeGNlcHRpb25z
KQogICAgIDogbV9jb250ZXh0KHNjcmlwdFN0YXRlLT5jb250ZXh0KCkpCiAgICAgLCBtX3Njb3Bl
KG1fY29udGV4dCkKICAgICAsIG1fc2NyaXB0U3RhdGUoc2NyaXB0U3RhdGUpCi0gICAgLCBtX3Jl
cG9ydEV4Y2VwdGlvbnMocmVwb3J0RXhjZXB0aW9ucykKIHsKKyAgICBtX2V4Y2VwdGlvbkNhdGNo
ZXIuU2V0VmVyYm9zZShyZXBvcnRFeGNlcHRpb25zKTsKICAgICBBU1NFUlQoIW1fY29udGV4dC5J
c0VtcHR5KCkpOwogfQogCkBAIC01NCwxMSArNTAsNiBAQCBib29sIFNjcmlwdFNjb3BlOjpzdWNj
ZXNzKCkKIHsKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2F0Y2hlci5IYXNDYXVnaHQoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICB2ODo6TG9jYWw8djg6Ok1lc3NhZ2U+IG1lc3NhZ2UgPSBt
X2V4Y2VwdGlvbkNhdGNoZXIuTWVzc2FnZSgpOwotICAgIGlmIChtX3JlcG9ydEV4Y2VwdGlvbnMp
Ci0gICAgICAgIG1fc2NyaXB0U3RhdGUtPmZyYW1lKCktPmRvY3VtZW50KCktPnJlcG9ydEV4Y2Vw
dGlvbih0b1dlYkNvcmVTdHJpbmcobWVzc2FnZS0+R2V0KCkpLCBtZXNzYWdlLT5HZXRMaW5lTnVt
YmVyKCksIHRvV2ViQ29yZVN0cmluZyhtZXNzYWdlLT5HZXRTY3JpcHRSZXNvdXJjZU5hbWUoKSkp
OwotCiAgICAgbV9leGNlcHRpb25DYXRjaGVyLlJlc2V0KCk7CiAgICAgcmV0dXJuIGZhbHNlOwog
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTY29wZS5oIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRTY29wZS5oCmluZGV4IDZmZWU0NTguLjNmOWEzMzIgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U2NvcGUuaAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdFNjb3BlLmgKQEAgLTQ5LDcgKzQ5LDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB2ODo6Q29udGV4dDo6U2NvcGUgbV9zY29wZTsKICAgICAgICAgdjg6OlRy
eUNhdGNoIG1fZXhjZXB0aW9uQ2F0Y2hlcjsKICAgICAgICAgU2NyaXB0U3RhdGUqIG1fc2NyaXB0
U3RhdGU7Ci0gICAgICAgIGJvb2wgbV9yZXBvcnRFeGNlcHRpb25zOwogICAgIH07CiAKIH0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3RhdGUuY3BwIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRTdGF0ZS5jcHAKaW5kZXggMDg1ZmQyYi4uYWFmNzIyZiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTdGF0ZS5jcHAKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRTdGF0ZS5jcHAKQEAgLTM1LDIyICszNSwyNCBAQAogI2luY2x1ZGUg
Ik5vZGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5o
IgorI2luY2x1ZGUgIlY4SGlkZGVuUHJvcGVydHlOYW1lLmgiCiAKKyNpbmNsdWRlIDx2OC5oPgog
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNjcmlwdFN0YXRlOjpTY3JpcHRTdGF0ZShGcmFt
ZSogZnJhbWUpCi0gICAgOiBtX2ZyYW1lKGZyYW1lKQotICAgICwgbV9jb250ZXh0KHY4OjpQZXJz
aXN0ZW50PHY4OjpDb250ZXh0Pjo6TmV3KFY4UHJveHk6Om1haW5Xb3JsZENvbnRleHQoZnJhbWUp
KSkKK1NjcmlwdFN0YXRlOjpTY3JpcHRTdGF0ZShGcmFtZSosIHY4OjpIYW5kbGU8djg6OkNvbnRl
eHQ+IGNvbnRleHQpCisgICAgOiBtX2NvbnRleHQodjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+
OjpOZXcoY29udGV4dCkpCiB7CisgICAgbV9jb250ZXh0Lk1ha2VXZWFrKHRoaXMsICZTY3JpcHRT
dGF0ZTo6d2Vha1JlZmVyZW5jZUNhbGxiYWNrKTsKIH0KIAotU2NyaXB0U3RhdGU6OlNjcmlwdFN0
YXRlKEZyYW1lKiBmcmFtZSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKLSAgICA6
IG1fZnJhbWUoZnJhbWUpCi0gICAgLCBtX2NvbnRleHQodjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRl
eHQ+OjpOZXcoY29udGV4dCkpCitTY3JpcHRTdGF0ZTo6U2NyaXB0U3RhdGUodjg6OkhhbmRsZTx2
ODo6Q29udGV4dD4gY29udGV4dCkKKyAgICA6IG1fY29udGV4dCh2ODo6UGVyc2lzdGVudDx2ODo6
Q29udGV4dD46Ok5ldyhjb250ZXh0KSkKIHsKKyAgICBtX2NvbnRleHQuTWFrZVdlYWsodGhpcywg
JlNjcmlwdFN0YXRlOjp3ZWFrUmVmZXJlbmNlQ2FsbGJhY2spOwogfQogCiBTY3JpcHRTdGF0ZTo6
flNjcmlwdFN0YXRlKCkKQEAgLTU5LDYgKzYxLDU1IEBAIFNjcmlwdFN0YXRlOjp+U2NyaXB0U3Rh
dGUoKQogICAgIG1fY29udGV4dC5DbGVhcigpOwogfQogCitTY3JpcHRTdGF0ZSogU2NyaXB0U3Rh
dGU6OmZvckNvbnRleHQodjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0KQoreworICAgIHY4
OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUoY29udGV4dCk7CisKKyAgICB2ODo6TG9jYWw8
djg6Ok9iamVjdD4gZ2xvYmFsID0gY29udGV4dC0+R2xvYmFsKCk7CisgICAgLy8gU2tpcCBwcm94
eSBvYmplY3QuIFRoZSBwcm94eSBvYmplY3Qgd2lsbCBzdXJ2aXZlIHBhZ2UgbmF2aWdhdGlvbiB3
aGlsZSB3ZSBuZWVkCisgICAgLy8gYW4gb2JqZWN0IHdob3NlIGxpZmV0aW1lIGNvbnNpZGVzIHdp
dGggdGhhdCBvZiB0aGUgaW5zcGVjdGVkIGNvbnRleHQuCisgICAgZ2xvYmFsID0gdjg6OkxvY2Fs
PHY4OjpPYmplY3Q+OjpDYXN0KGdsb2JhbC0+R2V0UHJvdG90eXBlKCkpOworCisgICAgdjg6Okhh
bmRsZTx2ODo6U3RyaW5nPiBrZXkgPSBWOEhpZGRlblByb3BlcnR5TmFtZTo6c2NyaXB0U3RhdGUo
KTsKKyAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWwgPSBnbG9iYWwtPkdldEhpZGRlblZhbHVl
KGtleSk7CisgICAgaWYgKCF2YWwuSXNFbXB0eSgpICYmIHZhbC0+SXNFeHRlcm5hbCgpKQorICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2NyaXB0U3RhdGUqPih2ODo6RXh0ZXJuYWw6OkNhc3Qo
KnZhbCktPlZhbHVlKCkpOworCisgICAgU2NyaXB0U3RhdGUqIHN0YXRlID0gbmV3IFNjcmlwdFN0
YXRlKGNvbnRleHQpOworICAgIGdsb2JhbC0+U2V0SGlkZGVuVmFsdWUoa2V5LCB2ODo6RXh0ZXJu
YWw6Ok5ldyhzdGF0ZSkpOworICAgIHJldHVybiBzdGF0ZTsKK30KKworU2NyaXB0U3RhdGUqIFNj
cmlwdFN0YXRlOjpjdXJyZW50KCkKK3sKKyAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7
CisgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gdjg6OkNvbnRleHQ6OkdldEN1
cnJlbnQoKTsKKyAgICBpZiAoY29udGV4dC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gU2NyaXB0
U3RhdGU6OmZvckNvbnRleHQoY29udGV4dCk7Cit9CisKK1NjcmlwdFN0YXRlKiBTY3JpcHRTdGF0
ZTo6ZW1wdHkoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU2NyaXB0U3RhdGUsIGVtcHR5
U3RhdGUsICh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpKSk7CisgICAgcmV0dXJuICZlbXB0eVN0
YXRlOworfQorCit2b2lkIFNjcmlwdFN0YXRlOjp3ZWFrUmVmZXJlbmNlQ2FsbGJhY2sodjg6OlBl
cnNpc3RlbnQ8djg6OlZhbHVlPiBvYmplY3QsIHZvaWQqIHBhcmFtZXRlcikKK3sKKyAgICBTY3Jp
cHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBzdGF0aWNfY2FzdDxTY3JpcHRTdGF0ZSo+KHBhcmFtZXRl
cik7CisgICAgZGVsZXRlIHNjcmlwdFN0YXRlOworfQorCitTY3JpcHRTdGF0ZSogbWFpbldvcmxk
U2NyaXB0U3RhdGUoRnJhbWUqIGZyYW1lKQoreworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVT
Y29wZTsKKyAgICBWOFByb3h5KiBwcm94eSA9IGZyYW1lLT5zY3JpcHQoKS0+cHJveHkoKTsKKyAg
ICByZXR1cm4gU2NyaXB0U3RhdGU6OmZvckNvbnRleHQocHJveHktPm1haW5Xb3JsZENvbnRleHQo
KSk7Cit9CisKIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZUZyb21Ob2RlKERPTVdyYXBwZXJXb3Js
ZCosIE5vZGUqIG5vZGUpCiB7CiAgICAgLy8gVGhpcyBzaG91bGQgYmUgbmV2ZXIgcmVhY2hlZCB3
aXRoIFY4IGJpbmRpbmdzIChXZWJLaXQgb25seSB1c2VzIGl0CkBAIC03MCw3ICsxMjEsNyBAQCBT
Y3JpcHRTdGF0ZSogc2NyaXB0U3RhdGVGcm9tTm9kZShET01XcmFwcGVyV29ybGQqLCBOb2RlKiBu
b2RlKQogU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlRnJvbVBhZ2UoRE9NV3JhcHBlcldvcmxkKiwg
UGFnZSogcGFnZSkKIHsKICAgICAvLyBUaGlzIHNob3VsZCBiZSBvbmx5IHJlYWNoZWQgd2l0aCBW
OCBiaW5kaW5ncyBmcm9tIHNpbmdsZSBwcm9jZXNzIGxheW91dCB0ZXN0cy4KLSAgICByZXR1cm4g
cGFnZS0+bWFpbkZyYW1lKCktPnNjcmlwdCgpLT5tYWluV29ybGRTY3JpcHRTdGF0ZSgpOworICAg
IHJldHVybiBtYWluV29ybGRTY3JpcHRTdGF0ZShwYWdlLT5tYWluRnJhbWUoKSk7CiB9CiAKIH0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3RhdGUuaCBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0U3RhdGUuaAppbmRleCA4MTMwMDkyLi5lN2ViMTAyIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmgKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRTdGF0ZS5oCkBAIC00NCwxMCArNDQsMTAgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgY2xhc3MgU2NyaXB0U3RhdGUgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAg
IHB1YmxpYzoKLSAgICAgICAgU2NyaXB0U3RhdGUoKSB7IH0KLSAgICAgICAgU2NyaXB0U3RhdGUo
RnJhbWUqIGZyYW1lKTsKLSAgICAgICAgU2NyaXB0U3RhdGUoRnJhbWUqIGZyYW1lLCB2ODo6SGFu
ZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgZGVzdHJ1
Y3RvciB3aWxsIGJlY29tZSBwcml2YXRlIHNob3J0bHkuCiAgICAgICAgIH5TY3JpcHRTdGF0ZSgp
OworICAgICAgICAvLyBGSVhNRTogVGhpcyBjb25zdHJ1Y3RvciB3aWxsIGdvIGF3YXkgc2hvcnRs
eS4KKyAgICAgICAgU2NyaXB0U3RhdGUoRnJhbWUqLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0Pik7
CiAKICAgICAgICAgYm9vbCBoYWRFeGNlcHRpb24oKSB7IHJldHVybiAhbV9leGNlcHRpb24uSXNF
bXB0eSgpOyB9CiAgICAgICAgIHZvaWQgc2V0RXhjZXB0aW9uKHY4OjpMb2NhbDx2ODo6VmFsdWU+
IGV4Y2VwdGlvbikKQEAgLTU2LDE4ICs1NiwyNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIH0KICAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gZXhjZXB0aW9uKCkgeyByZXR1cm4g
bV9leGNlcHRpb247IH0KIAotICAgICAgICBGcmFtZSogZnJhbWUoKSBjb25zdCB7IHJldHVybiBt
X2ZyYW1lOyB9CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCgpIGNvbnN0
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpO
ZXcobV9jb250ZXh0KTsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyBTY3JpcHRTdGF0ZSog
Zm9yQ29udGV4dCh2ODo6TG9jYWw8djg6OkNvbnRleHQ+KTsKKyAgICAgICAgc3RhdGljIFNjcmlw
dFN0YXRlKiBjdXJyZW50KCk7CisgICAgICAgIHN0YXRpYyBTY3JpcHRTdGF0ZSogZW1wdHkoKTsK
KwogICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBTY3JpcHRTdGF0ZSogbWFpbldvcmxkU2Ny
aXB0U3RhdGUoRnJhbWUqKTsKKyAgICAgICAgZXhwbGljaXQgU2NyaXB0U3RhdGUodjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4pOworCisgICAgICAgIHN0YXRpYyB2b2lkIHdlYWtSZWZlcmVuY2VDYWxs
YmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IG9iamVjdCwgdm9pZCogcGFyYW1ldGVyKTsK
KwogICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBtX2V4Y2VwdGlvbjsKLSAgICAgICAgRnJh
bWUqIG1fZnJhbWU7CiAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBtX2NvbnRl
eHQ7CiAgICAgfTsKIAorICAgIFNjcmlwdFN0YXRlKiBtYWluV29ybGRTY3JpcHRTdGF0ZShGcmFt
ZSopOworCiAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlRnJvbU5vZGUoRE9NV3JhcHBlcldv
cmxkKiwgTm9kZSopOwogICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZUZyb21QYWdlKERPTVdy
YXBwZXJXb3JsZCosIFBhZ2UqKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEhpZGRlblByb3BlcnR5TmFtZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhpZGRlblByb3Bl
cnR5TmFtZS5oCmluZGV4IGJiMWNhNGMuLjBiZmFkZDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmgKQEAgLTM5LDYgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIFYob2JqZWN0UHJvdG90eXBlKSBcCiAgICAgVihsaXN0ZW5lcikgXAogICAgIFYo
YXR0cmlidXRlTGlzdGVuZXIpIFwKKyAgICBWKHNjcmlwdFN0YXRlKSBcCiAgICAgVihzbGVlcEZ1
bmN0aW9uKSBcCiAgICAgVih0b1N0cmluZ1N0cmluZykKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
SXNvbGF0ZWRDb250ZXh0LmNwcAppbmRleCA0ZGIxZWZlLi4zMjM3ZWRlIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcApAQCAtODksMTQgKzg5LDQgQEAgVjhJc29s
YXRlZENvbnRleHQ6On5WOElzb2xhdGVkQ29udGV4dCgpCiAgICAgbV9jb250ZXh0LT5kaXNwb3Nl
SGFuZGxlKCk7CiB9CiAKLVNjcmlwdFN0YXRlKiBWOElzb2xhdGVkQ29udGV4dDo6c2NyaXB0U3Rh
dGUoKQotewotICAgIGlmICghbV9zY3JpcHRTdGF0ZSkgewotICAgICAgICB2ODo6SGFuZGxlU2Nv
cGUgc2NvcGU7Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBtX2Nv
bnRleHQuZ2V0KCktPmdldCgpOwotICAgICAgICBtX3NjcmlwdFN0YXRlLnNldChuZXcgU2NyaXB0
U3RhdGUoVjhQcm94eTo6cmV0cmlldmVGcmFtZShjb250ZXh0KSwgY29udGV4dCkpOwotICAgIH0K
LSAgICByZXR1cm4gbV9zY3JpcHRTdGF0ZS5nZXQoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5o
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5oCmluZGV4IDM4NDRiNTcu
LjcwY2EyNzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRl
eHQuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmgKQEAgLTk0
LDggKzk0LDYgQEAgcHVibGljOgogCiAgICAgSXNvbGF0ZWRXb3JsZCogd29ybGQoKSBjb25zdCB7
IHJldHVybiBtX3dvcmxkLmdldCgpOyB9CiAKLSAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUo
KTsKLQogcHJpdmF0ZToKICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnZXRHbG9i
YWxPYmplY3Qodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKICAgICB7CkBAIC0xMTEs
OSArMTA5LDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8U2hhcmVkUGVyc2lzdGVudDx2ODo6Q29u
dGV4dD4gPiBtX2NvbnRleHQ7CiAKICAgICBSZWZQdHI8SXNvbGF0ZWRXb3JsZD4gbV93b3JsZDsK
LQotICAgIC8vIEZJWE1FOiBnZXQgcmlkIG9mIHJlZHVuZGFudCBtX2NvbnRleHQgZmllbGQuIFRo
ZSBjb250ZXh0IGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgU2NyaXB0U3RhdGUuCi0gICAgT3du
UHRyPFNjcmlwdFN0YXRlPiBtX3NjcmlwdFN0YXRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFV0aWxpdGllcy5jcHAgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmNwcAppbmRleCBjNTQ3Y2M3Li5mYjFlY2Fh
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmNwcAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmNwcApAQCAtMTM0LDEzICsxMzQsMTUgQEAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dChTY3JpcHRT
dGF0ZSogc2NyaXB0U3RhdGUpCiAgICAgICAgIHJldHVybiBwcm94eS0+d29ya2VyQ29udGV4dCgp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAjZW5kaWYKIAotICAgIGlmIChzY3JpcHRTdGF0
ZSkKLSAgICAgICAgcmV0dXJuIHNjcmlwdFN0YXRlLT5mcmFtZSgpLT5kb2N1bWVudCgpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEZyYW1lKiBmcmFtZSA9
IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JDdXJyZW50Q29udGV4dCgpOwotICAgICAgICBpZiAo
ZnJhbWUpCi0gICAgICAgICAgICByZXR1cm4gZnJhbWUtPmRvY3VtZW50KCktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKLSAgICB9CisgICAgRnJhbWUqIGZyYW1lOworICAgIGlmIChzY3JpcHRT
dGF0ZSkgeworICAgICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CisgICAgICAgIGZy
YW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZShzY3JpcHRTdGF0ZS0+Y29udGV4dCgpKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yQ3VycmVu
dENvbnRleHQoKTsKKworICAgIGlmIChmcmFtZSkKKyAgICAgICAgcmV0dXJuIGZyYW1lLT5kb2N1
bWVudCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAKICAgICByZXR1cm4gMDsKIH0KQEAg
LTE3MCw3ICsxNzIsNyBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihTY3JpcHRTdGF0ZSogc2NyaXB0
U3RhdGUsIHY4OjpUcnlDYXRjaCYgZXhjZXB0aW9uQ2F0Y2hlcikKICAgICBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dChzY3JpcHRTdGF0
ZSk7CiAgICAgLy8gRHVyaW5nIHRoZSBmcmFtZSB0ZWFyZG93biwgdGhlcmUgbWF5IG5vdCBiZSBh
IHZhbGlkIGNvbnRleHQuCiAgICAgaWYgKGNvbnRleHQgJiYgIWNvbnRleHQtPmlzRG9jdW1lbnQo
KSkKLSAgICAgIGNvbnRleHQtPnJlcG9ydEV4Y2VwdGlvbihlcnJvck1lc3NhZ2UsIGxpbmVOdW1i
ZXIsIHNvdXJjZVVSTCk7CisgICAgICAgIGNvbnRleHQtPnJlcG9ydEV4Y2VwdGlvbihlcnJvck1l
c3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7CiAgICAgZXhjZXB0aW9uQ2F0Y2hlci5SZXNl
dCgpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVJ
dGVyYXRvckN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVJdGVy
YXRvckN1c3RvbS5jcHAKaW5kZXggMWMwNzdmNy4uODkxNDNmMSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlSXRlcmF0b3JDdXN0b20uY3BwCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcApAQCAtNjMsOSAr
NjMsOCBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhOb2RlSXRlcmF0b3I6Om5leHROb2RlQ2Fs
bGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncwogICAgIE5vZGVJdGVyYXRvciogbm9kZUl0
ZXJhdG9yID0gVjhOb2RlSXRlcmF0b3I6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogCiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgU2NyaXB0U3RhdGUgc3RhdGU7Ci0gICAgUmVmUHRy
PE5vZGU+IHJlc3VsdCA9IG5vZGVJdGVyYXRvci0+bmV4dE5vZGUoJnN0YXRlLCBlYyk7Ci0gICAg
cmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgZWMsICZzdGF0ZSk7CisgICAgUmVmUHRyPE5v
ZGU+IHJlc3VsdCA9IG5vZGVJdGVyYXRvci0+bmV4dE5vZGUoU2NyaXB0U3RhdGU6OmVtcHR5KCks
IGVjKTsKKyAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCBlYywgU2NyaXB0U3RhdGU6
OmVtcHR5KCkpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhOb2RlSXRlcmF0b3I6OnBy
ZXZpb3VzTm9kZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC03NCw5ICs3
Myw4IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOE5vZGVJdGVyYXRvcjo6cHJldmlvdXNOb2Rl
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYKICAgICBOb2RlSXRlcmF0b3IqIG5vZGVJdGVy
YXRvciA9IFY4Tm9kZUl0ZXJhdG9yOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKIAogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFNjcmlwdFN0YXRlIHN0YXRlOwotICAgIFJlZlB0cjxO
b2RlPiByZXN1bHQgPSBub2RlSXRlcmF0b3ItPnByZXZpb3VzTm9kZSgmc3RhdGUsIGVjKTsKLSAg
ICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCBlYywgJnN0YXRlKTsKKyAgICBSZWZQdHI8
Tm9kZT4gcmVzdWx0ID0gbm9kZUl0ZXJhdG9yLT5wcmV2aW91c05vZGUoU2NyaXB0U3RhdGU6OmVt
cHR5KCksIGVjKTsKKyAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCBlYywgU2NyaXB0
U3RhdGU6OmVtcHR5KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFRyZWVXYWxrZXJDdXN0b20uY3BwIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhUcmVlV2Fsa2VyQ3VzdG9tLmNwcAppbmRleCBlY2Yy
MTdjLi44MDE4MmY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFRy
ZWVXYWxrZXJDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4VHJl
ZVdhbGtlckN1c3RvbS5jcHAKQEAgLTYwLDkgKzYwLDggQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFY4VHJlZVdhbGtlcjo6cGFyZW50Tm9kZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MKICAgICBJTkNfU1RBVFMoIkRPTS5UcmVlV2Fsa2VyLnBhcmVudE5vZGUoKSIpOwogICAgIFRy
ZWVXYWxrZXIqIHRyZWVXYWxrZXIgPSBWOFRyZWVXYWxrZXI6OnRvTmF0aXZlKGFyZ3MuSG9sZGVy
KCkpOwogCi0gICAgU2NyaXB0U3RhdGUgc3RhdGU7Ci0gICAgUmVmUHRyPE5vZGU+IHJlc3VsdCA9
IHRyZWVXYWxrZXItPnBhcmVudE5vZGUoJnN0YXRlKTsKLSAgICByZXR1cm4gdG9WOChyZXN1bHQu
cmVsZWFzZSgpLCAmc3RhdGUpOworICAgIFJlZlB0cjxOb2RlPiByZXN1bHQgPSB0cmVlV2Fsa2Vy
LT5wYXJlbnROb2RlKFNjcmlwdFN0YXRlOjplbXB0eSgpKTsKKyAgICByZXR1cm4gdG9WOChyZXN1
bHQucmVsZWFzZSgpLCBTY3JpcHRTdGF0ZTo6ZW1wdHkoKSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOFRyZWVXYWxrZXI6OmZpcnN0Q2hpbGRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKQpAQCAtNzAsOSArNjksOCBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhUcmVl
V2Fsa2VyOjpmaXJzdENoaWxkQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncwogICAg
IElOQ19TVEFUUygiRE9NLlRyZWVXYWxrZXIuZmlyc3RDaGlsZCgpIik7CiAgICAgVHJlZVdhbGtl
ciogdHJlZVdhbGtlciA9IFY4VHJlZVdhbGtlcjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAK
LSAgICBTY3JpcHRTdGF0ZSBzdGF0ZTsKLSAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gdHJlZVdh
bGtlci0+Zmlyc3RDaGlsZCgmc3RhdGUpOwotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNl
KCksICZzdGF0ZSk7CisgICAgUmVmUHRyPE5vZGU+IHJlc3VsdCA9IHRyZWVXYWxrZXItPmZpcnN0
Q2hpbGQoU2NyaXB0U3RhdGU6OmVtcHR5KCkpOworICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxl
YXNlKCksIFNjcmlwdFN0YXRlOjplbXB0eSgpKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFY4VHJlZVdhbGtlcjo6bGFzdENoaWxkQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKQEAgLTgwLDkgKzc4LDggQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VHJlZVdhbGtlcjo6
bGFzdENoaWxkQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICBJTkNfU1RB
VFMoIkRPTS5UcmVlV2Fsa2VyLmxhc3RDaGlsZCgpIik7CiAgICAgVHJlZVdhbGtlciogdHJlZVdh
bGtlciA9IFY4VHJlZVdhbGtlcjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKLSAgICBTY3Jp
cHRTdGF0ZSBzdGF0ZTsKLSAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gdHJlZVdhbGtlci0+bGFz
dENoaWxkKCZzdGF0ZSk7Ci0gICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgJnN0YXRl
KTsKKyAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gdHJlZVdhbGtlci0+bGFzdENoaWxkKFNjcmlw
dFN0YXRlOjplbXB0eSgpKTsKKyAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCBTY3Jp
cHRTdGF0ZTo6ZW1wdHkoKSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRyZWVXYWxr
ZXI6Om5leHROb2RlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTkwLDkg
Kzg3LDggQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VHJlZVdhbGtlcjo6bmV4dE5vZGVDYWxs
YmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogICAgIElOQ19TVEFUUygiRE9NLlRyZWVX
YWxrZXIubmV4dE5vZGUoKSIpOwogICAgIFRyZWVXYWxrZXIqIHRyZWVXYWxrZXIgPSBWOFRyZWVX
YWxrZXI6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogCi0gICAgU2NyaXB0U3RhdGUgc3RhdGU7
Ci0gICAgUmVmUHRyPE5vZGU+IHJlc3VsdCA9IHRyZWVXYWxrZXItPm5leHROb2RlKCZzdGF0ZSk7
Ci0gICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgJnN0YXRlKTsKKyAgICBSZWZQdHI8
Tm9kZT4gcmVzdWx0ID0gdHJlZVdhbGtlci0+bmV4dE5vZGUoU2NyaXB0U3RhdGU6OmVtcHR5KCkp
OworICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksIFNjcmlwdFN0YXRlOjplbXB0eSgp
KTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VHJlZVdhbGtlcjo6cHJldmlvdXNOb2Rl
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTEwMCw5ICs5Niw4IEBAIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRyZWVXYWxrZXI6OnByZXZpb3VzTm9kZUNhbGxiYWNrKGNv
bnN0IHY4OjpBcmd1bWVudHMmIGFyCiAgICAgSU5DX1NUQVRTKCJET00uVHJlZVdhbGtlci5wcmV2
aW91c05vZGUoKSIpOwogICAgIFRyZWVXYWxrZXIqIHRyZWVXYWxrZXIgPSBWOFRyZWVXYWxrZXI6
OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogCi0gICAgU2NyaXB0U3RhdGUgc3RhdGU7Ci0gICAg
UmVmUHRyPE5vZGU+IHJlc3VsdCA9IHRyZWVXYWxrZXItPnByZXZpb3VzTm9kZSgmc3RhdGUpOwot
ICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksICZzdGF0ZSk7CisgICAgUmVmUHRyPE5v
ZGU+IHJlc3VsdCA9IHRyZWVXYWxrZXItPnByZXZpb3VzTm9kZShTY3JpcHRTdGF0ZTo6ZW1wdHko
KSk7CisgICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgU2NyaXB0U3RhdGU6OmVtcHR5
KCkpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhUcmVlV2Fsa2VyOjpuZXh0U2libGlu
Z0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0xMTAsOSArMTA1LDggQEAg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VHJlZVdhbGtlcjo6bmV4dFNpYmxpbmdDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmcKICAgICBJTkNfU1RBVFMoIkRPTS5UcmVlV2Fsa2VyLm5l
eHRTaWJsaW5nKCkiKTsKICAgICBUcmVlV2Fsa2VyKiB0cmVlV2Fsa2VyID0gVjhUcmVlV2Fsa2Vy
Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKIAotICAgIFNjcmlwdFN0YXRlIHN0YXRlOwotICAg
IFJlZlB0cjxOb2RlPiByZXN1bHQgPSB0cmVlV2Fsa2VyLT5uZXh0U2libGluZygmc3RhdGUpOwot
ICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksICZzdGF0ZSk7CisgICAgUmVmUHRyPE5v
ZGU+IHJlc3VsdCA9IHRyZWVXYWxrZXItPm5leHRTaWJsaW5nKFNjcmlwdFN0YXRlOjplbXB0eSgp
KTsKKyAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCBTY3JpcHRTdGF0ZTo6ZW1wdHko
KSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRyZWVXYWxrZXI6OnByZXZpb3VzU2li
bGluZ0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0xMjAsOSArMTE0LDgg
QEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5nQ2Fs
bGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYKICAgICBJTkNfU1RBVFMoIkRPTS5UcmVlV2Fsa2Vy
LnByZXZpb3VzU2libGluZygpIik7CiAgICAgVHJlZVdhbGtlciogdHJlZVdhbGtlciA9IFY4VHJl
ZVdhbGtlcjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKLSAgICBTY3JpcHRTdGF0ZSBzdGF0
ZTsKLSAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gdHJlZVdhbGtlci0+cHJldmlvdXNTaWJsaW5n
KCZzdGF0ZSk7Ci0gICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgJnN0YXRlKTsKKyAg
ICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gdHJlZVdhbGtlci0+cHJldmlvdXNTaWJsaW5nKFNjcmlw
dFN0YXRlOjplbXB0eSgpKTsKKyAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCBTY3Jp
cHRTdGF0ZTo6ZW1wdHkoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggMGM5NDdmNy4uNWFiMTM1NCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTE4NDUsNyAr
MTg0NSw3IEBAIFNjcmlwdE9iamVjdCBJbnNwZWN0b3JDb250cm9sbGVyOjppbmplY3RlZFNjcmlw
dEZvck5vZGVJZChsb25nIGlkKQogICAgICAgICBmcmFtZSA9IG1faW5zcGVjdGVkUGFnZS0+bWFp
bkZyYW1lKCk7CiAKICAgICBpZiAoZnJhbWUpCi0gICAgICAgIHJldHVybiBtX2luamVjdGVkU2Ny
aXB0SG9zdC0+aW5qZWN0ZWRTY3JpcHRGb3IoZnJhbWUtPnNjcmlwdCgpLT5tYWluV29ybGRTY3Jp
cHRTdGF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5pbmplY3Rl
ZFNjcmlwdEZvcihtYWluV29ybGRTY3JpcHRTdGF0ZShmcmFtZSkpOwogCiAgICAgcmV0dXJuIFNj
cmlwdE9iamVjdCgpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47695</attachid>
            <date>2010-01-29 03:22:58 -0800</date>
            <delta_ts>2010-01-30 23:40:09 -0800</delta_ts>
            <desc>patch</desc>
            <filename>script-state4.patch</filename>
            <type>text/plain</type>
            <size>1999</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NGFkMzM1NC4uNTQzODFjYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNyBAQAogMjAxMC0wMS0yOSAgWXVyeSBTZW1pa2hh
dHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBNYWtlIFNjcmlwdFN0YXRlIGRlc3RydWN0b3IgcHJvdGVjdGVk
IHNpbmNlIGFsbCBub24tZW1wdHkKKyAgICAgICAgU2NyaXB0U3RhdGVzIGFyZSBtYW5hZ2VkIGJ5
IEdDLiBSZW1vdmUgb2Jzb2xldGUgY29uc3RydWN0b3IuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0MjY2CisKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9TY3JpcHRTdGF0ZS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0U3RhdGUuaDoK
KworMjAxMC0wMS0yOSAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKwog
ICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgogCiAgICAgICAgIFJlbW92ZSBTY3JpcHRT
dGF0ZTo6ZnJhbWUgd2hpY2ggaXMgb25seSB1c2VkIGZvciByZXBvcnRpbmcgZXhjZXB0aW9ucwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTdGF0ZS5jcHAgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmNwcAppbmRleCAxMmVkMWNiLi5mYWMxZDI2IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmNwcAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmNwcApAQCAtNDIsMTEgKzQyLDYgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1TY3JpcHRTdGF0ZTo6U2NyaXB0U3RhdGUoRnJhbWUqLCB2ODo6SGFu
ZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KQotICAgIDogbV9jb250ZXh0KHY4OjpQZXJzaXN0ZW50
PHY4OjpDb250ZXh0Pjo6TmV3KGNvbnRleHQpKQotewotfQotCiBTY3JpcHRTdGF0ZTo6U2NyaXB0
U3RhdGUodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKICAgICA6IG1fY29udGV4dCh2
ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD46Ok5ldyhjb250ZXh0KSkKIHsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3RhdGUuaCBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0U3RhdGUuaAppbmRleCBiYmI2MmRiLi5lNzFiZWNiIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHRTdGF0ZS5oCkBAIC00NCwxMSArNDQsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBj
bGFzcyBTY3JpcHRTdGF0ZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgotICAg
ICAgICAvLyBGSVhNRTogVGhpcyBkZXN0cnVjdG9yIHdpbGwgYmVjb21lIHByaXZhdGUgc2hvcnRs
eS4KLSAgICAgICAgflNjcmlwdFN0YXRlKCk7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvbnN0
cnVjdG9yIHdpbGwgZ28gYXdheSBzaG9ydGx5LgotICAgICAgICBTY3JpcHRTdGF0ZShGcmFtZSos
IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KTsKLQogICAgICAgICBib29sIGhhZEV4Y2VwdGlvbigp
IHsgcmV0dXJuICFtX2V4Y2VwdGlvbi5Jc0VtcHR5KCk7IH0KICAgICAgICAgdm9pZCBzZXRFeGNl
cHRpb24odjg6OkxvY2FsPHY4OjpWYWx1ZT4gZXhjZXB0aW9uKQogICAgICAgICB7CkBAIC02Niw2
ICs2MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAg
U2NyaXB0U3RhdGUoKSB7IH0KKyAgICAgICAgflNjcmlwdFN0YXRlKCk7CiAKICAgICBwcml2YXRl
OgogICAgICAgICBmcmllbmQgU2NyaXB0U3RhdGUqIG1haW5Xb3JsZFNjcmlwdFN0YXRlKEZyYW1l
Kik7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>