<?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>31317</bug_id>
          
          <creation_ts>2009-11-10 14:20:14 -0800</creation_ts>
          <short_desc>Implement SharedScript API.</short_desc>
          <delta_ts>2009-12-07 16:59:22 -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 JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>31427</dependson>
    
    <dependson>31444</dependson>
    
    <dependson>31569</dependson>
    
    <dependson>31857</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dmitry Titov">dimich</reporter>
          <assigned_to name="Dmitry Titov">dimich</assigned_to>
          <cc>ap</cc>
    
    <cc>ggaren</cc>
    
    <cc>ian</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>levin</cc>
    
    <cc>mdavids</cc>
    
    <cc>mjs</cc>
    
    <cc>pmuellr</cc>
    
    <cc>sam</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>162216</commentid>
    <comment_count>0</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-11-10 14:20:14 -0800</bug_when>
    <thetext>Spec so far: http://docs.google.com/View?docID=0ATms0L1uQbSdZHh2M2N0aF8ycm5qOXdmZno

The spec reflects the feedback received during discussions in WhatWG, Chrome and webkit-dev lists. We have a strong request from Google app developers for this functionality so the plan is to move forward and implement it as an experimental WebKit API. Some details of the implementation plan (similar to Notifications):
- have API prefixed, like WebKitGlobalScript to make sure it doesn&apos;t clash with future API
- under #if ENABLE(GLOBAL_SCRIPT), additional runtime flag in V8
- implemented for both JSC and V8. I think most (if not all) code for the feature is inside WebCore, so it doesn&apos;t need embedder&apos;s support.
- as it is experimental, it can be changed or removed over time.

The implementation direction:
- have WebKitGlobalScript.idl + GlobalScriptContext.idl
- the GlobalScriptContext is derived from ScriptExecutionContext, there is also GlobalScriptController to run JS in a document-less context but not on a separate thread as Workers do.
- start with almost-empty GlobalScriptContext and add timers, XHR, Database in the process.
- enable layout tests as soon as possible (for ports which will enable the feature)
- fix issues stemming form mixing lexical and dynamic GlobalObject as they are found
- figure out integration with Inspector (later)

I&apos;ll attach a &apos;prototype&apos; patch soon - not for review, just for possible feedback on a direction. The actual implementation will likely come in a several smaller patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162295</commentid>
    <comment_count>1</comment_count>
      <attachid>42910</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-11-10 17:02:12 -0800</bug_when>
    <thetext>Created attachment 42910
Prototype Implementation - not for review.

The first cut on implementation - not for review, but it is working and shows the direction, so feedback is highly welcome.
JSC bindings only for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165437</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-11-20 13:48:45 -0800</bug_when>
    <thetext>Hi Dmitry.

I started to look over your patch, with a focus on the JSC bindings, but then I realized that I really needed to look over your specification first. So, here&apos;s a set of comments about the specification:

&gt; GlobalScript - shared, same-thread JS context

I think the word &quot;global&quot; is overused in JavaScript, and often misleading.

&quot;window&quot; is described as the &quot;global&quot; object, so you&apos;re creating the concept of a
global global object, which encompasses a set of sub-objects which are themselves
global (but not global global!).

Also, the thing you&apos;re calling &quot;global&quot; is not actually global, since there can be
more than one of it.

This is weird. Let&apos;s not add to the pile.

How about the name SharedScript instead?

In addition to avoiding the &quot;global&quot; pitfall, I think &quot;Shared&quot; does more to
communicate the interesting quirk that many clients can load the same SharedScript,
but the script will actually load only once, and all clients will share it.

&gt; Currently there is no mechanism to directly share DOM, code and data on the
&gt; same ui thread across several pages of the web application.

This statement isn&apos;t really true, and it made it hard for me to understand your
proposal initially.

You can share DOM, code, and data on the same UI thread across several pages
using a window object.

I think what you&apos;re getting at here is that there&apos;s not way to do what you want
without opening and/or persisting a user-visible window.

[ Also, notice your own use of the word &quot;share&quot; here! :) ]

Proposal

&gt; All pages connected to the same Global Script should run on the same thread, 
&gt; in the same process (they logically form an &apos;application instance&apos;).  Since 
&gt; this is not always technically possible, it should be legal (and not break the 
&gt; applications) for there to be duplicate global script contexts within a UA.

I don&apos;t understand this. Wouldn&apos;t duplicate global script contexts break the
feature of sharing DOM and data?

For example, if I stored a session token in a global script context, wouldn&apos;t a
page with a duplicate global script context be forced to log in a second time,
and then end up in a different session anyway, possible breaking the app?

&gt; The property &quot;context&quot; on the GlobalScript returns the global scope object of 
&gt; the loaded and initialized script. 

Notice how awkward it is to describe a &quot;global&quot; object returning a &quot;global&quot; object,
with the two &quot;globals&quot; being completely different.

&gt; opening a tearoff page for the chat with &apos;username&apos; (this code lives in 
&gt; globalScript so it can easily check for &apos;app-wide&apos; info like whether or not the
&gt; chat window for &apos;username&apos; was already open:

Notice that this example is not true if you allow for duplicate global script
contexts, since one global script context might know if a chat window for
&apos;username&apos; were already open, while another did not.

&gt; Another goodness is that observed behavior does not depend on whether the
&gt; script is already loaded or not.

Note that observed behavior of the load and error events does depend on whether
the script is already loaded or not, since they fire synchronously if the script
is already loaded, and asynchronously otherwise. These two behaviors are
philosophically inconsistent.

&gt; It is not necessary to have this behavior deterministic or explicitly specified
&gt; since the ability to connect to the pre-initialized GlobalScript is fundamentally
&gt; an optimization.

I think this statement contradicts your goal of sharing DOM and data.

I think the &quot;Navigation Hop&quot; idea is actually quite tricky, and needs much more
rigorous specification.

&gt; That only can happen in a single process so mult-process browsers like Chromium
&gt; will need to group such pages in the same process. 

This contradicts your statement above that such pages need not be grouped in the
same process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165454</commentid>
    <comment_count>3</comment_count>
    <who name="Patrick Mueller">pmuellr</who>
    <bug_when>2009-11-20 14:34:53 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; &gt; GlobalScript - shared, same-thread JS context
&gt; 
&gt; I think the word &quot;global&quot; is overused in JavaScript, and often misleading.
&gt; 
&gt; &quot;window&quot; is described as the &quot;global&quot; object, so you&apos;re creating the concept of
&gt; a
&gt; global global object, which encompasses a set of sub-objects which are
&gt; themselves
&gt; global (but not global global!).
&gt; 
&gt; Also, the thing you&apos;re calling &quot;global&quot; is not actually global, since there can
&gt; be
&gt; more than one of it.
&gt; 
&gt; This is weird. Let&apos;s not add to the pile.
&gt; 
&gt; How about the name SharedScript instead?
&gt; 
&gt; In addition to avoiding the &quot;global&quot; pitfall, I think &quot;Shared&quot; does more to
&gt; communicate the interesting quirk that many clients can load the same
&gt; SharedScript,
&gt; but the script will actually load only once, and all clients will share it.

I agree &quot;Shared&quot; is a better word here.  But the &quot;thing&quot; in play here is really a new context - or environment - or scope - unsure what the proper name is.  Shared Context or Shared Scope feels better to me.

One of the aspects I like about the proposal is exactly that it gives developers another &quot;scope&quot; to play with.  Something you can kinda get with iframes, presumably without the overhead of the UI aspect.  In that light, I could imagine having a new way of creating a new scope, that wouldn&apos;t be shared - would be available just to a single window/document/whatever; then there would be a similar duality between worker/shared worker, and unshared scope / shared scope.

For reference, an unshared (or shared) scope could be used to implement something like the module facility provided by CommonJS - see http://wiki.commonjs.org/wiki/CommonJS for more info.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165468</commentid>
    <comment_count>4</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-11-20 14:59:16 -0800</bug_when>
    <thetext>Hi Geoffrey,

thanks a lot for taking a look! 

You have a convincing argument why the current naming is not good and could be
even misleading. I agree SharedScript may be even better name. Hmm... May need
to rename the bunch of things :-)

&gt; &gt; Currently there is no mechanism to directly share DOM, code and data on the
&gt; &gt; same ui thread across several pages of the web application.
&gt; 
&gt; This statement isn&apos;t really true, and it made it hard for me to understand your
&gt; proposal initially.
&gt; 
&gt; You can share DOM, code, and data on the same UI thread across several pages
&gt; using a window object.
&gt; 
&gt; I think what you&apos;re getting at here is that there&apos;s not way to do what you want
&gt; without opening and/or persisting a user-visible window.

That&apos;s exactly right. It is very inconvenient to force a window to stay open -
apps today often use onbeforeunload dialog to prevent users from closing
windows that &apos;share&apos; their state with others...

Although one can create a JS object and pass it around (and rely on GC for
lifetime), many things like timers and XHR (for example) are in fact tied to a
window/document and will stop working once &apos;original&apos; window is closed. It&apos;s
theoretically possible to workaround this by detecting closures/failures and
writing even more code. But it is like saying that XHR is not necessary because
one could use iframe to load some XML and then access it from the parent.
Strictly speaking this is true, but practically it&apos;s complex and error-prone,
so XHR is better.

In case of Global(or Shared)Script, the hope is that it&apos;ll add a useful concept
that is also easy to use in practice.

&gt; &gt; All pages connected to the same Global Script should run on the same thread, 
&gt; &gt; in the same process (they logically form an &apos;application instance&apos;).  Since 
&gt; &gt; this is not always technically possible, it should be legal (and not break the 
&gt; &gt; applications) for there to be duplicate global script contexts within a UA.
&gt; 
&gt; I don&apos;t understand this. Wouldn&apos;t duplicate global script contexts break the
&gt; feature of sharing DOM and data?

It is about multiprocess browsers, basically. As we have more of them we&apos;ll
need to solve the issue of grouping pages in processes. This is something which
is new and not yet solved - see for example the Caveats section in this doc:
http://www.chromium.org/developers/design-documents/process-models

Multiple instances of global scripts will be created if the UA happens to open
pages of the same app in different processes. This is basically like running
several instances of the native app in separate processes, they actually could
be run this way, and use different state, be logged into different accounts etc
- just like separate instances of a native app. When native apps do not want
this, they usually grab some inter-process lock and one of them shoots itself,
optionally popping another into focus. Same can be done with web apps via
SharedWorker.

The apps that currently want this (like gmail) normally use window.open() which
lets them force UA to keep the sharing pages in the same process. For today,
this works. But I can see how we could need a way to describe a set of pages
like an application, so the UA would know in advance if it needs to group them
in a single process. This will help to avoid using &apos;pages from the same site in
the same process&apos; which pushes too much of unrelated things into the same
process.

&gt; For example, if I stored a session token in a global script context, wouldn&apos;t a
&gt; page with a duplicate global script context be forced to log in a second time,
&gt; and then end up in a different session anyway, possible breaking the app?

As above - it may be a feature actually. Or can be avoided by the app by
bringing the already opened window in focus.

&gt; &gt; opening a tearoff page for the chat with &apos;username&apos; (this code lives in 
&gt; &gt; globalScript so it can easily check for &apos;app-wide&apos; info like whether or not the
&gt; &gt; chat window for &apos;username&apos; was already open:
&gt; 
&gt; Notice that this example is not true if you allow for duplicate global script
&gt; contexts, since one global script context might know if a chat window for
&gt; &apos;username&apos; were already open, while another did not.

Today, the chat windows in Gmail (which I know a bit, but other apps like that
could have similar structure) are either iframes or separate windows that are
opened via window.open(). This will ensure they have a single shared
GlobalScript. So this will work. If user opens a new tab, and navigates
separately to gmail.com - this is equivalent to opening another &apos;mail
application&apos; and I personally would like to log in with different account into
another window :-)

&gt; &gt; Another goodness is that observed behavior does not depend on whether the
&gt; &gt; script is already loaded or not.
&gt; 
&gt; Note that observed behavior of the load and error events does depend on whether
&gt; the script is already loaded or not, since they fire synchronously if the
&gt; script
&gt; is already loaded, and asynchronously otherwise. These two behaviors are
&gt; philosophically inconsistent.

I might be not clear in the proposal - but in both cases the event fires
asynchronously, meaning the JS should yield. The fact that it fires very
quickly if script is loaded should not make those inconsistent, it&apos;s just the
timing difference.


&gt; I think the &quot;Navigation Hop&quot; idea is actually quite tricky, and needs much more
&gt; rigorous specification.

In fact, I am myself still not sure navigation hop is strictly needed, or which shape
it has to be. Some developers voiced an idea that if SharedWorker stayed a
short period after owner document dies,  then in some user scenarios there is a
high probability that the next document that needs the same SharedWorker will
come up quickly (as in navigation) and have benefit of not
creating/initialization of SharedWorker. I was thinking along the same line,
but indeed this needs more thought, initial implementation may not have one.

&gt; &gt; That only can happen in a single process so mult-process browsers like Chromium
&gt; &gt; will need to group such pages in the same process. 
&gt; 
&gt; This contradicts your statement above that such pages need not be grouped in
&gt; the same process.

Agree this is not clear.  What I meant to say that the set of pages that
connect to a given GlobalScript form &quot;unit of related browsing contexts&quot; (as in
http://www.whatwg.org/specs/web-apps/current-work/multipage/browsers.html#unit-of-related-browsing-contexts).
There may be more then one such unit (there could be the same set of pages
opened in a separate process) so then there will be more then one set of
GlobalScripts.. Which is, again, simply as running multiple app instances.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165499</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-11-20 16:29:52 -0800</bug_when>
    <thetext>&gt; &gt; I don&apos;t understand this. Wouldn&apos;t duplicate global script contexts break the
&gt; &gt; feature of sharing DOM and data?

&gt; It is about multiprocess browsers, basically. As we have more of them we&apos;ll
&gt; need to solve the issue of grouping pages in processes.

I disagree that this is a matter of multiprocess browsers. A uniprocess browser
can group pages into separate logical processes; inversely, a multiprocess browser
can merge pages into the same logical process.

Also, I think we do a disservice to web APIs if we describe their behavior too
much in terms of internal implementation constraints like process models. Those
contraints are meaningless, and potentially confusing, to web developers.

Let&apos;s not overfocus on Google properties and how they use window.open(), either,
since non-Google properties will use this API too.

I see what you mean when you mention the HTML 5 notion of a &quot;unit of related
browsing contexts&quot;, though. Theoretically, two unrelated browsing contexts
should have unrelated SharedScripts, unrelated SharedWorkers, etc.

Let&apos;s leave the discussion of these duplicate / unrelated SharedScripts out of
the SharedScript design document, though. Or, at the very most, let&apos;s just mention
and link to the HTML 5 browsing context spec. Otherwise, it sounds like we&apos;re
inventing a new kind of browsing context relation specific to SharedScript,
with rules that possibly conflict with the HTML 5 browsing context spec.

&gt; If user opens a new tab, and navigates separately to gmail.com - this is
&gt; equivalent to opening another &apos;mail application&apos; and I personally would like
&gt; to log in with different account into another window :-)

I see what you mean now, and I think this equivalence, and our preference for
what should happen in a new tab opened by the user, seems best discussed in the
HTML 5 browsing context spec, and not in the SharedScript design document.

&gt; I might be not clear in the proposal - but in both cases the event fires
&gt; asynchronously, meaning the JS should yield. The fact that it fires very
&gt; quickly if script is loaded should not make those inconsistent, it&apos;s just the
&gt; timing difference.

I think I was confused by this sentence:

&quot;If the GlobalScritp [sic] is already loaded by another page - or even by the
same page - the specified load or error events will be dispatched immediately.&quot;

If the events will actually be dispatched asynchronously, and not immediately,
I think you should just remove that sentence.

&gt; &gt; I think the &quot;Navigation Hop&quot; idea is actually quite tricky, and needs much more
&gt; &gt; rigorous specification.

&gt; In fact, I am myself still not sure navigation hop is strictly needed, or which
&gt; shape it has to be.

One use case you mentioned was &quot;application that uses navigation from page to page&quot;.

If you intend to support this use case, the &quot;Navigation Hop&quot; is a requirement,
and not just an optimization. If you do not intend to support this use case,
&quot;Navigation Hop&quot; is just an optimization, and probably not a very good one.

I think you should either remove the &quot;application that uses navigation from page
to page&quot; use case and the &quot;Navigation Hop&quot; feature, or specify the &quot;Navigation Hop&quot;
feature more rigorously and remove the language about how it&apos;s just an optional
optimization. Since you don&apos;t plan to implement the &quot;Navigation Hop&quot; feature in
your first cut, I guess I&apos;d lean toward the removal option.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165894</commentid>
    <comment_count>6</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-11-23 11:51:55 -0800</bug_when>
    <thetext>(In reply to comment #5)

Thanks Geoffrey! Your comments helped me realize that the &apos;spec&apos; doc I have indeed contains way more pieces of previous discussions and implementation details then needed.

So I&apos;ve split the actual spec we could use into a separate doc, renamed GlobalScript into SharedScritp and cleaned it up (removing Nav hop, discussion about browser contexts etc). Here it is:  http://docs.google.com/View?id=dxv3cth_4gvggh3gh

It might not make a lot of sense to update the patch attached to this bug (as it is a prototype) for name change, but I&apos;ll update 2 patches that are out there not yet landed for a SharedScript name change.

Thanks again!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165897</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-11-23 12:20:20 -0800</bug_when>
    <thetext>A few comments on the JSC bindings, which generally look good:

+JSGlobalScriptContextBase::JSGlobalScriptContextBase(NonNullPassRefPtr&lt;JSC::Structure&gt; structure, PassRefPtr&lt;GlobalScriptContext&gt; impl)
+    : JSDOMGlobalObject(structure, new JSDOMGlobalObjectData, this)
+    , m_impl(impl)
+{
+}

impl can be a NonNullPassRefPtr too.

This function is so simple, maybe it should be inlined into the header.

+
+JSGlobalScriptContextBase::~JSGlobalScriptContextBase()
+{
+}

No need to include this empty destructor.

+void JSGlobalScriptContext::markChildren(MarkStack&amp; markStack)
+{
+    Base::markChildren(markStack);
+
+    JSGlobalData&amp; globalData = *this-&gt;globalData();
+
+    markActiveObjectsForContext(markStack, globalData, scriptExecutionContext());
+
+    impl()-&gt;markEventListeners(markStack);
+}

A little strange / verbose to put &quot;globalData&quot; into a local variable when it&apos;s used only once.

+    // FIXME: We need to use both the dynamic scope and the lexical scope (dynamic scope for resolving the script URL)
+    DOMWindow* window = asJSDOMWindow(exec-&gt;lexicalGlobalObject())-&gt;impl();
+    ExceptionCode ec = 0;
+    RefPtr&lt;WebKitGlobalScript&gt; gs = WebKitGlobalScript::create(scriptURL, name, window-&gt;document(), ec);
+    setDOMException(exec, ec);
+
+    return asObject(toJS(exec, jsConstructor-&gt;globalObject(), gs.release()));

You should write a layout test to cover this FIXME. That way, you&apos;ll know when it&apos;s fixed! :)

+GlobalScriptController::~GlobalScriptController()
+{
+    m_globalScriptContextWrapper = 0; // Unprotect the global object.
+}

This destructor is redundant with the automatic behavior of ProtectedPtr. You should remove it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165947</commentid>
    <comment_count>8</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-11-23 14:55:36 -0800</bug_when>
    <thetext>Update title to reflect name change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165948</commentid>
    <comment_count>9</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-11-23 14:58:29 -0800</bug_when>
    <thetext>(In reply to comment #7)

Thanks a lot! All these will be fixed in the bindings patch which will come in a separate bug soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166039</commentid>
    <comment_count>10</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2009-11-24 05:22:57 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; 
&gt; I see what you mean when you mention the HTML 5 notion of a &quot;unit of related
&gt; browsing contexts&quot;, though. Theoretically, two unrelated browsing contexts
&gt; should have unrelated SharedScripts, unrelated SharedWorkers, etc.

FWIW, SharedWorkers are shared by all browsing contexts, even those in different processes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166246</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-11-24 12:29:03 -0800</bug_when>
    <thetext>&gt; &gt; I see what you mean when you mention the HTML 5 notion of a &quot;unit of related
&gt; &gt; browsing contexts&quot;, though. Theoretically, two unrelated browsing contexts
&gt; &gt; should have unrelated SharedScripts, unrelated SharedWorkers, etc.
&gt; 
&gt; FWIW, SharedWorkers are shared by all browsing contexts, even those in
&gt; different processes.

Interesting! So, we did accidentally contradict the browsing context spec. Even more evidence that it was a good choice to remove that language.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169542</commentid>
    <comment_count>12</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-12-07 16:59:22 -0800</bug_when>
    <thetext>We are not implementing SharedScript, instead will investigate an option to keep iframe internally active while reparenting between document.

The initial code was removed from the sources.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42910</attachid>
            <date>2009-11-10 17:02:12 -0800</date>
            <delta_ts>2009-11-10 17:02:12 -0800</delta_ts>
            <desc>Prototype Implementation - not for review.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>106293</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVz
LnhjY29uZmlnIGIvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMu
eGNjb25maWcKaW5kZXggOWEzZDM2Yi4uMDRkZWNkZiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKKysrIGIvSmF2YVNjcmlw
dENvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKQEAgLTQ2LDYgKzQ2
LDcgQEAgRU5BQkxFX0RPTV9TVE9SQUdFID0gRU5BQkxFX0RPTV9TVE9SQUdFOwogRU5BQkxFX0VW
RU5UU09VUkNFID0gRU5BQkxFX0VWRU5UU09VUkNFOwogRU5BQkxFX0ZJTFRFUlMgPSA7CiBFTkFC
TEVfR0VPTE9DQVRJT04gPSA7CitFTkFCTEVfR0xPQkFMX1NDUklQVCA9IDsKIEVOQUJMRV9JQ09O
REFUQUJBU0UgPSBFTkFCTEVfSUNPTkRBVEFCQVNFOwogRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdH
RVIgPSBFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUjsKIEVOQUJMRV9NQVRITUwgPSA7CkBAIC02
Niw0ICs2Nyw0IEBAIEVOQUJMRV9XT1JLRVJTID0gRU5BQkxFX1dPUktFUlM7CiBFTkFCTEVfWFBB
VEggPSBFTkFCTEVfWFBBVEg7CiBFTkFCTEVfWFNMVCA9IEVOQUJMRV9YU0xUOwogCi1GRUFUVVJF
X0RFRklORVMgPSAkKEVOQUJMRV8zRF9DQU5WQVMpICQoRU5BQkxFXzNEX1JFTkRFUklORykgJChF
TkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0RBVEFCQVNFKSAkKEVOQUJMRV9EQVRB
R1JJRCkgJChFTkFCTEVfREFUQUxJU1QpICQoRU5BQkxFX0RPTV9TVE9SQUdFKSAkKEVOQUJMRV9F
VkVOVFNPVVJDRSkgJChFTkFCTEVfRklMVEVSUykgJChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5B
QkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJChFTkFCTEVf
TUFUSE1MKSAkKEVOQUJMRV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBM
SUNBVElPTlMpICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9TVkcpICQoRU5BQkxF
X1NWR19BTklNQVRJT04pICQoRU5BQkxFX1NWR19BU19JTUFHRSkgJChFTkFCTEVfU1ZHX0RPTV9P
QkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1NWR19GT1JFSUdOX09C
SkVDVCkgJChFTkFCTEVfU1ZHX1VTRSkgJChFTkFCTEVfVklERU8pICQoRU5BQkxFX1dFQl9TT0NL
RVRTKSAkKEVOQUJMRV9XTUwpICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxFX1hQQVRIKSAkKEVO
QUJMRV9YU0xUKTsKK0ZFQVRVUkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX0NBTlZBUykgJChFTkFC
TEVfM0RfUkVOREVSSU5HKSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykgJChFTkFCTEVfREFU
QUJBU0UpICQoRU5BQkxFX0RBVEFHUklEKSAkKEVOQUJMRV9EQVRBTElTVCkgJChFTkFCTEVfRE9N
X1NUT1JBR0UpICQoRU5BQkxFX0VWRU5UU09VUkNFKSAkKEVOQUJMRV9GSUxURVJTKSAkKEVOQUJM
RV9HRU9MT0NBVElPTikgJChFTkFCTEVfR0xPQkFMX1NDUklQVCkgJChFTkFCTEVfSUNPTkRBVEFC
QVNFKSAkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9NQVRITUwpICQoRU5B
QkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgJChF
TkFCTEVfU0hBUkVEX1dPUktFUlMpICQoRU5BQkxFX1NWRykgJChFTkFCTEVfU1ZHX0FOSU1BVElP
TikgJChFTkFCTEVfU1ZHX0FTX0lNQUdFKSAkKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1Mp
ICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVfU1ZHX0ZPUkVJR05fT0JKRUNUKSAkKEVOQUJM
RV9TVkdfVVNFKSAkKEVOQUJMRV9WSURFTykgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxF
X1dNTCkgJChFTkFCTEVfV09SS0VSUykgJChFTkFCTEVfWFBBVEgpICQoRU5BQkxFX1hTTFQpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZp
ZyBiL1dlYkNvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKaW5kZXgg
OWEzZDM2Yi4uMDRkZWNkZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9Db25maWd1cmF0aW9ucy9GZWF0
dXJlRGVmaW5lcy54Y2NvbmZpZworKysgYi9XZWJDb3JlL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVE
ZWZpbmVzLnhjY29uZmlnCkBAIC00Niw2ICs0Niw3IEBAIEVOQUJMRV9ET01fU1RPUkFHRSA9IEVO
QUJMRV9ET01fU1RPUkFHRTsKIEVOQUJMRV9FVkVOVFNPVVJDRSA9IEVOQUJMRV9FVkVOVFNPVVJD
RTsKIEVOQUJMRV9GSUxURVJTID0gOwogRU5BQkxFX0dFT0xPQ0FUSU9OID0gOworRU5BQkxFX0dM
T0JBTF9TQ1JJUFQgPSA7CiBFTkFCTEVfSUNPTkRBVEFCQVNFID0gRU5BQkxFX0lDT05EQVRBQkFT
RTsKIEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSID0gRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdH
RVI7CiBFTkFCTEVfTUFUSE1MID0gOwpAQCAtNjYsNCArNjcsNCBAQCBFTkFCTEVfV09SS0VSUyA9
IEVOQUJMRV9XT1JLRVJTOwogRU5BQkxFX1hQQVRIID0gRU5BQkxFX1hQQVRIOwogRU5BQkxFX1hT
TFQgPSBFTkFCTEVfWFNMVDsKIAotRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfQ0FOVkFT
KSAkKEVOQUJMRV8zRF9SRU5ERVJJTkcpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVO
QUJMRV9EQVRBQkFTRSkgJChFTkFCTEVfREFUQUdSSUQpICQoRU5BQkxFX0RBVEFMSVNUKSAkKEVO
QUJMRV9ET01fU1RPUkFHRSkgJChFTkFCTEVfRVZFTlRTT1VSQ0UpICQoRU5BQkxFX0ZJTFRFUlMp
ICQoRU5BQkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9JQ09OREFUQUJBU0UpICQoRU5BQkxFX0pB
VkFTQ1JJUFRfREVCVUdHRVIpICQoRU5BQkxFX01BVEhNTCkgJChFTkFCTEVfTk9USUZJQ0FUSU9O
UykgJChFTkFCTEVfT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKSAkKEVOQUJMRV9TSEFSRURfV09S
S0VSUykgJChFTkFCTEVfU1ZHKSAkKEVOQUJMRV9TVkdfQU5JTUFUSU9OKSAkKEVOQUJMRV9TVkdf
QVNfSU1BR0UpICQoRU5BQkxFX1NWR19ET01fT0JKQ19CSU5ESU5HUykgJChFTkFCTEVfU1ZHX0ZP
TlRTKSAkKEVOQUJMRV9TVkdfRk9SRUlHTl9PQkpFQ1QpICQoRU5BQkxFX1NWR19VU0UpICQoRU5B
QkxFX1ZJREVPKSAkKEVOQUJMRV9XRUJfU09DS0VUUykgJChFTkFCTEVfV01MKSAkKEVOQUJMRV9X
T1JLRVJTKSAkKEVOQUJMRV9YUEFUSCkgJChFTkFCTEVfWFNMVCk7CitGRUFUVVJFX0RFRklORVMg
PSAkKEVOQUJMRV8zRF9DQU5WQVMpICQoRU5BQkxFXzNEX1JFTkRFUklORykgJChFTkFCTEVfQ0hB
Tk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0RBVEFCQVNFKSAkKEVOQUJMRV9EQVRBR1JJRCkgJChF
TkFCTEVfREFUQUxJU1QpICQoRU5BQkxFX0RPTV9TVE9SQUdFKSAkKEVOQUJMRV9FVkVOVFNPVVJD
RSkgJChFTkFCTEVfRklMVEVSUykgJChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxFX0dMT0JB
TF9TQ1JJUFQpICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSkFWQVNDUklQVF9ERUJV
R0dFUikgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9P
RkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJM
RV9TVkcpICQoRU5BQkxFX1NWR19BTklNQVRJT04pICQoRU5BQkxFX1NWR19BU19JTUFHRSkgJChF
TkFCTEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxF
X1NWR19GT1JFSUdOX09CSkVDVCkgJChFTkFCTEVfU1ZHX1VTRSkgJChFTkFCTEVfVklERU8pICQo
RU5BQkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XTUwpICQoRU5BQkxFX1dPUktFUlMpICQoRU5B
QkxFX1hQQVRIKSAkKEVOQUJMRV9YU0xUKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvRGVyaXZlZFNv
dXJjZXMubWFrZSBiL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCA3YjI4MGIwLi5l
ZWY0NDU1IDEwMDY0NAotLS0gYS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvV2Vi
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0zMiw2ICszMiw3IEBAIFZQQVRIID0gXAogICAg
ICQoV2ViQ29yZSkvYmluZGluZ3Mvb2JqYyBcCiAgICAgJChXZWJDb3JlKS9jc3MgXAogICAgICQo
V2ViQ29yZSkvZG9tIFwKKyAgICAkKFdlYkNvcmUpL2dsb2JhbHNjcmlwdCBcCiAgICAgJChXZWJD
b3JlKS9odG1sIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzIFwKICAgICAkKFdlYkNvcmUp
L2luc3BlY3RvciBcCkBAIC0xMjYsNiArMTI3LDcgQEAgRE9NX0NMQVNTRVMgPSBcCiAgICAgRmls
ZUxpc3QgXAogICAgIEdlb2xvY2F0aW9uIFwKICAgICBHZW9wb3NpdGlvbiBcCisgICAgR2xvYmFs
U2NyaXB0Q29udGV4dCBcCiAgICAgSFRNTEFsbENvbGxlY3Rpb24gXAogICAgIEhUTUxBbmNob3JF
bGVtZW50IFwKICAgICBIVE1MQXBwbGV0RWxlbWVudCBcCkBAIC0zOTksNiArNDAxLDcgQEAgRE9N
X0NMQVNTRVMgPSBcCiAgICAgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSBcCiAgICAgV2ViS2l0Q1NT
TWF0cml4IFwKICAgICBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSBcCisgICAgV2ViS2l0R2xvYmFs
U2NyaXB0IFwKICAgICBXZWJLaXRQb2ludCBcCiAgICAgV2ViS2l0VHJhbnNpdGlvbkV2ZW50IFwK
ICAgICBXZWJTb2NrZXQgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggYWFiYmMwZi4uMjA0MjdlNSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0y
NTI0LDYgKzI1MjQsMzQgQEAgd2ViY29yZV9idWlsdF9zb3VyY2VzICs9IFwKIAogZW5kaWYKIAor
IyAtLS0KKyMgV2ViS2l0R2xvYmFsU2NyaXB0IHN1cHBvcnQKKyMgLS0tCitpZiBFTkFCTEVfR0xP
QkFMX1NDUklQVAorRkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX0dMT0JBTF9T
Q1JJUFQ9MQorCit3ZWJjb3JlX2NwcGZsYWdzICs9IFwKKwktREVOQUJMRV9HTE9CQUxfU0NSSVBU
PTEKKworSURMX0JJTkRJTkdTICs9IFwKKwlXZWJDb3JlL2dsb2JhbHNjcmlwdC9XZWJLaXRHbG9i
YWxTY3JpcHQuaWRsIFwKKwlXZWJDb3JlL2dsb2JhbHNjcmlwdC9HbG9iYWxTY3JpcHRDb250ZXh0
LmlkbCBcCisKK3dlYmNvcmVfc291cmNlcyArPSBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ds
b2JhbFNjcmlwdENvbnRleHRCYXNlLmNwcCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0dsb2Jh
bFNjcmlwdENvbnRleHRCYXNlLmggXAorCVdlYkNvcmUvYmluZGluZ3MvanMvSlNHbG9iYWxTY3Jp
cHRDb250ZXh0Q3VzdG9tLmNwcCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0dsb2JhbFNjcmlw
dENvbnN0cnVjdG9yLmNwcCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0dsb2JhbFNjcmlwdEN1
c3RvbS5jcHAgXAorCVdlYkNvcmUvZ2xvYmFsc2NyaXB0L0dsb2JhbFNjcmlwdENvbnRleHQuY3Bw
IFwKKwlXZWJDb3JlL2dsb2JhbHNjcmlwdC9HbG9iYWxTY3JpcHRDb250ZXh0LmggXAorCVdlYkNv
cmUvZ2xvYmFsc2NyaXB0L0dsb2JhbFNjcmlwdENvbnRyb2xsZXIuY3BwIFwKKwlXZWJDb3JlL2ds
b2JhbHNjcmlwdC9HbG9iYWxTY3JpcHRDb250cm9sbGVyLmggXAorCVdlYkNvcmUvZ2xvYmFsc2Ny
aXB0L1dlYktpdEdsb2JhbFNjcmlwdC5jcHAgXAorCVdlYkNvcmUvZ2xvYmFsc2NyaXB0L1dlYktp
dEdsb2JhbFNjcmlwdC5oIFwKKworZW5kaWYKKwogIyAtLS0tCiAjIFdNTCBTdXBwb3J0CiAjIC0t
LS0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovYnVpbGQtZ2VuZXJhdGVkLWZp
bGVzLnNoIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9idWlsZC1nZW5lcmF0ZWQtZmlsZXMuc2gK
aW5kZXggMjVhMTgzNS4uZDViM2VhZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9idWlsZC1nZW5lcmF0ZWQtZmlsZXMuc2gKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9i
dWlsZC1nZW5lcmF0ZWQtZmlsZXMuc2gKQEAgLTU5LDUgKzU5LDUgQEAgbWtkaXIgLXAgIiR7QlVJ
TFRfUFJPRFVDVFNfRElSfS9EZXJpdmVkU291cmNlcyIKIGNkICIke0JVSUxUX1BST0RVQ1RTX0RJ
Un0vRGVyaXZlZFNvdXJjZXMiCiAKIGV4cG9ydCBXZWJDb3JlPSIke1hTUkNST09UfSIKLWV4cG9y
dCBGRUFUVVJFX0RFRklORVM9IkVOQUJMRV9DSEFOTkVMX01FU1NBR0lORyBFTkFCTEVfREFUQUJB
U0UgRU5BQkxFX0RBVEFHUklEIEVOQUJMRV9EQVRBTElTVCBFTkFCTEVfRE9NX1NUT1JBR0UgRU5B
QkxFX0VWRU5UU09VUkNFIEVOQUJMRV9JQ09OREFUQUJBU0UgRU5BQkxFX0pBVkFTQ1JJUFRfREVC
VUdHRVIgRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUyBFTkFCTEVfU0hBUkVEX1dPUktF
UlMgRU5BQkxFX1NWRyBFTkFCTEVfU1ZHX0FOSU1BVElPTiBFTkFCTEVfU1ZHX0FTX0lNQUdFIEVO
QUJMRV9TVkdfRk9OVFMgRU5BQkxFX1NWR19GT1JFSUdOX09CSkVDVCBFTkFCTEVfU1ZHX1VTRSBF
TkFCTEVfVklERU8gRU5BQkxFX1dFQl9TT0NLRVRTIEVOQUJMRV9XT1JLRVJTIEVOQUJMRV9YUEFU
SCBFTkFCTEVfWFNMVCIKK2V4cG9ydCBGRUFUVVJFX0RFRklORVM9IkVOQUJMRV9DSEFOTkVMX01F
U1NBR0lORyBFTkFCTEVfREFUQUJBU0UgRU5BQkxFX0RBVEFHUklEIEVOQUJMRV9EQVRBTElTVCBF
TkFCTEVfRE9NX1NUT1JBR0UgRU5BQkxFX0VWRU5UU09VUkNFIEVOQUJMRV9HTE9CQUxfU0NSSVBU
IEVOQUJMRV9JQ09OREFUQUJBU0UgRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIgRU5BQkxFX09G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUyBFTkFCTEVfU0hBUkVEX1dPUktFUlMgRU5BQkxFX1NWRyBF
TkFCTEVfU1ZHX0FOSU1BVElPTiBFTkFCTEVfU1ZHX0FTX0lNQUdFIEVOQUJMRV9TVkdfRk9OVFMg
RU5BQkxFX1NWR19GT1JFSUdOX09CSkVDVCBFTkFCTEVfU1ZHX1VTRSBFTkFCTEVfVklERU8gRU5B
QkxFX1dFQl9TT0NLRVRTIEVOQUJMRV9XT1JLRVJTIEVOQUJMRV9YUEFUSCBFTkFCTEVfWFNMVCIK
IG1ha2UgLWYgIiRXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UiIC1qICR7TlVNQ1BVU30gfHwg
ZXhpdCAxCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDY3
YmQ4ZDkuLjAyNTBjNmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0yMzgsMTAgKzIzOCwzMCBAQAogCQkxNUM3NzA5NDEwMEQzQ0E4MDA1QkEyNjcgLyog
SlNWYWxpZGl0eVN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE1Qzc3MDkyMTAwRDNDQTgwMDVCQTI2NyAvKiBKU1ZhbGlkaXR5U3RhdGUuY3Bw
ICovOyB9OwogCQkxNUM3NzBBNTEwMEQ0MUNEMDA1QkEyNjcgLyogRE9NVmFsaWRpdHlTdGF0ZS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE1Qzc3MEEz
MTAwRDQxQ0QwMDVCQTI2NyAvKiBET01WYWxpZGl0eVN0YXRlLm1tICovOyB9OwogCQkxNUM3NzBB
NjEwMEQ0MUNEMDA1QkEyNjcgLyogRE9NVmFsaWRpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTVDNzcwQTQxMDBENDFDRDAwNUJBMjY3IC8q
IERPTVZhbGlkaXR5U3RhdGUuaCAqLzsgfTsKKwkJMTg1Njg5NDQxMDdFQjFBNDAwMUUyOTdCIC8q
IEpTV2ViS2l0R2xvYmFsU2NyaXB0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE4NTY4OTQzMTA3RUIxQTQwMDFFMjk3QiAvKiBKU1dlYktp
dEdsb2JhbFNjcmlwdEN1c3RvbS5jcHAgKi87IH07CisJCTE4NTY4OTYwMTA3RUM1QUYwMDFFMjk3
QiAvKiBKU1dlYktpdEdsb2JhbFNjcmlwdENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE4NTY4OTVFMTA3RUM1QUYwMDFFMjk3QiAv
KiBKU1dlYktpdEdsb2JhbFNjcmlwdENvbnN0cnVjdG9yLmNwcCAqLzsgfTsKKwkJMTg1Njg5NjEx
MDdFQzVBRjAwMUUyOTdCIC8qIEpTV2ViS2l0R2xvYmFsU2NyaXB0Q29uc3RydWN0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE4NTY4OTVGMTA3RUM1
QUYwMDFFMjk3QiAvKiBKU1dlYktpdEdsb2JhbFNjcmlwdENvbnN0cnVjdG9yLmggKi87IH07CisJ
CTE4NTY4OUE5MTA4M0I3NUUwMDFFMjk3QiAvKiBKU1dlYktpdEdsb2JhbFNjcmlwdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTg1Njg5QTcxMDgzQjc1
RTAwMUUyOTdCIC8qIEpTV2ViS2l0R2xvYmFsU2NyaXB0LmggKi87IH07CisJCTE4NTY4OUFBMTA4
M0I3NUUwMDFFMjk3QiAvKiBKU1dlYktpdEdsb2JhbFNjcmlwdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxODU2ODlBODEwODNCNzVFMDAxRTI5N0Ig
LyogSlNXZWJLaXRHbG9iYWxTY3JpcHQuY3BwICovOyB9OwogCQkxODVCQ0YyODBGMzI3OUNFMDAw
RUEyNjIgLyogVGhyZWFkVGltZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE4NUJDRjI2MEYzMjc5Q0UwMDBFQTI2MiAvKiBUaHJlYWRUaW1lcnMu
Y3BwICovOyB9OwogCQkxODVCQ0YyOTBGMzI3OUNFMDAwRUEyNjIgLyogVGhyZWFkVGltZXJzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxODVCQ0YyNzBG
MzI3OUNFMDAwRUEyNjIgLyogVGhyZWFkVGltZXJzLmggKi87IH07CiAJCTE4ODYwNEIzMEYyRTY1
NEEwMDBCNjQ0MyAvKiBET01UaW1lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxODg2MDRCMTBGMkU2NTRBMDAwQjY0NDMgLyogRE9NVGltZXIuY3Bw
ICovOyB9OwogCQkxODg2MDRCNDBGMkU2NTRBMDAwQjY0NDMgLyogRE9NVGltZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE4ODYwNEIyMEYyRTY1NEEw
MDBCNjQ0MyAvKiBET01UaW1lci5oICovOyB9OworCQkxOEM1RkNBNTEwQTM5OTFGMDA0ODQzOEQg
LyogV2ViS2l0R2xvYmFsU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE4QzVGQ0EwMTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRHbG9iYWxT
Y3JpcHQuY3BwICovOyB9OworCQkxOEM1RkNBNjEwQTM5OTFGMDA0ODQzOEQgLyogV2ViS2l0R2xv
YmFsU2NyaXB0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxOEM1RkNBMTEwQTM5OTFGMDA0ODQzOEQgLyogV2ViS2l0R2xvYmFsU2NyaXB0LmggKi87IH07
CisJCTE4QzVGQ0E3MTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRHbG9iYWxTY3JpcHQuaWRsIGlu
IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxOEM1RkNBMjEw
QTM5OTFGMDA0ODQzOEQgLyogV2ViS2l0R2xvYmFsU2NyaXB0LmlkbCAqLzsgfTsKKwkJMThDNUZD
QTgxMEEzOTkxRjAwNDg0MzhEIC8qIFdlYktpdEdsb2JhbFNjcmlwdFJlcG9zaXRvcnkuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMThDNUZDQTMxMEEz
OTkxRjAwNDg0MzhEIC8qIFdlYktpdEdsb2JhbFNjcmlwdFJlcG9zaXRvcnkuY3BwICovOyB9Owor
CQkxOEM1RkNBOTEwQTM5OTFGMDA0ODQzOEQgLyogV2ViS2l0R2xvYmFsU2NyaXB0UmVwb3NpdG9y
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMThDNUZD
QTQxMEEzOTkxRjAwNDg0MzhEIC8qIFdlYktpdEdsb2JhbFNjcmlwdFJlcG9zaXRvcnkuaCAqLzsg
fTsKKwkJMThDNUZDQjcxMEEzQzZGMjAwNDg0MzhEIC8qIEdsb2JhbFNjcmlwdENvbnRleHQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMThDNUZDQjQx
MEEzQzZGMjAwNDg0MzhEIC8qIEdsb2JhbFNjcmlwdENvbnRleHQuY3BwICovOyB9OworCQkxOEM1
RkNCODEwQTNDNkYyMDA0ODQzOEQgLyogR2xvYmFsU2NyaXB0Q29udGV4dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMThDNUZDQjUxMEEzQzZGMjAwNDg0
MzhEIC8qIEdsb2JhbFNjcmlwdENvbnRleHQuaCAqLzsgfTsKKwkJMThDNUZDQjkxMEEzQzZGMjAw
NDg0MzhEIC8qIEdsb2JhbFNjcmlwdENvbnRleHQuaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxOEM1RkNCNjEwQTNDNkYyMDA0ODQzOEQgLyogR2xv
YmFsU2NyaXB0Q29udGV4dC5pZGwgKi87IH07CisJCTE4QzVGRDNDMTBBNTA3QkMwMDQ4NDM4RCAv
KiBKU0dsb2JhbFNjcmlwdENvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE4QzVGRDNBMTBBNTA3QkMwMDQ4NDM4RCAvKiBKU0dsb2JhbFNjcmlw
dENvbnRleHQuaCAqLzsgfTsKKwkJMThDNUZEM0QxMEE1MDdCQzAwNDg0MzhEIC8qIEpTR2xvYmFs
U2NyaXB0Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxOEM1RkQzQjEwQTUwN0JDMDA0ODQzOEQgLyogSlNHbG9iYWxTY3JpcHRDb250ZXh0
LmNwcCAqLzsgfTsKKwkJMThEQThDQkYxMEE3QjI1ODAwNTU1NEY2IC8qIEdsb2JhbFNjcmlwdENv
bnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMThEQThDQkQxMEE3QjI1ODAwNTU1NEY2IC8qIEdsb2JhbFNjcmlwdENvbnRyb2xsZXIuY3Bw
ICovOyB9OworCQkxOERBOENDMDEwQTdCMjU4MDA1NTU0RjYgLyogR2xvYmFsU2NyaXB0Q29udHJv
bGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMThE
QThDQkUxMEE3QjI1ODAwNTU1NEY2IC8qIEdsb2JhbFNjcmlwdENvbnRyb2xsZXIuaCAqLzsgfTsK
KwkJMThEQThDQ0MxMEE3QkM2QTAwNTU1NEY2IC8qIEpTR2xvYmFsU2NyaXB0Q29udGV4dEJhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMThEQThD
Q0ExMEE3QkM2QTAwNTU1NEY2IC8qIEpTR2xvYmFsU2NyaXB0Q29udGV4dEJhc2UuY3BwICovOyB9
OworCQkxOERBOENDRDEwQTdCQzZBMDA1NTU0RjYgLyogSlNHbG9iYWxTY3JpcHRDb250ZXh0QmFz
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMThEQThD
Q0IxMEE3QkM2QTAwNTU1NEY2IC8qIEpTR2xvYmFsU2NyaXB0Q29udGV4dEJhc2UuaCAqLzsgfTsK
KwkJMThEQThDREExMEE3QzZEQjAwNTU1NEY2IC8qIEpTR2xvYmFsU2NyaXB0Q29udGV4dEN1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxOERB
OENEOTEwQTdDNkRCMDA1NTU0RjYgLyogSlNHbG9iYWxTY3JpcHRDb250ZXh0Q3VzdG9tLmNwcCAq
LzsgfTsKIAkJMThGODMxQjgwRkQ0OEM3ODAwRDhDNTZCIC8qIFdvcmtlckxvYWRlclByb3h5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxOEY4MzFCNzBG
RDQ4Qzc4MDBEOEM1NkIgLyogV29ya2VyTG9hZGVyUHJveHkuaCAqLzsgfTsKIAkJMUEwRDU3MzYw
QTVDNzdGRTAwN0VERDRDIC8qIE92ZXJmbG93RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwRDU3MzQwQTVDNzdGRTAwN0VERDRDIC8qIE92
ZXJmbG93RXZlbnQuY3BwICovOyB9OwogCQkxQTBENTczNzBBNUM3N0ZFMDA3RURENEMgLyogT3Zl
cmZsb3dFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUEwRDU3MzUwQTVDNzdGRTAwN0VERDRDIC8qIE92ZXJmbG93RXZlbnQuaCAqLzsgfTsKQEAg
LTU0MTYsMTAgKzU0MzYsMzAgQEAKIAkJMTVDNzcwOTIxMDBEM0NBODAwNUJBMjY3IC8qIEpTVmFs
aWRpdHlTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Zh
bGlkaXR5U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNUM3NzBBMzEw
MEQ0MUNEMDA1QkEyNjcgLyogRE9NVmFsaWRpdHlTdGF0ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTVZhbGlkaXR5U3RhdGUubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE1Qzc3MEE0MTAwRDQxQ0QwMDVCQTI2NyAvKiBET01WYWxpZGl0eVN0
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVZhbGlkaXR5U3RhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTg1Njg5NDMxMDdFQjFBNDAwMUUyOTdC
IC8qIEpTV2ViS2l0R2xvYmFsU2NyaXB0Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTV2ViS2l0R2xvYmFsU2NyaXB0Q3VzdG9tLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTg1Njg5NUUxMDdFQzVBRjAwMUUyOTdCIC8qIEpTV2ViS2l0
R2xvYmFsU2NyaXB0Q29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNXZWJLaXRHbG9iYWxTY3JpcHRDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTE4NTY4OTVGMTA3RUM1QUYwMDFFMjk3QiAvKiBKU1dlYktpdEds
b2JhbFNjcmlwdENvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTV2ViS2l0R2xvYmFsU2NyaXB0Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMTg1Njg5QTcxMDgzQjc1RTAwMUUyOTdCIC8qIEpTV2ViS2l0R2xvYmFsU2NyaXB0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViS2l0R2xvYmFsU2NyaXB0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE4NTY4OUE4MTA4M0I3NUUwMDFFMjk3
QiAvKiBKU1dlYktpdEdsb2JhbFNjcmlwdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU1dlYktpdEdsb2JhbFNjcmlwdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE4NUJDRjI2MEYzMjc5Q0UwMDBFQTI2MiAvKiBUaHJlYWRUaW1lcnMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkVGltZXJzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTg1QkNGMjcwRjMyNzlDRTAwMEVBMjYyIC8qIFRo
cmVhZFRpbWVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRUaW1l
cnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTg4NjA0QjEwRjJFNjU0QTAwMEI2
NDQzIC8qIERPTVRpbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERPTVRpbWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTg4NjA0QjIwRjJF
NjU0QTAwMEI2NDQzIC8qIERPTVRpbWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERPTVRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE4QzVGQ0EwMTBB
Mzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRHbG9iYWxTY3JpcHQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0R2xvYmFsU2NyaXB0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMThDNUZDQTExMEEzOTkxRjAwNDg0MzhEIC8qIFdlYktpdEdsb2Jh
bFNjcmlwdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRHbG9iYWxT
Y3JpcHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMThDNUZDQTIxMEEzOTkxRjAw
NDg0MzhEIC8qIFdlYktpdEdsb2JhbFNjcmlwdC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
V2ViS2l0R2xvYmFsU2NyaXB0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMThD
NUZDQTMxMEEzOTkxRjAwNDg0MzhEIC8qIFdlYktpdEdsb2JhbFNjcmlwdFJlcG9zaXRvcnkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0R2xvYmFsU2NyaXB0
UmVwb3NpdG9yeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE4QzVGQ0E0MTBB
Mzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRHbG9iYWxTY3JpcHRSZXBvc2l0b3J5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdEdsb2JhbFNjcmlwdFJlcG9zaXRvcnkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMThDNUZDQjQxMEEzQzZGMjAwNDg0MzhEIC8q
IEdsb2JhbFNjcmlwdENvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gR2xvYmFsU2NyaXB0Q29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTE4QzVGQ0I1MTBBM0M2RjIwMDQ4NDM4RCAvKiBHbG9iYWxTY3JpcHRDb250ZXh0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdsb2JhbFNjcmlwdENvbnRleHQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMThDNUZDQjYxMEEzQzZGMjAwNDg0MzhEIC8qIEds
b2JhbFNjcmlwdENvbnRleHQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEdsb2JhbFNjcmlw
dENvbnRleHQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxOEM1RkQzQTEwQTUw
N0JDMDA0ODQzOEQgLyogSlNHbG9iYWxTY3JpcHRDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTR2xvYmFsU2NyaXB0Q29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxOEM1RkQzQjEwQTUwN0JDMDA0ODQzOEQgLyogSlNHbG9iYWxTY3JpcHRD
b250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTR2xvYmFs
U2NyaXB0Q29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE4REE4Q0JE
MTBBN0IyNTgwMDU1NTRGNiAvKiBHbG9iYWxTY3JpcHRDb250cm9sbGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdsb2JhbFNjcmlwdENvbnRyb2xsZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxOERBOENCRTEwQTdCMjU4MDA1NTU0RjYgLyog
R2xvYmFsU2NyaXB0Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHbG9iYWxTY3JpcHRDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTE4REE4Q0NBMTBBN0JDNkEwMDU1NTRGNiAvKiBKU0dsb2JhbFNjcmlwdENvbnRleHRCYXNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTR2xvYmFsU2NyaXB0Q29u
dGV4dEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxOERBOENDQjEwQTdC
QzZBMDA1NTU0RjYgLyogSlNHbG9iYWxTY3JpcHRDb250ZXh0QmFzZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0dsb2JhbFNjcmlwdENvbnRleHRCYXNlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTE4REE4Q0Q5MTBBN0M2REIwMDU1NTRGNiAvKiBKU0dsb2Jh
bFNjcmlwdENvbnRleHRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNHbG9iYWxTY3JpcHRDb250ZXh0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMThGODMxQjcwRkQ0OEM3ODAwRDhDNTZCIC8qIFdvcmtlckxvYWRlclByb3h5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdvcmtlckxvYWRlclByb3h5Lmg7
IHBhdGggPSB3b3JrZXJzL1dvcmtlckxvYWRlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFBMEQ1NzM0MEE1Qzc3RkUwMDdFREQ0QyAvKiBPdmVyZmxvd0V2ZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPdmVyZmxvd0V2ZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEwRDU3MzUwQTVDNzdGRTAwN0VERDRDIC8q
IE92ZXJmbG93RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE92ZXJm
bG93RXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMDI3LDYgKzEwMDY3
LDcgQEAKIAkJCQlGNTIzRDE4NDAyREU0MkU4MDE4NjM1Q0EgLyogY3NzICovLAogCQkJCUY1MjNE
MzI0MDJERTQ0NzgwMTg2MzVDQSAvKiBkb20gKi8sCiAJCQkJOTMzMDlEODYwOTlFNjQ5MTAwNTZF
NTgxIC8qIGVkaXRpbmcgKi8sCisJCQkJMThDNUZDOUYxMEEzOTkxRjAwNDg0MzhEIC8qIGdsb2Jh
bHNjcmlwdCAqLywKIAkJCQk1MTc0MUQwODBCMDcyNTcwMDBFRDQ0MkMgLyogaGlzdG9yeSAqLywK
IAkJCQk5M0VFQzFFQzA5QzI4Nzc3MDBDNTE1RDEgLyogaHRtbCAqLywKIAkJCQkxQzgxQjk0RDBF
OTczMkQ5MDAyNjZFMDcgLyogaW5zcGVjdG9yICovLApAQCAtMTAxMzgsNiArMTAxNzksMjMgQEAK
IAkJCXBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlOwogCQkJc291cmNlVHJlZSA9IEJVSUxU
X1BST0RVQ1RTX0RJUjsKIAkJfTsKKwkJMThDNUZDOUYxMEEzOTkxRjAwNDg0MzhEIC8qIGdsb2Jh
bHNjcmlwdCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJ
MThEQThDQkQxMEE3QjI1ODAwNTU1NEY2IC8qIEdsb2JhbFNjcmlwdENvbnRyb2xsZXIuY3BwICov
LAorCQkJCTE4REE4Q0JFMTBBN0IyNTgwMDU1NTRGNiAvKiBHbG9iYWxTY3JpcHRDb250cm9sbGVy
LmggKi8sCisJCQkJMThDNUZDQjQxMEEzQzZGMjAwNDg0MzhEIC8qIEdsb2JhbFNjcmlwdENvbnRl
eHQuY3BwICovLAorCQkJCTE4QzVGQ0I1MTBBM0M2RjIwMDQ4NDM4RCAvKiBHbG9iYWxTY3JpcHRD
b250ZXh0LmggKi8sCisJCQkJMThDNUZDQjYxMEEzQzZGMjAwNDg0MzhEIC8qIEdsb2JhbFNjcmlw
dENvbnRleHQuaWRsICovLAorCQkJCTE4QzVGQ0EwMTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRH
bG9iYWxTY3JpcHQuY3BwICovLAorCQkJCTE4QzVGQ0ExMTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJL
aXRHbG9iYWxTY3JpcHQuaCAqLywKKwkJCQkxOEM1RkNBMjEwQTM5OTFGMDA0ODQzOEQgLyogV2Vi
S2l0R2xvYmFsU2NyaXB0LmlkbCAqLywKKwkJCQkxOEM1RkNBMzEwQTM5OTFGMDA0ODQzOEQgLyog
V2ViS2l0R2xvYmFsU2NyaXB0UmVwb3NpdG9yeS5jcHAgKi8sCisJCQkJMThDNUZDQTQxMEEzOTkx
RjAwNDg0MzhEIC8qIFdlYktpdEdsb2JhbFNjcmlwdFJlcG9zaXRvcnkuaCAqLywKKwkJCSk7CisJ
CQlwYXRoID0gZ2xvYmFsc2NyaXB0OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsK
IAkJMUEyRTZFNTYwQ0M1NTFFMDAwNEEyMDYyIC8qIHNxbCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0xNDI4OSw2ICsxNDM0Nyw4IEBACiAJCQkJQkM2MDkw
MUQwRTkxQjhFQzAwMEM2OEI1IC8qIEpTRXZlbnRUYXJnZXQuaCAqLywKIAkJCQkzMzE0QUNFOTEw
ODkyMDg2MDAwRjBFNTYgLyogSlNFeGNlcHRpb25CYXNlLmNwcCAqLywKIAkJCQkzMzE0QUNFQTEw
ODkyMDg2MDAwRjBFNTYgLyogSlNFeGNlcHRpb25CYXNlLmggKi8sCisJCQkJMThEQThDQ0ExMEE3
QkM2QTAwNTU1NEY2IC8qIEpTR2xvYmFsU2NyaXB0Q29udGV4dEJhc2UuY3BwICovLAorCQkJCTE4
REE4Q0NCMTBBN0JDNkEwMDU1NTRGNiAvKiBKU0dsb2JhbFNjcmlwdENvbnRleHRCYXNlLmggKi8s
CiAJCQkJQzA5MTU4ODQwREI0MjA5MjAwRTU1QUY0IC8qIEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBl
ci5jcHAgKi8sCiAJCQkJQzA5MTU4ODUwREI0MjA5MjAwRTU1QUY0IC8qIEpTSW5zcGVjdGVkT2Jq
ZWN0V3JhcHBlci5oICovLAogCQkJCUMwOTE1ODg2MERCNDIwOTIwMEU1NUFGNCAvKiBKU0luc3Bl
Y3RvckNhbGxiYWNrV3JhcHBlci5jcHAgKi8sCkBAIC0xNDQ0Niw2ICsxNDUwNiw3IEBACiAJCQkJ
QkNFRkFGNEQwQzMxN0U2OTAwRkE4MUY2IC8qIEpTRXZlbnRDdXN0b20uY3BwICovLAogCQkJCUUw
RkVGMzcxQjU3QzUzRUFDMUMxRkJFRSAvKiBKU0V2ZW50U291cmNlQ3VzdG9tLmNwcCAqLywKIAkJ
CQlGRTgwRDdBNjBFOUMxRUQyMDAwRDZGNzUgLyogSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAgKi8s
CisJCQkJMThEQThDRDkxMEE3QzZEQjAwNTU1NEY2IC8qIEpTR2xvYmFsU2NyaXB0Q29udGV4dEN1
c3RvbS5jcHAgKi8sCiAJCQkJQkNFN0IxOTIwRDRFODY5NjAwNzVBNTM5IC8qIEpTSGlzdG9yeUN1
c3RvbS5jcHAgKi8sCiAJCQkJQkM0RURFRjMwQzA4RjNGQjAwN0VERDQ5IC8qIEpTSFRNTEFwcGxl
dEVsZW1lbnRDdXN0b20uY3BwICovLAogCQkJCTkzOTIyNjJDMTAzMjEwN0IwMDZFN0Q1RCAvKiBK
U0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcCAqLywKQEAgLTE0NDk0LDYgKzE0NTU1LDcgQEAK
IAkJCQlCMkQzRkM4OTBDMjIxMkNCMDBDRjM2MTggLyogSlNTVkdUcmFuc2Zvcm1MaXN0Q3VzdG9t
LmNwcCAqLywKIAkJCQkxQTJDNDBBQTBERUI1NUFBMDA1QUYxOUUgLyogSlNUZXh0Q3VzdG9tLmNw
cCAqLywKIAkJCQk1MTZCQjc5MjBDRTkxRTY4MDA1MTJGNzkgLyogSlNUcmVlV2Fsa2VyQ3VzdG9t
LmNwcCAqLywKKwkJCQkxODU2ODk0MzEwN0VCMUE0MDAxRTI5N0IgLyogSlNXZWJLaXRHbG9iYWxT
Y3JpcHRDdXN0b20uY3BwICovLAogCQkJCTUxOEEzNEM2MTAyNkM4QzkwMDFCNjg5NiAvKiBKU1dl
YlNvY2tldEN1c3RvbS5jcHAgKi8sCiAJCQkJRTE4MjU4QUIwRUYzQ0Q3MDAwOTMzMjQyIC8qIEpT
V29ya2VyQ29udGV4dEN1c3RvbS5jcHAgKi8sCiAJCQkJRTFDQTVDQkIwRThDRENBRjAwRThFRjkw
IC8qIEpTV29ya2VyQ3VzdG9tLmNwcCAqLywKQEAgLTE0NTkxLDggKzE0NjUzLDEyIEBACiAJCQkJ
QTlEMjQ3RjYwRDc1N0UzMzAwRkRGOTU5IC8qIEpTTmF2aWdhdG9yLmggKi8sCiAJCQkJQkNFQzAx
QzAwQzI3NERERDAwOUY0RUM5IC8qIEpTU2NyZWVuLmNwcCAqLywKIAkJCQlCQ0VDMDFDMTBDMjc0
REREMDA5RjRFQzkgLyogSlNTY3JlZW4uaCAqLywKKwkJCQkxODU2ODlBNzEwODNCNzVFMDAxRTI5
N0IgLyogSlNXZWJLaXRHbG9iYWxTY3JpcHQuaCAqLywKKwkJCQkxODU2ODlBODEwODNCNzVFMDAx
RTI5N0IgLyogSlNXZWJLaXRHbG9iYWxTY3JpcHQuY3BwICovLAogCQkJCTQ5NEJENzlCMEY1NUM5
NEMwMDc0NzgyOCAvKiBKU1dlYktpdFBvaW50LmNwcCAqLywKIAkJCQk0OTRCRDc5QzBGNTVDOTRD
MDA3NDc4MjggLyogSlNXZWJLaXRQb2ludC5oICovLAorCQkJCTE4QzVGRDNBMTBBNTA3QkMwMDQ4
NDM4RCAvKiBKU0dsb2JhbFNjcmlwdENvbnRleHQuaCAqLywKKwkJCQkxOEM1RkQzQjEwQTUwN0JD
MDA0ODQzOEQgLyogSlNHbG9iYWxTY3JpcHRDb250ZXh0LmNwcCAqLywKIAkJCSk7CiAJCQluYW1l
ID0gV2luZG93OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE0NzkyLDYgKzE0ODU4
LDggQEAKIAkJCQk0MTVCN0M2MjBGRjVBNzY3MDA2NzcwRjcgLyogSlNTaGFyZWRXb3JrZXJDb25z
dHJ1Y3Rvci5oICovLAogCQkJCTQ5ODM5MTYxMEYxRThFRTEwMEMyMzc4MiAvKiBKU1dlYktpdENT
U01hdHJpeENvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQk0OTgzOTE2MjBGMUU4RUUxMDBDMjM3ODIg
LyogSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5oICovLAorCQkJCTE4NTY4OTVFMTA3RUM1
QUYwMDFFMjk3QiAvKiBKU1dlYktpdEdsb2JhbFNjcmlwdENvbnN0cnVjdG9yLmNwcCAqLywKKwkJ
CQkxODU2ODk1RjEwN0VDNUFGMDAxRTI5N0IgLyogSlNXZWJLaXRHbG9iYWxTY3JpcHRDb25zdHJ1
Y3Rvci5oICovLAogCQkJCTQ5NEJENzk3MEY1NUM5MEUwMDc0NzgyOCAvKiBKU1dlYktpdFBvaW50
Q29uc3RydWN0b3IuY3BwICovLAogCQkJCTQ5NEJENzk4MEY1NUM5MEUwMDc0NzgyOCAvKiBKU1dl
YktpdFBvaW50Q29uc3RydWN0b3IuaCAqLywKIAkJCQk1MThBMzRDNDEwMjZDOEM5MDAxQjY4OTYg
LyogSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5jcHAgKi8sCkBAIC0xODA5MSw2ICsxODE1OSw4IEBA
CiAJCQkJMzMxNEFDRUMxMDg5MjA4NjAwMEYwRTU2IC8qIEpTRXhjZXB0aW9uQmFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTczRTMyNTcxMDg4M0I3QzAwNUJDNDkzIC8qIFJlc291cmNlTG9hZE5v
dGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDgwMTk1NTEwOEJBRkIzMDBDQjJCMUYgLyog
RkVHYXVzc2lhbkJsdXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTE4NTY4OTYxMTA3RUM1QUYwMDFF
Mjk3QiAvKiBKU1dlYktpdEdsb2JhbFNjcmlwdENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywK
KwkJCQkxODU2ODlBOTEwODNCNzVFMDAxRTI5N0IgLyogSlNXZWJLaXRHbG9iYWxTY3JpcHQuaCBp
biBIZWFkZXJzICovLAogCQkJCTc1NTNDRkU4MTA4RjQ3M0YwMEVBMjgxRSAvKiBUaW1lbGluZVJl
Y29yZEZhY3RvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOTdFMjNBMTA5MTQ0OTUwMDEwRDM2
MSAvKiBIVE1MQWxsQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5N0U0MTMxMDkx
NTRGQTAwMTBEMzYxIC8qIEpTSFRNTEFsbENvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLApAQCAt
MTgwOTksNiArMTgxNjksMTIgQEAKIAkJCQkxNDc5RkFGMDEwOUFFMzc1MDBERUQ2NTUgLyogUmVu
ZGVyUnVieUJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NzlGQUYyMTA5QUUzNzUwMERFRDY1
NSAvKiBSZW5kZXJSdWJ5UnVuLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDc5RkFGNDEwOUFFMzc1
MDBERUQ2NTUgLyogUmVuZGVyUnVieVRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTE4QzVGQ0E2
MTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRHbG9iYWxTY3JpcHQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTE4QzVGQ0E5MTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRHbG9iYWxTY3JpcHRSZXBvc2l0
b3J5LmggaW4gSGVhZGVycyAqLywKKwkJCQkxOEM1RkNCODEwQTNDNkYyMDA0ODQzOEQgLyogR2xv
YmFsU2NyaXB0Q29udGV4dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMThDNUZEM0MxMEE1MDdCQzAw
NDg0MzhEIC8qIEpTR2xvYmFsU2NyaXB0Q29udGV4dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMThE
QThDQzAxMEE3QjI1ODAwNTU1NEY2IC8qIEdsb2JhbFNjcmlwdENvbnRyb2xsZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTE4REE4Q0NEMTBBN0JDNkEwMDU1NTRGNiAvKiBKU0dsb2JhbFNjcmlwdENv
bnRleHRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE4MjAwLDYgKzE4Mjc2LDggQEAKIAkJCQk4
NTEzNkNBODBBRUQ2NjU5MDBGOTBBM0QgLyogd2VzdFJlc2l6ZUN1cnNvci5wbmcgaW4gUmVzb3Vy
Y2VzICovLAogCQkJCTFBQjFBRTdBMEMwNTFGREUwMDEzOUY0RiAvKiB6b29tSW5DdXJzb3IucG5n
IGluIFJlc291cmNlcyAqLywKIAkJCQkxQUIxQUU3QjBDMDUxRkRFMDAxMzlGNEYgLyogem9vbU91
dEN1cnNvci5wbmcgaW4gUmVzb3VyY2VzICovLAorCQkJCTE4QzVGQ0E3MTBBMzk5MUYwMDQ4NDM4
RCAvKiBXZWJLaXRHbG9iYWxTY3JpcHQuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQkxOEM1RkNC
OTEwQTNDNkYyMDA0ODQzOEQgLyogR2xvYmFsU2NyaXB0Q29udGV4dC5pZGwgaW4gUmVzb3VyY2Vz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtMjAyMzEsNiArMjAzMDksOSBAQAogCQkJCTMzMTRBQ0VCMTA4OTIwODYwMDBGMEU1
NiAvKiBKU0V4Y2VwdGlvbkJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTczRTMyNTYxMDg4
M0I3QzAwNUJDNDkzIC8qIFJlc291cmNlTG9hZE5vdGlmaWVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTg0ODAxOTU0MTA4QkFGQjMwMENCMkIxRiAvKiBGRUdhdXNzaWFuQmx1ci5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkxODU2ODk0NDEwN0VCMUE0MDAxRTI5N0IgLyogSlNXZWJLaXRHbG9iYWxT
Y3JpcHRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTg1Njg5NjAxMDdFQzVBRjAwMUUy
OTdCIC8qIEpTV2ViS2l0R2xvYmFsU2NyaXB0Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMTg1Njg5QUExMDgzQjc1RTAwMUUyOTdCIC8qIEpTV2ViS2l0R2xvYmFsU2NyaXB0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTc1NTNDRkU5MTA4RjQ3M0YwMEVBMjgxRSAvKiBUaW1lbGlu
ZVJlY29yZEZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5N0UyM0IxMDkxNDQ5NTAw
MTBEMzYxIC8qIEhUTUxBbGxDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDOTdF
NDEyMTA5MTU0RkEwMDEwRDM2MSAvKiBKU0hUTUxBbGxDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMjAyMzksNiArMjAzMjAsMTMgQEAKIAkJCQkxNDc5RkFFRjEwOUFFMzc1MDBERUQ2
NTUgLyogUmVuZGVyUnVieUJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3OUZBRjExMDlB
RTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnlSdW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
OUZBRjMxMDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnlUZXh0LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTE4QzVGQ0E1MTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRHbG9iYWxTY3JpcHQuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMThDNUZDQTgxMEEzOTkxRjAwNDg0MzhEIC8qIFdlYktpdEds
b2JhbFNjcmlwdFJlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMThDNUZDQjcxMEEz
QzZGMjAwNDg0MzhEIC8qIEdsb2JhbFNjcmlwdENvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMThDNUZEM0QxMEE1MDdCQzAwNDg0MzhEIC8qIEpTR2xvYmFsU2NyaXB0Q29udGV4dC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkxOERBOENCRjEwQTdCMjU4MDA1NTU0RjYgLyogR2xvYmFsU2Ny
aXB0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxOERBOENDQzEwQTdCQzZBMDA1
NTU0RjYgLyogSlNHbG9iYWxTY3JpcHRDb250ZXh0QmFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkxOERBOENEQTEwQTdDNkRCMDA1NTU0RjYgLyogSlNHbG9iYWxTY3JpcHRDb250ZXh0Q3VzdG9t
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUdsb2JhbE9iamVjdC5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0
LmNwcAppbmRleCAwMTFhNGU0Li5iNmE2YWI0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
R2xvYmFsT2JqZWN0LmNwcApAQCAtMzYsNiArMzYsMTIgQEAKICNpbmNsdWRlICJXb3JrZXJDb250
ZXh0LmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShHTE9CQUxfU0NSSVBUKQorI2luY2x1ZGUgIkpT
R2xvYmFsU2NyaXB0Q29udGV4dC5oIgorI2luY2x1ZGUgIkdsb2JhbFNjcmlwdENvbnRleHQuaCIK
KyNpbmNsdWRlICJHbG9iYWxTY3JpcHRDb250cm9sbGVyLmgiCisjZW5kaWYKKwogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtOTYsNiArMTAyLDExIEBAIEpT
RE9NR2xvYmFsT2JqZWN0KiB0b0pTRE9NR2xvYmFsT2JqZWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXb3JrZXJD
b250ZXh0Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCktPnNjcmlwdCgpLT53b3JrZXJDb250ZXh0
V3JhcHBlcigpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoR0xPQkFMX1NDUklQVCkKKyAgICBpZiAo
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNHbG9iYWxTY3JpcHRDb250ZXh0KCkpCisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxHbG9iYWxTY3JpcHRDb250ZXh0Kj4oc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCktPnNjcmlwdCgpLT5nbG9iYWxTY3JpcHRDb250ZXh0V3JhcHBlcigpOworI2VuZGlm
CisKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTExNSw2
ICsxMjYsMTEgQEAgSlNET01HbG9iYWxPYmplY3QqIHRvSlNET01HbG9iYWxPYmplY3QoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ28KICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdvcmtlckNvbnRleHQqPihzY3JpcHRFeGVjdXRpb25Db250ZXh0KS0+c2NyaXB0KCkt
PndvcmtlckNvbnRleHRXcmFwcGVyKCk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShHTE9CQUxfU0NS
SVBUKQorICAgIGlmIChzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0dsb2JhbFNjcmlwdENvbnRl
eHQoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdsb2JhbFNjcmlwdENvbnRleHQqPihz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KS0+c2NyaXB0KCktPmdsb2JhbFNjcmlwdENvbnRleHRXcmFw
cGVyKCk7CisjZW5kaWYKKwogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAw
OwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5j
cHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAppbmRleCAyODA0
YjNjLi41ZmQ3MDZlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93
Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNw
cApAQCAtMzksNiArMzksMTEgQEAKICNpbmNsdWRlICJKU0V2ZW50LmgiCiAjaW5jbHVkZSAiSlNF
dmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmgiCisK
KyNpZiBFTkFCTEUoR0xPQkFMX1NDUklQVCkKKyNpbmNsdWRlICJKU1dlYktpdEdsb2JhbFNjcmlw
dENvbnN0cnVjdG9yLmgiCisjZW5kaWYKKwogI2luY2x1ZGUgIkpTSFRNTENvbGxlY3Rpb24uaCIK
ICNpbmNsdWRlICJKU0hpc3RvcnkuaCIKICNpbmNsdWRlICJKU0ltYWdlQ29uc3RydWN0b3IuaCIK
QEAgLTY4Niw2ICs2OTEsMTMgQEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6Y2FudmFzRmxvYXRBcnJh
eShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB9CiAjZW5kaWYKICAKKyNpZiBFTkFCTEUoR0xPQkFM
X1NDUklQVCkKK0pTVmFsdWUgSlNET01XaW5kb3c6OndlYktpdEdsb2JhbFNjcmlwdChFeGVjU3Rh
dGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTV2ViS2l0
R2xvYmFsU2NyaXB0Q29uc3RydWN0b3I+KGV4ZWMsIHRoaXMpOworfQorI2VuZGlmCisKIEpTVmFs
dWUgSlNET01XaW5kb3c6OnhtbEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsK
ICAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9y
PihleGVjLCB0aGlzKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRh
cmdldC5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXQuY3BwCmluZGV4IDZl
YTExMzUuLjU5M2NlZmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRh
cmdldC5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmNwcApAQCAt
NzgsNiArNzgsMTIgQEAKICNpbmNsdWRlICJOb3RpZmljYXRpb24uaCIKICNlbmRpZgogCisjaWYg
RU5BQkxFKEdMT0JBTF9TQ1JJUFQpCisjaW5jbHVkZSAiR2xvYmFsU2NyaXB0Q29udGV4dC5oIgor
I2luY2x1ZGUgIkpTV2ViS2l0R2xvYmFsU2NyaXB0LmgiCisjaW5jbHVkZSAiSlNHbG9iYWxTY3Jp
cHRDb250ZXh0QmFzZS5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCiAjaW5j
bHVkZSAiSlNXZWJTb2NrZXQuaCIKICNpbmNsdWRlICJXZWJTb2NrZXQuaCIKQEAgLTE0OSw2ICsx
NTUsMTQgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgRXZlbnRUYXJnZXQqIHRhcmcKICAgICAgICAgcmV0dXJuIHRvSlMoZXhl
Yywgd2ViU29ja2V0KTsKICNlbmRpZgogCisjaWYgRU5BQkxFKEdMT0JBTF9TQ1JJUFQpCisgICAg
aWYgKFdlYktpdEdsb2JhbFNjcmlwdCogZ2xvYmFsU2NyaXB0ID0gdGFyZ2V0LT50b1dlYktpdEds
b2JhbFNjcmlwdCgpKQorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGds
b2JhbFNjcmlwdCk7CisKKyAgICBpZiAoR2xvYmFsU2NyaXB0Q29udGV4dCogZ2xvYmFsU2NyaXB0
Q29udGV4dCA9IHRhcmdldC0+dG9HbG9iYWxTY3JpcHRDb250ZXh0KCkpCisgICAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbFNjcmlwdENvbnRleHQpOworI2VuZGlmCisKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4ganNOdWxsKCk7CiB9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTR2xvYmFsU2NyaXB0Q29udGV4dEJhc2UuY3BwIGIvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0dsb2JhbFNjcmlwdENvbnRleHRCYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5hODlkMTU0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0dsb2JhbFNjcmlwdENvbnRleHRCYXNlLmNwcApAQCAtMCwwICsxLDkyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEdMT0JBTF9TQ1JJUFQpCisKKyNpbmNs
dWRlICJKU0dsb2JhbFNjcmlwdENvbnRleHRCYXNlLmgiCisKKyNpbmNsdWRlICJKU0dsb2JhbFNj
cmlwdENvbnRleHQuaCIKKyNpbmNsdWRlICJHbG9iYWxTY3JpcHRDb250ZXh0LmgiCisjaW5jbHVk
ZSAiR2xvYmFsU2NyaXB0Q29udHJvbGxlci5oIgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0FTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNHbG9iYWxT
Y3JpcHRDb250ZXh0QmFzZSk7CisKK2NvbnN0IENsYXNzSW5mbyBKU0dsb2JhbFNjcmlwdENvbnRl
eHRCYXNlOjpzX2luZm8gPSB7ICJHbG9iYWxTY3JpcHRDb250ZXh0IiwgMCwgMCwgMCB9OworCitK
U0dsb2JhbFNjcmlwdENvbnRleHRCYXNlOjpKU0dsb2JhbFNjcmlwdENvbnRleHRCYXNlKE5vbk51
bGxQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8R2xvYmFs
U2NyaXB0Q29udGV4dD4gaW1wbCkKKyAgICA6IEpTRE9NR2xvYmFsT2JqZWN0KHN0cnVjdHVyZSwg
bmV3IEpTRE9NR2xvYmFsT2JqZWN0RGF0YSwgdGhpcykKKyAgICAsIG1faW1wbChpbXBsKQorewor
fQorCitKU0dsb2JhbFNjcmlwdENvbnRleHRCYXNlOjp+SlNHbG9iYWxTY3JpcHRDb250ZXh0QmFz
ZSgpCit7Cit9CisKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEpTR2xvYmFsU2NyaXB0Q29udGV4
dEJhc2U6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX2lt
cGwuZ2V0KCk7Cit9CisKK0pTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFs
T2JqZWN0KiwgR2xvYmFsU2NyaXB0Q29udGV4dCogZ2xvYmFsU2NyaXB0Q29udGV4dCkKK3sKKyAg
ICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxTY3JpcHRDb250ZXh0KTsKK30KKworSlNWYWx1ZSB0
b0pTKEV4ZWNTdGF0ZSosIEdsb2JhbFNjcmlwdENvbnRleHQqIGdsb2JhbFNjcmlwdENvbnRleHQp
Cit7CisgICAgaWYgKCFnbG9iYWxTY3JpcHRDb250ZXh0KQorICAgICAgICByZXR1cm4ganNOdWxs
KCk7CisgICAgR2xvYmFsU2NyaXB0Q29udHJvbGxlciogc2NyaXB0ID0gZ2xvYmFsU2NyaXB0Q29u
dGV4dC0+c2NyaXB0KCk7CisgICAgaWYgKCFzY3JpcHQpCisgICAgICAgIHJldHVybiBqc051bGwo
KTsKKyAgICByZXR1cm4gc2NyaXB0LT5nbG9iYWxTY3JpcHRDb250ZXh0V3JhcHBlcigpOworfQor
CitKU0dsb2JhbFNjcmlwdENvbnRleHQqIHRvSlNHbG9iYWxTY3JpcHRDb250ZXh0KEpTVmFsdWUg
dmFsdWUpCit7CisgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gMDsK
KyAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IGFzT2JqZWN0KHZhbHVlKS0+Y2xhc3NJ
bmZvKCk7CisgICAgaWYgKGNsYXNzSW5mbyA9PSAmSlNHbG9iYWxTY3JpcHRDb250ZXh0OjpzX2lu
Zm8pCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0dsb2JhbFNjcmlwdENvbnRleHQqPihh
c09iamVjdCh2YWx1ZSkpOworICAgIHJldHVybiAwOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHTE9CQUxfU0NSSVBUKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0dsb2JhbFNjcmlwdENvbnRleHRCYXNlLmggYi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTR2xvYmFsU2NyaXB0Q29udGV4dEJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5kN2QwOWRiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0dsb2JhbFNjcmlwdENvbnRleHRCYXNlLmgKQEAgLTAsMCArMSw3MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgSlNHbG9iYWxTY3JpcHRDb250ZXh0QmFzZV9oCisjZGVmaW5lIEpTR2xvYmFsU2NyaXB0Q29u
dGV4dEJhc2VfaAorCisjaWYgRU5BQkxFKEdMT0JBTF9TQ1JJUFQpCisKKyNpbmNsdWRlICJKU0RP
TUdsb2JhbE9iamVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBKU0ds
b2JhbFNjcmlwdENvbnRleHQ7CisgICAgY2xhc3MgR2xvYmFsU2NyaXB0Q29udGV4dDsKKworICAg
IGNsYXNzIEpTR2xvYmFsU2NyaXB0Q29udGV4dEJhc2UgOiBwdWJsaWMgSlNET01HbG9iYWxPYmpl
Y3QgeworICAgICAgICB0eXBlZGVmIEpTRE9NR2xvYmFsT2JqZWN0IEJhc2U7CisgICAgcHVibGlj
OgorICAgICAgICBKU0dsb2JhbFNjcmlwdENvbnRleHRCYXNlKE5vbk51bGxQYXNzUmVmUHRyPEpT
Qzo6U3RydWN0dXJlPiwgUGFzc1JlZlB0cjxHbG9iYWxTY3JpcHRDb250ZXh0Pik7CisgICAgICAg
IHZpcnR1YWwgfkpTR2xvYmFsU2NyaXB0Q29udGV4dEJhc2UoKTsKKworICAgICAgICB2aXJ0dWFs
IGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZv
OyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisKKyAgICAg
ICAgR2xvYmFsU2NyaXB0Q29udGV4dCogaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQo
KTsgfQorICAgICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxHbG9i
YWxTY3JpcHRDb250ZXh0PiBtX2ltcGw7CisgICAgfTsKKworICAgIC8vIFJldHVybnMgYSBKU0ds
b2JhbFNjcmlwdENvbnRleHQgb3IganNOdWxsKCkKKyAgICAvLyBBbHdheXMgaWdub3JlcyB0aGUg
ZXhlY1N0YXRlIGFuZCBwYXNzZWQgZ2xvYmFsT2JqZWN0LCBHbG9iYWxTY3JpcHRDb250ZXh0IGlz
IGl0c2VsZiBhIGdsb2JhbE9iamVjdCBhbmQgd2lsbCBhbHdheXMgdXNlIGl0cyBvd24gcHJvdG90
eXBlIGNoYWluLgorICAgIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqLCBHbG9iYWxTY3JpcHRDb250ZXh0Kik7CisgICAgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqLCBHbG9iYWxTY3JpcHRDb250ZXh0Kik7CisKKyAgICBKU0dsb2Jh
bFNjcmlwdENvbnRleHQqIHRvSlNHbG9iYWxTY3JpcHRDb250ZXh0KEpTQzo6SlNWYWx1ZSk7CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHTE9CQUxfU0NSSVBU
KQorCisjZW5kaWYgLy8gSlNHbG9iYWxTY3JpcHRDb250ZXh0QmFzZV9oCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2xvYmFsU2NyaXB0Q29udGV4dEN1c3RvbS5jcHAgYi9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTR2xvYmFsU2NyaXB0Q29udGV4dEN1c3RvbS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVlYTJiMAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNHbG9iYWxTY3JpcHRDb250ZXh0Q3VzdG9tLmNwcApAQCAtMCww
ICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEdMT0JBTF9TQ1JJUFQp
CisKKyNpbmNsdWRlICJKU0dsb2JhbFNjcmlwdENvbnRleHQuaCIKKworI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNF
dmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiR2xvYmFsU2NyaXB0Q29udGV4dC5oIgorCit1c2lu
ZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgSlNHbG9iYWxT
Y3JpcHRDb250ZXh0OjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBtYXJrU3RhY2spCit7CisgICAg
QmFzZTo6bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7CisKKyAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSAqdGhpcy0+Z2xvYmFsRGF0YSgpOworCisgICAgbWFya0FjdGl2ZU9iamVjdHNGb3JD
b250ZXh0KG1hcmtTdGFjaywgZ2xvYmFsRGF0YSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsK
KworICAgIGltcGwoKS0+bWFya0V2ZW50TGlzdGVuZXJzKG1hcmtTdGFjayk7Cit9CisKK0pTVmFs
dWUgSlNHbG9iYWxTY3JpcHRDb250ZXh0OjphZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBKU1ZhbHVlIGxpc3RlbmVyID0gYXJncy5h
dCgxKTsKKyAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworCisgICAgaW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9T
dHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwg
ZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsK
KyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNWYWx1ZSBKU0dsb2JhbFNjcmlwdENv
bnRleHQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQoreworICAgIEpTVmFsdWUgbGlzdGVuZXIgPSBhcmdzLmF0KDEpOworICAgIGlmICgh
bGlzdGVuZXIuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAg
ICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwg
SlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCBmYWxzZSwgY3VycmVu
dFdvcmxkKGV4ZWMpKS5nZXQoKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoR0xPQkFMX1NDUklQVCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJLaXRHbG9iYWxTY3JpcHRDb25zdHJ1Y3Rvci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV2ViS2l0R2xvYmFsU2NyaXB0Q29uc3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmZjM2RhMTAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV2ViS2l0R2xvYmFsU2NyaXB0Q29uc3RydWN0b3IuY3BwCkBAIC0wLDAgKzEs
ODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoR0xPQkFMX1NDUklQVCkKKwor
I2luY2x1ZGUgIkpTV2ViS2l0R2xvYmFsU2NyaXB0Q29uc3RydWN0b3IuaCIKKworI2luY2x1ZGUg
IkpTRE9NV2luZG93Q3VzdG9tLmgiCisjaW5jbHVkZSAiSlNXZWJLaXRHbG9iYWxTY3JpcHQuaCIK
KyNpbmNsdWRlICJXZWJLaXRHbG9iYWxTY3JpcHQuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9y
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29u
c3QgQ2xhc3NJbmZvIEpTV2ViS2l0R2xvYmFsU2NyaXB0Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsg
IldlYktpdEdsb2JhbFNjcmlwdENvbnN0cnVjdG9yIiwgMCwgMCwgMCB9OworCitKU1dlYktpdEds
b2JhbFNjcmlwdENvbnN0cnVjdG9yOjpKU1dlYktpdEdsb2JhbFNjcmlwdENvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICA6IERP
TUNvbnN0cnVjdG9yT2JqZWN0KEpTV2ViS2l0R2xvYmFsU2NyaXB0Q29uc3RydWN0b3I6OmNyZWF0
ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSwgZ2xvYmFsT2JqZWN0
KQoreworICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1dl
YktpdEdsb2JhbFNjcmlwdFByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25l
KTsKKyAgICAvLyBIb3N0IGZ1bmN0aW9ucyBoYXZlIGEgbGVuZ3RoIHByb3BlcnR5IGRlc2NyaWJp
bmcgdGhlIG51bWJlciBvZiBleHBlY3RlZCBhcmd1bWVudHMuCisgICAgcHV0RGlyZWN0KGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDIpLCBSZWFkT25seXxEb250
RGVsZXRlfERvbnRFbnVtKTsKK30KKworc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RXZWJLaXRH
bG9iYWxTY3JpcHQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgSlNXZWJLaXRHbG9iYWxTY3JpcHRDb25zdHJ1Y3Rvciog
anNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTV2ViS2l0R2xvYmFsU2NyaXB0Q29uc3RydWN0
b3IqPihjb25zdHJ1Y3Rvcik7CisKKyAgICBpZiAoYXJncy5zaXplKCkgPCAyKQorICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgIk5vdCBlbm91Z2ggYXJndW1lbnRz
Iik7CisKKyAgICBVU3RyaW5nIHNjcmlwdFVSTCA9IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7
CisgICAgVVN0cmluZyBuYW1lID0gYXJncy5hdCgxKS50b1N0cmluZyhleGVjKTsKKyAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gRklYTUU6
IFdlIG5lZWQgdG8gdXNlIGJvdGggdGhlIGR5bmFtaWMgc2NvcGUgYW5kIHRoZSBsZXhpY2FsIHNj
b3BlIChkeW5hbWljIHNjb3BlIGZvciByZXNvbHZpbmcgdGhlIHNjcmlwdCBVUkwpCisgICAgRE9N
V2luZG93KiB3aW5kb3cgPSBhc0pTRE9NV2luZG93KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSktPmltcGwoKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8V2ViS2l0
R2xvYmFsU2NyaXB0PiBncyA9IFdlYktpdEdsb2JhbFNjcmlwdDo6Y3JlYXRlKHNjcmlwdFVSTCwg
bmFtZSwgd2luZG93LT5kb2N1bWVudCgpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IGVjKTsKKworICAgIHJldHVybiBhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmds
b2JhbE9iamVjdCgpLCBncy5yZWxlYXNlKCkpKTsKK30KKworQ29uc3RydWN0VHlwZSBKU1dlYktp
dEdsb2JhbFNjcmlwdENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEm
IGNvbnN0cnVjdERhdGEpCit7CisgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBj
b25zdHJ1Y3RXZWJLaXRHbG9iYWxTY3JpcHQ7CisgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0
OworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHTE9C
QUxfU0NSSVBUKQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0R2xv
YmFsU2NyaXB0Q29uc3RydWN0b3IuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRHbG9i
YWxTY3JpcHRDb25zdHJ1Y3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjU1Y2Q1MTEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0
R2xvYmFsU2NyaXB0Q29uc3RydWN0b3IuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKU1dlYktp
dEdsb2JhbFNjcmlwdENvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNXZWJLaXRHbG9iYWxTY3JpcHRD
b25zdHJ1Y3Rvcl9oCisKKyNpZiBFTkFCTEUoR0xPQkFMX1NDUklQVCkKKworI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBKU1dlYktp
dEdsb2JhbFNjcmlwdENvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsK
KyAgICBwdWJsaWM6CisgICAgICAgIEpTV2ViS2l0R2xvYmFsU2NyaXB0Q29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworCisgICAgICAgIHN0YXRpYyBjb25z
dCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFs
IEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29uc3RydWN0RGF0YSYp
OworCisgICAgICAgIHZpcnR1YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNv
bnN0IHsgcmV0dXJuICZzX2luZm87IH0KKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoR0xPQkFMX1NDUklQVCkKKworI2VuZGlmIC8vIEpTV2ViS2l0
R2xvYmFsU2NyaXB0Q29uc3RydWN0b3JfaAorCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV2ViS2l0R2xvYmFsU2NyaXB0Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXZWJLaXRHbG9iYWxTY3JpcHRDdXN0b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjJjNTQ0OGMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV2ViS2l0R2xvYmFsU2NyaXB0Q3VzdG9tLmNwcApAQCAtMCwwICsxLDY5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEdMT0JBTF9TQ1JJUFQpCisKKyNpbmNsdWRlICJKU1dl
YktpdEdsb2JhbFNjcmlwdC5oIgorCisjaW5jbHVkZSAiV2ViS2l0R2xvYmFsU2NyaXB0LmgiCisj
aW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIu
aCIKKyNpbmNsdWRlICJKU0V2ZW50VGFyZ2V0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworSlNWYWx1ZSBKU1dlYktpdEdsb2JhbFNjcmlwdDo6YWRk
RXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7Cisg
ICAgSlNWYWx1ZSBsaXN0ZW5lciA9IGFyZ3MuYXQoMSk7CisgICAgaWYgKCFsaXN0ZW5lci5pc09i
amVjdCgpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIGltcGwoKS0+YWRk
RXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6
OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLCBh
cmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9
CisKK0pTVmFsdWUgSlNXZWJLaXRHbG9iYWxTY3JpcHQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIEpTVmFsdWUgbGlzdGVu
ZXIgPSBhcmdzLmF0KDEpOworICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkKKyAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIo
YXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmpl
Y3QobGlzdGVuZXIpLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKS5nZXQoKSwgYXJncy5hdCgy
KS50b0Jvb2xlYW4oZXhlYykpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0xPQkFMX1NDUklQVCkKKwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCmluZGV4IDRmMTg3YzUuLmE2NDNjZDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTE0Myw2ICsxNDMs
MTAgQEAKICNpbmNsdWRlICJTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmgiCiAjZW5kaWYKIAorI2lm
IEVOQUJMRShHTE9CQUxfU0NSSVBUKQorI2luY2x1ZGUgIldlYktpdEdsb2JhbFNjcmlwdFJlcG9z
aXRvcnkuaCIKKyNlbmRpZgorCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogI2luY2x1ZGUgIlN0
b3JhZ2VFdmVudC5oIgogI2VuZGlmCkBAIC00NjgsNiArNDcyLDEwIEBAIERvY3VtZW50Ojp+RG9j
dW1lbnQoKQogICAgIEFTU0VSVChtX3Jhbmdlcy5pc0VtcHR5KCkpOwogICAgIEFTU0VSVCghbV9z
dHlsZVJlY2FsY1RpbWVyLmlzQWN0aXZlKCkpOwogCisjaWYgRU5BQkxFKEdMT0JBTF9TQ1JJUFQp
CisgICAgV2ViS2l0R2xvYmFsU2NyaXB0UmVwb3NpdG9yeTo6ZG9jdW1lbnREZXN0cm95ZWQodGhp
cyk7CisjZW5kaWYKKwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zY3JpcHRzVG9FeGVj
dXRlU29vbi5zaXplKCk7ICsraSkKICAgICAgICAgbV9zY3JpcHRzVG9FeGVjdXRlU29vbltpXS5m
aXJzdC0+ZWxlbWVudCgpLT5kZXJlZigpOyAvLyBCYWxhbmNlcyByZWYoKSBpbiBleGVjdXRlU2Ny
aXB0U29vbigpLgogCkBAIC00NTM3LDUxICs0NTQ1LDkgQEAgdm9pZCBEb2N1bWVudDo6c2NyaXB0
SW1wb3J0ZWQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0
cmkKICNlbmRpZgogfQogCi1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0VGFza1RpbWVyIDog
cHVibGljIFRpbWVyQmFzZSB7Ci1wdWJsaWM6Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dFRh
c2tUaW1lcihQYXNzUmVmUHRyPERvY3VtZW50PiBjb250ZXh0LCBQYXNzT3duUHRyPFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2spCi0gICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQp
Ci0gICAgICAgICwgbV90YXNrKHRhc2spCi0gICAgewotICAgIH0KLQotcHJpdmF0ZToKLSAgICB2
aXJ0dWFsIHZvaWQgZmlyZWQoKQotICAgIHsKLSAgICAgICAgbV90YXNrLT5wZXJmb3JtVGFzayht
X2NvbnRleHQuZ2V0KCkpOwotICAgICAgICBkZWxldGUgdGhpczsKLSAgICB9Ci0KLSAgICBSZWZQ
dHI8RG9jdW1lbnQ+IG1fY29udGV4dDsKLSAgICBPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6VGFzaz4gbV90YXNrOwotfTsKLQotc3RydWN0IFBlcmZvcm1UYXNrQ29udGV4dCA6IE5vbmNv
cHlhYmxlIHsKLSAgICBQZXJmb3JtVGFza0NvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpUYXNrPiB0YXNrKQotICAgICAgICA6IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCkKLSAgICAgICAgLCB0YXNrKHRhc2spCi0gICAgewotICAgIH0KLQotICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7IC8vIFRoZSBj
b250ZXh0IHNob3VsZCBleGlzdCB1bnRpbCB0YXNrIGV4ZWN1dGlvbi4KLSAgICBPd25QdHI8U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzazsKLX07Ci0KLXN0YXRpYyB2b2lkIHBlcmZv
cm1UYXNrKHZvaWQqIGN0eCkKLXsKLSAgICBQZXJmb3JtVGFza0NvbnRleHQqIHB0Y3R4ID0gcmVp
bnRlcnByZXRfY2FzdDxQZXJmb3JtVGFza0NvbnRleHQqPihjdHgpOwotICAgIHB0Y3R4LT50YXNr
LT5wZXJmb3JtVGFzayhwdGN0eC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAgZGVsZXRl
IHB0Y3R4OwotfQotCiB2b2lkIERvY3VtZW50Ojpwb3N0VGFzayhQYXNzT3duUHRyPFRhc2s+IHRh
c2spCiB7Ci0gICAgaWYgKGlzTWFpblRocmVhZCgpKSB7Ci0gICAgICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRUYXNrVGltZXIqIHRpbWVyID0gbmV3IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRUYXNr
VGltZXIoc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPih0aGlzKSwgdGFzayk7Ci0gICAgICAgIHRpbWVy
LT5zdGFydE9uZVNob3QoMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2FsbE9uTWFpblRocmVh
ZChwZXJmb3JtVGFzaywgbmV3IFBlcmZvcm1UYXNrQ29udGV4dCh0aGlzLCB0YXNrKSk7Ci0gICAg
fQorICAgIHBvc3RUYXNrVG9NYWluVGhyZWFkKHRoaXMsIHRhc2spOwogfQogCiBFbGVtZW50KiBE
b2N1bWVudDo6ZmluZEFuY2hvcihjb25zdCBTdHJpbmcmIG5hbWUpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2RvbS9FdmVudFRhcmdldC5jcHAgYi9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKaW5k
ZXggNjk0ZTc4YS4uZThkZjNjZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQu
Y3BwCisrKyBiL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcApAQCAtMTUzLDYgKzE1MywxNyBA
QCBOb3RpZmljYXRpb24qIEV2ZW50VGFyZ2V0Ojp0b05vdGlmaWNhdGlvbigpCiB9CiAjZW5kaWYK
IAorI2lmIEVOQUJMRShHTE9CQUxfU0NSSVBUKQorV2ViS2l0R2xvYmFsU2NyaXB0KiBFdmVudFRh
cmdldDo6dG9XZWJLaXRHbG9iYWxTY3JpcHQoKQoreworICAgIHJldHVybiAwOworfQorR2xvYmFs
U2NyaXB0Q29udGV4dCogRXZlbnRUYXJnZXQ6OnRvR2xvYmFsU2NyaXB0Q29udGV4dCgpCit7Cisg
ICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogYm9vbCBFdmVudFRhcmdldDo6YWRkRXZlbnRMaXN0
ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3Rl
bmVyPiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQogewogICAgIEV2ZW50VGFyZ2V0RGF0YSog
ZCA9IGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRXZl
bnRUYXJnZXQuaCBiL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKaW5kZXggMWU1MWYwNC4uMjcx
NWI2ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAorKysgYi9XZWJDb3Jl
L2RvbS9FdmVudFRhcmdldC5oCkBAIC00Nyw2ICs0Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBjbGFzcyBFdmVudDsKICAgICBjbGFzcyBFdmVudExpc3RlbmVyOwogICAgIGNsYXNzIEV2
ZW50U291cmNlOworICAgIGNsYXNzIEdsb2JhbFNjcmlwdENvbnRleHQ7CiAgICAgY2xhc3MgTWVz
c2FnZVBvcnQ7CiAgICAgY2xhc3MgTm9kZTsKICAgICBjbGFzcyBOb3RpZmljYXRpb247CkBAIC01
NCw2ICs1NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OwogICAgIGNsYXNzIFNoYXJlZFdvcmtlcjsKICAgICBjbGFzcyBTaGFyZWRXb3Jr
ZXJDb250ZXh0OworICAgIGNsYXNzIFdlYktpdEdsb2JhbFNjcmlwdDsKICAgICBjbGFzcyBXZWJT
b2NrZXQ7CiAgICAgY2xhc3MgV29ya2VyOwogICAgIGNsYXNzIFhNTEh0dHBSZXF1ZXN0OwpAQCAt
MTE2LDYgKzExOCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgTm90
aWZpY2F0aW9uKiB0b05vdGlmaWNhdGlvbigpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoR0xPQkFM
X1NDUklQVCkKKyAgICAgICAgdmlydHVhbCBXZWJLaXRHbG9iYWxTY3JpcHQqIHRvV2ViS2l0R2xv
YmFsU2NyaXB0KCk7CisgICAgICAgIHZpcnR1YWwgR2xvYmFsU2NyaXB0Q29udGV4dCogdG9HbG9i
YWxTY3JpcHRDb250ZXh0KCk7CisjZW5kaWYKKwogICAgICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCA9IDA7CiAKICAgICAg
ICAgdmlydHVhbCBib29sIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVyZSk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcCBiL1dlYkNvcmUv
ZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCmluZGV4IGJjNzEwODQuLjBjNWRiNjUgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCisrKyBiL1dl
YkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCkBAIC0yMDUsNiArMjA1LDExIEBA
IEpTQzo6SlNHbG9iYWxEYXRhKiBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpnbG9iYWxEYXRhKCkK
ICAgICAgaWYgKGlzRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21t
b25KU0dsb2JhbERhdGEoKTsKIAorI2lmIEVOQUJMRShHTE9CQUxfU0NSSVBUKQorICAgIGlmIChp
c0dsb2JhbFNjcmlwdENvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21t
b25KU0dsb2JhbERhdGEoKTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgaWYg
KGlzV29ya2VyQ29udGV4dCgpKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V29ya2VyQ29u
dGV4dCo+KHRoaXMpLT5zY3JpcHQoKS0+Z2xvYmFsRGF0YSgpOwpAQCAtMjE1LDQgKzIyMCw1MyBA
QCBKU0M6OkpTR2xvYmFsRGF0YSogU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Z2xvYmFsRGF0YSgp
CiB9CiAjZW5kaWYKIAorY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dFRhc2tUaW1lciA6IHB1
YmxpYyBUaW1lckJhc2UgeworcHVibGljOgorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRUYXNr
VGltZXIoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBjb250ZXh0LCBQYXNzT3du
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2spCisgICAgICAgIDogbV9jb250
ZXh0KGNvbnRleHQpCisgICAgICAgICwgbV90YXNrKHRhc2spCisgICAgeworICAgIH0KKworcHJp
dmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgZmlyZWQoKQorICAgIHsKKyAgICAgICAgbV90YXNrLT5w
ZXJmb3JtVGFzayhtX2NvbnRleHQuZ2V0KCkpOworICAgICAgICBkZWxldGUgdGhpczsKKyAgICB9
CisKKyAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gbV9jb250ZXh0OworICAgIE93
blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBtX3Rhc2s7Cit9OworCitjbGFzcyBQ
ZXJmb3JtVGFza0RhdGEgeworcHVibGljOgorICAgIFBlcmZvcm1UYXNrRGF0YShQYXNzUmVmUHRy
PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IGNvbnRleHQsIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4gdGFzaykKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAg
ICAgICAgLCBtX3Rhc2sodGFzaykKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcGVy
Zm9ybVRhc2sodm9pZCogZGF0YSkKKyAgICB7CisgICAgICAgIFBlcmZvcm1UYXNrRGF0YSogdGFz
a0RhdGEgPSBzdGF0aWNfY2FzdDxQZXJmb3JtVGFza0RhdGEqPihkYXRhKTsKKyAgICAgICAgdGFz
a0RhdGEtPm1fdGFzay0+cGVyZm9ybVRhc2sodGFza0RhdGEtPm1fY29udGV4dC5nZXQoKSk7Cisg
ICAgICAgIGRlbGV0ZSB0YXNrRGF0YTsKKyAgICB9CisKK3ByaXZhdGU6IAorICAgIFJlZlB0cjxT
Y3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX2NvbnRleHQ7CisgICAgT3duUHRyPFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OlRhc2s+IG1fdGFzazsKK307CisKK3ZvaWQgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6cG9zdFRhc2tUb01haW5UaHJlYWQoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250
ZXh0PiBjb250ZXh0LCBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRh
c2spCit7CisgICAgaWYgKGlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRUYXNrVGltZXIqIHRpbWVyID0gbmV3IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRUYXNr
VGltZXIoY29udGV4dCwgdGFzayk7CisgICAgICAgIHRpbWVyLT5zdGFydE9uZVNob3QoMCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChQZXJmb3JtVGFza0RhdGE6OnBl
cmZvcm1UYXNrLCBuZXcgUGVyZm9ybVRhc2tEYXRhKGNvbnRleHQsIHRhc2spKTsKKyAgICB9Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCBiL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aAppbmRleCAxNDE0MTI1Li5jYTg1YzZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9TY3JpcHRF
eGVjdXRpb25Db250ZXh0LmgKKysrIGIvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oCkBAIC01Nyw2ICs1Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZp
cnR1YWwgYm9vbCBpc1dvcmtlckNvbnRleHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
ICAgICB2aXJ0dWFsIGJvb2wgaXNHbG9iYWxTY3JpcHRDb250ZXh0KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KIAogICAgICAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiB2aXJ0
dWFsVVJMKCk7IH0KICAgICAgICAgS1VSTCBjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmIHVybCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbENvbXBsZXRlVVJMKHVybCk7IH0KQEAgLTEwMCw2ICsxMDEs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RUYXNr
KFBhc3NPd25QdHI8VGFzaz4pID0gMDsgLy8gRXhlY3V0ZXMgdGhlIHRhc2sgb24gY29udGV4dCdz
IHRocmVhZCBhc3luY2hyb25vdXNseS4KIAorICAgICAgICAvLyBIZWxwZXIgdG8gcG9zdCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHRvIHRoZSBtYWluIHRocmVhZC4gVXNlZnVsIHRvIGlt
cGxlbWVudCBwb3N0VGFzayBmb3Igb2JqZWN0cyB0aGF0IGxpdmUgb24gbWFpbiB0aHJlYWQuCisg
ICAgICAgIHZvaWQgcG9zdFRhc2tUb01haW5UaHJlYWQoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRp
b25Db250ZXh0PiwgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPik7CisK
ICAgICAgICAgdm9pZCBhZGRUaW1lb3V0KGludCB0aW1lb3V0SWQsIERPTVRpbWVyKik7CiAgICAg
ICAgIHZvaWQgcmVtb3ZlVGltZW91dChpbnQgdGltZW91dElkKTsKICAgICAgICAgRE9NVGltZXIq
IGZpbmRUaW1lb3V0KGludCB0aW1lb3V0SWQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9nbG9iYWxz
Y3JpcHQvR2xvYmFsU2NyaXB0Q29udGV4dC5jcHAgYi9XZWJDb3JlL2dsb2JhbHNjcmlwdC9HbG9i
YWxTY3JpcHRDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4z
NTdiNjc1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9nbG9iYWxzY3JpcHQvR2xvYmFsU2Ny
aXB0Q29udGV4dC5jcHAKQEAgLTAsMCArMSwxOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoR0xPQkFMX1NDUklQVCkKKworI2luY2x1ZGUgIkdsb2JhbFNjcmlwdENvbnRleHQu
aCIKKyNpbmNsdWRlICJHbG9iYWxTY3JpcHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRXZlbnQu
aCIKKyNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCisjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgorI2luY2x1ZGUgInNjcmlwdFZhbHVl
LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJXZWJLaXRHbG9iYWxT
Y3JpcHRSZXBvc2l0b3J5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gSW50ZXJ2YWwg
dG8gYWxsb3cgb3JwaGFuZWQgR2xvYmFsU2NpcnBDb250ZXh0IHRvIGdhaW4gcG90ZW50aWFsIG5l
dyBvd25lci4KKy8vIFRoaXMgY2FuIGhhcHBlbiBvbiBuYXZpZ2F0aW9uIHdoZW4gYm90aCBwYWdl
cyBjb25uZWN0IHRvIHRoZSBzYW1lIEdsb2JhbFNjcmlwdC4KK3N0YXRpYyBjb25zdCBkb3VibGUg
ZGVzdHJ1Y3Rpb25JbnRlcnZhbCA9IDUuMDsKKworR2xvYmFsU2NyaXB0Q29udGV4dDo6R2xvYmFs
U2NyaXB0Q29udGV4dChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEtVUkwmIHVybCwgUGFzc1Jl
ZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luKQorICAgIDogbV9uYW1lKG5hbWUpCisgICAgLCBt
X3VybCh1cmwpCisgICAgLCBtX3NjcmlwdChuZXcgR2xvYmFsU2NyaXB0Q29udHJvbGxlcih0aGlz
KSkKKyAgICAsIG1fZGVzdHJ1Y3Rpb25UaW1lcih0aGlzLCAmR2xvYmFsU2NyaXB0Q29udGV4dDo6
ZGVzdHJ1Y3Rpb25UaW1lckZpcmVkKQorICAgICwgbV9sb2FkZWQoZmFsc2UpCit7CisgICAgc2V0
U2VjdXJpdHlPcmlnaW4ob3JpZ2luKTsKKyAgICByZWYoKTsgLy8gTWF0Y2hpbmcgZGVyZWYgaXMg
aW4gZGVzdHJ1Y3Rpb25UaW1lciBjYWxsYmFjay4KK30KKworR2xvYmFsU2NyaXB0Q29udGV4dDo6
fkdsb2JhbFNjcmlwdENvbnRleHQoKQoreworfQorCit2b2lkIEdsb2JhbFNjcmlwdENvbnRleHQ6
OmNsZWFyU2NyaXB0KCkKK3sKKyAgICBtX3NjcmlwdC5jbGVhcigpOyAKK30KKworY29uc3QgS1VS
TCYgR2xvYmFsU2NyaXB0Q29udGV4dDo6dmlydHVhbFVSTCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fdXJsOworfQorCitLVVJMIEdsb2JhbFNjcmlwdENvbnRleHQ6OnZpcnR1YWxDb21wbGV0ZVVS
TChjb25zdCBTdHJpbmcmIHVybCkgY29uc3QKK3sKKyAgICAvLyBBbHdheXMgcmV0dXJuIGEgbnVs
bCBVUkwgd2hlbiBwYXNzZWQgYSBudWxsIHN0cmluZy4KKyAgICAvLyBGSVhNRTogU2hvdWxkIHdl
IGNoYW5nZSB0aGUgS1VSTCBjb25zdHJ1Y3RvciB0byBoYXZlIHRoaXMgYmVoYXZpb3I/CisgICAg
aWYgKHVybC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIEtVUkwoKTsKKyAgICAvLyBBbHdheXMg
dXNlIFVURi04IGluIFdvcmtlcnMuCisgICAgcmV0dXJuIEtVUkwobV91cmwsIHVybCk7Cit9CisK
K3ZvaWQgR2xvYmFsU2NyaXB0Q29udGV4dDo6cmVwb3J0RXhjZXB0aW9uKGNvbnN0IFN0cmluZyYg
ZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCit7
CisgICAgYm9vbCBlcnJvckhhbmRsZWQgPSBmYWxzZTsKKyAgICBpZiAob25lcnJvcigpKQorICAg
ICAgICBlcnJvckhhbmRsZWQgPSBvbmVycm9yKCktPnJlcG9ydEVycm9yKHRoaXMsIGVycm9yTWVz
c2FnZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyKTsKK30KKwordm9pZCBHbG9iYWxTY3JpcHRDb250
ZXh0OjphZGRNZXNzYWdlKE1lc3NhZ2VEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiwgTWVzc2FnZVNv
dXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZVVSTCkKK3sKKyAgICAvLyBGSVhNRTogZmlndXJlIG91dCBjb25zb2xlL2luY3NwZWN0b3Igc3Rv
cnkgZm9yIEdsb2JhbCBTY3JpcHQuIE1heWJlIHNpbWlsYXIgdG8gU2hhcmVkV29ya2Vycy4KKyAg
ICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb24pOworICAgIFVOVVNFRF9QQVJBTShzb3VyY2UpOwor
ICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKKyAgICBVTlVTRURfUEFSQU0obGV2ZWwpOworICAgIFVO
VVNFRF9QQVJBTShtZXNzYWdlKTsKKyAgICBVTlVTRURfUEFSQU0obGluZU51bWJlcik7CisgICAg
VU5VU0VEX1BBUkFNKHNvdXJjZVVSTCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBHbG9iYWxTY3JpcHRDb250ZXh0OjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3Qo
dW5zaWduZWQgbG9uZywgY29uc3QgU2NyaXB0U3RyaW5nJikKK3sKKyAgICAvLyBGSVhNRTogZmln
dXJlIG91dCBjb25zb2xlL2luY3NwZWN0b3Igc3RvcnkgZm9yIEdsb2JhbCBTY3JpcHQuIE1heWJl
IHNpbWlsYXIgdG8gU2hhcmVkV29ya2Vycy4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIEdsb2JhbFNjcmlwdENvbnRleHQ6OnNjcmlwdEltcG9ydGVkKHVuc2lnbmVkIGxvbmcsIGNv
bnN0IFN0cmluZyYpCit7CisgICAgLy8gRklYTUU6IGZpZ3VyZSBvdXQgY29uc29sZS9pbmNzcGVj
dG9yIHN0b3J5IGZvciBHbG9iYWwgU2NyaXB0LiBNYXliZSBzaW1pbGFyIHRvIFNoYXJlZFdvcmtl
cnMuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBHbG9iYWxTY3JpcHRDb250ZXh0
OjptYXRjaGVzKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4g
b3JpZ2luLCBjb25zdCBLVVJMJiB1cmxUb01hdGNoKSBjb25zdAoreworICAgIC8vIElmIHRoZSBv
cmlnaW5zIGRvbid0IG1hdGNoLCBvciB0aGUgbmFtZXMgZG9uJ3QgbWF0Y2gsIHRoZW4gdGhpcyBp
cyBub3QgdGhlIHByb3h5IHdlIGFyZSBsb29raW5nIGZvci4KKyAgICBpZiAoIW9yaWdpbi0+ZXF1
YWwoc2VjdXJpdHlPcmlnaW4oKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIElm
IHRoZSBuYW1lcyBhcmUgYm90aCBlbXB0eSwgY29tcGFyZXMgdGhlIFVSTHMgaW5zdGVhZCBwZXIg
dGhlIFdlYiBXb3JrZXJzIHNwZWMuCisgICAgaWYgKG5hbWUuaXNFbXB0eSgpICYmIG1fbmFtZS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiB1cmxUb01hdGNoID09IG1fdXJsOworCisgICAgcmV0
dXJuIG5hbWUgPT0gbV9uYW1lOworfQorCit2b2lkIEdsb2JhbFNjcmlwdENvbnRleHQ6OmFkZFRv
RG9jdW1lbnRzTGlzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQoreworICAgIEFT
U0VSVChjb250ZXh0LT5pc0RvY3VtZW50KCkpOworICAgIG1fZG9jdW1lbnRMaXN0LmFkZChjb250
ZXh0KTsKKworICAgIGlmIChtX2Rlc3RydWN0aW9uVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAg
bV9kZXN0cnVjdGlvblRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBHbG9iYWxTY3JpcHRDb250ZXh0
OjpkZXN0cnVjdGlvblRpbWVyRmlyZWQoVGltZXI8R2xvYmFsU2NyaXB0Q29udGV4dD4qKQorewor
ICAgIGlmICghbV9kb2N1bWVudExpc3Quc2l6ZSgpKSB7CisgICAgICAgIFdlYktpdEdsb2JhbFNj
cmlwdFJlcG9zaXRvcnk6OnJlbW92ZUdsb2JhbFNjcmlwdENvbnRleHQodGhpcyk7CisgICAgICAg
IHN0b3BBY3RpdmVET01PYmplY3RzKCk7CisgICAgICAgIGNsZWFyU2NyaXB0KCk7CisgICAgICAg
IGRlcmVmKCk7CisgICAgfQorfQorCit2b2lkIEdsb2JhbFNjcmlwdENvbnRleHQ6OnJlbW92ZUZy
b21Eb2N1bWVudExpc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBp
ZiAoIW1fZG9jdW1lbnRMaXN0LmNvbnRhaW5zKGNvbnRleHQpKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBSZW1vdmUgdGhlIGRvY3VtZW50IGZyb20gb3VyIHNldCAoaWYgaXQncyB0aGVyZSkg
YW5kIGlmIHRoYXQgd2FzIHRoZSBsYXN0IGRvY3VtZW50IGluIHRoZSBzZXQsIGRlcmVmIHRoZSBj
b250ZXh0LgorICAgIG1fZG9jdW1lbnRMaXN0LnJlbW92ZShjb250ZXh0KTsKKworICAgIC8vIFN0
YXJ0IHRpbWVyIHRvIGNoZWNrIGlmIHRoaXMgY29udGV4dCBoYXMgdG8gc2VsZi1kZXN0cnVjdC4g
VGhpcyByZXNldHMgdGhlIHRpbWVyIHRvIGEgZnVsbCBpbnRlcnZhbCBpZiBpdCBpcyBhbHJlYWR5
IGFjdGl2ZS4KKyAgICBtX2Rlc3RydWN0aW9uVGltZXIuc3RhcnRPbmVTaG90KGRlc3RydWN0aW9u
SW50ZXJ2YWwpOworfQorCit2b2lkIEdsb2JhbFNjcmlwdENvbnRleHQ6OmxvYWQoY29uc3QgU3Ry
aW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgaW5pdGlhbFNjcmlwdCkKK3sKKyAgICBtX3Vz
ZXJBZ2VudCA9IHVzZXJBZ2VudDsKKyAgICBzY3JpcHQoKS0+ZXZhbHVhdGUoU2NyaXB0U291cmNl
Q29kZShpbml0aWFsU2NyaXB0LCBtX3VybCkpOworICAgIG1fbG9hZGVkID0gdHJ1ZTsKK30KKwor
dm9pZCBHbG9iYWxTY3JpcHRDb250ZXh0Ojpwb3N0VGFzayhQYXNzT3duUHRyPFRhc2s+IHRhc2sp
Cit7CisgICAgcG9zdFRhc2tUb01haW5UaHJlYWQodGhpcywgdGFzayk7Cit9CisKK0V2ZW50VGFy
Z2V0RGF0YSogR2xvYmFsU2NyaXB0Q29udGV4dDo6ZXZlbnRUYXJnZXREYXRhKCkKK3sKKyAgICBy
ZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOworfQorCitFdmVudFRhcmdldERhdGEqIEdsb2JhbFNj
cmlwdENvbnRleHQ6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpCit7CisgICAgcmV0dXJuICZtX2V2
ZW50VGFyZ2V0RGF0YTsKK30KKworU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogR2xvYmFsU2NyaXB0
Q29udGV4dDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNv
bnN0X2Nhc3Q8R2xvYmFsU2NyaXB0Q29udGV4dCo+KHRoaXMpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0xPQkFMX1NDUklQVCkKKwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9nbG9iYWxzY3JpcHQvR2xvYmFsU2NyaXB0Q29udGV4dC5oIGIvV2ViQ29yZS9n
bG9iYWxzY3JpcHQvR2xvYmFsU2NyaXB0Q29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjYzOWFlNTQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2dsb2JhbHNj
cmlwdC9HbG9iYWxTY3JpcHRDb250ZXh0LmgKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdsb2Jh
bFNjcmlwdENvbnRleHRfaAorI2RlZmluZSBHbG9iYWxTY3JpcHRDb250ZXh0X2gKKworI2lmIEVO
QUJMRShHTE9CQUxfU0NSSVBUKQorCisjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRl
ICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiV29ya2Vy
Q29udGV4dC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworICAgIGNsYXNzIERvY3VtZW50OworICAgIGNsYXNzIEdsb2JhbFNjcmlwdENvbnRyb2xsZXI7
CisgICAgY2xhc3MgS1VSTDsKKyAgICBjbGFzcyBTdHJpbmc7CisKKworICAgIGNsYXNzIEdsb2Jh
bFNjcmlwdENvbnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxHbG9iYWxTY3JpcHRDb250ZXh0Piwg
cHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHB1YmxpYyBFdmVudFRhcmdldCB7CisgICAg
cHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHbG9iYWxTY3JpcHRDb250ZXh0PiBj
cmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBLVVJMJiB1cmwsIFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IG9yaWdpbikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBHbG9iYWxTY3JpcHRDb250ZXh0KG5hbWUsIHVybCwgb3JpZ2luKSk7CisgICAgICAg
IH0KKyAgICAgICAgdmlydHVhbCB+R2xvYmFsU2NyaXB0Q29udGV4dCgpOworCisgICAgICAgIC8v
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQKKyAgICAgICAgdmlydHVhbCBib29sIGlzR2xvYmFsU2Ny
aXB0Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgdmlydHVhbCBTdHJp
bmcgdXNlckFnZW50KGNvbnN0IEtVUkwmKSBjb25zdCB7IHJldHVybiBtX3VzZXJBZ2VudDsgfQor
CisgICAgICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeGNlcHRpb24oY29uc3QgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VEZXN0aW5hdGlvbiwgTWVzc2FnZVNv
dXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1
bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCByZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBjb25zdCBTY3JpcHRTdHJpbmcmIHNvdXJjZVN0cmluZyk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBzY3JpcHRJbXBvcnRlZCh1bnNpZ25lZCBsb25nLCBjb25zdCBTdHJpbmcm
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrKFBhc3NPd25QdHI8VGFzaz4pOyAvLyBF
eGVjdXRlcyB0aGUgdGFzayBvbiBjb250ZXh0J3MgdGhyZWFkIGFzeW5jaHJvbm91c2x5LgorCisg
ICAgICAgIC8vIEpTIHdyYXBwZXIgYW5kIEV2ZW50VGFyZXQgc3VwcG9ydC4KKyAgICAgICAgdmly
dHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgR2xvYmFsU2NyaXB0Q29udGV4dCogdG9HbG9iYWxTY3JpcHRD
b250ZXh0KCkgeyByZXR1cm4gdGhpczsgfQorICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5U
X0xJU1RFTkVSKGVycm9yKTsKKworICAgICAgICAvLyBHbG9iYWxTY3JpcHRHbG9iYWxTY29wZQor
ICAgICAgICBHbG9iYWxTY3JpcHRDb250ZXh0KiBzZWxmKCkgeyByZXR1cm4gdGhpczsgfQorCisg
ICAgICAgIC8vIExpZmV0aW1lIC0ga2VlcCB0aGUgbGlzdCBvZiBkb2N1bWVudHMgdGhhdCBhcmUg
Y29ubmVjdGVkLCBkZXJlZiB3aGVuIHRoZSBsYXN0IGRpc2Nvbm5lY3RzLgorICAgICAgICB2b2lk
IGFkZFRvRG9jdW1lbnRzTGlzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgICAgIHZv
aWQgcmVtb3ZlRnJvbURvY3VtZW50TGlzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisKKyAg
ICAgICAgR2xvYmFsU2NyaXB0Q29udHJvbGxlciogc2NyaXB0KCkgeyByZXR1cm4gbV9zY3JpcHQu
Z2V0KCk7IH0KKyAgICAgICAgdm9pZCBjbGVhclNjcmlwdCgpOworCisgICAgICAgIC8vIFRydWUg
aWYgaW5pdGlhbCBzY3JpcHQgaGFzIGJlZW4gZXZhbHVhdGVkLgorICAgICAgICBib29sIGxvYWRl
ZCgpIHsgcmV0dXJuIG1fbG9hZGVkOyB9CisgICAgICAgIHZvaWQgbG9hZChjb25zdCBTdHJpbmcm
IHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBpbml0aWFsU2NyaXB0KTsKKworICAgICAgICBib29s
IG1hdGNoZXMoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBv
cmlnaW4sIGNvbnN0IEtVUkwmIHVybFRvTWF0Y2gpIGNvbnN0OworICAgICAgICBTdHJpbmcgbmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorCisgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8
R2xvYmFsU2NyaXB0Q29udGV4dD46OnJlZjsKKyAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxHbG9i
YWxTY3JpcHRDb250ZXh0Pjo6ZGVyZWY7CisKKyAgICBwcml2YXRlOgorICAgICAgICBHbG9iYWxT
Y3JpcHRDb250ZXh0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgS1VSTCYsIFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+KTsKKyAgICAgICAgCisgICAgICAgIC8vIEV2ZW50VGFyZ2V0CisgICAg
ICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKTsKKyAgICAgICAg
dmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CisgICAgICAgIHZpcnR1
YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CisgICAgICAgIAorICAgICAg
ICAvLyBTY3JpcHRFeGVjdXRpb25Db250ZXh0CisgICAgICAgIHZpcnR1YWwgY29uc3QgS1VSTCYg
dmlydHVhbFVSTCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIEtVUkwgdmlydHVhbENvbXBsZXRl
VVJMKGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpIHsgcmVmKCk7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVm
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIHsgZGVyZWYoKTsgfQorICAgICAgICAgICAgICAgIAor
ICAgICAgICB2b2lkIGRlc3RydWN0aW9uVGltZXJGaXJlZChUaW1lcjxHbG9iYWxTY3JpcHRDb250
ZXh0PiopOworICAgICAgICAgICAgICAgIAorICAgICAgICBTdHJpbmcgbV9uYW1lOworICAgICAg
ICBTdHJpbmcgbV91c2VyQWdlbnQ7CisgICAgICAgIEtVUkwgbV91cmw7CisgICAgICAgIE93blB0
cjxHbG9iYWxTY3JpcHRDb250cm9sbGVyPiBtX3NjcmlwdDsKKyAgICAgICAgSGFzaFNldDxTY3Jp
cHRFeGVjdXRpb25Db250ZXh0Kj4gbV9kb2N1bWVudExpc3Q7CisgICAgICAgIFRpbWVyPEdsb2Jh
bFNjcmlwdENvbnRleHQ+IG1fZGVzdHJ1Y3Rpb25UaW1lcjsKKyAgICAgICAgRXZlbnRUYXJnZXRE
YXRhIG1fZXZlbnRUYXJnZXREYXRhOworCisgICAgICAgIGJvb2wgbV9sb2FkZWQ7CisgICAgfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdMT0JBTF9TQ1JJ
UFQpCisKKyNlbmRpZiAvLyBHbG9iYWxTY3JpcHRDb250ZXh0X2gKKwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9nbG9iYWxzY3JpcHQvR2xvYmFsU2NyaXB0Q29udGV4dC5pZGwgYi9XZWJDb3JlL2dsb2Jh
bHNjcmlwdC9HbG9iYWxTY3JpcHRDb250ZXh0LmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5kYWIyNjI0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9nbG9iYWxzY3Jp
cHQvR2xvYmFsU2NyaXB0Q29udGV4dC5pZGwKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSB3aW5kb3cg
eworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9R0xPQkFMX1NDUklQVCwK
KyAgICAgICAgQ3VzdG9tTWFya0Z1bmN0aW9uLAorICAgICAgICBFdmVudFRhcmdldCwKKyAgICAg
ICAgRXh0ZW5kc0RPTUdsb2JhbE9iamVjdCwKKyAgICAgICAgSXNXb3JrZXJDb250ZXh0LAorICAg
ICAgICBHZW5lcmF0ZU5hdGl2ZUNvbnZlcnRlciwKKyAgICAgICAgTGVnYWN5UGFyZW50PUpTR2xv
YmFsU2NyaXB0Q29udGV4dEJhc2UsCisgICAgICAgIE5vU3RhdGljVGFibGVzCisgICAgXSBHbG9i
YWxTY3JpcHRDb250ZXh0IHsKKworICAgICAgICAvLyBHbG9iYWxTY3JpcHRDb250ZXh0R2xvYmFs
U2NvcGUKKyNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpICYmIExBTkdVQUdFX0pBVkFT
Q1JJUFQKKyAgICAgICAgYXR0cmlidXRlIFtSZXBsYWNlYWJsZV0gR2xvYmFsU2NyaXB0Q29udGV4
dCBzZWxmOworI2VuZGlmCisKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBu
YW1lOworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVycm9yOworCisgICAgICAg
IC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQorICAgICAgICBbQ3VzdG9tXSB2b2lkIGFkZEV2ZW50
TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICBb
Q3VzdG9tXSB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBs
aXN0ZW5lciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBi
b29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICBib29sZWFuIGRpc3BhdGNoRXZlbnQoaW4gRXZl
bnQgZXZ0KQorICAgICAgICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0aW9uKTsKKworICAgIH07CisK
KworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9nbG9iYWxzY3JpcHQvR2xvYmFsU2NyaXB0Q29udHJv
bGxlci5jcHAgYi9XZWJDb3JlL2dsb2JhbHNjcmlwdC9HbG9iYWxTY3JpcHRDb250cm9sbGVyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWM5ZDQyCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS9nbG9iYWxzY3JpcHQvR2xvYmFsU2NyaXB0Q29udHJvbGxlci5jcHAK
QEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoR0xPQkFM
X1NDUklQVCkKKworI2luY2x1ZGUgIkdsb2JhbFNjcmlwdENvbnRyb2xsZXIuaCIKKworI2luY2x1
ZGUgIkdsb2JhbFNjcmlwdENvbnRleHQuaCIKKyNpbmNsdWRlICJKU0dsb2JhbFNjcmlwdENvbnRl
eHQuaCIKKyNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCisjaW5jbHVkZSAiU2NyaXB0VmFs
dWUuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorCit1c2luZyBuYW1lc3BhY2UgSlND
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dsb2JhbFNjcmlwdENvbnRyb2xsZXI6Okdsb2Jh
bFNjcmlwdENvbnRyb2xsZXIoR2xvYmFsU2NyaXB0Q29udGV4dCogZ2xvYmFsU2NyaXB0Q29udGV4
dCkKKyAgICA6IG1fZ2xvYmFsU2NyaXB0Q29udGV4dChnbG9iYWxTY3JpcHRDb250ZXh0KQorewor
fQorCitHbG9iYWxTY3JpcHRDb250cm9sbGVyOjp+R2xvYmFsU2NyaXB0Q29udHJvbGxlcigpCit7
CisgICAgbV9nbG9iYWxTY3JpcHRDb250ZXh0V3JhcHBlciA9IDA7IC8vIFVucHJvdGVjdCB0aGUg
Z2xvYmFsIG9iamVjdC4KK30KKwordm9pZCBHbG9iYWxTY3JpcHRDb250cm9sbGVyOjppbml0U2Ny
aXB0KCkKK3sKKyAgICBBU1NFUlQoIW1fZ2xvYmFsU2NyaXB0Q29udGV4dFdyYXBwZXIpOworICAg
IEFTU0VSVChtX2dsb2JhbFNjcmlwdENvbnRleHQtPmlzR2xvYmFsU2NyaXB0Q29udGV4dCgpKTsK
KworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisKKyAgICAvLyBFeHBs
aWNpdGx5IHByb3RlY3QgdGhlIGdsb2JhbCBvYmplY3QncyBwcm90b3R5cGUgc28gaXQgaXNuJ3Qg
Y29sbGVjdGVkCisgICAgLy8gd2hlbiB3ZSBhbGxvY2F0ZSB0aGUgZ2xvYmFsIG9iamVjdC4gKE9u
Y2UgdGhlIGdsb2JhbCBvYmplY3QgaXMgZnVsbHkKKyAgICAvLyBjb25zdHJ1Y3RlZCwgaXQgY2Fu
IG1hcmsgaXRzIG93biBwcm90b3R5cGUuKQorICAgIFJlZlB0cjxTdHJ1Y3R1cmU+IGdsb2JhbFNj
cmlwdENvbnRleHRQcm90b3R5cGVTdHJ1Y3R1cmUgPSBKU0dsb2JhbFNjcmlwdENvbnRleHRQcm90
b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShqc051bGwoKSk7CisgICAgUHJvdGVjdGVkUHRyPEpTR2xv
YmFsU2NyaXB0Q29udGV4dFByb3RvdHlwZT4gZ2xvYmFsU2NyaXB0Q29udGV4dFByb3RvdHlwZSA9
IG5ldyAobV9nbG9iYWxTY3JpcHRDb250ZXh0LT5nbG9iYWxEYXRhKCkpIEpTR2xvYmFsU2NyaXB0
Q29udGV4dFByb3RvdHlwZShnbG9iYWxTY3JpcHRDb250ZXh0UHJvdG90eXBlU3RydWN0dXJlLnJl
bGVhc2UoKSk7CisgICAgUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlID0gSlNHbG9iYWxTY3Jp
cHRDb250ZXh0OjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsU2NyaXB0Q29udGV4dFByb3RvdHlwZSk7
CisgICAgbV9nbG9iYWxTY3JpcHRDb250ZXh0V3JhcHBlciA9IG5ldyAobV9nbG9iYWxTY3JpcHRD
b250ZXh0LT5nbG9iYWxEYXRhKCkpIEpTR2xvYmFsU2NyaXB0Q29udGV4dChzdHJ1Y3R1cmUucmVs
ZWFzZSgpLCBtX2dsb2JhbFNjcmlwdENvbnRleHQpOworfQorCitTY3JpcHRWYWx1ZSBHbG9iYWxT
Y3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlKQoreworICAgIFNjcmlwdFZhbHVlIGV4Y2VwdGlvbjsKKyAgICBTY3JpcHRWYWx1ZSByZXN1
bHQgPSBldmFsdWF0ZShzb3VyY2VDb2RlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9u
LmpzVmFsdWUoKSkgeworICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgICAgICByZXBvcnRFeGNlcHRpb24obV9nbG9iYWxTY3JpcHRDb250ZXh0V3JhcHBlci0+
Z2xvYmFsRXhlYygpLCBleGNlcHRpb24uanNWYWx1ZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworU2NyaXB0VmFsdWUgR2xvYmFsU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUo
Y29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSwgU2NyaXB0VmFsdWUqIGV4Y2VwdGlv
bikKK3sKKyAgICBpbml0U2NyaXB0SWZOZWVkZWQoKTsKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworCisgICAgRXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxTY3JpcHRD
b250ZXh0V3JhcHBlci0+Z2xvYmFsRXhlYygpOworICAgIG1fZ2xvYmFsU2NyaXB0Q29udGV4dC0+
Z2xvYmFsRGF0YSgpLT50aW1lb3V0Q2hlY2tlci5zdGFydCgpOworICAgIENvbXBsZXRpb24gY29t
cCA9IGV2YWx1YXRlSW5Xb3JsZChleGVjLCBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmds
b2JhbFNjb3BlQ2hhaW4oKSwgc291cmNlQ29kZS5qc1NvdXJjZUNvZGUoKSwgbV9nbG9iYWxTY3Jp
cHRDb250ZXh0V3JhcHBlciwgY3VycmVudFdvcmxkKGV4ZWMpKTsKKyAgICBtX2dsb2JhbFNjcmlw
dENvbnRleHQtPmdsb2JhbERhdGEoKS0+dGltZW91dENoZWNrZXIuc3RvcCgpOworCisgICAgaWYg
KGNvbXAuY29tcGxUeXBlKCkgPT0gTm9ybWFsIHx8IGNvbXAuY29tcGxUeXBlKCkgPT0gUmV0dXJu
VmFsdWUpCisgICAgICAgIHJldHVybiBjb21wLnZhbHVlKCk7CisKKyAgICBpZiAoY29tcC5jb21w
bFR5cGUoKSA9PSBUaHJvdykKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNvbXAudmFsdWUoKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZSgpOworfQorCit2b2lkIEdsb2JhbFNjcmlwdENvbnRyb2xsZXI6OnNl
dEV4Y2VwdGlvbihTY3JpcHRWYWx1ZSBleGNlcHRpb24pCit7CisgICAgbV9nbG9iYWxTY3JpcHRD
b250ZXh0V3JhcHBlci0+Z2xvYmFsRXhlYygpLT5zZXRFeGNlcHRpb24oZXhjZXB0aW9uLmpzVmFs
dWUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShH
TE9CQUxfU0NSSVBUKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9nbG9iYWxzY3JpcHQvR2xvYmFsU2Ny
aXB0Q29udHJvbGxlci5oIGIvV2ViQ29yZS9nbG9iYWxzY3JpcHQvR2xvYmFsU2NyaXB0Q29udHJv
bGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2Njk1Y2UKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL2dsb2JhbHNjcmlwdC9HbG9iYWxTY3JpcHRDb250cm9sbGVy
LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR2xvYmFsU2NyaXB0Q29udHJvbGxlcl9oCisjZGVm
aW5lIEdsb2JhbFNjcmlwdENvbnRyb2xsZXJfaAorCisjaWYgRU5BQkxFKEdMT0JBTF9TQ1JJUFQp
CisKKyNpbmNsdWRlIDxydW50aW1lL1Byb3RlY3QuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgR2xvYmFsU2NyaXB0Q29u
dGV4dDsKKyAgICBjbGFzcyBKU0dsb2JhbFNjcmlwdENvbnRleHQ7CisgICAgY2xhc3MgU2NyaXB0
U291cmNlQ29kZTsKKyAgICBjbGFzcyBTY3JpcHRWYWx1ZTsKKworICAgIGNsYXNzIEdsb2JhbFNj
cmlwdENvbnRyb2xsZXIgOiBwdWJsaWMgTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgR2xvYmFsU2NyaXB0Q29udHJvbGxlcihHbG9iYWxTY3JpcHRDb250ZXh0Kik7CisgICAgICAg
IH5HbG9iYWxTY3JpcHRDb250cm9sbGVyKCk7CisKKyAgICAgICAgSlNHbG9iYWxTY3JpcHRDb250
ZXh0KiBnbG9iYWxTY3JpcHRDb250ZXh0V3JhcHBlcigpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGluaXRTY3JpcHRJZk5lZWRlZCgpOworICAgICAgICAgICAgcmV0dXJuIG1fZ2xvYmFsU2NyaXB0
Q29udGV4dFdyYXBwZXI7CisgICAgICAgIH0KKworICAgICAgICBTY3JpcHRWYWx1ZSBldmFsdWF0
ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJik7CisgICAgICAgIFNjcmlwdFZhbHVlIGV2YWx1YXRl
KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmLCBTY3JpcHRWYWx1ZSogZXhjZXB0aW9uKTsKKworICAg
ICAgICB2b2lkIHNldEV4Y2VwdGlvbihTY3JpcHRWYWx1ZSk7CisKKyAgICBwcml2YXRlOgorICAg
ICAgICB2b2lkIGluaXRTY3JpcHRJZk5lZWRlZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICghbV9nbG9iYWxTY3JpcHRDb250ZXh0V3JhcHBlcikKKyAgICAgICAgICAgICAgICBpbml0U2Ny
aXB0KCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBpbml0U2NyaXB0KCk7CisKKyAgICAgICAg
R2xvYmFsU2NyaXB0Q29udGV4dCogbV9nbG9iYWxTY3JpcHRDb250ZXh0OworICAgICAgICBKU0M6
OlByb3RlY3RlZFB0cjxKU0dsb2JhbFNjcmlwdENvbnRleHQ+IG1fZ2xvYmFsU2NyaXB0Q29udGV4
dFdyYXBwZXI7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKEdMT0JBTF9TQ1JJUFQpCisKKyNlbmRpZiAvLyBHbG9iYWxTY3JpcHRDb250cm9sbGVy
X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZ2xvYmFsc2NyaXB0L1dlYktpdEdsb2JhbFNjcmlwdC5j
cHAgYi9XZWJDb3JlL2dsb2JhbHNjcmlwdC9XZWJLaXRHbG9iYWxTY3JpcHQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MDVjNjkKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL2dsb2JhbHNjcmlwdC9XZWJLaXRHbG9iYWxTY3JpcHQuY3BwCkBAIC0wLDAgKzEsMTE3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEdMT0JBTF9TQ1JJUFQpCisKKyNp
bmNsdWRlICJXZWJLaXRHbG9iYWxTY3JpcHQuaCIKKworI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5j
bHVkZSAiRXZlbnRFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJHbG9iYWxTY3JpcHRDb250ZXh0Lmgi
CisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5
T3JpZ2luLmgiCisjaW5jbHVkZSAiV2ViS2l0R2xvYmFsU2NyaXB0UmVwb3NpdG9yeS5oIgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV2ViS2l0
R2xvYmFsU2NyaXB0OjpXZWJLaXRHbG9iYWxTY3JpcHQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IFN0cmluZyYgbmFtZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9u
Q29kZSYgZWMpCisgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykKK3sKKyAgICBp
ZiAodXJsLmlzRW1wdHkoKSkgeworICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHRoZSBkeW5hbWlj
IGdsb2JhbCBzY29wZSAoYnVnICMyNzg4NykKKyAgICBLVVJMIHNjcmlwdFVSTCA9IGNvbnRleHQt
PmNvbXBsZXRlVVJMKHVybCk7CisgICAgaWYgKCFzY3JpcHRVUkwuaXNWYWxpZCgpKSB7CisgICAg
ICAgIGVjID0gU1lOVEFYX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICgh
Y29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzKFNlY3VyaXR5T3JpZ2luOjpjcmVh
dGUoc2NyaXB0VVJMKS5nZXQoKSkpIHsKKyAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBXZWJLaXRHbG9iYWxTY3JpcHRSZXBvc2l0b3J5Ojpj
b25uZWN0KHRoaXMsIHNjcmlwdFVSTCwgbmFtZSwgZWMpOworfQorCitXZWJLaXRHbG9iYWxTY3Jp
cHQ6On5XZWJLaXRHbG9iYWxTY3JpcHQoKQoreworfQorCit2b2lkIFdlYktpdEdsb2JhbFNjcmlw
dDo6c2V0Q29udGV4dChQYXNzUmVmUHRyPEdsb2JhbFNjcmlwdENvbnRleHQ+IGNvbnRleHQpCit7
IAorICAgIG1faW5uZXJDb250ZXh0ID0gY29udGV4dDsKK30KKworY2xhc3MgTG9hZEV2ZW50VGFz
ayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc093blB0cjxMb2FkRXZlbnRUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxXZWJLaXRH
bG9iYWxTY3JpcHQ+IGdsb2JhbFNjcmlwdCwgUGFzc1JlZlB0cjxHbG9iYWxTY3JpcHRDb250ZXh0
PiBpbm5lckNvbnRleHQpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IExvYWRFdmVudFRhc2so
Z2xvYmFsU2NyaXB0LCBpbm5lckNvbnRleHQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LT5pc0RvY3VtZW50KCkpOworICAgICAg
ICBtX2dsb2JhbFNjcmlwdC0+c2V0Q29udGV4dChtX2lubmVyQ29udGV4dCk7CisgICAgICAgIG1f
Z2xvYmFsU2NyaXB0LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoRXZlbnROYW1lcygpLmxv
YWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7CisKKyAgICAgICAgbV9nbG9iYWxTY3JpcHQtPnVuc2V0
UGVuZGluZ0FjdGl2aXR5KG1fZ2xvYmFsU2NyaXB0LmdldCgpKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgTG9hZEV2ZW50VGFzayhQYXNzUmVmUHRyPFdlYktpdEdsb2JhbFNjcmlwdD4gZ2xvYmFs
U2NyaXB0LCBQYXNzUmVmUHRyPEdsb2JhbFNjcmlwdENvbnRleHQ+IGlubmVyQ29udGV4dCkKKyAg
ICAgICAgOiBtX2dsb2JhbFNjcmlwdChnbG9iYWxTY3JpcHQpCisgICAgICAgICwgbV9pbm5lckNv
bnRleHQoaW5uZXJDb250ZXh0KQorICAgIHsKKyAgICAgICAgLy8gS2VlcCBldmVudCBsaXN0ZW5l
cnMgYWxpdmUuCisgICAgICAgIG1fZ2xvYmFsU2NyaXB0LT5zZXRQZW5kaW5nQWN0aXZpdHkobV9n
bG9iYWxTY3JpcHQuZ2V0KCkpOworICAgIH0KKworICAgIFJlZlB0cjxXZWJLaXRHbG9iYWxTY3Jp
cHQ+IG1fZ2xvYmFsU2NyaXB0OworICAgIFJlZlB0cjxHbG9iYWxTY3JpcHRDb250ZXh0PiBtX2lu
bmVyQ29udGV4dDsKK307CisKK3ZvaWQgV2ViS2l0R2xvYmFsU2NyaXB0OjpzY2hlZHVsZUxvYWRF
dmVudChQYXNzUmVmUHRyPEdsb2JhbFNjcmlwdENvbnRleHQ+IGlubmVyQ29udGV4dCkKK3sKKyAg
ICBBU1NFUlQoIW1faW5uZXJDb250ZXh0KTsKKyAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkt
PnBvc3RUYXNrKExvYWRFdmVudFRhc2s6OmNyZWF0ZSh0aGlzLCBpbm5lckNvbnRleHQpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdMT0JBTF9TQ1JJ
UFQpCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZ2xvYmFsc2NyaXB0L1dlYktpdEdsb2JhbFNjcmlw
dC5oIGIvV2ViQ29yZS9nbG9iYWxzY3JpcHQvV2ViS2l0R2xvYmFsU2NyaXB0LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY5MjUxNAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvZ2xvYmFsc2NyaXB0L1dlYktpdEdsb2JhbFNjcmlwdC5oCkBAIC0wLDAgKzEsOTEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFdlYktpdEdsb2JhbFNjcmlwdF9oCisjZGVmaW5lIFdlYktpdEdsb2JhbFNjcmlwdF9o
CisKKyNpZiBFTkFCTEUoR0xPQkFMX1NDUklQVCkKKworI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVj
dC5oIgorI2luY2x1ZGUgIkF0b21pY1N0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJFdmVudExpc3Rl
bmVyLmgiCisjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBLVVJMOworICAgIGNsYXNzIEds
b2JhbFNjcmlwdENvbnRleHQ7CisgICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKwor
ICAgIGNsYXNzIFdlYktpdEdsb2JhbFNjcmlwdCA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYktpdEds
b2JhbFNjcmlwdD4sIHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHB1YmxpYyBFdmVudFRhcmdldCB7
CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJLaXRHbG9iYWxTY3Jp
cHQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJLaXRHbG9iYWxTY3JpcHQodXJsLCBu
YW1lLCBjb250ZXh0LCBlYykpOworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgfldlYktpdEds
b2JhbFNjcmlwdCgpOworCisgICAgICAgIC8vIEV2ZW50VGFyZ2V0IEFQSXMKKyAgICAgICAgdmly
dHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29u
c3QgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0K
KyAgICAgICAgdmlydHVhbCBXZWJLaXRHbG9iYWxTY3JpcHQqIHRvV2ViS2l0R2xvYmFsU2NyaXB0
KCkgeyByZXR1cm4gdGhpczsgfQorCisgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElT
VEVORVIoZXJyb3IpOworICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGxv
YWQpOworCisgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8V2ViS2l0R2xvYmFsU2NyaXB0Pjo6cmVm
OworICAgICAgICB1c2luZyBSZWZDb3VudGVkPFdlYktpdEdsb2JhbFNjcmlwdD46OmRlcmVmOwor
CisgICAgICAgIEdsb2JhbFNjcmlwdENvbnRleHQqIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBt
X2lubmVyQ29udGV4dC5nZXQoKTsgfQorICAgICAgICB2b2lkIHNldENvbnRleHQoUGFzc1JlZlB0
cjxHbG9iYWxTY3JpcHRDb250ZXh0PiBjb250ZXh0KTsKKworICAgICAgICAvLyBXaGVuIGZpcmVk
LCB3aWxsIHNldCB0aGUgaW5uZXJDb250ZXh0IGludG8gdGhpcyBXZWJLaXRHbG9iYWxTY3JpcHQg
YW5kIGRpc3BhdGNoICdsb2FkJyBldmVudC4KKyAgICAgICAgdm9pZCBzY2hlZHVsZUxvYWRFdmVu
dChQYXNzUmVmUHRyPEdsb2JhbFNjcmlwdENvbnRleHQ+IGlubmVyQ29udGV4dCk7CisKKyAgICBw
cml2YXRlOgorICAgICAgICBXZWJLaXRHbG9iYWxTY3JpcHQoY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgbmFtZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUm
KTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CisgICAg
ICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKSB7IHJldHVybiAm
bV9ldmVudFRhcmdldERhdGE7IH0KKyAgICAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVu
c3VyZUV2ZW50VGFyZ2V0RGF0YSgpIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsgfQorCisg
ICAgICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKKyAgICAgICAgUmVmUHRy
PEdsb2JhbFNjcmlwdENvbnRleHQ+IG1faW5uZXJDb250ZXh0OworICAgIH07CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHTE9CQUxfU0NSSVBUKQorCisjZW5k
aWYgLy8gV2ViS2l0R2xvYmFsU2NyaXB0X2gKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9nbG9iYWxz
Y3JpcHQvV2ViS2l0R2xvYmFsU2NyaXB0LmlkbCBiL1dlYkNvcmUvZ2xvYmFsc2NyaXB0L1dlYktp
dEdsb2JhbFNjcmlwdC5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVj
ZTg5ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvZ2xvYmFsc2NyaXB0L1dlYktpdEdsb2Jh
bFNjcmlwdC5pZGwKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSB3aW5kb3cgeworCisgICAgaW50ZXJm
YWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9R0xPQkFMX1NDUklQVCwKKyAgICAgICAgRXZlbnRU
YXJnZXQsCisgICAgICAgIEdlbmVyYXRlVG9KUworICAgIF0gV2ViS2l0R2xvYmFsU2NyaXB0IHsK
KworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVycm9yOworICAgICAgICBhdHRy
aWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmxvYWQ7CisKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBhZGRF
dmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAg
IFtDdXN0b21dIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIg
bGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBi
b29sZWFuIHVzZUNhcHR1cmUpOworCisgICAgICAgIGJvb2xlYW4gZGlzcGF0Y2hFdmVudChpbiBF
dmVudCBldnQpCisgICAgICAgICAgICByYWlzZXMoRXZlbnRFeGNlcHRpb24pOworCisgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBHbG9iYWxTY3JpcHRDb250ZXh0IGNvbnRleHQ7CisgICAgfTsK
K30KKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9nbG9iYWxzY3JpcHQvV2ViS2l0R2xvYmFsU2NyaXB0
UmVwb3NpdG9yeS5jcHAgYi9XZWJDb3JlL2dsb2JhbHNjcmlwdC9XZWJLaXRHbG9iYWxTY3JpcHRS
ZXBvc2l0b3J5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTIwZGY1
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9nbG9iYWxzY3JpcHQvV2ViS2l0R2xvYmFsU2Ny
aXB0UmVwb3NpdG9yeS5jcHAKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoR0xPQkFMX1NDUklQVCkKKworI2luY2x1ZGUgIldlYktpdEdsb2JhbFNjcmlw
dFJlcG9zaXRvcnkuaCIKKworI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgi
CisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkdsb2JhbFNjcmlwdENvbnRl
eHQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIldlYktpdEdsb2Jh
bFNjcmlwdC5oIgorI2luY2x1ZGUgIldvcmtlclNjcmlwdExvYWRlci5oIgorI2luY2x1ZGUgIldv
cmtlclNjcmlwdExvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEhl
bHBlciBjbGFzcyB0byBsb2FkIHRoZSBpbml0aWFsIHNjcmlwdCBvbiBiZWhhbGYgb2YgYSBnbG9i
YWwgc2NyaXB0LgorY2xhc3MgU2NyaXB0TG9hZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8U2NyaXB0
TG9hZGVyPiwgcHVibGljIEFjdGl2ZURPTU9iamVjdCwgcHJpdmF0ZSBXb3JrZXJTY3JpcHRMb2Fk
ZXJDbGllbnQgeworcHVibGljOgorICAgIFNjcmlwdExvYWRlcihQYXNzUmVmUHRyPFdlYktpdEds
b2JhbFNjcmlwdD4sIFBhc3NSZWZQdHI8R2xvYmFsU2NyaXB0Q29udGV4dD4gaW5uZXJDb250ZXh0
KTsKKyAgICB2b2lkIGxvYWQoY29uc3QgS1VSTCYpOworCitwcml2YXRlOgorICAgIC8vIFdvcmtl
clNjcmlwdExvYWRlckNsaWVudCBjYWxsYmFjaworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5p
c2hlZCgpOworCisgICAgUmVmUHRyPFdlYktpdEdsb2JhbFNjcmlwdD4gbV9nbG9iYWxTY3JpcHQ7
CisgICAgUmVmUHRyPEdsb2JhbFNjcmlwdENvbnRleHQ+IG1faW5uZXJDb250ZXh0OworICAgIE93
blB0cjxXb3JrZXJTY3JpcHRMb2FkZXI+IG1fc2NyaXB0TG9hZGVyOworfTsKKworU2NyaXB0TG9h
ZGVyOjpTY3JpcHRMb2FkZXIoUGFzc1JlZlB0cjxXZWJLaXRHbG9iYWxTY3JpcHQ+IGdsb2JhbFNj
cmlwdCwgUGFzc1JlZlB0cjxHbG9iYWxTY3JpcHRDb250ZXh0PiBpbm5lckNvbnRleHQpCisgICAg
OiBBY3RpdmVET01PYmplY3QoZ2xvYmFsU2NyaXB0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCks
IHRoaXMpCisgICAgLCBtX2dsb2JhbFNjcmlwdChnbG9iYWxTY3JpcHQpCisgICAgLCBtX2lubmVy
Q29udGV4dChpbm5lckNvbnRleHQpCit7Cit9CisKK3ZvaWQgU2NyaXB0TG9hZGVyOjpsb2FkKGNv
bnN0IEtVUkwmIHVybCkKK3sKKyAgICAvLyBNYXJrIHRoaXMgb2JqZWN0IGFzIGFjdGl2ZSBmb3Ig
dGhlIGR1cmF0aW9uIG9mIHRoZSBsb2FkLgorICAgIEFTU0VSVCghaGFzUGVuZGluZ0FjdGl2aXR5
KCkpOworICAgIG1fc2NyaXB0TG9hZGVyID0gbmV3IFdvcmtlclNjcmlwdExvYWRlcigpOworICAg
IG1fc2NyaXB0TG9hZGVyLT5sb2FkQXN5bmNocm9ub3VzbHkoc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLCB1cmwsIERlbnlDcm9zc09yaWdpblJlcXVlc3RzLCB0aGlzKTsKKworICAgIC8vIFN0YXkg
YWxpdmUgdW50aWwgdGhlIGxvYWQgZmluaXNoZXMuCisgICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRo
aXMpOworICAgIG1fZ2xvYmFsU2NyaXB0LT5zZXRQZW5kaW5nQWN0aXZpdHkobV9nbG9iYWxTY3Jp
cHQuZ2V0KCkpOworfQorCit2b2lkIFNjcmlwdExvYWRlcjo6bm90aWZ5RmluaXNoZWQoKQorewor
ICAgIGlmIChtX3NjcmlwdExvYWRlci0+ZmFpbGVkKCkpCisgICAgICAgIG1fZ2xvYmFsU2NyaXB0
LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIGZh
bHNlLCB0cnVlKSk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIElmIGFub3RoZXIgbG9hZGVyIGhh
dmUgbm90IHlldCBpbml0aWFsaXplZCB0aGUgZ2xvYmFsIHNjcmlwdCBjb250ZXh0IC0gZG8gc28u
CisgICAgICAgIGlmICghbV9pbm5lckNvbnRleHQtPmxvYWRlZCgpKQorICAgICAgICAgICAgbV9p
bm5lckNvbnRleHQtPmxvYWQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51c2VyQWdlbnQobV9z
Y3JpcHRMb2FkZXItPnVybCgpKSwgbV9zY3JpcHRMb2FkZXItPnNjcmlwdCgpKTsKKyAgICAKKyAg
ICAgICAgbV9nbG9iYWxTY3JpcHQtPnNjaGVkdWxlTG9hZEV2ZW50KG1faW5uZXJDb250ZXh0KTsK
KyAgICB9CisKKyAgICBtX2dsb2JhbFNjcmlwdC0+dW5zZXRQZW5kaW5nQWN0aXZpdHkobV9nbG9i
YWxTY3JpcHQuZ2V0KCkpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOyAvLyBUaGlz
IGZyZWVzIHRoaXMgb2JqZWN0IC0gbXVzdCBiZSB0aGUgbGFzdCBhY3Rpb24gaW4gdGhpcyBmdW5j
dGlvbi4KK30KKworV2ViS2l0R2xvYmFsU2NyaXB0UmVwb3NpdG9yeSYgV2ViS2l0R2xvYmFsU2Ny
aXB0UmVwb3NpdG9yeTo6aW5zdGFuY2UoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoV2Vi
S2l0R2xvYmFsU2NyaXB0UmVwb3NpdG9yeSwgaW5zdGFuY2UsICgpKTsKKyAgICByZXR1cm4gaW5z
dGFuY2U7Cit9CisKK3ZvaWQgV2ViS2l0R2xvYmFsU2NyaXB0UmVwb3NpdG9yeTo6Y29ubmVjdChQ
YXNzUmVmUHRyPFdlYktpdEdsb2JhbFNjcmlwdD4gZ2xvYmFsU2NyaXB0LCBjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaW5zdGFu
Y2UoKS5jb25uZWN0VG9HbG9iYWxTY3JpcHQoZ2xvYmFsU2NyaXB0LCB1cmwsIG5hbWUsIGVjKTsK
K30KKwordm9pZCBXZWJLaXRHbG9iYWxTY3JpcHRSZXBvc2l0b3J5Ojpkb2N1bWVudERlc3Ryb3ll
ZChEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKKyAg
ICBXZWJLaXRHbG9iYWxTY3JpcHRSZXBvc2l0b3J5JiByZXBvc2l0b3J5ID0gaW5zdGFuY2UoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVwb3NpdG9yeS5tX2dsb2JhbFNjcmlwdENv
bnRleHRzLnNpemUoKTsgaSsrKQorICAgICAgICByZXBvc2l0b3J5Lm1fZ2xvYmFsU2NyaXB0Q29u
dGV4dHNbaV0tPnJlbW92ZUZyb21Eb2N1bWVudExpc3QoZG9jdW1lbnQpOworfQorCit2b2lkIFdl
YktpdEdsb2JhbFNjcmlwdFJlcG9zaXRvcnk6OnJlbW92ZUdsb2JhbFNjcmlwdENvbnRleHQoR2xv
YmFsU2NyaXB0Q29udGV4dCogY29udGV4dCkKK3sKKyAgICBXZWJLaXRHbG9iYWxTY3JpcHRSZXBv
c2l0b3J5JiByZXBvc2l0b3J5ID0gaW5zdGFuY2UoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcmVwb3NpdG9yeS5tX2dsb2JhbFNjcmlwdENvbnRleHRzLnNpemUoKTsgaSsrKSB7Cisg
ICAgICAgIGlmIChjb250ZXh0ID09IHJlcG9zaXRvcnkubV9nbG9iYWxTY3JpcHRDb250ZXh0c1tp
XSkgeworICAgICAgICAgICAgcmVwb3NpdG9yeS5tX2dsb2JhbFNjcmlwdENvbnRleHRzLnJlbW92
ZShpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBX
ZWJLaXRHbG9iYWxTY3JpcHRSZXBvc2l0b3J5Ojpjb25uZWN0VG9HbG9iYWxTY3JpcHQoUGFzc1Jl
ZlB0cjxXZWJLaXRHbG9iYWxTY3JpcHQ+IGdsb2JhbFNjcmlwdCwgY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEFTU0VSVChnbG9i
YWxTY3JpcHQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2Fu
QWNjZXNzKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUodXJsKS5nZXQoKSkpOworICAgIC8vIEZldGNo
IGEgc2hhcmVkIGdsb2JhbCBzY3JpcHQgY29ycmVzcG9uZGluZyB0byB0aGlzIFdlYktpdEdvYmFs
U2NyaXB0IG9iamVjdC4KKyAgICBSZWZQdHI8R2xvYmFsU2NyaXB0Q29udGV4dD4gaW5uZXJDb250
ZXh0ID0gZ2V0R2xvYmFsU2NyaXB0Q29udGV4dChuYW1lLCB1cmwpOworCisgICAgaW5uZXJDb250
ZXh0LT5hZGRUb0RvY3VtZW50c0xpc3QoZ2xvYmFsU2NyaXB0LT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpOworICAgIGlmIChpbm5lckNvbnRleHQtPnVybCgpICE9IHVybCkgeworICAgICAgICAv
LyBHbG9iYWwgc2NyaXB0IGFscmVhZHkgZXhpc3RlZCB1bmRlciBhbHRlcm5hdGUgVVJMIC0gcmV0
dXJuIGFuIGVycm9yLgorICAgICAgICBlYyA9IFVSTF9NSVNNQVRDSF9FUlI7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgLy8gSWYgZ2xvYmFsIHNjcmlwdCBpcyBhbHJlYWR5IHJ1bm5pbmcs
IGp1c3Qgc2NoZWR1bGUgYSBsb2FkIGV2ZW50IC0gb3RoZXJ3aXNlLCBraWNrIG9mZiBhIGxvYWRl
ciB0byBsb2FkIHRoZSBzY3JpcHQuCisgICAgaWYgKGlubmVyQ29udGV4dC0+bG9hZGVkKCkpCisg
ICAgICAgIGdsb2JhbFNjcmlwdC0+c2NoZWR1bGVMb2FkRXZlbnQoaW5uZXJDb250ZXh0KTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgUmVmUHRyPFNjcmlwdExvYWRlcj4gbG9hZGVyID0gYWRvcHRSZWYo
bmV3IFNjcmlwdExvYWRlcihnbG9iYWxTY3JpcHQsIGlubmVyQ29udGV4dC5yZWxlYXNlKCkpKTsK
KyAgICAgICAgbG9hZGVyLT5sb2FkKHVybCk7IC8vIFBlbmRpbmcgYWN0aXZpdHkgd2lsbCBrZWVw
IHRoZSBsb2FkZXIgYWxpdmUuCisgICAgfQorfQorCisvLyBDcmVhdGVzIGEgbmV3IEdsb2JhbFNj
cmlwdENvbnRleHQgb3IgcmV0dXJucyBhbiBleGlzdGluZyBvbmUgZnJvbSB0aGUgcmVwb3NpdG9y
eS4KK1Bhc3NSZWZQdHI8R2xvYmFsU2NyaXB0Q29udGV4dD4gV2ViS2l0R2xvYmFsU2NyaXB0UmVw
b3NpdG9yeTo6Z2V0R2xvYmFsU2NyaXB0Q29udGV4dChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IEtVUkwmIHVybCkKK3sKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9IFNlY3Vy
aXR5T3JpZ2luOjpjcmVhdGUodXJsKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9n
bG9iYWxTY3JpcHRDb250ZXh0cy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAobV9nbG9iYWxT
Y3JpcHRDb250ZXh0c1tpXS0+bWF0Y2hlcyhuYW1lLCBvcmlnaW4sIHVybCkpCisgICAgICAgICAg
ICByZXR1cm4gbV9nbG9iYWxTY3JpcHRDb250ZXh0c1tpXTsKKyAgICB9CisKKyAgICBSZWZQdHI8
R2xvYmFsU2NyaXB0Q29udGV4dD4gZ2xvYmFsU2NyaXB0Q29udGV4dCA9IEdsb2JhbFNjcmlwdENv
bnRleHQ6OmNyZWF0ZShuYW1lLCB1cmwsIG9yaWdpbi5yZWxlYXNlKCkpOworICAgIG1fZ2xvYmFs
U2NyaXB0Q29udGV4dHMuYXBwZW5kKGdsb2JhbFNjcmlwdENvbnRleHQuZ2V0KCkpOworICAgIHJl
dHVybiBnbG9iYWxTY3JpcHRDb250ZXh0LnJlbGVhc2UoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdMT0JBTF9TQ1JJUFQpCisKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvZ2xvYmFsc2NyaXB0L1dlYktpdEdsb2JhbFNjcmlwdFJlcG9zaXRvcnkuaCBiL1dl
YkNvcmUvZ2xvYmFsc2NyaXB0L1dlYktpdEdsb2JhbFNjcmlwdFJlcG9zaXRvcnkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTY4OTA1Ci0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9nbG9iYWxzY3JpcHQvV2ViS2l0R2xvYmFsU2NyaXB0UmVwb3NpdG9yeS5oCkBAIC0w
LDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFdlYktpdEdsb2JhbFNjcmlwdFJlcG9zaXRvcnlfaAorI2RlZmlu
ZSBXZWJLaXRHbG9iYWxTY3JpcHRSZXBvc2l0b3J5X2gKKworI2lmIEVOQUJMRShHTE9CQUxfU0NS
SVBUKQorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNv
ZGU7CisKKyAgICBjbGFzcyBEb2N1bWVudDsKKyAgICBjbGFzcyBLVVJMOworICAgIGNsYXNzIEds
b2JhbFNjcmlwdENvbnRleHQ7CisgICAgY2xhc3MgV2ViS2l0R2xvYmFsU2NyaXB0OworICAgIGNs
YXNzIFN0cmluZzsKKworICAgIC8vIEludGVyZmFjZSB0byBhIHJlcG9zaXRvcnkgd2hpY2ggbWFu
YWdlcyByZWZlcmVuY2VzIHRvIHRoZSBzZXQgb2YgYWN0aXZlIGdsb2JhbCBzY3JpcHRzLgorICAg
IGNsYXNzIFdlYktpdEdsb2JhbFNjcmlwdFJlcG9zaXRvcnkgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgLy8gQ29ubmVjdHMgdGhlIHBhc3NlZCBXZWJLaXRHbG9iYWxTY3JpcHQgb2JqZWN0IHdpdGgg
dGhlIHNwZWNpZmllZCBydW5uaW5nIGdsb2JhbCBzY3JpcHQsIGNyZWF0aW5nIGEgbmV3IG9uZSBp
ZiBuZWNlc3NhcnkuCisgICAgICAgIHN0YXRpYyB2b2lkIGNvbm5lY3QoUGFzc1JlZlB0cjxXZWJL
aXRHbG9iYWxTY3JpcHQ+LCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJik7CisKKyAgICAgICAgc3RhdGljIHZvaWQgcmVtb3ZlR2xvYmFsU2NyaXB0Q29udGV4
dChHbG9iYWxTY3JpcHRDb250ZXh0Kik7CisgICAgICAgIHN0YXRpYyB2b2lkIGRvY3VtZW50RGVz
dHJveWVkKERvY3VtZW50Kik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBXZWJLaXRHbG9iYWxT
Y3JpcHRSZXBvc2l0b3J5KCkgeyB9CisgICAgICAgIHN0YXRpYyBXZWJLaXRHbG9iYWxTY3JpcHRS
ZXBvc2l0b3J5JiBpbnN0YW5jZSgpOworICAgICAgICB2b2lkIGNvbm5lY3RUb0dsb2JhbFNjcmlw
dChQYXNzUmVmUHRyPFdlYktpdEdsb2JhbFNjcmlwdD4sIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJp
bmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgUGFzc1JlZlB0cjxHbG9iYWxTY3Jp
cHRDb250ZXh0PiBnZXRHbG9iYWxTY3JpcHRDb250ZXh0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgS1VSTCYpOworCisgICAgICAgIC8vIExpc3Qgb2YgZ2xvYmFsIHNjcmlwdHMuCisgICAgICAg
IC8vIEV4cGVjdGF0aW9uIGlzIHRoYXQgdGhlcmUgd2lsbCBiZSBhIGxpbWl0ZWQgbnVtYmVyIG9m
IGdsb2JhbCBzY3JpcHRzLCBhbmQgc28gdHJhY2tpbmcgdGhlbSBpbiBhIFZlY3RvciBpcyBtb3Jl
IGVmZmljaWVudCB0aGFuIG5lc3RlZCBIYXNoTWFwcy4KKyAgICAgICAgdHlwZWRlZiBWZWN0b3I8
R2xvYmFsU2NyaXB0Q29udGV4dCo+IEdsb2JhbFNjcmlwdENvbnRleHRMaXN0OworICAgICAgICBH
bG9iYWxTY3JpcHRDb250ZXh0TGlzdCBtX2dsb2JhbFNjcmlwdENvbnRleHRzOworCisgICAgfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdMT0JBTF9TQ1JJ
UFQpCisKKyNlbmRpZiAvLyBXZWJLaXRHbG9iYWxTY3JpcHRSZXBvc2l0b3J5X2gKKwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwgYi9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmlkbAppbmRleCA1YWRkYjgzLi5jMDY1MjJjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRE9N
V2luZG93LmlkbAorKysgYi9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbApAQCAtMTY3LDEwICsx
NjcsMTIgQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbRW5h
YmxlZEF0UnVudGltZV0gU3RvcmFnZSBzZXNzaW9uU3RvcmFnZTsKICAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIFtFbmFibGVkQXRSdW50aW1lXSBTdG9yYWdlIGxvY2FsU3RvcmFnZTsKICNlbmRp
ZgorI2lmIGRlZmluZWQoRU5BQkxFX0dMT0JBTF9TQ1JJUFQpICYmIEVOQUJMRV9HTE9CQUxfU0NS
SVBUCisgICAgICAgIGF0dHJpYnV0ZSBbSlNDQ3VzdG9tR2V0dGVyXSBXZWJLaXRHbG9iYWxTY3Jp
cHRDb25zdHJ1Y3RvciBXZWJLaXRHbG9iYWxTY3JpcHQ7IC8vIHVzYWJsZSB3aXRoIHRoZSBuZXcg
b3BlcmF0b3IKKyNlbmRpZgogI2lmIGRlZmluZWQoRU5BQkxFX05PVElGSUNBVElPTlMpICYmIEVO
QUJMRV9OT1RJRklDQVRJT05TCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbRW5hYmxlZEF0
UnVudGltZV0gTm90aWZpY2F0aW9uQ2VudGVyIHdlYmtpdE5vdGlmaWNhdGlvbnM7CiAjZW5kaWYK
LQogI2lmIGRlZmluZWQoRU5BQkxFX09SSUVOVEFUSU9OX0VWRU5UUykgJiYgRU5BQkxFX09SSUVO
VEFUSU9OX0VWRU5UUwogICAgICAgICAvLyBUaGlzIGlzIHRoZSBpbnRlcmZhY2Ugb3JpZW50YXRp
b24gaW4gZGVncmVlcy4gU29tZSBleGFtcGxlcyBhcmU6CiAgICAgICAgIC8vICAwIGlzIHN0cmFp
Z2h0IHVwOyAtOTAgaXMgd2hlbiB0aGUgZGV2aWNlIGlzIHJvdGF0ZWQgOTAgY2xvY2t3aXNlOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaCBiL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJDb250ZXh0LmgKaW5kZXggZjM3ZDQyYy4uNGUzOTFhOSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyQ29udGV4dC5oCkBAIC01OCw2ICs1OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
ICAgICB2aXJ0dWFsIGJvb2wgaXNTaGFyZWRXb3JrZXJDb250ZXh0KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzRGVkaWNhdGVkV29ya2VyQ29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0dsb2JhbFNj
cmlwdENvbnRleHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgICAgIGNvbnN0IEtV
UkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CiAgICAgICAgIEtVUkwgY29tcGxldGVV
UkwoY29uc3QgU3RyaW5nJikgY29uc3Q7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyU2NyaXB0TG9hZGVyLmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIu
Y3BwCmluZGV4IDUyYmFmMmQuLmZkMWE5YjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJTY3JpcHRMb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJTY3JpcHRM
b2FkZXIuY3BwCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpsb2Fk
U3luY2hyb25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpCiAgICAg
aWYgKCFyZXF1ZXN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOworICAgIEFTU0VSVCghc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpKTsKIAogICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25z
IG9wdGlvbnM7CiAgICAgb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzID0gdHJ1ZTsKZGlmZiAtLWdp
dCBhL1dlYktpdC9tYWMvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcgYi9X
ZWJLaXQvbWFjL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCmluZGV4IDlh
M2QzNmIuLjA0ZGVjZGYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvQ29uZmlndXJhdGlvbnMvRmVh
dHVyZURlZmluZXMueGNjb25maWcKKysrIGIvV2ViS2l0L21hYy9Db25maWd1cmF0aW9ucy9GZWF0
dXJlRGVmaW5lcy54Y2NvbmZpZwpAQCAtNDYsNiArNDYsNyBAQCBFTkFCTEVfRE9NX1NUT1JBR0Ug
PSBFTkFCTEVfRE9NX1NUT1JBR0U7CiBFTkFCTEVfRVZFTlRTT1VSQ0UgPSBFTkFCTEVfRVZFTlRT
T1VSQ0U7CiBFTkFCTEVfRklMVEVSUyA9IDsKIEVOQUJMRV9HRU9MT0NBVElPTiA9IDsKK0VOQUJM
RV9HTE9CQUxfU0NSSVBUID0gOwogRU5BQkxFX0lDT05EQVRBQkFTRSA9IEVOQUJMRV9JQ09OREFU
QUJBU0U7CiBFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUiA9IEVOQUJMRV9KQVZBU0NSSVBUX0RF
QlVHR0VSOwogRU5BQkxFX01BVEhNTCA9IDsKQEAgLTY2LDQgKzY3LDQgQEAgRU5BQkxFX1dPUktF
UlMgPSBFTkFCTEVfV09SS0VSUzsKIEVOQUJMRV9YUEFUSCA9IEVOQUJMRV9YUEFUSDsKIEVOQUJM
RV9YU0xUID0gRU5BQkxFX1hTTFQ7CiAKLUZFQVRVUkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX0NB
TlZBUykgJChFTkFCTEVfM0RfUkVOREVSSU5HKSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykg
JChFTkFCTEVfREFUQUJBU0UpICQoRU5BQkxFX0RBVEFHUklEKSAkKEVOQUJMRV9EQVRBTElTVCkg
JChFTkFCTEVfRE9NX1NUT1JBR0UpICQoRU5BQkxFX0VWRU5UU09VUkNFKSAkKEVOQUJMRV9GSUxU
RVJTKSAkKEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJM
RV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9NQVRITUwpICQoRU5BQkxFX05PVElGSUNB
VElPTlMpICQoRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgJChFTkFCTEVfU0hBUkVE
X1dPUktFUlMpICQoRU5BQkxFX1NWRykgJChFTkFCTEVfU1ZHX0FOSU1BVElPTikgJChFTkFCTEVf
U1ZHX0FTX0lNQUdFKSAkKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpICQoRU5BQkxFX1NW
R19GT05UUykgJChFTkFCTEVfU1ZHX0ZPUkVJR05fT0JKRUNUKSAkKEVOQUJMRV9TVkdfVVNFKSAk
KEVOQUJMRV9WSURFTykgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dNTCkgJChFTkFC
TEVfV09SS0VSUykgJChFTkFCTEVfWFBBVEgpICQoRU5BQkxFX1hTTFQpOworRkVBVFVSRV9ERUZJ
TkVTID0gJChFTkFCTEVfM0RfQ0FOVkFTKSAkKEVOQUJMRV8zRF9SRU5ERVJJTkcpICQoRU5BQkxF
X0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9EQVRBQkFTRSkgJChFTkFCTEVfREFUQUdSSUQp
ICQoRU5BQkxFX0RBVEFMSVNUKSAkKEVOQUJMRV9ET01fU1RPUkFHRSkgJChFTkFCTEVfRVZFTlRT
T1VSQ0UpICQoRU5BQkxFX0ZJTFRFUlMpICQoRU5BQkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9H
TE9CQUxfU0NSSVBUKSAkKEVOQUJMRV9JQ09OREFUQUJBU0UpICQoRU5BQkxFX0pBVkFTQ1JJUFRf
REVCVUdHRVIpICQoRU5BQkxFX01BVEhNTCkgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFC
TEVfT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKSAkKEVOQUJMRV9TSEFSRURfV09SS0VSUykgJChF
TkFCTEVfU1ZHKSAkKEVOQUJMRV9TVkdfQU5JTUFUSU9OKSAkKEVOQUJMRV9TVkdfQVNfSU1BR0Up
ICQoRU5BQkxFX1NWR19ET01fT0JKQ19CSU5ESU5HUykgJChFTkFCTEVfU1ZHX0ZPTlRTKSAkKEVO
QUJMRV9TVkdfRk9SRUlHTl9PQkpFQ1QpICQoRU5BQkxFX1NWR19VU0UpICQoRU5BQkxFX1ZJREVP
KSAkKEVOQUJMRV9XRUJfU09DS0VUUykgJChFTkFCTEVfV01MKSAkKEVOQUJMRV9XT1JLRVJTKSAk
KEVOQUJMRV9YUEFUSCkgJChFTkFCTEVfWFNMVCk7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL2J1aWxkLXdlYmtpdCBiL1dlYktpdFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0Cmlu
ZGV4IDZjMTEwNmYuLjY0YWZhODEgMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvYnVp
bGQtd2Via2l0CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CkBAIC01NSw3
ICs1NSw3IEBAIG15ICgkdGhyZWVEQ2FudmFzU3VwcG9ydCwgJHRocmVlRFJlbmRlcmluZ1N1cHBv
cnQsICRjaGFubmVsTWVzc2FnaW5nU3VwcG9ydCwgJGRhCiAgICAgJGphdmFTY3JpcHREZWJ1Z2dl
clN1cHBvcnQsICRtYXRobWxTdXBwb3J0LCAkb2ZmbGluZVdlYkFwcGxpY2F0aW9uU3VwcG9ydCwg
JHNoYXJlZFdvcmtlcnNTdXBwb3J0LCAKICAgICAkc3ZnU3VwcG9ydCwgJHN2Z0FuaW1hdGlvblN1
cHBvcnQsICRzdmdBc0ltYWdlU3VwcG9ydCwgJHN2Z0RPTU9iakNCaW5kaW5nc1N1cHBvcnQsICRz
dmdGb250c1N1cHBvcnQsCiAgICAgJHN2Z0ZvcmVpZ25PYmplY3RTdXBwb3J0LCAkc3ZnVXNlU3Vw
cG9ydCwgJHZpZGVvU3VwcG9ydCwgJHdlYlNvY2tldHNTdXBwb3J0LCAkd21sU3VwcG9ydCwgJHdj
c3NTdXBwb3J0LCAkeGh0bWxtcFN1cHBvcnQsICR3b3JrZXJzU3VwcG9ydCwKLSAgICAkeHBhdGhT
dXBwb3J0LCAkeHNsdFN1cHBvcnQsICRjb3ZlcmFnZVN1cHBvcnQsICRub3RpZmljYXRpb25zU3Vw
cG9ydCk7CisgICAgJHhwYXRoU3VwcG9ydCwgJHhzbHRTdXBwb3J0LCAkY292ZXJhZ2VTdXBwb3J0
LCAkbm90aWZpY2F0aW9uc1N1cHBvcnQsICRnbG9iYWxTY3JpcHRTdXBwb3J0KTsKIAogbXkgQGZl
YXR1cmVzID0gKAogICAgIHsgb3B0aW9uID0+ICIzZC1jYW52YXMiLCBkZXNjID0+ICJUb2dnbGUg
M0QgY2FudmFzIHN1cHBvcnQiLApAQCAtODgsNiArODgsOSBAQCBteSBAZmVhdHVyZXMgPSAoCiAg
ICAgeyBvcHRpb24gPT4gImdlb2xvY2F0aW9uIiwgZGVzYyA9PiAiVG9nZ2xlIEdlb2xvY2F0aW9u
IHN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfR0VPTE9DQVRJT04iLCBkZWZhdWx0
ID0+IGlzR3RrKCksIHZhbHVlID0+IFwkZ2VvbG9jYXRpb25TdXBwb3J0IH0sCiAKKyAgICB7IG9w
dGlvbiA9PiAiZ2xvYmFsLXNjcmlwdCIsIGRlc2MgPT4gIlRvZ2dsZSBHbG9iYWwgU2NyaXB0IFN1
cHBvcnQiLAorICAgICAgZGVmaW5lID0+ICJFTkFCTEVfR0xPQkFMX1NDUklQVCIsIGRlZmF1bHQg
PT4gMCwgdmFsdWUgPT4gXCRnbG9iYWxTY3JpcHRTdXBwb3J0IH0sCisKICAgICB7IG9wdGlvbiA9
PiAiaWNvbi1kYXRhYmFzZSIsIGRlc2MgPT4gIlRvZ2dsZSBJY29uIGRhdGFiYXNlIHN1cHBvcnQi
LAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfSUNPTkRBVEFCQVNFIiwgZGVmYXVsdCA9PiAxLCB2
YWx1ZSA9PiBcJGljb25EYXRhYmFzZVN1cHBvcnQgfSwKIApkaWZmIC0tZ2l0IGEvY29uZmlndXJl
LmFjIGIvY29uZmlndXJlLmFjCmluZGV4IDViODBmYTkuLmU5ZmExYjYgMTAwNjQ0Ci0tLSBhL2Nv
bmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTc2NSw2ICs3NjUsNyBAQCBBTV9DT05E
SVRJT05BTChbRU5BQkxFX1NIQVJFRF9XT1JLRVJTXSxbdGVzdCAiJGVuYWJsZV9zaGFyZWRfd29y
a2VycyIgPSAieWVzIl0pCiBBTV9DT05ESVRJT05BTChbU1ZHX0ZMQUdTXSxbdGVzdCAiJHN2Z19m
bGFncyIgPSAieWVzIl0pCiBBTV9DT05ESVRJT05BTChbSFRNTF9GTEFHU10sW3Rlc3QgIiRodG1s
X2ZsYWdzIiA9ICJ5ZXMiXSkKIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfV0VCX1NPQ0tFVFNdLFt0
ZXN0ICIkZW5hYmxlX3dlYl9zb2NrZXRzIiA9ICJ5ZXMiXSkKK0FNX0NPTkRJVElPTkFMKFtFTkFC
TEVfR0xPQkFMX1NDUklQVF0sW3Rlc3QgIiRlbmFibGVfZ2xvYmFsX3NjcmlwdCIgPSAieWVzIl0p
CiAKICMgR3RrIGNvbmRpdGlvbmFscwogQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9JTlRST1NQRUNU
SU9OXSxbdGVzdCAiJGVuYWJsZV9pbnRyb3NwZWN0aW9uIiA9ICJ5ZXMiXSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>