<?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>152535</bug_id>
          
          <creation_ts>2015-12-23 12:27:39 -0800</creation_ts>
          <short_desc>[Streams API] Refactor builtin internals to prepare support for streams API in worker</short_desc>
          <delta_ts>2016-01-13 01:54:42 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>152066</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>calvaris</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1151123</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-12-23 12:27:39 -0800</bug_when>
    <thetext>To prepare bug 152066, it may be good to refactor the code to:
- enable exposing private builtins to worker
- split to-be-generated code from regular code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151131</commentid>
    <comment_count>1</comment_count>
      <attachid>267851</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-12-23 12:50:06 -0800</bug_when>
    <thetext>Created attachment 267851
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151383</commentid>
    <comment_count>2</comment_count>
      <attachid>267851</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-12-26 17:48:26 -0800</bug_when>
    <thetext>Comment on attachment 267851
Patch

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

&gt; Source/WebCore/bindings/js/WebCoreJSBuiltinInternals.cpp:64
&gt; +#ifndef SKIP_UNUSED_PARAM

What&apos;s this? Shouldn&apos;t we have #else or #if !ENABLE(STREAMS_API) &amp;&amp; !ENABLE(MEDIA_STREAM)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151452</commentid>
    <comment_count>3</comment_count>
      <attachid>267851</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-12-28 06:34:44 -0800</bug_when>
    <thetext>Comment on attachment 267851
Patch

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

I think somebody with more knowledge of JSC than me should review this though.

&gt; Source/WebCore/bindings/js/JSDOMGlobalObject.h:82
&gt; +        void addBuiltinGlobals(JSC::VM&amp;);

Can&apos;t this be private?

&gt; Source/WebCore/bindings/js/JSDOMGlobalObject.h:84
&gt; +        friend void JSBuiltinInternalFunctions::initialize(JSDOMGlobalObject&amp;, JSC::VM&amp;);
&gt; +        friend void JSBuiltinInternalObjects::initialize(JSDOMGlobalObject&amp;, JSC::VM&amp;);

I don&apos;t really like using friend as it usually shows that the design can be improved. Considering that GlobalPropertyInfo is just a structure it wouldn&apos;t make too much harm to make it public and then you only have to solve the issue with addStaticGlobals. That can be quickly solved by adding another method to JSDOMGlobalObject. The issue with this is that every class has the chance to add more static globals, which I guess it can be a problem too. I don&apos;t have a strong opinion, just wanted to understand the pros and cons.

&gt; Source/WebCore/bindings/js/WebCoreJSBuiltinInternals.cpp:142
&gt; +        JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().streamClosedPrivateName(), jsNumber(1), DontDelete | ReadOnly),
&gt; +        JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().streamClosingPrivateName(), jsNumber(2), DontDelete | ReadOnly),
&gt; +        JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().streamErroredPrivateName(), jsNumber(3), DontDelete | ReadOnly),
&gt; +        JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().streamReadablePrivateName(), jsNumber(4), DontDelete | ReadOnly),
&gt; +        JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().streamWaitingPrivateName(), jsNumber(5), DontDelete | ReadOnly),
&gt; +        JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().streamWritablePrivateName(), jsNumber(6), DontDelete | ReadOnly),

I think it is the moment to use once and for all an enum here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151962</commentid>
    <comment_count>4</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-01-02 04:51:05 -0800</bug_when>
    <thetext>Thanks for the feedback.

Note that this patch is a trimmed down version (no IDL change) of rolled out patch for bug 152066. It also ensures ReadableStream private constructors do not get GCed.

Some additional comments below.

&gt; &gt; Source/WebCore/bindings/js/WebCoreJSBuiltinInternals.cpp:64
&gt; &gt; +#ifndef SKIP_UNUSED_PARAM
&gt; 
&gt; What&apos;s this? Shouldn&apos;t we have #else or #if !ENABLE(STREAMS_API) &amp;&amp;
&gt; !ENABLE(MEDIA_STREAM)?

This is indeed equivalent.
It was thought more elegant to define SKIP_UNUSED_PARAM once and reuse it
than to add the multi-if statement several times.
This patch keeps the same strategy.

An alternative might be to define a dummy class definition for the SKIP_UNUSED_PARAM case.

&gt; &gt; Source/WebCore/bindings/js/JSDOMGlobalObject.h:82
&gt; &gt; +        void addBuiltinGlobals(JSC::VM&amp;);
&gt; 
&gt; Can&apos;t this be private?

Good spot, I will fix that.

&gt; &gt; Source/WebCore/bindings/js/JSDOMGlobalObject.h:84
&gt; &gt; +        friend void JSBuiltinInternalFunctions::initialize(JSDOMGlobalObject&amp;, JSC::VM&amp;);
&gt; &gt; +        friend void JSBuiltinInternalObjects::initialize(JSDOMGlobalObject&amp;, JSC::VM&amp;);
&gt; 
&gt; I don&apos;t really like using friend as it usually shows that the design can be
&gt; improved. Considering that GlobalPropertyInfo is just a structure it
&gt; wouldn&apos;t make too much harm to make it public and then you only have to
&gt; solve the issue with addStaticGlobals. That can be quickly solved by adding
&gt; another method to JSDOMGlobalObject. The issue with this is that every class
&gt; has the chance to add more static globals, which I guess it can be a problem
&gt; too. I don&apos;t have a strong opinion, just wanted to understand the pros and
&gt; cons.

friend usage seems fine here as we basically split code from a single class in severals, as some parts can be best generated automatically.(JSBuiltinInternalFunctions).
For the other one, JSBuiltinInternalObjects purpose is purely syntactic. It could also stay inlined in JSDOMGlobalObject.
I think it helps keep the code a bit cleaner and easier to read. But I do not have a strong opinion.

JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().streamClosedPrivateName(), jsNumber(1), DontDelete | ReadOnly),
&gt; &gt; +        JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().streamClosingPrivateName(), jsNumber(2), DontDelete | ReadOnly),
&gt; &gt; +        JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().streamErroredPrivateName(), jsNumber(3), DontDelete | ReadOnly),
&gt; &gt; +        JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().streamReadablePrivateName(), jsNumber(4), DontDelete | ReadOnly),
&gt; &gt; +        JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().streamWaitingPrivateName(), jsNumber(5), DontDelete | ReadOnly),
&gt; &gt; +        JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().streamWritablePrivateName(), jsNumber(6), DontDelete | ReadOnly),
&gt; 
&gt; I think it is the moment to use once and for all an enum here.

Can you elaborate on the benefit?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152316</commentid>
    <comment_count>5</comment_count>
      <attachid>268191</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-01-04 08:11:41 -0800</bug_when>
    <thetext>Created attachment 268191
Fixing private and removing one friend</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152328</commentid>
    <comment_count>6</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2016-01-04 08:46:27 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().
&gt; streamClosedPrivateName(), jsNumber(1), DontDelete | ReadOnly),
&gt; &gt; &gt; +        JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().streamClosingPrivateName(), jsNumber(2), DontDelete | ReadOnly),
&gt; &gt; &gt; +        JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().streamErroredPrivateName(), jsNumber(3), DontDelete | ReadOnly),
&gt; &gt; &gt; +        JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().streamReadablePrivateName(), jsNumber(4), DontDelete | ReadOnly),
&gt; &gt; &gt; +        JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().streamWaitingPrivateName(), jsNumber(5), DontDelete | ReadOnly),
&gt; &gt; &gt; +        JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().streamWritablePrivateName(), jsNumber(6), DontDelete | ReadOnly),
&gt; &gt; 
&gt; &gt; I think it is the moment to use once and for all an enum here.
&gt; 
&gt; Can you elaborate on the benefit?

We are creating an &quot;enumeration&quot; in JS by assigning a name to a value. I think that value should be taken from an enumeration in C++ mimicing the same values.

The benefits I see is readability and I think it is a bit less error prone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152687</commentid>
    <comment_count>7</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-01-05 01:04:53 -0800</bug_when>
    <thetext>&gt; We are creating an &quot;enumeration&quot; in JS by assigning a name to a value. I
&gt; think that value should be taken from an enumeration in C++ mimicing the
&gt; same values.
&gt; 
&gt; The benefits I see is readability and I think it is a bit less error prone.

I do not have any strong opinion on this.
I think the way it is now is a tad clearer, but difference is rather small.
Let&apos;s see what others think.

Any other comment/review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154681</commentid>
    <comment_count>8</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-01-12 07:00:34 -0800</bug_when>
    <thetext>Ping review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155046</commentid>
    <comment_count>9</comment_count>
      <attachid>268191</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-13 01:54:39 -0800</bug_when>
    <thetext>Comment on attachment 268191
Fixing private and removing one friend

Clearing flags on attachment: 268191

Committed r194960: &lt;http://trac.webkit.org/changeset/194960&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155047</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-13 01:54:42 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267851</attachid>
            <date>2015-12-23 12:50:06 -0800</date>
            <delta_ts>2016-01-04 08:11:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152535-20151223214928.patch</filename>
            <type>text/plain</type>
            <size>29836</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0Mzg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzI5NDUxYTgwZTY4Mjcw
Y2EwMWY4ZjFiZjYxY2UyOTc4ZTA1OWM4Yy4uMjNhYTUxMGY0ZDQzNTg1ZmRjMzlmYTA2MjgzZjRk
ODM0NzM4MDQxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE1LTEyLTIzICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgW1N0cmVh
bXMgQVBJXSBSZWZhY3RvciBidWlsdGluIGludGVybmFscyB0byBwcmVwYXJlIHN1cHBvcnQgZm9y
IHN0cmVhbXMgQVBJIGluIHdvcmtlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUyNTM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTW92aW5nIHRoZSBjb2RlIHRoYXQgbGlua3MgaW50ZXJuYWwgZnVuY3Rp
b25zIHRvIHRoZSBHbG9iYWxPYmplY3QgaW4gV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAu
CisgICAgICAgIFRoaXMgZmlsZSBzaG91bGQgYmUgZ2VuZXJhdGVkIGJ5IHRoZSBidWlsdGluIGdl
bmVyYXRvciBvbmNlIHJlZmFjdG9yaW5nIGlzIGRvbmUuCisgICAgICAgIFRoaXMgY29kZSBpcyBs
b2NhdGVkIGluIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjppbml0aWFsaXplLgorCisgICAg
ICAgIE1vdmluZyBhbHNvIHRoZSBjb2RlIGZvciBvdGhlciBpbnRlcm5hbCBvYmplY3RzIHVzZWQg
Zm9yIGJ1aWx0aW5zLgorICAgICAgICBUaGlzIGNvZGUgY2Fubm90IGJlIGdlbmVyYXRlZCBieSB0
aGUgYnVpbHRpbiBnZW5lcmF0b3IuCisgICAgICAgIFRoaXMgY29kZSBpcyBsb2NhdGVkIGluIEpT
QnVpbHRpbkludGVybmFsT2JqZWN0czo6aW5pdGlhbGl6ZS4KKyAgICAgICAgRW5zdXJlZCBwcml2
YXRlIGNvbnRyb2xsZXIgYW5kIHJlYWRlciBjb25zdHJ1Y3RvcnMgZG8gbm90IGdldCBnYXJiYWdl
IGNvbGxlY3RlZC4KKworICAgICAgICBObyBjaGFuZ2UgaW4gYmVoYXZpb3IsIGV4Y2VwdCB0aGF0
IHByaXZhdGUgYnVpbHRpbnMgYXJlIHVzYWJsZSBpbiB3b3JrZXJzIChidXQgbm90IGFjdHVhbGx5
IHVzZWQpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OkpTRE9NR2xvYmFsT2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0OjphZGRCdWlsdGluR2xvYmFs
cyk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2lu
ZG93QmFzZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dC
YXNlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jh
c2UuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6
SlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SlNCdWlsdGlu
SW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQnVpbHRpbklu
dGVybmFsRnVuY3Rpb25zOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQnVpbHRp
bkludGVybmFsT2JqZWN0czo6dmlzaXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNCdWlsdGluSW50
ZXJuYWxPYmplY3RzOjppbml0aWFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3Jl
SlNCdWlsdGluSW50ZXJuYWxzLmg6CisgICAgICAgICogYmluZGluZ3MvanMvV2ViQ29yZUpTQnVp
bHRpbnMuaDoKKwogMjAxNS0xMi0yMyAgQ2hyaXMgQWxqb3VkaSA8Y2hyaXNAY2hyaXNtYXRpYy5p
bz4gYW5kIEFsZXggQ2hyaXN0ZW5zZW4gPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAg
ICAgIENvbnRlbnQgYmxvY2tlcnMgc2hvdWxkIGJlIGFibGUgdG8gcHJvbW90ZSBodHRwIHRvIGh0
dHBzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDM1NmNjNjIzNDBhMjU4ZGU2YjRlZjYzNWVjZjFi
MTI5YjEzNDBjNWQuLmMzODE1NjIzYWNhNGIyM2IyYjM1ODUwMzYwYjJlZmI4Y2RlZjZhZjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMjU2LDYgKzEyNTYsNyBAQCBzZXQoV2ViQ29yZV9TT1VS
Q0VTCiAgICAgYmluZGluZ3MvanMvU2NyaXB0R2xvYmFsT2JqZWN0LmNwcAogICAgIGJpbmRpbmdz
L2pzL1NjcmlwdFN0YXRlLmNwcAogICAgIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHAKKyAgICBiaW5kaW5ncy9qcy9XZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcAogICAg
IGJpbmRpbmdzL2pzL1dlYkNvcmVKU0J1aWx0aW5zLmNwcAogICAgIGJpbmRpbmdzL2pzL1dlYkNv
cmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKICAgICBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRD
b250cm9sbGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9q
L1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3Jl
LnZjeHByb2oKaW5kZXggYjU5YWI4NmFkODg2ODIzZTlkOGY1NzNjNzE2MzFmZDNkZTg5MTc0NS4u
Y2MyMWNlZTFjZjlmOTU1YmM2NTZhY2U0YWJmNmFmZjY0ZjBmODhlNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBAIC0xOTAyOCw2ICsxOTAy
OCwyMCBAQAogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJv
bUJ1aWxkPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21C
dWlsZD4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJpbmRp
bmdzXGpzXFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwIj4KKyAgICAgIDxFeGNsdWRlZEZy
b21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVn
fFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVp
bGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQn
Ij50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfFdp
bjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWly
b3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWls
ZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnU3VmZml4
fFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVp
bGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1ZmZp
eHx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWls
ZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2lu
MzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+
dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfFdp
bjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNh
aXJvfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1
aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlv
bnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1
aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlv
bnx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJpbmRpbmdzXGpzXFdlYkNvcmVKU0J1aWx0aW5zLmNwcCI+
CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAg
ICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nRGVidWd8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNGEyNmJm
OTM1NDJkYmQ2Zjc0NWI3ZDhkYmExNjVjOGY4MTMwZTAxOS4uMTBhYjE2OTBlNWI4ZDNlZjRlNGQw
ZTFlNmYyYTY1M2VjNjQ3NDQwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ4MSw2ICsxNDgxLDcgQEAKIAkJNDBFQ0FFN0Ux
NkI4QjY3MjAwQzM2MTAzIC8qIEpTRE9NRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQwRUNBRTdEMTZCOEI2NzIwMEMzNjEwMyAvKiBKU0RPTUVy
cm9yLmggKi87IH07CiAJCTQwRUNBRTgxMTZCOEI2OEEwMEMzNjEwMyAvKiBKU0RPTUVycm9yLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQwRUNBRTgw
MTZCOEI2OEEwMEMzNjEwMyAvKiBKU0RPTUVycm9yLmNwcCAqLzsgfTsKIAkJNDEwQjdFNzIxMDQ1
RkFCMDAwRDgyMjRGIC8qIEpTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMEI3RTcxMTA0NUZBQjAwMEQ4MjI0RiAv
KiBKU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAgKi87IH07CisJCTQxMEQzMzI0MUMxOTk4NTAwMEY3
RkRFMiAvKiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMEQzMzIzMUMxOTk4NDEwMEY3RkRFMiAvKiBX
ZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcCAqLzsgfTsKIAkJNDEyMzA4MUIxMzhDNDI5NzAw
QkNDRkNBIC8qIFdlYkNvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGMTlCMUEwODI0NUU1QTAwMUU5QUJDIC8qIFdlYkNvcmUu
ZnJhbWV3b3JrICovOyB9OwogCQk0MTIzMDkxMzEzOEM0MkZGMDBCQ0NGQ0EgLyogSmF2YVNjcmlw
dENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjgyMTYyOTkwMjlGNEZCNTAxMDAwMTMxIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1l
d29yayAqLzsgfTsKIAkJNDEyN0Q1MzcwRjhBQUIxRDAwRTQyNEY1IC8qIFNjcmlwdFN0YXRlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMjdENTM2
MEY4QUFCMUQwMEU0MjRGNSAvKiBTY3JpcHRTdGF0ZS5jcHAgKi87IH07CkBAIC04ODM3LDYgKzg4
MzgsNyBAQAogCQk0MEVDQUU3RDE2QjhCNjcyMDBDMzYxMDMgLyogSlNET01FcnJvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUVycm9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQwRUNBRTgwMTZCOEI2OEEwMEMzNjEwMyAvKiBKU0RPTUVycm9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NRXJyb3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTBCN0U3MTEwNDVGQUIwMDBEODIyNEYgLyog
SlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0MTBEMzMyMzFDMTk5ODQxMDBGN0ZERTIgLyogV2ViQ29yZUpTQnVpbHRpbkludGVybmFs
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJDb3JlSlNCdWls
dGluSW50ZXJuYWxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDExODlFRjcx
QUQ4MjMyODAwQjkwQTBEIC8qIFJlYWRhYmxlU3RyZWFtQ29udHJvbGxlci5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gUmVhZGFibGVTdHJlYW1Db250cm9sbGVyLmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDEyN0Q1MzYwRjhBQUIxRDAwRTQyNEY1IC8qIFNjcmlwdFN0YXRl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdFN0YXRlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEyOURGODExQkI1Qjc5QjAwMzIyQTE2
IC8qIFJlYWRhYmxlU3RyZWFtQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIxOTc0LDYgKzIxOTc2LDcgQEAKIAkJCQlBNzVFNDk3NDEwNzUyQUNCMDBDOUI4
OTYgLyogU2VyaWFsaXplZFNjcmlwdFZhbHVlLmggKi8sCiAJCQkJNDE5QkU3NTIxQkM3RjNEQjAw
RTFDODVCIC8qIFdlYkNvcmVCdWlsdGluTmFtZXMuaCAqLywKIAkJCQk0MTlCRTc1MzFCQzdGM0RC
MDBFMUM4NUIgLyogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oICovLAorCQkJCTQxMEQzMzIz
MUMxOTk4NDEwMEY3RkRFMiAvKiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcCAqLywKIAkJ
CQk0MTlCRTc1NDFCQzdGM0RCMDBFMUM4NUIgLyogV2ViQ29yZUpTQnVpbHRpbnMuY3BwICovLAog
CQkJCTQxOUJFNzU1MUJDN0YzREIwMEUxQzg1QiAvKiBXZWJDb3JlSlNCdWlsdGlucy5oICovLAog
CQkJCUJDNTNEOTEwMTE0MzEwQ0MwMDBEODE3RSAvKiBXZWJDb3JlSlNDbGllbnREYXRhLmggKi8s
CkBAIC0zMDk1OCw2ICszMDk2MSw3IEBACiAJCQkJNTM2RDVBMjUxOTNGNDBGQzAwQ0U0Q0FCIC8q
IFNvdXJjZVNpemVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUQwMUEyN0FEMTBDOUJGRDgw
MDAyNkE0MiAvKiBTcGFjZVNwbGl0U3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTYyNkNE
RTBFMTE0MDQyNEMwMDFFNUE2OCAvKiBTcGF0aWFsTmF2aWdhdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk0MTBEMzMyNDFDMTk5ODUwMDBGN0ZERTIgLyogV2ViQ29yZUpTQnVpbHRpbkludGVy
bmFscy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBQTJBNUFENTE2QTQ4NjE0MDA5NzVBMjUgLyog
U3BlZWNoU3ludGhlc2lzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFBMkE1QUQzMTZBNDg2MEQw
MDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXNFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
QTJBNUFEMTE2QTQ4NjA3MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmNwcCBp
biBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01HbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9i
YWxPYmplY3QuY3BwCmluZGV4IGQyYjMwZTRmNGE0NzE3ZTA4ZDIyZDVkNDMxYmYyNDk2MGFhZDZh
ZWIuLmRjNTNhYjExZWRlMGQ5NzZkNzUyZWYwNTE5MWVlY2VlYTVkZDA0OTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKQEAgLTMxLDYg
KzMxLDcgQEAKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0
ZW5lci5oIgogI2luY2x1ZGUgIkpTV29ya2VyR2xvYmFsU2NvcGUuaCIKKyNpbmNsdWRlICJXZWJD
b3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSAiV29ya2VyR2xvYmFsU2NvcGUuaCIKIAogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKQEAgLTQ0LDYgKzQ1LDcgQEAgSlNET01HbG9iYWxPYmplY3Q6OkpT
RE9NR2xvYmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8
RE8KICAgICAsIG1fY3VycmVudEV2ZW50KDApCiAgICAgLCBtX3dvcmxkKHdvcmxkKQogICAgICwg
bV93b3JsZElzTm9ybWFsKG1fd29ybGQtPmlzTm9ybWFsKCkpCisgICAgLCBtX2J1aWx0aW5JbnRl
cm5hbEZ1bmN0aW9ucyh2bSkKIHsKICAgICBBU1NFUlQobV93b3JsZCk7CiB9CkBAIC01MywxNiAr
NTUsMjYgQEAgdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiAg
ICAgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihjZWxsKS0+SlNET01HbG9iYWxPYmpl
Y3Q6On5KU0RPTUdsb2JhbE9iamVjdCgpOwogfQogCit2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojph
ZGRCdWlsdGluR2xvYmFscyhWTSYgdm0pCit7CisgICAgbV9idWlsdGluSW50ZXJuYWxGdW5jdGlv
bnMuaW5pdGlhbGl6ZSgqdGhpcywgdm0pOworICAgIG1fYnVpbHRpbkludGVybmFsT2JqZWN0cy5p
bml0aWFsaXplKCp0aGlzLCB2bSk7Cit9CisKIHZvaWQgSlNET01HbG9iYWxPYmplY3Q6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAg
QVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOworCisgICAgYWRkQnVpbHRpbkdsb2JhbHModm0pOwog
fQogCiB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTT2Jq
ZWN0KiB0aGlzVmFsdWUpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIHRoaXNWYWx1
ZSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOworCisgICAgYWRkQnVpbHRpbkdsb2Jh
bHModm0pOwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBKU0RPTUdsb2JhbE9iamVjdDo6
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CkBAIC04Niw2ICs5OCw5IEBAIHZvaWQgSlNE
T01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKIAogICAgIGZvciAoYXV0byYgY29uc3RydWN0b3IgOiB0aGlzT2JqZWN0LT5jb25z
dHJ1Y3RvcnMoKS52YWx1ZXMoKSkKICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmNvbnN0cnVjdG9y
KTsKKworICAgIHRoaXNPYmplY3QtPm1fYnVpbHRpbkludGVybmFsRnVuY3Rpb25zLnZpc2l0KHZp
c2l0b3IpOworICAgIHRoaXNPYmplY3QtPm1fYnVpbHRpbkludGVybmFsT2JqZWN0cy52aXNpdCh2
aXNpdG9yKTsKIH0KIAogdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6c2V0Q3VycmVudEV2ZW50KEV2
ZW50KiBjdXJyZW50RXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUdsb2JhbE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01H
bG9iYWxPYmplY3QuaAppbmRleCBlNmI1M2RiN2Q4OTgzOTM5YzM5M2Y1NjFkYTZiN2Q4NThlZmQx
NGE4Li45ZThkYTk2MjBmZGM1ZmFiZDRmOGJiOWEzY2E1MmE0Nzk3MmU0YjZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKQEAgLTI4LDYgKzI4
LDcgQEAKICNkZWZpbmUgSlNET01HbG9iYWxPYmplY3RfaAogCiAjaW5jbHVkZSAiUGxhdGZvcm1F
eHBvcnRNYWNyb3MuaCIKKyNpbmNsdWRlICJXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgiCiAj
aW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC03OCw2ICs3OSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgMCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6R2xvYmFsT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgICAg
ICB9CiAKKyAgICAgICAgdm9pZCBhZGRCdWlsdGluR2xvYmFscyhKU0M6OlZNJik7CisgICAgICAg
IGZyaWVuZCB2b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjppbml0aWFsaXplKEpTRE9N
R2xvYmFsT2JqZWN0JiwgSlNDOjpWTSYpOworICAgICAgICBmcmllbmQgdm9pZCBKU0J1aWx0aW5J
bnRlcm5hbE9iamVjdHM6OmluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlZNJik7
CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEpTRE9NU3RydWN0dXJlTWFwIG1fc3RydWN0dXJl
czsKICAgICAgICAgSlNET01Db25zdHJ1Y3Rvck1hcCBtX2NvbnN0cnVjdG9yczsKQEAgLTg1LDYg
KzkwLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBFdmVudCogbV9jdXJyZW50RXZl
bnQ7CiAgICAgICAgIGNvbnN0IFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IG1fd29ybGQ7CiAgICAg
ICAgIGJvb2wgbV93b3JsZElzTm9ybWFsOworCisgICAgICAgIEpTQnVpbHRpbkludGVybmFsRnVu
Y3Rpb25zIG1fYnVpbHRpbkludGVybmFsRnVuY3Rpb25zOworICAgICAgICBKU0J1aWx0aW5JbnRl
cm5hbE9iamVjdHMgbV9idWlsdGluSW50ZXJuYWxPYmplY3RzOwogICAgIH07CiAKICAgICB0ZW1w
bGF0ZTxjbGFzcyBDb25zdHJ1Y3RvckNsYXNzPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93QmFzZS5jcHAKaW5kZXggYzIwYTA1ZDhiNDdlZmRkY2ZiNGIwZmZhYTYz
Y2M4YmZhZTk5YjcxYy4uM2E1M2VkY2VhOTMwODFkZTdjNDQ1ZjEyNzYyZWEyNGUyZGY0ODAyZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCkBA
IC01MiwxNyArNTIsNiBAQAogI2luY2x1ZGUgIldlYlNhZmVJbmNyZW1lbnRhbFN3ZWVwZXJJT1Mu
aCIKICNlbmRpZgogCi0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotI2luY2x1ZGUgIkpTUmVhZGFi
bGVTdHJlYW1Qcml2YXRlQ29uc3RydWN0b3JzLmgiCi0jaW5jbHVkZSAiUmVhZGFibGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGlucy5oIgotI2luY2x1ZGUgIlN0cmVhbUludGVybmFsc0J1aWx0aW5zLmgi
Ci0jaW5jbHVkZSAiV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIgotI2VuZGlmCi0K
LSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotI2luY2x1ZGUgIlJUQ1BlZXJDb25uZWN0aW9uSW50
ZXJuYWxzQnVpbHRpbnMuaCIKLSNlbmRpZgotCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC04MSw3ICs3MCw2IEBAIEpTRE9NV2luZG93QmFzZTo6SlNET01X
aW5kb3dCYXNlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8RE9NV2lu
CiAgICAgLCBtX3dpbmRvd0Nsb3NlV2F0Y2hwb2ludHMoKHdpbmRvdyAmJiB3aW5kb3ctPmZyYW1l
KCkpID8gSXNXYXRjaGVkIDogSXNJbnZhbGlkYXRlZCkKICAgICAsIG1fd3JhcHBlZCh3aW5kb3cp
CiAgICAgLCBtX3NoZWxsKHNoZWxsKQotICAgICwgbV9wcml2YXRlRnVuY3Rpb25zKHZtKQogewog
fQogCkBAIC05MCw0NyArNzgsOSBAQCB2b2lkIEpTRE9NV2luZG93QmFzZTo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCkKICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSwgc2hlbGwpOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKIAotICAgIG1f
cHJpdmF0ZUZ1bmN0aW9ucy5pbml0KCp0aGlzKTsKLQotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkg
fHwgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50RGF0YSA9
ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotI2VuZGlmCi0K
ICAgICBHbG9iYWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFsc1tdID0gewogICAgICAgICBHbG9i
YWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+ZG9jdW1lbnQsIGpzTnVsbCgpLCBEb250
RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVy
dHlOYW1lcy0+d2luZG93LCBtX3NoZWxsLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAotI2lmIEVO
QUJMRShTVFJFQU1TX0FQSSkKLSAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKGNsaWVudERhdGEu
YnVpbHRpbk5hbWVzKCkuc3RyZWFtQ2xvc2VkUHJpdmF0ZU5hbWUoKSwganNOdW1iZXIoMSksIERv
bnREZWxldGUgfCBSZWFkT25seSksCi0gICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhjbGllbnRE
YXRhLmJ1aWx0aW5OYW1lcygpLnN0cmVhbUNsb3NpbmdQcml2YXRlTmFtZSgpLCBqc051bWJlcigy
KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKLSAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKGNs
aWVudERhdGEuYnVpbHRpbk5hbWVzKCkuc3RyZWFtRXJyb3JlZFByaXZhdGVOYW1lKCksIGpzTnVt
YmVyKDMpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAotICAgICAgICBHbG9iYWxQcm9wZXJ0eUlu
Zm8oY2xpZW50RGF0YS5idWlsdGluTmFtZXMoKS5zdHJlYW1SZWFkYWJsZVByaXZhdGVOYW1lKCks
IGpzTnVtYmVyKDQpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAotICAgICAgICBHbG9iYWxQcm9w
ZXJ0eUluZm8oY2xpZW50RGF0YS5idWlsdGluTmFtZXMoKS5zdHJlYW1XYWl0aW5nUHJpdmF0ZU5h
bWUoKSwganNOdW1iZXIoNSksIERvbnREZWxldGUgfCBSZWFkT25seSksCi0gICAgICAgIEdsb2Jh
bFByb3BlcnR5SW5mbyhjbGllbnREYXRhLmJ1aWx0aW5OYW1lcygpLnN0cmVhbVdyaXRhYmxlUHJp
dmF0ZU5hbWUoKSwganNOdW1iZXIoNiksIERvbnREZWxldGUgfCBSZWFkT25seSksCi0gICAgICAg
IEdsb2JhbFByb3BlcnR5SW5mbyhjbGllbnREYXRhLmJ1aWx0aW5OYW1lcygpLlJlYWRhYmxlU3Ry
ZWFtQ29udHJvbGxlclByaXZhdGVOYW1lKCksIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQ29udHJvbGxl
clByaXZhdGVDb25zdHJ1Y3Rvcih2bSwgKnRoaXMpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAot
ICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oY2xpZW50RGF0YS5idWlsdGluTmFtZXMoKS5SZWFk
YWJsZVN0cmVhbVJlYWRlclByaXZhdGVOYW1lKCksIGNyZWF0ZVJlYWRhYmxlU3RyZWFtUmVhZGVy
UHJpdmF0ZUNvbnN0cnVjdG9yKHZtLCAqdGhpcyksIERvbnREZWxldGUgfCBSZWFkT25seSksCi0j
ZGVmaW5lIERFQ0xBUkVfR0xPQkFMX1NUQVRJQyhuYW1lKVwKLSAgICAgICAgR2xvYmFsUHJvcGVy
dHlJbmZvKFwKLSAgICAgICAgICAgIGNsaWVudERhdGEuYnVpbHRpbkZ1bmN0aW9ucygpLnJlYWRh
YmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMoKS5uYW1lIyNQcml2YXRlTmFtZSgpLCBtX3ByaXZh
dGVGdW5jdGlvbnMucmVhZGFibGVTdHJlYW1JbnRlcm5hbHMoKS5tXyMjbmFtZSMjRnVuY3Rpb24u
Z2V0KCkgLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAotICAgICAgICBXRUJDT1JFX0ZPUkVBQ0hf
UkVBREFCTEVTVFJFQU1JTlRFUk5BTFNfQlVJTFRJTl9GVU5DVElPTl9OQU1FKERFQ0xBUkVfR0xP
QkFMX1NUQVRJQykKLSN1bmRlZiBERUNMQVJFX0dMT0JBTF9TVEFUSUMKLSNkZWZpbmUgREVDTEFS
RV9HTE9CQUxfU1RBVElDKG5hbWUpXAotICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oXAotICAg
ICAgICAgICAgY2xpZW50RGF0YS5idWlsdGluRnVuY3Rpb25zKCkuc3RyZWFtSW50ZXJuYWxzQnVp
bHRpbnMoKS5uYW1lIyNQcml2YXRlTmFtZSgpLCBtX3ByaXZhdGVGdW5jdGlvbnMuc3RyZWFtSW50
ZXJuYWxzKCkubV8jI25hbWUjI0Z1bmN0aW9uLmdldCgpICwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
KSwKLSAgICAgICAgV0VCQ09SRV9GT1JFQUNIX1NUUkVBTUlOVEVSTkFMU19CVUlMVElOX0ZVTkNU
SU9OX05BTUUoREVDTEFSRV9HTE9CQUxfU1RBVElDKQotI3VuZGVmIERFQ0xBUkVfR0xPQkFMX1NU
QVRJQwotI2RlZmluZSBERUNMQVJFX0dMT0JBTF9TVEFUSUMobmFtZSlcCi0gICAgICAgIEdsb2Jh
bFByb3BlcnR5SW5mbyhcCi0gICAgICAgICAgICBjbGllbnREYXRhLmJ1aWx0aW5GdW5jdGlvbnMo
KS53cml0YWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zKCkubmFtZSMjUHJpdmF0ZU5hbWUoKSwg
bV9wcml2YXRlRnVuY3Rpb25zLndyaXRhYmxlU3RyZWFtSW50ZXJuYWxzKCkubV8jI25hbWUjI0Z1
bmN0aW9uLmdldCgpICwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKLSAgICAgICAgV0VCQ09SRV9G
T1JFQUNIX1dSSVRBQkxFU1RSRUFNSU5URVJOQUxTX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShERUNM
QVJFX0dMT0JBTF9TVEFUSUMpCi0jdW5kZWYgREVDTEFSRV9HTE9CQUxfU1RBVElDCi0jZW5kaWYK
LSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotI2RlZmluZSBERUNMQVJFX0dMT0JBTF9TVEFUSUMo
bmFtZSlcCi0gICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhcCi0gICAgICAgICAgICBjbGllbnRE
YXRhLmJ1aWx0aW5GdW5jdGlvbnMoKS5ydGNQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5z
KCkubmFtZSMjUHJpdmF0ZU5hbWUoKSwgbV9wcml2YXRlRnVuY3Rpb25zLnJ0Y1BlZXJDb25uZWN0
aW9uSW50ZXJuYWxzKCkubV8jI25hbWUjI0Z1bmN0aW9uLmdldCgpICwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5KSwKLSAgICAgICAgV0VCQ09SRV9GT1JFQUNIX1JUQ1BFRVJDT05ORUNUSU9OSU5URVJO
QUxTX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShERUNMQVJFX0dMT0JBTF9TVEFUSUMpCi0jdW5kZWYg
REVDTEFSRV9HTE9CQUxfU1RBVElDCi0jZW5kaWYKICAgICB9OwogCiAgICAgYWRkU3RhdGljR2xv
YmFscyhzdGF0aWNHbG9iYWxzLCBXVEZfQVJSQVlfTEVOR1RIKHN0YXRpY0dsb2JhbHMpKTsKQEAg
LTE0MSw3ICs5MSw2IEBAIHZvaWQgSlNET01XaW5kb3dCYXNlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgSlNET01XaW5kb3dCYXNlKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93QmFzZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHRoaXNPYmplY3QtPm1fcHJpdmF0ZUZ1bmN0
aW9ucy52aXNpdCh2aXNpdG9yKTsKIH0KIAogdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OmRlc3Ryb3ko
SlNDZWxsKiBjZWxsKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jh
c2UuaAppbmRleCBkNjk5YTVhZTU3YjdmNzIyZWFiYTQ4ODI3MDZjMWE0ZTEwMWYzY2Q4Li45YzU3
YTZjOTNjZjNmNGEzNWE0OGVjYjc5Y2FlOWNmNjhiYThmZTIxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaApAQCAtMjIsNyArMjIsNiBAQAogCiAjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKLSNp
bmNsdWRlICJXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgiCiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtODYsOCArODUsNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICAgICAgUmVmUHRyPERPTVdpbmRvdz4gbV93cmFwcGVkOwogICAgICAg
ICBKU0RPTVdpbmRvd1NoZWxsKiBtX3NoZWxsOwotCi0gICAgICAgIEpTQnVpbHRpbkludGVybmFs
RnVuY3Rpb25zIG1fcHJpdmF0ZUZ1bmN0aW9uczsKICAgICB9OwogCiAgICAgLy8gUmV0dXJucyBh
IEpTRE9NV2luZG93IG9yIGpzTnVsbCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9XZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1dlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU0ZTQz
MWIwMmJmNTdlMzI0N2VkYzU5OGUwZDc0ZTViMmJhYWRmNmUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcApA
QCAtMCwwICsxLDE1NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTUsIENhbm9uIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiAgYXJlIG1ldDoKKyAqICAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQ2Fub24gSW5jLiBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKyAqICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQ0FO
T04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqICBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICog
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKyAqICBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSCisgKiAgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqICBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaCIKKworI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0
LmgiCisjaW5jbHVkZSAiSlNSZWFkYWJsZVN0cmVhbVByaXZhdGVDb25zdHJ1Y3RvcnMuaCIKKyNp
bmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCisjaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRv
cklubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CisjaW5j
bHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OkpT
QnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mIHYpCisgICAgOiB2bSh2KQorI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pCisgICAgLCBtX3J0Y1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzRnVu
Y3Rpb25zKHZtKQorI2VuZGlmCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgICwgbV9yZWFk
YWJsZVN0cmVhbUludGVybmFsc0Z1bmN0aW9ucyh2bSkKKyAgICAsIG1fc3RyZWFtSW50ZXJuYWxz
RnVuY3Rpb25zKHZtKQorICAgICwgbV93cml0YWJsZVN0cmVhbUludGVybmFsc0Z1bmN0aW9ucyh2
bSkKKyNlbmRpZgoreworfQorCit2b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNp
dChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
CisgICAgbV9ydGNQZWVyQ29ubmVjdGlvbkludGVybmFsc0Z1bmN0aW9ucy52aXNpdCh2aXNpdG9y
KTsKKyNlbmRpZgorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBtX3JlYWRhYmxlU3RyZWFt
SW50ZXJuYWxzRnVuY3Rpb25zLnZpc2l0KHZpc2l0b3IpOworICAgIG1fc3RyZWFtSW50ZXJuYWxz
RnVuY3Rpb25zLnZpc2l0KHZpc2l0b3IpOworICAgIG1fd3JpdGFibGVTdHJlYW1JbnRlcm5hbHNG
dW5jdGlvbnMudmlzaXQodmlzaXRvcik7CisjZW5kaWYKKyNpZm5kZWYgU0tJUF9VTlVTRURfUEFS
QU0KKyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CisjZW5kaWYKK30KKwordm9pZCBKU0J1aWx0
aW5JbnRlcm5hbEZ1bmN0aW9uczo6aW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBWTSYgdm0pCit7CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBtX3J0Y1Bl
ZXJDb25uZWN0aW9uSW50ZXJuYWxzRnVuY3Rpb25zLmluaXQoZ2xvYmFsT2JqZWN0KTsKKyNlbmRp
ZgorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBtX3JlYWRhYmxlU3RyZWFtSW50ZXJuYWxz
RnVuY3Rpb25zLmluaXQoZ2xvYmFsT2JqZWN0KTsKKyAgICBtX3N0cmVhbUludGVybmFsc0Z1bmN0
aW9ucy5pbml0KGdsb2JhbE9iamVjdCk7CisgICAgbV93cml0YWJsZVN0cmVhbUludGVybmFsc0Z1
bmN0aW9ucy5pbml0KGdsb2JhbE9iamVjdCk7CisjZW5kaWYKKworI2lmIEVOQUJMRShTVFJFQU1T
X0FQSSkgfHwgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50
RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworCisg
ICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyBzdGF0aWNHbG9iYWxzW10g
PSB7CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyNkZWZpbmUgREVDTEFSRV9HTE9CQUxfU1RB
VElDKG5hbWUpXAorICAgICAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZv
KFwKKyAgICAgICAgICAgIGNsaWVudERhdGEuYnVpbHRpbkZ1bmN0aW9ucygpLnJ0Y1BlZXJDb25u
ZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnMoKS5uYW1lIyNQcml2YXRlTmFtZSgpLCBydGNQZWVyQ29u
bmVjdGlvbkludGVybmFscygpLm1fIyNuYW1lIyNGdW5jdGlvbi5nZXQoKSAsIERvbnREZWxldGUg
fCBSZWFkT25seSksCisgICAgICAgIFdFQkNPUkVfRk9SRUFDSF9SVENQRUVSQ09OTkVDVElPTklO
VEVSTkFMU19CVUlMVElOX0ZVTkNUSU9OX05BTUUoREVDTEFSRV9HTE9CQUxfU1RBVElDKQorI3Vu
ZGVmIERFQ0xBUkVfR0xPQkFMX1NUQVRJQworI2VuZGlmCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJ
KQorI2RlZmluZSBERUNMQVJFX0dMT0JBTF9TVEFUSUMobmFtZSlcCisgICAgICAgIEpTRE9NR2xv
YmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8oXAorICAgICAgICAgICAgY2xpZW50RGF0YS5i
dWlsdGluRnVuY3Rpb25zKCkucmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucygpLm5hbWUj
I1ByaXZhdGVOYW1lKCksIHJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzKCkubV8jI25hbWUjI0Z1bmN0
aW9uLmdldCgpICwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKKyAgICAgICAgV0VCQ09SRV9GT1JF
QUNIX1JFQURBQkxFU1RSRUFNSU5URVJOQUxTX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShERUNMQVJF
X0dMT0JBTF9TVEFUSUMpCisjdW5kZWYgREVDTEFSRV9HTE9CQUxfU1RBVElDCisjZGVmaW5lIERF
Q0xBUkVfR0xPQkFMX1NUQVRJQyhuYW1lKVwKKyAgICAgICAgSlNET01HbG9iYWxPYmplY3Q6Okds
b2JhbFByb3BlcnR5SW5mbyhcCisgICAgICAgICAgICBjbGllbnREYXRhLmJ1aWx0aW5GdW5jdGlv
bnMoKS5zdHJlYW1JbnRlcm5hbHNCdWlsdGlucygpLm5hbWUjI1ByaXZhdGVOYW1lKCksIHN0cmVh
bUludGVybmFscygpLm1fIyNuYW1lIyNGdW5jdGlvbi5nZXQoKSAsIERvbnREZWxldGUgfCBSZWFk
T25seSksCisgICAgICAgIFdFQkNPUkVfRk9SRUFDSF9TVFJFQU1JTlRFUk5BTFNfQlVJTFRJTl9G
VU5DVElPTl9OQU1FKERFQ0xBUkVfR0xPQkFMX1NUQVRJQykKKyN1bmRlZiBERUNMQVJFX0dMT0JB
TF9TVEFUSUMKKyNkZWZpbmUgREVDTEFSRV9HTE9CQUxfU1RBVElDKG5hbWUpXAorICAgICAgICBK
U0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvKFwKKyAgICAgICAgICAgIGNsaWVu
dERhdGEuYnVpbHRpbkZ1bmN0aW9ucygpLndyaXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMo
KS5uYW1lIyNQcml2YXRlTmFtZSgpLCB3cml0YWJsZVN0cmVhbUludGVybmFscygpLm1fIyNuYW1l
IyNGdW5jdGlvbi5nZXQoKSAsIERvbnREZWxldGUgfCBSZWFkT25seSksCisgICAgICAgIFdFQkNP
UkVfRk9SRUFDSF9XUklUQUJMRVNUUkVBTUlOVEVSTkFMU19CVUlMVElOX0ZVTkNUSU9OX05BTUUo
REVDTEFSRV9HTE9CQUxfU1RBVElDKQorI3VuZGVmIERFQ0xBUkVfR0xPQkFMX1NUQVRJQworI2Vu
ZGlmCisgICAgfTsKKworICAgIGdsb2JhbE9iamVjdC5hZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0ds
b2JhbHMsIFdURl9BUlJBWV9MRU5HVEgoc3RhdGljR2xvYmFscykpOworI2VuZGlmCisjaWZuZGVm
IFNLSVBfVU5VU0VEX1BBUkFNCisgICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7CisgICAg
VU5VU0VEX1BBUkFNKHZtKTsKKyNlbmRpZgorfQorCit2b2lkIEpTQnVpbHRpbkludGVybmFsT2Jq
ZWN0czo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyNpZiBFTkFCTEUoU1RS
RUFNU19BUEkpCisgICAgdmlzaXRvci5hcHBlbmQoJm1fcHJpdmF0ZVJlYWRhYmxlU3RyZWFtQ29u
dHJvbGxlckNvbnN0cnVjdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmbV9wcml2YXRlUmVhZGFi
bGVTdHJlYW1SZWFkZXJDb25zdHJ1Y3Rvcik7CisjZW5kaWYKKyNpZm5kZWYgU0tJUF9VTlVTRURf
UEFSQU0KKyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CisjZW5kaWYKK30KKwordm9pZCBKU0J1
aWx0aW5JbnRlcm5hbE9iamVjdHM6OmluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgVk0mIHZtKQoreworI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBtX3ByaXZh
dGVSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXJDb25zdHJ1Y3Rvci5zZXQodm0sICZnbG9iYWxPYmpl
Y3QsIGFzT2JqZWN0KGNyZWF0ZVJlYWRhYmxlU3RyZWFtQ29udHJvbGxlclByaXZhdGVDb25zdHJ1
Y3Rvcih2bSwgZ2xvYmFsT2JqZWN0KSkpOyAKKyAgICBtX3ByaXZhdGVSZWFkYWJsZVN0cmVhbVJl
YWRlckNvbnN0cnVjdG9yLnNldCh2bSwgJmdsb2JhbE9iamVjdCwgYXNPYmplY3QoY3JlYXRlUmVh
ZGFibGVTdHJlYW1SZWFkZXJQcml2YXRlQ29uc3RydWN0b3Iodm0sIGdsb2JhbE9iamVjdCkpKTsK
KworICAgIEpTVk1DbGllbnREYXRhJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFBy
b3BlcnR5SW5mbyBzdGF0aWNHbG9iYWxzW10gPSB7CisgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0
OjpHbG9iYWxQcm9wZXJ0eUluZm8oY2xpZW50RGF0YS5idWlsdGluTmFtZXMoKS5zdHJlYW1DbG9z
ZWRQcml2YXRlTmFtZSgpLCBqc051bWJlcigxKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKKyAg
ICAgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyhjbGllbnREYXRhLmJ1
aWx0aW5OYW1lcygpLnN0cmVhbUNsb3NpbmdQcml2YXRlTmFtZSgpLCBqc051bWJlcigyKSwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KSwKKyAgICAgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFBy
b3BlcnR5SW5mbyhjbGllbnREYXRhLmJ1aWx0aW5OYW1lcygpLnN0cmVhbUVycm9yZWRQcml2YXRl
TmFtZSgpLCBqc051bWJlcigzKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKKyAgICAgICAgSlNE
T01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyhjbGllbnREYXRhLmJ1aWx0aW5OYW1l
cygpLnN0cmVhbVJlYWRhYmxlUHJpdmF0ZU5hbWUoKSwganNOdW1iZXIoNCksIERvbnREZWxldGUg
fCBSZWFkT25seSksCisgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUlu
Zm8oY2xpZW50RGF0YS5idWlsdGluTmFtZXMoKS5zdHJlYW1XYWl0aW5nUHJpdmF0ZU5hbWUoKSwg
anNOdW1iZXIoNSksIERvbnREZWxldGUgfCBSZWFkT25seSksCisgICAgICAgIEpTRE9NR2xvYmFs
T2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8oY2xpZW50RGF0YS5idWlsdGluTmFtZXMoKS5zdHJl
YW1Xcml0YWJsZVByaXZhdGVOYW1lKCksIGpzTnVtYmVyKDYpLCBEb250RGVsZXRlIHwgUmVhZE9u
bHkpLAorICAgICAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvKGNsaWVu
dERhdGEuYnVpbHRpbk5hbWVzKCkuUmVhZGFibGVTdHJlYW1Db250cm9sbGVyUHJpdmF0ZU5hbWUo
KSwgbV9wcml2YXRlUmVhZGFibGVTdHJlYW1Db250cm9sbGVyQ29uc3RydWN0b3IuZ2V0KCksIERv
bnREZWxldGUgfCBSZWFkT25seSksCisgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQ
cm9wZXJ0eUluZm8oY2xpZW50RGF0YS5idWlsdGluTmFtZXMoKS5SZWFkYWJsZVN0cmVhbVJlYWRl
clByaXZhdGVOYW1lKCksIG1fcHJpdmF0ZVJlYWRhYmxlU3RyZWFtUmVhZGVyQ29uc3RydWN0b3Iu
Z2V0KCksIERvbnREZWxldGUgfCBSZWFkT25seSksCisgICAgfTsKKyAgICBnbG9iYWxPYmplY3Qu
YWRkU3RhdGljR2xvYmFscyhzdGF0aWNHbG9iYWxzLCBXVEZfQVJSQVlfTEVOR1RIKHN0YXRpY0ds
b2JhbHMpKTsKKyNlbmRpZgorI2lmbmRlZiBTS0lQX1VOVVNFRF9QQVJBTQorICAgIFVOVVNFRF9Q
QVJBTShnbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTSh2bSk7CisjZW5kaWYKK30KKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRp
bkludGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRp
bkludGVybmFscy5oCmluZGV4IDc4YjEyNzk3Zjc3NTYyM2MzMGJjMzQ2ZGEyMmNmOGVmNDgzYzk1
Y2MuLjJiZjMwNTZlZWE1YzQ1ZWVhYTNkNzVmZDBlMDExY2YxYWE1MmYyYjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxz
LmgKQEAgLTI3LDgzICsyNyw2NiBAQAogI2lmbmRlZiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxz
X2gKICNkZWZpbmUgV2ViQ29yZUpTQnVpbHRpbkludGVybmFsc19oCiAKKyNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQorI2luY2x1ZGUgIlJUQ1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnMu
aCIKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQogI2luY2x1ZGUgIlJlYWRhYmxl
U3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCIKICNpbmNsdWRlICJTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oIgogI2luY2x1ZGUgIldyaXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCIKICNl
bmRpZgogCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSNpbmNsdWRlICJSVENQZWVyQ29ubmVj
dGlvbkludGVybmFsc0J1aWx0aW5zLmgiCi0jZW5kaWYKLQogI2lmIEVOQUJMRShTVFJFQU1TX0FQ
SSkgfHwgRU5BQkxFKE1FRElBX1NUUkVBTSkKICNkZWZpbmUgU0tJUF9VTlVTRURfUEFSQU0KICNl
bmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEpTRE9NR2xvYmFsT2JqZWN0Owor
CisvLyBGSVhNRTogTWFrZSBidWlsdGluIGdlbmVyYXRvciBnZW5lcmF0ZSB0aGlzIGNsYXNzCiBj
bGFzcyBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyB7CiBwdWJsaWM6Ci1leHBsaWNpdCBKU0J1
aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJiB2KQotICAgICAgICA6IHZtKHYpCi0jaWYg
RU5BQkxFKFNUUkVBTVNfQVBJKQotICAgICAgICAsIG1fcmVhZGFibGVTdHJlYW1JbnRlcm5hbHNG
dW5jdGlvbnModm0pCi0gICAgICAgICwgbV9zdHJlYW1JbnRlcm5hbHNGdW5jdGlvbnModm0pCi0g
ICAgICAgICwgbV93cml0YWJsZVN0cmVhbUludGVybmFsc0Z1bmN0aW9ucyh2bSkKLSNlbmRpZgor
ICAgIGV4cGxpY2l0IEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mKTsKKwogI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgICAgICwgbV9ydGNQZWVyQ29ubmVjdGlvbkludGVy
bmFsc0Z1bmN0aW9ucyh2bSkKKyAgICBSVENQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5G
dW5jdGlvbnMgcnRjUGVlckNvbm5lY3Rpb25JbnRlcm5hbHMoKSB7IHJldHVybiBtX3J0Y1BlZXJD
b25uZWN0aW9uSW50ZXJuYWxzRnVuY3Rpb25zOyB9CiAjZW5kaWYKLSAgICB7IH0KLQogI2lmIEVO
QUJMRShTVFJFQU1TX0FQSSkKICAgICBSZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5GdW5j
dGlvbnMgcmVhZGFibGVTdHJlYW1JbnRlcm5hbHMoKSB7IHJldHVybiBtX3JlYWRhYmxlU3RyZWFt
SW50ZXJuYWxzRnVuY3Rpb25zOyB9CiAgICAgU3RyZWFtSW50ZXJuYWxzQnVpbHRpbkZ1bmN0aW9u
cyBzdHJlYW1JbnRlcm5hbHMoKSB7IHJldHVybiBtX3N0cmVhbUludGVybmFsc0Z1bmN0aW9uczsg
fQogICAgIFdyaXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbkZ1bmN0aW9ucyB3cml0YWJsZVN0
cmVhbUludGVybmFscygpIHsgcmV0dXJuIG1fd3JpdGFibGVTdHJlYW1JbnRlcm5hbHNGdW5jdGlv
bnM7IH0KICNlbmRpZgotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgUlRDUGVlckNvbm5l
Y3Rpb25JbnRlcm5hbHNCdWlsdGluRnVuY3Rpb25zIHJ0Y1BlZXJDb25uZWN0aW9uSW50ZXJuYWxz
KCkgeyByZXR1cm4gbV9ydGNQZWVyQ29ubmVjdGlvbkludGVybmFsc0Z1bmN0aW9uczsgfQotI2Vu
ZGlmCi0gICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7Ci0jaWYgRU5B
QkxFKFNUUkVBTVNfQVBJKQotICAgICAgICBtX3JlYWRhYmxlU3RyZWFtSW50ZXJuYWxzRnVuY3Rp
b25zLnZpc2l0KHZpc2l0b3IpOwotICAgICAgICBtX3N0cmVhbUludGVybmFsc0Z1bmN0aW9ucy52
aXNpdCh2aXNpdG9yKTsKLSAgICAgICAgbV93cml0YWJsZVN0cmVhbUludGVybmFsc0Z1bmN0aW9u
cy52aXNpdCh2aXNpdG9yKTsKLSNlbmRpZgotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAg
ICAgIG1fcnRjUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNGdW5jdGlvbnMudmlzaXQodmlzaXRvcik7
Ci0jZW5kaWYKLSNpZm5kZWYgU0tJUF9VTlVTRURfUEFSQU0KLSAgICAgICAgVU5VU0VEX1BBUkFN
KHZpc2l0b3IpOwotI2VuZGlmCi0gICAgfQotICAgIHZvaWQgaW5pdChKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QpIHsKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgICAgIG1f
cmVhZGFibGVTdHJlYW1JbnRlcm5hbHNGdW5jdGlvbnMuaW5pdChnbG9iYWxPYmplY3QpOwotICAg
ICAgICBtX3N0cmVhbUludGVybmFsc0Z1bmN0aW9ucy5pbml0KGdsb2JhbE9iamVjdCk7Ci0gICAg
ICAgIG1fd3JpdGFibGVTdHJlYW1JbnRlcm5hbHNGdW5jdGlvbnMuaW5pdChnbG9iYWxPYmplY3Qp
OwotI2VuZGlmCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICAgICAgbV9ydGNQZWVyQ29u
bmVjdGlvbkludGVybmFsc0Z1bmN0aW9ucy5pbml0KGdsb2JhbE9iamVjdCk7Ci0jZW5kaWYKLSNp
Zm5kZWYgU0tJUF9VTlVTRURfUEFSQU0KLSAgICAgICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVj
dCk7Ci0jZW5kaWYKLSAgICB9CisKKyAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsK
KyAgICB2b2lkIGluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlZNJik7CiAKIHBy
aXZhdGU6CiAgICAgSlNDOjpWTSYgdm07CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBS
VENQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5GdW5jdGlvbnMgbV9ydGNQZWVyQ29ubmVj
dGlvbkludGVybmFsc0Z1bmN0aW9uczsKKyNlbmRpZgogI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkK
ICAgICBSZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5GdW5jdGlvbnMgbV9yZWFkYWJsZVN0
cmVhbUludGVybmFsc0Z1bmN0aW9uczsKICAgICBTdHJlYW1JbnRlcm5hbHNCdWlsdGluRnVuY3Rp
b25zIG1fc3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zOwogICAgIFdyaXRhYmxlU3RyZWFtSW50ZXJu
YWxzQnVpbHRpbkZ1bmN0aW9ucyBtX3dyaXRhYmxlU3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zOwog
I2VuZGlmCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBSVENQZWVyQ29ubmVjdGlvbklu
dGVybmFsc0J1aWx0aW5GdW5jdGlvbnMgbV9ydGNQZWVyQ29ubmVjdGlvbkludGVybmFsc0Z1bmN0
aW9uczsKLSNlbmRpZgogCiB9OwogCi19CitjbGFzcyBKU0J1aWx0aW5JbnRlcm5hbE9iamVjdHMg
eworcHVibGljOgorICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZvaWQg
aW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6Vk0mKTsKKworI2lmIEVOQUJMRShT
VFJFQU1TX0FQSSkKK3ByaXZhdGU6CisgICAgSlNDOjpXcml0ZUJhcnJpZXI8SlNDOjpKU09iamVj
dD4gbV9wcml2YXRlUmVhZGFibGVTdHJlYW1Db250cm9sbGVyQ29uc3RydWN0b3I7CisgICAgSlND
OjpXcml0ZUJhcnJpZXI8SlNDOjpKU09iamVjdD4gbV9wcml2YXRlUmVhZGFibGVTdHJlYW1SZWFk
ZXJDb25zdHJ1Y3RvcjsKICNlbmRpZgorfTsKKworfQorCisjZW5kaWYgLy8gV2ViQ29yZUpTQnVp
bHRpbkludGVybmFsc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9X
ZWJDb3JlSlNCdWlsdGlucy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpT
QnVpbHRpbnMuaAppbmRleCBmNjEyNDU4ZDJjNjM4MmMwN2MxNTRmNWI3NTA4ODI3YTJjZjg4OWQ0
Li4yMzcyNzIxODg3MWY1YThiNDFjMzE1OTZjMGZkMmEzMjJlNzkxNGNhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNCdWlsdGlucy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0J1aWx0aW5zLmgKQEAgLTUwLDYgKzUwLDEw
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSlNET01HbG9iYWxPYmplY3Q7CisK
K3ZvaWQgYWRkQnVpbHRpbkdsb2JhbHMoSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlZNJik7CisK
IGNsYXNzIEpTQnVpbHRpbkZ1bmN0aW9ucyB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgSlNCdWls
dGluRnVuY3Rpb25zKEpTQzo6Vk0mIHYpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268191</attachid>
            <date>2016-01-04 08:11:41 -0800</date>
            <delta_ts>2016-01-13 01:54:39 -0800</delta_ts>
            <desc>Fixing private and removing one friend</desc>
            <filename>bug-152535-20160104171107.patch</filename>
            <type>text/plain</type>
            <size>30523</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0NTI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmViODJlNWIwNjdiNGQx
NzY4ODY1YTAzNzUzNDUyMDI3NGJkMTNkMi4uNmMwZDU4ZDQ3ZDFkNTk0YmQ0NmRjYjFlZmU0MTVk
MTIzYWFmYzg3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDE2LTAxLTA0ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgW1N0cmVh
bXMgQVBJXSBSZWZhY3RvciBidWlsdGluIGludGVybmFscyB0byBwcmVwYXJlIHN1cHBvcnQgZm9y
IHN0cmVhbXMgQVBJIGluIHdvcmtlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUyNTM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTW92aW5nIHRoZSBjb2RlIHRoYXQgbGlua3MgaW50ZXJuYWwgZnVuY3Rp
b25zIHRvIHRoZSBHbG9iYWxPYmplY3QgaW4gV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAu
CisgICAgICAgIFRoaXMgZmlsZSBzaG91bGQgYmUgZ2VuZXJhdGVkIGJ5IHRoZSBidWlsdGluIGdl
bmVyYXRvciBvbmNlIHJlZmFjdG9yaW5nIGlzIGRvbmUuCisgICAgICAgIFRoaXMgY29kZSBpcyBs
b2NhdGVkIGluIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjppbml0aWFsaXplLgorCisgICAg
ICAgIEFkZGluZyBwcml2YXRlIGNvbnRyb2xsZXIgYW5kIHJlYWRlciBjb25zdHJ1Y3RvcnMgdG8g
dGhlIEpTIERPTSBjb25zdHJ1Y3RvciBtYXAgc28gdGhhdCB0aGV5IGRvIG5vdCBnZXQgZ2FyYmFn
ZSBjb2xsZWN0ZWQuCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGJlaGF2aW9yLCBleGNlcHQgdGhh
dCBwcml2YXRlIGJ1aWx0aW5zIGFyZSB1c2FibGUgaW4gd29ya2VycyAoYnV0IG5vdCBhY3R1YWxs
eSB1c2VkKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFdlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0OjpKU0RPTUdsb2JhbE9iamVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6YWRkQnVpbHRpbkdsb2Jh
bHMpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdp
bmRvd0Jhc2U6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93
QmFzZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dC
YXNlLmg6CisgICAgICAgICogYmluZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6
OkpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQnVpbHRp
bkludGVybmFsRnVuY3Rpb25zOjp2aXNpdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0J1aWx0aW5J
bnRlcm5hbEZ1bmN0aW9uczo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvV2Vi
Q29yZUpTQnVpbHRpbkludGVybmFscy5oOgorCiAyMDE2LTAxLTAzICBNaWNoYWVsIENhdGFuemFy
byAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBGaXggLVdwZXNzaW1p
emluZy1tb3ZlIHdhcm5pbmdzIGFmdGVyIHN3aXRjaCB0byBXVEZNb3ZlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IGIyNzFmYjgwNTE5N2FjZWM2MTYyMDY2MjRjYWUwMmQyY2FjNThjNDkuLmJlNjBl
ODQ1ZTc2YjQxZWU3Y2YwNTVkMGVhOTY4NzhiODVlMzQ3NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CkBAIC0xMjMxLDYgKzEyMzEsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgYmluZGluZ3Mv
anMvU2NyaXB0R2xvYmFsT2JqZWN0LmNwcAogICAgIGJpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmNw
cAogICAgIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKyAgICBiaW5kaW5n
cy9qcy9XZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcAogICAgIGJpbmRpbmdzL2pzL1dlYkNv
cmVKU0J1aWx0aW5zLmNwcAogICAgIGJpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlci5jcHAKICAgICBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKaW5kZXggOWM1
ZTlhMTg5ZTgzZjYzNGVjOGJjYjI3MGE3MjQzMDVjM2NmMTU0Ny4uNmYyZWE2NTQyNDcyODVmYzVi
ODdlOTFhY2JhZTcxMTY4OWY3YjZlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
eHByb2ovV2ViQ29yZS52Y3hwcm9qCkBAIC0xOTA0Miw2ICsxOTA0MiwyMCBAQAogICAgICAgPEV4
Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgICAgPEV4
Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nUHJvZHVjdGlvbnx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICA8L0NsQ29t
cGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJpbmRpbmdzXGpzXFdlYkNvcmVKU0J1
aWx0aW5JbnRlcm5hbHMuY3BwIj4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249
IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhj
bHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChD
b25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9FeGNsdWRlZEZy
b21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3Vy
YXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfFdpbjMyJyI+dHJ1ZTwvRXhjbHVk
ZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3x4NjQnIj50cnVlPC9FeGNs
dWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnU3VmZml4fFdpbjMyJyI+dHJ1ZTwvRXhj
bHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChD
b25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1ZmZpeHx4NjQnIj50cnVlPC9FeGNs
dWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj50cnVlPC9FeGNsdWRl
ZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9t
QnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfFdpbjMyJyI+dHJ1ZTwvRXhjbHVk
ZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfHg2NCciPnRydWU8L0V4
Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4
Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQnIj50cnVlPC9FeGNs
dWRlZEZyb21CdWlsZD4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGJpbmRpbmdzXGpzXFdlYkNvcmVKU0J1aWx0aW5zLmNwcCI+CiAgICAgICA8RXhjbHVkZWRG
cm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1
Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1
aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0
JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYjJhYmI3NTRhNTMzOWY2ZjYwNzVkNTVk
MjM2MDQyODY2MjNkNzJlNS4uZDZkZmNjMzFmNDhiODcyZDkwYTkyODUwYjAzOTU4M2U0ZGFmZTlm
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMTQ4MSw2ICsxNDgxLDcgQEAKIAkJNDBFQ0FFN0UxNkI4QjY3MjAwQzM2MTAzIC8q
IEpTRE9NRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQwRUNBRTdEMTZCOEI2NzIwMEMzNjEwMyAvKiBKU0RPTUVycm9yLmggKi87IH07CiAJCTQw
RUNBRTgxMTZCOEI2OEEwMEMzNjEwMyAvKiBKU0RPTUVycm9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQwRUNBRTgwMTZCOEI2OEEwMEMzNjEwMyAv
KiBKU0RPTUVycm9yLmNwcCAqLzsgfTsKIAkJNDEwQjdFNzIxMDQ1RkFCMDAwRDgyMjRGIC8qIEpT
TWVzc2FnZUV2ZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQxMEI3RTcxMTA0NUZBQjAwMEQ4MjI0RiAvKiBKU01lc3NhZ2VFdmVudEN1
c3RvbS5jcHAgKi87IH07CisJCTQxMEQzMzI0MUMxOTk4NTAwMEY3RkRFMiAvKiBXZWJDb3JlSlNC
dWlsdGluSW50ZXJuYWxzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQxMEQzMzIzMUMxOTk4NDEwMEY3RkRFMiAvKiBXZWJDb3JlSlNCdWlsdGluSW50
ZXJuYWxzLmNwcCAqLzsgfTsKIAkJNDEyMzA4MUIxMzhDNDI5NzAwQkNDRkNBIC8qIFdlYkNvcmUu
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTNGMTlCMUEwODI0NUU1QTAwMUU5QUJDIC8qIFdlYkNvcmUuZnJhbWV3b3JrICovOyB9Owog
CQk0MTIzMDkxMzEzOEM0MkZGMDBCQ0NGQ0EgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGlu
IEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjgyMTYyOTkw
MjlGNEZCNTAxMDAwMTMxIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJNDEy
N0Q1MzcwRjhBQUIxRDAwRTQyNEY1IC8qIFNjcmlwdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMjdENTM2MEY4QUFCMUQwMEU0MjRGNSAv
KiBTY3JpcHRTdGF0ZS5jcHAgKi87IH07CkBAIC04ODM5LDYgKzg4NDAsNyBAQAogCQk0MEVDQUU3
RDE2QjhCNjcyMDBDMzYxMDMgLyogSlNET01FcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0RPTUVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQw
RUNBRTgwMTZCOEI2OEEwMEMzNjEwMyAvKiBKU0RPTUVycm9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NRXJyb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MTBCN0U3MTEwNDVGQUIwMDBEODIyNEYgLyogSlNNZXNzYWdlRXZlbnRDdXN0
b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNZXNzYWdlRXZl
bnRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTBEMzMyMzFDMTk5
ODQxMDBGN0ZERTIgLyogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDExODlFRjcxQUQ4MjMyODAwQjkwQTBEIC8q
IFJlYWRhYmxlU3RyZWFtQ29udHJvbGxlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVh
ZGFibGVTdHJlYW1Db250cm9sbGVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDEyN0Q1MzYwRjhBQUIxRDAwRTQyNEY1IC8qIFNjcmlwdFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdFN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDEyOURGODExQkI1Qjc5QjAwMzIyQTE2IC8qIFJlYWRhYmxlU3RyZWFt
Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZVN0
cmVhbUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxOTc4LDYg
KzIxOTgwLDcgQEAKIAkJCQlBNzVFNDk3NDEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmggKi8sCiAJCQkJNDE5QkU3NTIxQkM3RjNEQjAwRTFDODVCIC8qIFdlYkNvcmVC
dWlsdGluTmFtZXMuaCAqLywKIAkJCQk0MTlCRTc1MzFCQzdGM0RCMDBFMUM4NUIgLyogV2ViQ29y
ZUpTQnVpbHRpbkludGVybmFscy5oICovLAorCQkJCTQxMEQzMzIzMUMxOTk4NDEwMEY3RkRFMiAv
KiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcCAqLywKIAkJCQk0MTlCRTc1NDFCQzdGM0RC
MDBFMUM4NUIgLyogV2ViQ29yZUpTQnVpbHRpbnMuY3BwICovLAogCQkJCTQxOUJFNzU1MUJDN0Yz
REIwMEUxQzg1QiAvKiBXZWJDb3JlSlNCdWlsdGlucy5oICovLAogCQkJCUJDNTNEOTEwMTE0MzEw
Q0MwMDBEODE3RSAvKiBXZWJDb3JlSlNDbGllbnREYXRhLmggKi8sCkBAIC0zMDk2Niw2ICszMDk2
OSw3IEBACiAJCQkJNTM2RDVBMjUxOTNGNDBGQzAwQ0U0Q0FCIC8qIFNvdXJjZVNpemVMaXN0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUQwMUEyN0FEMTBDOUJGRDgwMDAyNkE0MiAvKiBTcGFjZVNw
bGl0U3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTYyNkNERTBFMTE0MDQyNEMwMDFFNUE2
OCAvKiBTcGF0aWFsTmF2aWdhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MTBEMzMyNDFD
MTk5ODUwMDBGN0ZERTIgLyogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBQTJBNUFENTE2QTQ4NjE0MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUFBMkE1QUQzMTZBNDg2MEQwMDk3NUEyNSAvKiBTcGVlY2hT
eW50aGVzaXNFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBQTJBNUFEMTE2QTQ4NjA3MDA5
NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmNwcCBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCmluZGV4
IGQyYjMwZTRmNGE0NzE3ZTA4ZDIyZDVkNDMxYmYyNDk2MGFhZDZhZWIuLjgxNmI3MjQ4N2MwOGIy
NDBmZDUwZDZmYzdkMzBkMjUxM2RhM2M4MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKQEAgLTMwLDcgKzMwLDkgQEAKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiSlNFdmVu
dExpc3RlbmVyLmgiCisjaW5jbHVkZSAiSlNSZWFkYWJsZVN0cmVhbVByaXZhdGVDb25zdHJ1Y3Rv
cnMuaCIKICNpbmNsdWRlICJKU1dvcmtlckdsb2JhbFNjb3BlLmgiCisjaW5jbHVkZSAiV2ViQ29y
ZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgIldvcmtlckdsb2JhbFNjb3BlLmgiCiAKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CkBAIC00NCw2ICs0Niw3IEBAIEpTRE9NR2xvYmFsT2JqZWN0OjpKU0RP
TUdsb2JhbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPERP
CiAgICAgLCBtX2N1cnJlbnRFdmVudCgwKQogICAgICwgbV93b3JsZCh3b3JsZCkKICAgICAsIG1f
d29ybGRJc05vcm1hbChtX3dvcmxkLT5pc05vcm1hbCgpKQorICAgICwgbV9idWlsdGluSW50ZXJu
YWxGdW5jdGlvbnModm0pCiB7CiAgICAgQVNTRVJUKG1fd29ybGQpOwogfQpAQCAtNTMsMTYgKzU2
LDQ5IEBAIHZvaWQgSlNET01HbG9iYWxPYmplY3Q6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogICAg
IHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oY2VsbCktPkpTRE9NR2xvYmFsT2JqZWN0
Ojp+SlNET01HbG9iYWxPYmplY3QoKTsKIH0KIAordm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6YWRk
QnVpbHRpbkdsb2JhbHMoVk0mIHZtKQoreworICAgIG1fYnVpbHRpbkludGVybmFsRnVuY3Rpb25z
LmluaXRpYWxpemUoKnRoaXMsIHZtKTsKKworI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBK
U09iamVjdCogcHJpdmF0ZVJlYWRhYmxlU3RyZWFtQ29udHJvbGxlckNvbnN0cnVjdG9yID0gY3Jl
YXRlUmVhZGFibGVTdHJlYW1Db250cm9sbGVyUHJpdmF0ZUNvbnN0cnVjdG9yKHZtLCAqdGhpcyk7
CisgICAgSlNPYmplY3QqIHByaXZhdGVSZWFkYWJsZVN0cmVhbVJlYWRlckNvbnN0cnVjdG9yID0g
Y3JlYXRlUmVhZGFibGVTdHJlYW1SZWFkZXJQcml2YXRlQ29uc3RydWN0b3Iodm0sICp0aGlzKTsK
KworICAgIEFTU0VSVCghY29uc3RydWN0b3JzKCkuZ2V0KHByaXZhdGVSZWFkYWJsZVN0cmVhbUNv
bnRyb2xsZXJDb25zdHJ1Y3Rvci0+aW5mbygpKS5nZXQoKSk7CisgICAgQVNTRVJUKCFjb25zdHJ1
Y3RvcnMoKS5nZXQocHJpdmF0ZVJlYWRhYmxlU3RyZWFtUmVhZGVyQ29uc3RydWN0b3ItPmluZm8o
KSkuZ2V0KCkpOworICAgIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6SlNPYmplY3Q+IHRlbXA7Cisg
ICAgY29uc3RydWN0b3JzKCkuYWRkKHByaXZhdGVSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXJDb25z
dHJ1Y3Rvci0+aW5mbygpLCB0ZW1wKS5pdGVyYXRvci0+dmFsdWUuc2V0KHZtLCB0aGlzLCBwcml2
YXRlUmVhZGFibGVTdHJlYW1Db250cm9sbGVyQ29uc3RydWN0b3IpOworICAgIGNvbnN0cnVjdG9y
cygpLmFkZChwcml2YXRlUmVhZGFibGVTdHJlYW1SZWFkZXJDb25zdHJ1Y3Rvci0+aW5mbygpLCB0
ZW1wKS5pdGVyYXRvci0+dmFsdWUuc2V0KHZtLCB0aGlzLCBwcml2YXRlUmVhZGFibGVTdHJlYW1S
ZWFkZXJDb25zdHJ1Y3Rvcik7CisKKyAgICBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50RGF0YSA9ICpz
dGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAgIEpTRE9NR2xv
YmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFsc1tdID0geworICAgICAg
ICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvKGNsaWVudERhdGEuYnVpbHRp
bk5hbWVzKCkuc3RyZWFtQ2xvc2VkUHJpdmF0ZU5hbWUoKSwganNOdW1iZXIoMSksIERvbnREZWxl
dGUgfCBSZWFkT25seSksCisgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0
eUluZm8oY2xpZW50RGF0YS5idWlsdGluTmFtZXMoKS5zdHJlYW1DbG9zaW5nUHJpdmF0ZU5hbWUo
KSwganNOdW1iZXIoMiksIERvbnREZWxldGUgfCBSZWFkT25seSksCisgICAgICAgIEpTRE9NR2xv
YmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8oY2xpZW50RGF0YS5idWlsdGluTmFtZXMoKS5z
dHJlYW1FcnJvcmVkUHJpdmF0ZU5hbWUoKSwganNOdW1iZXIoMyksIERvbnREZWxldGUgfCBSZWFk
T25seSksCisgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8oY2xp
ZW50RGF0YS5idWlsdGluTmFtZXMoKS5zdHJlYW1SZWFkYWJsZVByaXZhdGVOYW1lKCksIGpzTnVt
YmVyKDQpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAorICAgICAgICBKU0RPTUdsb2JhbE9iamVj
dDo6R2xvYmFsUHJvcGVydHlJbmZvKGNsaWVudERhdGEuYnVpbHRpbk5hbWVzKCkuc3RyZWFtV2Fp
dGluZ1ByaXZhdGVOYW1lKCksIGpzTnVtYmVyKDUpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAor
ICAgICAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvKGNsaWVudERhdGEu
YnVpbHRpbk5hbWVzKCkuc3RyZWFtV3JpdGFibGVQcml2YXRlTmFtZSgpLCBqc051bWJlcig2KSwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKKyAgICAgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2Jh
bFByb3BlcnR5SW5mbyhjbGllbnREYXRhLmJ1aWx0aW5OYW1lcygpLlJlYWRhYmxlU3RyZWFtQ29u
dHJvbGxlclByaXZhdGVOYW1lKCksIHByaXZhdGVSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXJDb25z
dHJ1Y3RvciwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKKyAgICAgICAgSlNET01HbG9iYWxPYmpl
Y3Q6Okdsb2JhbFByb3BlcnR5SW5mbyhjbGllbnREYXRhLmJ1aWx0aW5OYW1lcygpLlJlYWRhYmxl
U3RyZWFtUmVhZGVyUHJpdmF0ZU5hbWUoKSwgcHJpdmF0ZVJlYWRhYmxlU3RyZWFtUmVhZGVyQ29u
c3RydWN0b3IsIERvbnREZWxldGUgfCBSZWFkT25seSksCisgICAgfTsKKyAgICBhZGRTdGF0aWNH
bG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9BUlJBWV9MRU5HVEgoc3RhdGljR2xvYmFscykpOwor
I2VuZGlmCit9CisKIHZvaWQgSlNET01HbG9iYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRz
KGluZm8oKSkpOworCisgICAgYWRkQnVpbHRpbkdsb2JhbHModm0pOwogfQogCiB2b2lkIEpTRE9N
R2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTT2JqZWN0KiB0aGlzVmFsdWUp
CiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIHRoaXNWYWx1ZSk7CiAgICAgQVNTRVJU
KGluaGVyaXRzKGluZm8oKSkpOworCisgICAgYWRkQnVpbHRpbkdsb2JhbHModm0pOwogfQogCiBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBKU0RPTUdsb2JhbE9iamVjdDo6c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpIGNvbnN0CkBAIC04Niw2ICsxMjIsOCBAQCB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAKICAg
ICBmb3IgKGF1dG8mIGNvbnN0cnVjdG9yIDogdGhpc09iamVjdC0+Y29uc3RydWN0b3JzKCkudmFs
dWVzKCkpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZjb25zdHJ1Y3Rvcik7CisKKyAgICB0aGlz
T2JqZWN0LT5tX2J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucy52aXNpdCh2aXNpdG9yKTsKIH0KIAog
dm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6c2V0Q3VycmVudEV2ZW50KEV2ZW50KiBjdXJyZW50RXZl
bnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9i
amVjdC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaApp
bmRleCBlNmI1M2RiN2Q4OTgzOTM5YzM5M2Y1NjFkYTZiN2Q4NThlZmQxNGE4Li5lNjNjOTJkNDA3
ZGUzNmJjOGJhZmUzNzQ3N2NkMGQ4ODZhZGYwM2ZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKQEAgLTI4LDYgKzI4LDcgQEAKICNkZWZpbmUg
SlNET01HbG9iYWxPYmplY3RfaAogCiAjaW5jbHVkZSAiUGxhdGZvcm1FeHBvcnRNYWNyb3MuaCIK
KyNpbmNsdWRlICJXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgiCiAjaW5jbHVkZSA8cnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04NSw2ICs4Niwx
MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEV2ZW50KiBtX2N1cnJlbnRFdmVudDsK
ICAgICAgICAgY29uc3QgUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gbV93b3JsZDsKICAgICAgICAg
Ym9vbCBtX3dvcmxkSXNOb3JtYWw7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGFkZEJ1
aWx0aW5HbG9iYWxzKEpTQzo6Vk0mKTsKKyAgICAgICAgZnJpZW5kIHZvaWQgSlNCdWlsdGluSW50
ZXJuYWxGdW5jdGlvbnM6OmluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlZNJik7
CisKKyAgICAgICAgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMgbV9idWlsdGluSW50ZXJuYWxG
dW5jdGlvbnM7CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPGNsYXNzIENvbnN0cnVjdG9yQ2xhc3M+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAppbmRl
eCAwNjVmMWJmODhiNGY1NTgyN2U0MmYyMTU3Mzk1ODFkMWVkMDA1Y2EyLi5hNmM3YTA0MjEzNTg3
YTZiNWUxMWMwYTEzMmQzMWExMGNlMmZiNjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKQEAgLTUyLDE3ICs1Miw2IEBACiAjaW5jbHVkZSAi
V2ViU2FmZUluY3JlbWVudGFsU3dlZXBlcklPUy5oIgogI2VuZGlmCiAKLSNpZiBFTkFCTEUoU1RS
RUFNU19BUEkpCi0jaW5jbHVkZSAiSlNSZWFkYWJsZVN0cmVhbVByaXZhdGVDb25zdHJ1Y3RvcnMu
aCIKLSNpbmNsdWRlICJSZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmgiCi0jaW5jbHVk
ZSAiU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCIKLSNpbmNsdWRlICJXcml0YWJsZVN0cmVhbUlu
dGVybmFsc0J1aWx0aW5zLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0j
aW5jbHVkZSAiUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlucy5oIgotI2VuZGlmCi0K
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTgxLDcgKzcw
LDYgQEAgSlNET01XaW5kb3dCYXNlOjpKU0RPTVdpbmRvd0Jhc2UoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxET01XaW4KICAgICAsIG1fd2luZG93Q2xvc2VXYXRjaHBv
aW50cygod2luZG93ICYmIHdpbmRvdy0+ZnJhbWUoKSkgPyBJc1dhdGNoZWQgOiBJc0ludmFsaWRh
dGVkKQogICAgICwgbV93cmFwcGVkKHdpbmRvdykKICAgICAsIG1fc2hlbGwoc2hlbGwpCi0gICAg
LCBtX3ByaXZhdGVGdW5jdGlvbnModm0pCiB7CiB9CiAKQEAgLTkwLDQ3ICs3OCw5IEBAIHZvaWQg
SlNET01XaW5kb3dCYXNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRE9NV2luZG93U2hlbGwq
IHNoZWxsKQogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBzaGVsbCk7CiAgICAgQVNTRVJU
KGluaGVyaXRzKGluZm8oKSkpOwogCi0gICAgbV9wcml2YXRlRnVuY3Rpb25zLmluaXQoKnRoaXMp
OwotCi0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKSB8fCBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAg
IEpTVk1DbGllbnREYXRhJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRh
Kj4odm0uY2xpZW50RGF0YSk7Ci0jZW5kaWYKLQogICAgIEdsb2JhbFByb3BlcnR5SW5mbyBzdGF0
aWNHbG9iYWxzW10gPSB7CiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5h
bWVzLT5kb2N1bWVudCwganNOdWxsKCksIERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAg
IEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT53aW5kb3csIG1fc2hlbGwsIERv
bnREZWxldGUgfCBSZWFkT25seSksCi0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgICAgICBH
bG9iYWxQcm9wZXJ0eUluZm8oY2xpZW50RGF0YS5idWlsdGluTmFtZXMoKS5zdHJlYW1DbG9zZWRQ
cml2YXRlTmFtZSgpLCBqc051bWJlcigxKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKLSAgICAg
ICAgR2xvYmFsUHJvcGVydHlJbmZvKGNsaWVudERhdGEuYnVpbHRpbk5hbWVzKCkuc3RyZWFtQ2xv
c2luZ1ByaXZhdGVOYW1lKCksIGpzTnVtYmVyKDIpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAot
ICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oY2xpZW50RGF0YS5idWlsdGluTmFtZXMoKS5zdHJl
YW1FcnJvcmVkUHJpdmF0ZU5hbWUoKSwganNOdW1iZXIoMyksIERvbnREZWxldGUgfCBSZWFkT25s
eSksCi0gICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhjbGllbnREYXRhLmJ1aWx0aW5OYW1lcygp
LnN0cmVhbVJlYWRhYmxlUHJpdmF0ZU5hbWUoKSwganNOdW1iZXIoNCksIERvbnREZWxldGUgfCBS
ZWFkT25seSksCi0gICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhjbGllbnREYXRhLmJ1aWx0aW5O
YW1lcygpLnN0cmVhbVdhaXRpbmdQcml2YXRlTmFtZSgpLCBqc051bWJlcig1KSwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KSwKLSAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKGNsaWVudERhdGEuYnVp
bHRpbk5hbWVzKCkuc3RyZWFtV3JpdGFibGVQcml2YXRlTmFtZSgpLCBqc051bWJlcig2KSwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KSwKLSAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKGNsaWVudERh
dGEuYnVpbHRpbk5hbWVzKCkuUmVhZGFibGVTdHJlYW1Db250cm9sbGVyUHJpdmF0ZU5hbWUoKSwg
Y3JlYXRlUmVhZGFibGVTdHJlYW1Db250cm9sbGVyUHJpdmF0ZUNvbnN0cnVjdG9yKHZtLCAqdGhp
cyksIERvbnREZWxldGUgfCBSZWFkT25seSksCi0gICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhj
bGllbnREYXRhLmJ1aWx0aW5OYW1lcygpLlJlYWRhYmxlU3RyZWFtUmVhZGVyUHJpdmF0ZU5hbWUo
KSwgY3JlYXRlUmVhZGFibGVTdHJlYW1SZWFkZXJQcml2YXRlQ29uc3RydWN0b3Iodm0sICp0aGlz
KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKLSNkZWZpbmUgREVDTEFSRV9HTE9CQUxfU1RBVElD
KG5hbWUpXAotICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oXAotICAgICAgICAgICAgY2xpZW50
RGF0YS5idWlsdGluRnVuY3Rpb25zKCkucmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucygp
Lm5hbWUjI1ByaXZhdGVOYW1lKCksIG1fcHJpdmF0ZUZ1bmN0aW9ucy5yZWFkYWJsZVN0cmVhbUlu
dGVybmFscygpLm1fIyNuYW1lIyNGdW5jdGlvbi5nZXQoKSAsIERvbnREZWxldGUgfCBSZWFkT25s
eSksCi0gICAgICAgIFdFQkNPUkVfRk9SRUFDSF9SRUFEQUJMRVNUUkVBTUlOVEVSTkFMU19CVUlM
VElOX0ZVTkNUSU9OX05BTUUoREVDTEFSRV9HTE9CQUxfU1RBVElDKQotI3VuZGVmIERFQ0xBUkVf
R0xPQkFMX1NUQVRJQwotI2RlZmluZSBERUNMQVJFX0dMT0JBTF9TVEFUSUMobmFtZSlcCi0gICAg
ICAgIEdsb2JhbFByb3BlcnR5SW5mbyhcCi0gICAgICAgICAgICBjbGllbnREYXRhLmJ1aWx0aW5G
dW5jdGlvbnMoKS5zdHJlYW1JbnRlcm5hbHNCdWlsdGlucygpLm5hbWUjI1ByaXZhdGVOYW1lKCks
IG1fcHJpdmF0ZUZ1bmN0aW9ucy5zdHJlYW1JbnRlcm5hbHMoKS5tXyMjbmFtZSMjRnVuY3Rpb24u
Z2V0KCkgLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAotICAgICAgICBXRUJDT1JFX0ZPUkVBQ0hf
U1RSRUFNSU5URVJOQUxTX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShERUNMQVJFX0dMT0JBTF9TVEFU
SUMpCi0jdW5kZWYgREVDTEFSRV9HTE9CQUxfU1RBVElDCi0jZGVmaW5lIERFQ0xBUkVfR0xPQkFM
X1NUQVRJQyhuYW1lKVwKLSAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKFwKLSAgICAgICAgICAg
IGNsaWVudERhdGEuYnVpbHRpbkZ1bmN0aW9ucygpLndyaXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVp
bHRpbnMoKS5uYW1lIyNQcml2YXRlTmFtZSgpLCBtX3ByaXZhdGVGdW5jdGlvbnMud3JpdGFibGVT
dHJlYW1JbnRlcm5hbHMoKS5tXyMjbmFtZSMjRnVuY3Rpb24uZ2V0KCkgLCBEb250RGVsZXRlIHwg
UmVhZE9ubHkpLAotICAgICAgICBXRUJDT1JFX0ZPUkVBQ0hfV1JJVEFCTEVTVFJFQU1JTlRFUk5B
TFNfQlVJTFRJTl9GVU5DVElPTl9OQU1FKERFQ0xBUkVfR0xPQkFMX1NUQVRJQykKLSN1bmRlZiBE
RUNMQVJFX0dMT0JBTF9TVEFUSUMKLSNlbmRpZgotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0j
ZGVmaW5lIERFQ0xBUkVfR0xPQkFMX1NUQVRJQyhuYW1lKVwKLSAgICAgICAgR2xvYmFsUHJvcGVy
dHlJbmZvKFwKLSAgICAgICAgICAgIGNsaWVudERhdGEuYnVpbHRpbkZ1bmN0aW9ucygpLnJ0Y1Bl
ZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnMoKS5uYW1lIyNQcml2YXRlTmFtZSgpLCBtX3By
aXZhdGVGdW5jdGlvbnMucnRjUGVlckNvbm5lY3Rpb25JbnRlcm5hbHMoKS5tXyMjbmFtZSMjRnVu
Y3Rpb24uZ2V0KCkgLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAotICAgICAgICBXRUJDT1JFX0ZP
UkVBQ0hfUlRDUEVFUkNPTk5FQ1RJT05JTlRFUk5BTFNfQlVJTFRJTl9GVU5DVElPTl9OQU1FKERF
Q0xBUkVfR0xPQkFMX1NUQVRJQykKLSN1bmRlZiBERUNMQVJFX0dMT0JBTF9TVEFUSUMKLSNlbmRp
ZgogICAgIH07CiAKICAgICBhZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9BUlJB
WV9MRU5HVEgoc3RhdGljR2xvYmFscykpOwpAQCAtMTQxLDcgKzkxLDYgQEAgdm9pZCBKU0RPTVdp
bmRvd0Jhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKICAgICBKU0RPTVdpbmRvd0Jhc2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3dC
YXNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0g
ICAgdGhpc09iamVjdC0+bV9wcml2YXRlRnVuY3Rpb25zLnZpc2l0KHZpc2l0b3IpOwogfQogCiB2
b2lkIEpTRE9NV2luZG93QmFzZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCmluZGV4IGQ2OTlhNWFlNTdiN2Y3MjJl
YWJhNDg4MjcwNmMxYTRlMTAxZjNjZDguLjljNTdhNmM5M2NmM2Y0YTM1YTQ4ZWNiNzljYWU5Y2Y2
OGJhOGZlMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93QmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFz
ZS5oCkBAIC0yMiw3ICsyMiw2IEBACiAKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNs
dWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIldlYkNvcmVKU0J1aWx0aW5JbnRl
cm5hbHMuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC04Niw4ICs4NSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBSZWZQdHI8
RE9NV2luZG93PiBtX3dyYXBwZWQ7CiAgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIG1fc2hlbGw7
Ci0KLSAgICAgICAgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMgbV9wcml2YXRlRnVuY3Rpb25z
OwogICAgIH07CiAKICAgICAvLyBSZXR1cm5zIGEgSlNET01XaW5kb3cgb3IganNOdWxsKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1Qcml2
YXRlQ29uc3RydWN0b3JzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFi
bGVTdHJlYW1Qcml2YXRlQ29uc3RydWN0b3JzLmNwcAppbmRleCBlMjA1MWU2ODUzMWNjZWYzMGU2
YWM4MWUyMzYyZDBmZTQzY2NmMzI4Li40MWZlNGRiYTZjMmEwMDIxNWYxMzMwNGJiYjk5NTVlNjUy
YjAwODFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxl
U3RyZWFtUHJpdmF0ZUNvbnN0cnVjdG9ycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNSZWFkYWJsZVN0cmVhbVByaXZhdGVDb25zdHJ1Y3RvcnMuY3BwCkBAIC04MywxMiAr
ODMsMTIgQEAgdGVtcGxhdGU8PiBGdW5jdGlvbkV4ZWN1dGFibGUqIEpTQnVpbHRpblJlYWRhYmxl
U3RyZWFtQ29udHJvbGxlclByaXZhdGVDb25zdHJ1Y3QKICAgICByZXR1cm4gcmVhZGFibGVTdHJl
YW1JbnRlcm5hbHNQcml2YXRlSW5pdGlhbGl6ZVJlYWRhYmxlU3RyZWFtQ29udHJvbGxlckNvZGVH
ZW5lcmF0b3Iodm0pOwogfQogCi1KU1ZhbHVlIGNyZWF0ZVJlYWRhYmxlU3RyZWFtUmVhZGVyUHJp
dmF0ZUNvbnN0cnVjdG9yKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkK
K0pTT2JqZWN0KiBjcmVhdGVSZWFkYWJsZVN0cmVhbVJlYWRlclByaXZhdGVDb25zdHJ1Y3RvcihW
TSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcmV0dXJuIEpT
QnVpbHRpblJlYWRhYmxlU3RyZWFtUmVhZGVyUHJpdmF0ZUNvbnN0cnVjdG9yOjpjcmVhdGUodm0s
IEpTQnVpbHRpblJlYWRhYmxlU3RyZWFtUmVhZGVyUHJpdmF0ZUNvbnN0cnVjdG9yOjpjcmVhdGVT
dHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgp
KSwgZ2xvYmFsT2JqZWN0KTsKIH0KIAotSlNWYWx1ZSBjcmVhdGVSZWFkYWJsZVN0cmVhbUNvbnRy
b2xsZXJQcml2YXRlQ29uc3RydWN0b3IoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0KQorSlNPYmplY3QqIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQ29udHJvbGxlclByaXZhdGVD
b25zdHJ1Y3RvcihWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAg
ICAgcmV0dXJuIEpTQnVpbHRpblJlYWRhYmxlU3RyZWFtQ29udHJvbGxlclByaXZhdGVDb25zdHJ1
Y3Rvcjo6Y3JlYXRlKHZtLCBKU0J1aWx0aW5SZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXJQcml2YXRl
Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmpl
Y3Qub2JqZWN0UHJvdG90eXBlKCkpLCBnbG9iYWxPYmplY3QpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbVByaXZhdGVDb25zdHJ1Y3Rv
cnMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1Qcml2YXRl
Q29uc3RydWN0b3JzLmgKaW5kZXggNzQwMDBhNGJlZDVhNzRiZjM3ZjhkMzlhMjdiYzA0MThjZTQz
NmFkNS4uZWVkMGFiMmUxZDlhYjRiNmQxYzZjZmEzNjRhNzRjMTFlYzc4ZmIwMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbVByaXZhdGVDb25z
dHJ1Y3RvcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3Ry
ZWFtUHJpdmF0ZUNvbnN0cnVjdG9ycy5oCkBAIC0yMSwxNCArMjEsMjAgQEAKIAogI2lmIEVOQUJM
RShTVFJFQU1TX0FQSSkKIAotI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgorbmFtZXNw
YWNlIEpTQyB7CisKK3N0cnVjdCBDbGFzc0luZm87CitjbGFzcyBKU09iamVjdDsKK2NsYXNzIFZN
OworCit9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSlNET01HbG9iYWxPYmplY3Q7
CiAKLUpTQzo6SlNWYWx1ZSBjcmVhdGVSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXJQcml2YXRlQ29u
c3RydWN0b3IoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci1KU0M6OkpTVmFsdWUgY3Jl
YXRlUmVhZGFibGVTdHJlYW1SZWFkZXJQcml2YXRlQ29uc3RydWN0b3IoSlNDOjpWTSYsIEpTRE9N
R2xvYmFsT2JqZWN0Jik7CitKU0M6OkpTT2JqZWN0KiBjcmVhdGVSZWFkYWJsZVN0cmVhbUNvbnRy
b2xsZXJQcml2YXRlQ29uc3RydWN0b3IoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CitK
U0M6OkpTT2JqZWN0KiBjcmVhdGVSZWFkYWJsZVN0cmVhbVJlYWRlclByaXZhdGVDb25zdHJ1Y3Rv
cihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNCdWls
dGluSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0J1
aWx0aW5JbnRlcm5hbHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZmY2VhYjAxYjY0ZGNhMTRhNzFlOTllYWMw
MzU4MTVhNjE0ZDdhODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9XZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcApAQCAtMCwwICsxLDExOCBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKGMpIDIwMTUsIENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiAgYXJlIG1ldDoKKyAqICAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2Fub24g
SW5jLiBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqICBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiAgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENBTk9OIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqICBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUgorICogIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiAgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwKKyAqICBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkNvcmVKU0J1aWx0aW5JbnRlcm5h
bHMuaCIKKworI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNSZWFk
YWJsZVN0cmVhbVByaXZhdGVDb25zdHJ1Y3RvcnMuaCIKKyNpbmNsdWRlICJXZWJDb3JlSlNDbGll
bnREYXRhLmgiCisjaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNsdWRl
IDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1
cmVJbmxpbmVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OkpTQnVpbHRpbkludGVybmFsRnVuY3Rp
b25zKEpTQzo6Vk0mIHYpCisgICAgOiB2bSh2KQorI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisg
ICAgLCBtX3J0Y1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzRnVuY3Rpb25zKHZtKQorI2VuZGlmCisj
aWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgICwgbV9yZWFkYWJsZVN0cmVhbUludGVybmFsc0Z1
bmN0aW9ucyh2bSkKKyAgICAsIG1fc3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zKHZtKQorICAgICwg
bV93cml0YWJsZVN0cmVhbUludGVybmFsc0Z1bmN0aW9ucyh2bSkKKyNlbmRpZgoreworfQorCit2
b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2
aXNpdG9yKQoreworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgbV9ydGNQZWVyQ29ubmVj
dGlvbkludGVybmFsc0Z1bmN0aW9ucy52aXNpdCh2aXNpdG9yKTsKKyNlbmRpZgorI2lmIEVOQUJM
RShTVFJFQU1TX0FQSSkKKyAgICBtX3JlYWRhYmxlU3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zLnZp
c2l0KHZpc2l0b3IpOworICAgIG1fc3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zLnZpc2l0KHZpc2l0
b3IpOworICAgIG1fd3JpdGFibGVTdHJlYW1JbnRlcm5hbHNGdW5jdGlvbnMudmlzaXQodmlzaXRv
cik7CisjZW5kaWYKKyNpZm5kZWYgU0tJUF9VTlVTRURfUEFSQU0KKyAgICBVTlVTRURfUEFSQU0o
dmlzaXRvcik7CisjZW5kaWYKK30KKwordm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6
aW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBWTSYgdm0pCit7Cisj
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBtX3J0Y1BlZXJDb25uZWN0aW9uSW50ZXJuYWxz
RnVuY3Rpb25zLmluaXQoZ2xvYmFsT2JqZWN0KTsKKyNlbmRpZgorI2lmIEVOQUJMRShTVFJFQU1T
X0FQSSkKKyAgICBtX3JlYWRhYmxlU3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zLmluaXQoZ2xvYmFs
T2JqZWN0KTsKKyAgICBtX3N0cmVhbUludGVybmFsc0Z1bmN0aW9ucy5pbml0KGdsb2JhbE9iamVj
dCk7CisgICAgbV93cml0YWJsZVN0cmVhbUludGVybmFsc0Z1bmN0aW9ucy5pbml0KGdsb2JhbE9i
amVjdCk7CisjZW5kaWYKKworI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgRU5BQkxFKE1FRElB
X1NUUkVBTSkKKyAgICBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxK
U1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworCisgICAgSlNET01HbG9iYWxPYmplY3Q6
Okdsb2JhbFByb3BlcnR5SW5mbyBzdGF0aWNHbG9iYWxzW10gPSB7CisjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKKyNkZWZpbmUgREVDTEFSRV9HTE9CQUxfU1RBVElDKG5hbWUpXAorICAgICAgICBK
U0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvKFwKKyAgICAgICAgICAgIGNsaWVu
dERhdGEuYnVpbHRpbkZ1bmN0aW9ucygpLnJ0Y1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRp
bnMoKS5uYW1lIyNQcml2YXRlTmFtZSgpLCBydGNQZWVyQ29ubmVjdGlvbkludGVybmFscygpLm1f
IyNuYW1lIyNGdW5jdGlvbi5nZXQoKSAsIERvbnREZWxldGUgfCBSZWFkT25seSksCisgICAgICAg
IFdFQkNPUkVfRk9SRUFDSF9SVENQRUVSQ09OTkVDVElPTklOVEVSTkFMU19CVUlMVElOX0ZVTkNU
SU9OX05BTUUoREVDTEFSRV9HTE9CQUxfU1RBVElDKQorI3VuZGVmIERFQ0xBUkVfR0xPQkFMX1NU
QVRJQworI2VuZGlmCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorI2RlZmluZSBERUNMQVJFX0dM
T0JBTF9TVEFUSUMobmFtZSlcCisgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9w
ZXJ0eUluZm8oXAorICAgICAgICAgICAgY2xpZW50RGF0YS5idWlsdGluRnVuY3Rpb25zKCkucmVh
ZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucygpLm5hbWUjI1ByaXZhdGVOYW1lKCksIHJlYWRh
YmxlU3RyZWFtSW50ZXJuYWxzKCkubV8jI25hbWUjI0Z1bmN0aW9uLmdldCgpICwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KSwKKyAgICAgICAgV0VCQ09SRV9GT1JFQUNIX1JFQURBQkxFU1RSRUFNSU5U
RVJOQUxTX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShERUNMQVJFX0dMT0JBTF9TVEFUSUMpCisjdW5k
ZWYgREVDTEFSRV9HTE9CQUxfU1RBVElDCisjZGVmaW5lIERFQ0xBUkVfR0xPQkFMX1NUQVRJQyhu
YW1lKVwKKyAgICAgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyhcCisg
ICAgICAgICAgICBjbGllbnREYXRhLmJ1aWx0aW5GdW5jdGlvbnMoKS5zdHJlYW1JbnRlcm5hbHNC
dWlsdGlucygpLm5hbWUjI1ByaXZhdGVOYW1lKCksIHN0cmVhbUludGVybmFscygpLm1fIyNuYW1l
IyNGdW5jdGlvbi5nZXQoKSAsIERvbnREZWxldGUgfCBSZWFkT25seSksCisgICAgICAgIFdFQkNP
UkVfRk9SRUFDSF9TVFJFQU1JTlRFUk5BTFNfQlVJTFRJTl9GVU5DVElPTl9OQU1FKERFQ0xBUkVf
R0xPQkFMX1NUQVRJQykKKyN1bmRlZiBERUNMQVJFX0dMT0JBTF9TVEFUSUMKKyNkZWZpbmUgREVD
TEFSRV9HTE9CQUxfU1RBVElDKG5hbWUpXAorICAgICAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xv
YmFsUHJvcGVydHlJbmZvKFwKKyAgICAgICAgICAgIGNsaWVudERhdGEuYnVpbHRpbkZ1bmN0aW9u
cygpLndyaXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMoKS5uYW1lIyNQcml2YXRlTmFtZSgp
LCB3cml0YWJsZVN0cmVhbUludGVybmFscygpLm1fIyNuYW1lIyNGdW5jdGlvbi5nZXQoKSAsIERv
bnREZWxldGUgfCBSZWFkT25seSksCisgICAgICAgIFdFQkNPUkVfRk9SRUFDSF9XUklUQUJMRVNU
UkVBTUlOVEVSTkFMU19CVUlMVElOX0ZVTkNUSU9OX05BTUUoREVDTEFSRV9HTE9CQUxfU1RBVElD
KQorI3VuZGVmIERFQ0xBUkVfR0xPQkFMX1NUQVRJQworI2VuZGlmCisgICAgfTsKKworICAgIGds
b2JhbE9iamVjdC5hZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9BUlJBWV9MRU5H
VEgoc3RhdGljR2xvYmFscykpOworI2VuZGlmCisjaWZuZGVmIFNLSVBfVU5VU0VEX1BBUkFNCisg
ICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyNl
bmRpZgorfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJD
b3JlSlNCdWlsdGluSW50ZXJuYWxzLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJD
b3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKaW5kZXggNzhiMTI3OTdmNzc1NjIzYzMwYmMzNDZkYTIy
Y2Y4ZWY0ODNjOTVjYy4uMzdiNjZiMGMwMmZhMTM1M2UwZGZmMTFmNDNkZDhjOTY1ZGRjNWVjOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRpbklu
dGVybmFscy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0J1aWx0
aW5JbnRlcm5hbHMuaApAQCAtMjcsODMgKzI3LDU0IEBACiAjaWZuZGVmIFdlYkNvcmVKU0J1aWx0
aW5JbnRlcm5hbHNfaAogI2RlZmluZSBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzX2gKIAorI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCisjaW5jbHVkZSAiUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5h
bHNCdWlsdGlucy5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCiAjaW5jbHVk
ZSAiUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIgogI2luY2x1ZGUgIlN0cmVhbUlu
dGVybmFsc0J1aWx0aW5zLmgiCiAjaW5jbHVkZSAiV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oIgogI2VuZGlmCiAKLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotI2luY2x1ZGUgIlJU
Q1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnMuaCIKLSNlbmRpZgotCiAjaWYgRU5BQkxF
KFNUUkVBTVNfQVBJKSB8fCBFTkFCTEUoTUVESUFfU1RSRUFNKQogI2RlZmluZSBTS0lQX1VOVVNF
RF9QQVJBTQogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSlNET01HbG9i
YWxPYmplY3Q7CisKKy8vIEZJWE1FOiBNYWtlIGJ1aWx0aW4gZ2VuZXJhdG9yIGdlbmVyYXRlIHRo
aXMgY2xhc3MKIGNsYXNzIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zIHsKIHB1YmxpYzoKLWV4
cGxpY2l0IEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mIHYpCi0gICAgICAgIDog
dm0odikKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgICAgICwgbV9yZWFkYWJsZVN0cmVh
bUludGVybmFsc0Z1bmN0aW9ucyh2bSkKLSAgICAgICAgLCBtX3N0cmVhbUludGVybmFsc0Z1bmN0
aW9ucyh2bSkKLSAgICAgICAgLCBtX3dyaXRhYmxlU3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zKHZt
KQotI2VuZGlmCisgICAgZXhwbGljaXQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpW
TSYpOworCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICAgICAgLCBtX3J0Y1BlZXJDb25u
ZWN0aW9uSW50ZXJuYWxzRnVuY3Rpb25zKHZtKQorICAgIFJUQ1BlZXJDb25uZWN0aW9uSW50ZXJu
YWxzQnVpbHRpbkZ1bmN0aW9ucyBydGNQZWVyQ29ubmVjdGlvbkludGVybmFscygpIHsgcmV0dXJu
IG1fcnRjUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNGdW5jdGlvbnM7IH0KICNlbmRpZgotICAgIHsg
fQotCiAjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQogICAgIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxz
QnVpbHRpbkZ1bmN0aW9ucyByZWFkYWJsZVN0cmVhbUludGVybmFscygpIHsgcmV0dXJuIG1fcmVh
ZGFibGVTdHJlYW1JbnRlcm5hbHNGdW5jdGlvbnM7IH0KICAgICBTdHJlYW1JbnRlcm5hbHNCdWls
dGluRnVuY3Rpb25zIHN0cmVhbUludGVybmFscygpIHsgcmV0dXJuIG1fc3RyZWFtSW50ZXJuYWxz
RnVuY3Rpb25zOyB9CiAgICAgV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGluRnVuY3Rpb25z
IHdyaXRhYmxlU3RyZWFtSW50ZXJuYWxzKCkgeyByZXR1cm4gbV93cml0YWJsZVN0cmVhbUludGVy
bmFsc0Z1bmN0aW9uczsgfQogI2VuZGlmCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBS
VENQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5GdW5jdGlvbnMgcnRjUGVlckNvbm5lY3Rp
b25JbnRlcm5hbHMoKSB7IHJldHVybiBtX3J0Y1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzRnVuY3Rp
b25zOyB9Ci0jZW5kaWYKLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IHsKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgICAgIG1fcmVhZGFibGVTdHJlYW1JbnRl
cm5hbHNGdW5jdGlvbnMudmlzaXQodmlzaXRvcik7Ci0gICAgICAgIG1fc3RyZWFtSW50ZXJuYWxz
RnVuY3Rpb25zLnZpc2l0KHZpc2l0b3IpOwotICAgICAgICBtX3dyaXRhYmxlU3RyZWFtSW50ZXJu
YWxzRnVuY3Rpb25zLnZpc2l0KHZpc2l0b3IpOwotI2VuZGlmCi0jaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKLSAgICAgICAgbV9ydGNQZWVyQ29ubmVjdGlvbkludGVybmFsc0Z1bmN0aW9ucy52aXNp
dCh2aXNpdG9yKTsKLSNlbmRpZgotI2lmbmRlZiBTS0lQX1VOVVNFRF9QQVJBTQotICAgICAgICBV
TlVTRURfUEFSQU0odmlzaXRvcik7Ci0jZW5kaWYKLSAgICB9Ci0gICAgdm9pZCBpbml0KEpTQzo6
SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkgewotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkK
LSAgICAgICAgbV9yZWFkYWJsZVN0cmVhbUludGVybmFsc0Z1bmN0aW9ucy5pbml0KGdsb2JhbE9i
amVjdCk7Ci0gICAgICAgIG1fc3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zLmluaXQoZ2xvYmFsT2Jq
ZWN0KTsKLSAgICAgICAgbV93cml0YWJsZVN0cmVhbUludGVybmFsc0Z1bmN0aW9ucy5pbml0KGds
b2JhbE9iamVjdCk7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAgICAgICBt
X3J0Y1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzRnVuY3Rpb25zLmluaXQoZ2xvYmFsT2JqZWN0KTsK
LSNlbmRpZgotI2lmbmRlZiBTS0lQX1VOVVNFRF9QQVJBTQotICAgICAgICBVTlVTRURfUEFSQU0o
Z2xvYmFsT2JqZWN0KTsKLSNlbmRpZgotICAgIH0KKworICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90
VmlzaXRvciYpOworICAgIHZvaWQgaW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6
Vk0mKTsKIAogcHJpdmF0ZToKICAgICBKU0M6OlZNJiB2bTsKKyNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKQorICAgIFJUQ1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbkZ1bmN0aW9ucyBtX3J0
Y1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzRnVuY3Rpb25zOworI2VuZGlmCiAjaWYgRU5BQkxFKFNU
UkVBTVNfQVBJKQogICAgIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbkZ1bmN0aW9ucyBt
X3JlYWRhYmxlU3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zOwogICAgIFN0cmVhbUludGVybmFsc0J1
aWx0aW5GdW5jdGlvbnMgbV9zdHJlYW1JbnRlcm5hbHNGdW5jdGlvbnM7CiAgICAgV3JpdGFibGVT
dHJlYW1JbnRlcm5hbHNCdWlsdGluRnVuY3Rpb25zIG1fd3JpdGFibGVTdHJlYW1JbnRlcm5hbHNG
dW5jdGlvbnM7CiAjZW5kaWYKLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAgIFJUQ1BlZXJD
b25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbkZ1bmN0aW9ucyBtX3J0Y1BlZXJDb25uZWN0aW9uSW50
ZXJuYWxzRnVuY3Rpb25zOwotI2VuZGlmCiAKIH07CiAKIH0KLSNlbmRpZgorCisjZW5kaWYgLy8g
V2ViQ29yZUpTQnVpbHRpbkludGVybmFsc19oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>