<?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>81096</bug_id>
          
          <creation_ts>2012-03-14 04:56:17 -0700</creation_ts>
          <short_desc>Speech JavaScript API: SpeechRecognition, Controller and Client</short_desc>
          <delta_ts>2012-03-15 23:35:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>80260</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hans Wennborg">hans</reporter>
          <assigned_to name="Hans Wennborg">hans</assigned_to>
          <cc>abarth</cc>
    
    <cc>ojan</cc>
    
    <cc>satish</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>578312</commentid>
    <comment_count>0</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-03-14 04:56:17 -0700</bug_when>
    <thetext>Speech JavaScriptAPI: SpeechRecognition, Controller and Client</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578322</commentid>
    <comment_count>1</comment_count>
      <attachid>131830</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-03-14 05:11:36 -0700</bug_when>
    <thetext>Created attachment 131830
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578324</commentid>
    <comment_count>2</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-03-14 05:16:59 -0700</bug_when>
    <thetext>I&apos;ve uploaded SpeechRecognition, the Controller and Client in the same patch because I figured that makes it easier to see how they relate to each other. Happy to break them up into three different patches if anyone prefers.

Any pointers where I can learn more about ActiveDOMObject would also be appreciated. At the moment I only have a vague idea that SpeechRecognition needs to be an ActiveDOMObject so that it won&apos;t get garbage-collected when there are pending tasks, but I figure there&apos;s more to know?

Please take a look. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578636</commentid>
    <comment_count>3</comment_count>
      <attachid>131830</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-14 12:21:01 -0700</bug_when>
    <thetext>Comment on attachment 131830
Patch

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

I&apos;m marking this patch R+, but you seem to have a bunch of unnecessary boilerplate in SpeechRecognition.  Maybe there&apos;s a reason for it that I don&apos;t understand?  Please consider the comments below before landing.  Thanks!

&gt; Source/WebCore/Modules/speech/SpeechRecognition.cpp:68
&gt; +void SpeechRecognition::audioStartCallback()
&gt; +{
&gt; +    fireAudioStart();
&gt; +}

What&apos;s the point of having these thunks?  Why not just have the SpeechRecognitionClient call dispatchAudioStart directly?

&gt; Source/WebCore/Modules/speech/SpeechRecognition.cpp:135
&gt; +bool SpeechRecognition::canSuspend() const
&gt; +{
&gt; +    // FIXME: Implement!
&gt; +    return false;
&gt; +}
&gt; +
&gt; +void SpeechRecognition::stop()
&gt; +{
&gt; +    // FIXME: Implement!
&gt; +}
&gt; +
&gt; +bool SpeechRecognition::hasPendingActivity() const
&gt; +{
&gt; +    // FIXME: Implement!
&gt; +    return false;
&gt; +}

Do you need to override these?  Why not just inherit?

&gt; Source/WebCore/Modules/speech/SpeechRecognition.cpp:146
&gt; +ScriptExecutionContext* SpeechRecognition::scriptExecutionContext() const
&gt; +{
&gt; +    return ActiveDOMObject::scriptExecutionContext();
&gt; +}
&gt; +

Do you need to override this?  Why not just inherit?

&gt; Source/WebCore/Modules/speech/SpeechRecognition.cpp:167
&gt; +    m_controller-&gt;unregisterSpeechRecognition(this);

I was expecting a corresponding registerSpeechRecognition call.  Is that not needed?

Please consider unregistering yourself in SpeechRecognition::stop() instead.  SpeechRecognition::stop() is called at a deterministic time, but SpeechRecognition::~SpeechRecognition is call non-deterministically by the garbage collector.  Generally, we prefer web-facing APIs to behave as deterministically as possible so we don&apos;t get content that expects the current quirks of a garbage collector.

&gt; Source/WebCore/Modules/speech/SpeechRecognition.cpp:170
&gt; +void SpeechRecognition::fireAudioStart()

Normally we&apos;d call these functions &quot;dispatchAudioStart&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579381</commentid>
    <comment_count>4</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-03-15 07:52:50 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 131830 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=131830&amp;action=review
&gt; 
&gt; I&apos;m marking this patch R+, but you seem to have a bunch of unnecessary boilerplate in SpeechRecognition.  Maybe there&apos;s a reason for it that I don&apos;t understand?  Please consider the comments below before landing.  Thanks!

Thanks very much for the review!

Re-uploading so you can take a look and let me know if my responses below make sense; there&apos;s no need to rush this.

&gt; 
&gt; &gt; Source/WebCore/Modules/speech/SpeechRecognition.cpp:68
&gt; &gt; +void SpeechRecognition::audioStartCallback()
&gt; &gt; +{
&gt; &gt; +    fireAudioStart();
&gt; &gt; +}
&gt; 
&gt; What&apos;s the point of having these thunks?  Why not just have the SpeechRecognitionClient call dispatchAudioStart directly?

I don&apos;t want the class that implements SpeechRecognitionClient (for Chromium, it will be a proxy object forwarding calls to/from Chromium) to be concerned about details in WebCore such as dispatching events or the internal state of the SpeechRecognition object, etc. I think it&apos;s much cleaner that when the client has some result it calls back to speechRecognition-&gt;resultCallback(), and that&apos;s it.

I can see that it looks weird to have so many almost empty functions, though. I&apos;ll move the code to dispatch events into these callbacks, since they don&apos;t do much else at the moment.

&gt; &gt; Source/WebCore/Modules/speech/SpeechRecognition.cpp:135
&gt; &gt; +bool SpeechRecognition::canSuspend() const
&gt; &gt; +{
&gt; &gt; +    // FIXME: Implement!
&gt; &gt; +    return false;
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +void SpeechRecognition::stop()
&gt; &gt; +{
&gt; &gt; +    // FIXME: Implement!
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +bool SpeechRecognition::hasPendingActivity() const
&gt; &gt; +{
&gt; &gt; +    // FIXME: Implement!
&gt; &gt; +    return false;
&gt; &gt; +}
&gt; 
&gt; Do you need to override these?  Why not just inherit?

I thought the point of ActiveDOMObject was that I should override hasPendingActivity() to return true when the recognition was started and we were waiting for callbacks to prevent garbage collecting the object.

I see now that maybe what I should do is call into ActiveDOMObject::setPendingActivity() / unsetPendingActivity() instead? Removing these functions.

&gt; 
&gt; &gt; Source/WebCore/Modules/speech/SpeechRecognition.cpp:146
&gt; &gt; +ScriptExecutionContext* SpeechRecognition::scriptExecutionContext() const
&gt; &gt; +{
&gt; &gt; +    return ActiveDOMObject::scriptExecutionContext();
&gt; &gt; +}
&gt; &gt; +
&gt; 
&gt; Do you need to override this?  Why not just inherit?

Yes, this is overriding EventTarget::scriptExecutionContext(), which is pure virtual.

&gt; 
&gt; &gt; Source/WebCore/Modules/speech/SpeechRecognition.cpp:167
&gt; &gt; +    m_controller-&gt;unregisterSpeechRecognition(this);
&gt; 
&gt; I was expecting a corresponding registerSpeechRecognition call.  Is that not needed?

The object is registered with the client when calling start().

&gt; 
&gt; Please consider unregistering yourself in SpeechRecognition::stop() instead.  SpeechRecognition::stop() is called at a deterministic time, but SpeechRecognition::~SpeechRecognition is call non-deterministically by the garbage collector.  Generally, we prefer web-facing APIs to behave as deterministically as possible so we don&apos;t get content that expects the current quirks of a garbage collector.

Yes, unregistering at a deterministic time sounds desirable. stop() is probably not the right time to do it, since the object would still be receiving events after that (onend). Since the object will need to keep track of whether or not it expects events anyway, for the sake of ActiveDOMObject, it should just unregister itself when it no longer expects events.

&gt; 
&gt; &gt; Source/WebCore/Modules/speech/SpeechRecognition.cpp:170
&gt; &gt; +void SpeechRecognition::fireAudioStart()
&gt; 
&gt; Normally we&apos;d call these functions &quot;dispatchAudioStart&quot;.

I&apos;ve removed these as per my comment above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579382</commentid>
    <comment_count>5</comment_count>
      <attachid>132047</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-03-15 07:54:28 -0700</bug_when>
    <thetext>Created attachment 132047
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579692</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-15 13:38:47 -0700</bug_when>
    <thetext>&gt; &gt; Do you need to override these?  Why not just inherit?
&gt; 
&gt; I thought the point of ActiveDOMObject was that I should override hasPendingActivity() to return true when the recognition was started and we were waiting for callbacks to prevent garbage collecting the object.
&gt; 
&gt; I see now that maybe what I should do is call into ActiveDOMObject::setPendingActivity() / unsetPendingActivity() instead? Removing these functions.

Yeah, or you can override these functions later when you&apos;re actually implementing that functionality.  As-is, these were just stubs.

&gt; &gt; &gt; Source/WebCore/Modules/speech/SpeechRecognition.cpp:146
&gt; &gt; &gt; +ScriptExecutionContext* SpeechRecognition::scriptExecutionContext() const
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    return ActiveDOMObject::scriptExecutionContext();
&gt; &gt; &gt; +}
&gt; &gt; &gt; +
&gt; &gt; 
&gt; &gt; Do you need to override this?  Why not just inherit?
&gt; 
&gt; Yes, this is overriding EventTarget::scriptExecutionContext(), which is pure virtual.

Ah, makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579693</commentid>
    <comment_count>7</comment_count>
      <attachid>132047</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-15 13:39:38 -0700</bug_when>
    <thetext>Comment on attachment 132047
Patch

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580189</commentid>
    <comment_count>8</comment_count>
      <attachid>132047</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-15 23:35:37 -0700</bug_when>
    <thetext>Comment on attachment 132047
Patch

Clearing flags on attachment: 132047

Committed r110950: &lt;http://trac.webkit.org/changeset/110950&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580190</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-15 23:35:53 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131830</attachid>
            <date>2012-03-14 05:11:36 -0700</date>
            <delta_ts>2012-03-15 07:54:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81096-20120314121134.patch</filename>
            <type>text/plain</type>
            <size>37015</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwNjg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTYyNjI4OTdkY2MyNTIw
NTI0ZjUwYWVkYTg3MDM5M2M1YTI2NzgyMS4uMmUxNmYxMTRlNWZjYWU4N2I2ZGE5ODJiMzEyOGFh
ZWY3ZmI5MmE3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1IEBACisyMDEyLTAzLTE0ICBIYW5z
IFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU3BlZWNoIEphdmFTY3Jp
cHQgQVBJOiBTcGVlY2hSZWNvZ25pdGlvbiwgQ29udHJvbGxlciBhbmQgQ2xpZW50CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTA5NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBpbXBsZW1lbnRhdGlv
biBzdHViIGZvciBTcGVlY2hSZWNvZ25pdGlvbi4gQWRkIHRoZQorICAgICAgICBTcGVlY2hSZWNv
Z25pdGlvbkNvbnRyb2xsZXIgY2xhc3MgYW5kIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50CisgICAg
ICAgIGludGVyZmFjZS4KKworICAgICAgICBUZXN0OiBmYXN0L3NwZWVjaC9zY3JpcHRlZC9iYXNp
Y3MuaHRtbAorCisgICAgICAgICogTW9kdWxlcy9zcGVlY2gvRE9NV2luZG93U3BlZWNoLmlkbDoK
KyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbi5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpzdGFydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6c3RvcEZ1bmN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjphYm9ydCk6CisgICAgICAgIChXZWJDb3Jl
OjpTcGVlY2hSZWNvZ25pdGlvbjo6YXVkaW9TdGFydENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWVjaFJlY29nbml0aW9uOjpzb3VuZFN0YXJ0Q2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6U3BlZWNoUmVjb2duaXRpb246OnNwZWVjaFN0YXJ0Q2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb246OnNwZWVjaEVuZENhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjphdWRpb0VuZENhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpyZXN1bHRDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6bm9NYXRjaENhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpyZXN1bHREZWxldGVkQ2FsbGJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb246OmVycm9yQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb246OnN0YXJ0Q2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6U3BlZWNoUmVjb2duaXRpb246OmVuZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OlNwZWVjaFJlY29nbml0aW9uOjpjYW5TdXNwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVj
aFJlY29nbml0aW9uOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9u
OjpoYXNQZW5kaW5nQWN0aXZpdHkpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRp
b246OmludGVyZmFjZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb246
OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoUmVjb2du
aXRpb246OlNwZWVjaFJlY29nbml0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29n
bml0aW9uOjp+U3BlZWNoUmVjb2duaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoUmVj
b2duaXRpb246OmZpcmVBdWRpb1N0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29n
bml0aW9uOjpmaXJlU291bmRTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25p
dGlvbjo6ZmlyZVNwZWVjaFN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0
aW9uOjpmaXJlU3BlZWNoRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9u
OjpmaXJlQXVkaW9FbmQpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb246OmZp
cmVSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb246OmZpcmVOb01h
dGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpmaXJlUmVzdWx0RGVs
ZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6ZmlyZUVycm9yKToK
KyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpmaXJlU3RhcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb246OmZpcmVFbmQpOgorICAgICAgICAqIE1vZHVs
ZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChTcGVlY2hSZWNvZ25pdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hS
ZWNvZ25pdGlvbjo6Z3JhbW1hcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRp
b246OnNldEdyYW1tYXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjps
YW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpzZXRMYW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpjb250aW51b3VzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpzZXRDb250aW51b3VzKToKKyAgICAgICAgKiBN
b2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbi5pZGw6CisgICAgICAgICogTW9kdWxlcy9z
cGVlY2gvU3BlZWNoUmVjb2duaXRpb25DbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoU3BlZWNoUmVjb2duaXRpb25DbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNo
UmVjb2duaXRpb25DbGllbnQ6On5TcGVlY2hSZWNvZ25pdGlvbkNsaWVudCk6CisgICAgICAgICog
TW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVy
OjpzdXBwbGVtZW50TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbkNv
bnRyb2xsZXI6OlNwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXI6On5TcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6cHJvdmlkZVNwZWVjaFJlY29nbml0aW9uVG8pOgorICAg
ICAgICAqIE1vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU3BlZWNoUmVjb2duaXRpb25Db250cm9s
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlcjo6c3Rh
cnQpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyOjpzdG9w
KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlcjo6YWJvcnQp
OgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyOjp2aXNpYmls
aXR5SGlkZGVuKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uQ29udHJvbGxl
cjo6dW5yZWdpc3RlclNwZWVjaFJlY29nbml0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVj
aFJlY29nbml0aW9uQ29udHJvbGxlcjo6ZnJvbSk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgor
ICAgICAgICAqIGRvbS9FdmVudFRhcmdldEZhY3RvcnkuaW46CisKIDIwMTItMDMtMTQgIEhhamlt
ZSBNb3JyaXRhICA8bW9ycml0YUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBi
dWlsZCBmaXguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGQyYmRjZjhlN2IyYjk2YjE4
MTg5YTRjNDM1NjExYmViMDYwZThlMjAuLmZkNzNiNmNkMzY3MGRiNmFkY2VjMzRlNjZmOWQ4YmVk
YmFjZjZhMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIw
MTItMDMtMTQgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4KKworICAgICAgICBT
cGVlY2ggSmF2YVNjcmlwdCBBUEk6IFNwZWVjaFJlY29nbml0aW9uLCBDb250cm9sbGVyIGFuZCBD
bGllbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgx
MDk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJv
dmlkZSBhIFNwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlciB0byBQYWdlLCB3aXRoIGEgTlVMTCBj
bGllbnQgZm9yCisgICAgICAgIG5vdy4KKworICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpXZWJWaWV3SW1wbCk6CisKIDIwMTItMDMt
MTQgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQuICBSb2xsZWQgREVQUy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvc3BlZWNoL0RPTVdpbmRvd1NwZWVjaC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3NwZWVjaC9ET01XaW5kb3dTcGVlY2guaWRsCmluZGV4IDcwMjAwYjFiZTQ2N2JkM2RhZTA1NDBh
ZjdiZjM2ZTg3NjVmOTM0ZTcuLjBjMjZmMDNkNzA5OGEzZWFhMTZlMWE3MDkyMjk0OTJjNDA0ZmUw
M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL0RPTVdpbmRvd1Nw
ZWVjaC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvRE9NV2luZG93U3Bl
ZWNoLmlkbApAQCAtMjgsNiArMjgsNyBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgQ29uZGl0
aW9uYWw9U0NSSVBURURfU1BFRUNILAogICAgICAgICBTdXBwbGVtZW50YWw9RE9NV2luZG93CiAg
ICAgXSBET01XaW5kb3dTcGVlY2ggeworICAgICAgICBhdHRyaWJ1dGUgW1Y4RW5hYmxlZEF0UnVu
dGltZV0gU3BlZWNoUmVjb2duaXRpb25Db25zdHJ1Y3RvciB3ZWJraXRTcGVlY2hSZWNvZ25pdGlv
bjsKICAgICAgICAgYXR0cmlidXRlIFtWOEVuYWJsZWRBdFJ1bnRpbWVdIFNwZWVjaFJlY29nbml0
aW9uRXJyb3JDb25zdHJ1Y3RvciB3ZWJraXRTcGVlY2hSZWNvZ25pdGlvbkVycm9yOwogICAgICAg
ICBhdHRyaWJ1dGUgW1Y4RW5hYmxlZEF0UnVudGltZV0gU3BlZWNoUmVjb2duaXRpb25FdmVudENv
bnN0cnVjdG9yIHdlYmtpdFNwZWVjaFJlY29nbml0aW9uRXZlbnQ7CiAgICAgICAgIGF0dHJpYnV0
ZSBbVjhFbmFibGVkQXRSdW50aW1lXSBTcGVlY2hHcmFtbWFyQ29uc3RydWN0b3Igd2Via2l0U3Bl
ZWNoR3JhbW1hcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1Nw
ZWVjaFJlY29nbml0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVj
aFJlY29nbml0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOWRjYWY5Yzc4ZjRiZmQyNmMzZmRiYjg3MWI0
NjM0NWU4Y2NiYWFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9z
cGVlY2gvU3BlZWNoUmVjb2duaXRpb24uY3BwCkBAIC0wLDAgKzEsMjI4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVS
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkKKworI2lu
Y2x1ZGUgIlNwZWVjaFJlY29nbml0aW9uLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2lu
Y2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXIuaCIK
KyNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvbkVycm9yLmgiCisjaW5jbHVkZSAiU3BlZWNoUmVj
b2duaXRpb25FdmVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8U3Bl
ZWNoUmVjb2duaXRpb24+IFNwZWVjaFJlY29nbml0aW9uOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCkKK3sKKyAgICBSZWZQdHI8U3BlZWNoUmVjb2duaXRpb24+IHNwZWVj
aFJlY29nbml0aW9uKGFkb3B0UmVmKG5ldyBTcGVlY2hSZWNvZ25pdGlvbihjb250ZXh0KSkpOwor
ICAgIHNwZWVjaFJlY29nbml0aW9uLT5zdXNwZW5kSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gc3Bl
ZWNoUmVjb2duaXRpb24ucmVsZWFzZSgpOworfQorCit2b2lkIFNwZWVjaFJlY29nbml0aW9uOjpz
dGFydCgpCit7CisgICAgQVNTRVJUKG1fY29udHJvbGxlcik7IC8vIEZJWE1FOiBTcGVjIHNob3Vs
ZCBzYXkgd2hhdCB0byBkbyBpZiB3ZSBhcmUgYWxyZWFkeSBzdGFydGVkLgorICAgIG1fY29udHJv
bGxlci0+c3RhcnQodGhpcywgbV9ncmFtbWFycy5nZXQoKSwgbV9sYW5nLCBtX2NvbnRpbnVvdXMp
OworfQorCit2b2lkIFNwZWVjaFJlY29nbml0aW9uOjpzdG9wRnVuY3Rpb24oKQoreworICAgIEFT
U0VSVChtX2NvbnRyb2xsZXIpOworICAgIG1fY29udHJvbGxlci0+c3RvcCh0aGlzKTsgLy8gRklY
TUU6IFNwZWMgc2hvdWxkIHNheSB3aGF0IHRvIGRvIGlmIHdlIGFyZSBub3Qgc3RhcnRlZC4KK30K
Kwordm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6YWJvcnQoKQoreworICAgIEFTU0VSVChtX2NvbnRy
b2xsZXIpOworICAgIG1fY29udHJvbGxlci0+YWJvcnQodGhpcyk7IC8vIEZJWE1FOiBTcGVjIHNo
b3VsZCBzYXkgd2hhdCB0byBkbyBpZiB3ZSBhcmUgbm90IHN0YXJ0ZWQuCit9CisKK3ZvaWQgU3Bl
ZWNoUmVjb2duaXRpb246OmF1ZGlvU3RhcnRDYWxsYmFjaygpCit7CisgICAgZmlyZUF1ZGlvU3Rh
cnQoKTsKK30KKwordm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6c291bmRTdGFydENhbGxiYWNrKCkK
K3sKKyAgICBmaXJlU291bmRTdGFydCgpOworfQorCit2b2lkIFNwZWVjaFJlY29nbml0aW9uOjpz
cGVlY2hTdGFydENhbGxiYWNrKCkKK3sKKyAgICBmaXJlU3BlZWNoU3RhcnQoKTsKK30KKwordm9p
ZCBTcGVlY2hSZWNvZ25pdGlvbjo6c3BlZWNoRW5kQ2FsbGJhY2soKQoreworICAgIGZpcmVTcGVl
Y2hFbmQoKTsKK30KKwordm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6YXVkaW9FbmRDYWxsYmFjaygp
Cit7CisgICAgZmlyZUF1ZGlvRW5kKCk7Cit9CisKK3ZvaWQgU3BlZWNoUmVjb2duaXRpb246OnJl
c3VsdENhbGxiYWNrKFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+IHJlc3VsdCwg
dW5zaWduZWQgbG9uZyByZXN1bHRJbmRleCwgUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJl
c3VsdExpc3Q+IHJlc3VsdEhpc3RvcnkpCit7CisgICAgZmlyZVJlc3VsdChyZXN1bHQsIHJlc3Vs
dEluZGV4LCByZXN1bHRIaXN0b3J5KTsKK30KKwordm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6bm9N
YXRjaENhbGxiYWNrKFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+IHJlc3VsdCkK
K3sKKyAgICBmaXJlTm9NYXRjaChyZXN1bHQpOworfQorCit2b2lkIFNwZWVjaFJlY29nbml0aW9u
OjpyZXN1bHREZWxldGVkQ2FsbGJhY2sodW5zaWduZWQgcmVzdWx0SW5kZXgsIFBhc3NSZWZQdHI8
U3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0PiByZXN1bHRIaXN0b3J5KQoreworICAgIGZpcmVS
ZXN1bHREZWxldGVkKHJlc3VsdEluZGV4LCByZXN1bHRIaXN0b3J5KTsKK30KKwordm9pZCBTcGVl
Y2hSZWNvZ25pdGlvbjo6ZXJyb3JDYWxsYmFjayhQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9u
RXJyb3I+IGVycm9yKQoreworICAgIGZpcmVFcnJvcihlcnJvcik7Cit9CisKK3ZvaWQgU3BlZWNo
UmVjb2duaXRpb246OnN0YXJ0Q2FsbGJhY2soKQoreworICAgIGZpcmVTdGFydCgpOworfQorCit2
b2lkIFNwZWVjaFJlY29nbml0aW9uOjplbmRDYWxsYmFjaygpCit7CisgICAgZmlyZUVuZCgpOwor
fQorCitib29sIFNwZWVjaFJlY29nbml0aW9uOjpjYW5TdXNwZW5kKCkgY29uc3QKK3sKKyAgICAv
LyBGSVhNRTogSW1wbGVtZW50IQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTcGVlY2hS
ZWNvZ25pdGlvbjo6c3RvcCgpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCEKK30KKworYm9v
bCBTcGVlY2hSZWNvZ25pdGlvbjo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKK3sKKyAgICAv
LyBGSVhNRTogSW1wbGVtZW50IQorICAgIHJldHVybiBmYWxzZTsKK30KKworY29uc3QgQXRvbWlj
U3RyaW5nJiBTcGVlY2hSZWNvZ25pdGlvbjo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JTcGVlY2hSZWNvZ25pdGlvbjsKK30KKwor
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogU3BlZWNoUmVjb2duaXRpb246OnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKK30KKworU3BlZWNoUmVjb2duaXRpb246OlNwZWVjaFJlY29nbml0
aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgOiBBY3RpdmVET01PYmpl
Y3QoY29udGV4dCwgdGhpcykKKyAgICAsIG1fZ3JhbW1hcnMoU3BlZWNoR3JhbW1hckxpc3Q6OmNy
ZWF0ZSgpKSAvLyBGSVhNRTogVGhlIHNwZWMgaXMgbm90IGNsZWFyIG9uIHRoZSBkZWZhdWx0IHZh
bHVlIGZvciB0aGUgZ3JhbW1hcnMgYXR0cmlidXRlLgorICAgICwgbV9jb250aW51b3VzKGZhbHNl
KQorICAgICwgbV9jb250cm9sbGVyKDApCit7CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+aXNEb2N1bWVudCgpKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNf
Y2FzdDxEb2N1bWVudCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisKKyAgICBQYWdlKiBw
YWdlID0gZG9jdW1lbnQtPnBhZ2UoKTsKKyAgICBBU1NFUlQocGFnZSk7CisKKyAgICBtX2NvbnRy
b2xsZXIgPSBTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXI6OmZyb20ocGFnZSk7CisgICAgQVNT
RVJUKG1fY29udHJvbGxlcik7CisKKyAgICAvLyBGSVhNRTogTmVlZCB0byBob29rIHVwIHdpdGgg
UGFnZSB0byBnZXQgbm90aWZpZWQgd2hlbiB0aGUgdmlzaWJpbGl0eSBjaGFuZ2VzLgorfQorCitT
cGVlY2hSZWNvZ25pdGlvbjo6flNwZWVjaFJlY29nbml0aW9uKCkKK3sKKyAgICBtX2NvbnRyb2xs
ZXItPnVucmVnaXN0ZXJTcGVlY2hSZWNvZ25pdGlvbih0aGlzKTsKK30KKwordm9pZCBTcGVlY2hS
ZWNvZ25pdGlvbjo6ZmlyZUF1ZGlvU3RhcnQoKQoreworICAgIC8vIEZJWE1FOiBUaGUgc3BlYyBz
aG91bGQgc3BlY2lmeSB3aGV0aGVyIHRoZXNlIGV2ZW50cyBjYW4gYnViYmxlIGFuZCBhcmUgY2Fu
Y2VsYWJsZS4KKyAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmF1
ZGlvc3RhcnRFdmVudCwgLypjYW5CdWJibGU9Ki9mYWxzZSwgLypjYW5jZWxhYmxlPSovZmFsc2Up
KTsKK30KKwordm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6ZmlyZVNvdW5kU3RhcnQoKQoreworICAg
IGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc291bmRzdGFydEV2ZW50
LCAvKmNhbkJ1YmJsZT0qL2ZhbHNlLCAvKmNhbmNlbGFibGU9Ki9mYWxzZSkpOworfQorCit2b2lk
IFNwZWVjaFJlY29nbml0aW9uOjpmaXJlU3BlZWNoU3RhcnQoKQoreworICAgIGRpc3BhdGNoRXZl
bnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3BlZWNoc3RhcnRFdmVudCwgLypjYW5CdWJi
bGU9Ki9mYWxzZSwgLypjYW5jZWxhYmxlPSovZmFsc2UpKTsKK30KKwordm9pZCBTcGVlY2hSZWNv
Z25pdGlvbjo6ZmlyZVNwZWVjaEVuZCgpCit7CisgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS5zcGVlY2hlbmRFdmVudCwgLypjYW5CdWJibGU9Ki9mYWxzZSwgLypj
YW5jZWxhYmxlPSovZmFsc2UpKTsKK30KKwordm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6ZmlyZUF1
ZGlvRW5kKCkKK3sKKyAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LmF1ZGlvZW5kRXZlbnQsIC8qY2FuQnViYmxlPSovZmFsc2UsIC8qY2FuY2VsYWJsZT0qL2ZhbHNl
KSk7Cit9CisKK3ZvaWQgU3BlZWNoUmVjb2duaXRpb246OmZpcmVSZXN1bHQoUGFzc1JlZlB0cjxT
cGVlY2hSZWNvZ25pdGlvblJlc3VsdD4gcmVzdWx0LCB1bnNpZ25lZCBsb25nIHJlc3VsdEluZGV4
LCBQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdD4gcmVzdWx0SGlzdG9yeSkK
K3sKKyAgICBkaXNwYXRjaEV2ZW50KFNwZWVjaFJlY29nbml0aW9uRXZlbnQ6OmNyZWF0ZVJlc3Vs
dChyZXN1bHQsIHJlc3VsdEluZGV4LCByZXN1bHRIaXN0b3J5KSk7Cit9CisKK3ZvaWQgU3BlZWNo
UmVjb2duaXRpb246OmZpcmVOb01hdGNoKFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1
bHQ+IHJlc3VsdCkKK3sKKyAgICBkaXNwYXRjaEV2ZW50KFNwZWVjaFJlY29nbml0aW9uRXZlbnQ6
OmNyZWF0ZU5vTWF0Y2gocmVzdWx0KSk7Cit9CisKK3ZvaWQgU3BlZWNoUmVjb2duaXRpb246OmZp
cmVSZXN1bHREZWxldGVkKHVuc2lnbmVkIHJlc3VsdEluZGV4LCBQYXNzUmVmUHRyPFNwZWVjaFJl
Y29nbml0aW9uUmVzdWx0TGlzdD4gcmVzdWx0SGlzdG9yeSkKK3sKKyAgICBkaXNwYXRjaEV2ZW50
KFNwZWVjaFJlY29nbml0aW9uRXZlbnQ6OmNyZWF0ZVJlc3VsdERlbGV0ZWQocmVzdWx0SW5kZXgs
IHJlc3VsdEhpc3RvcnkpKTsKK30KKwordm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6ZmlyZUVycm9y
KFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25FcnJvcj4gZXJyb3IpCit7CisgICAgZGlzcGF0
Y2hFdmVudChTcGVlY2hSZWNvZ25pdGlvbkV2ZW50OjpjcmVhdGVFcnJvcihlcnJvcikpOworfQor
Cit2b2lkIFNwZWVjaFJlY29nbml0aW9uOjpmaXJlU3RhcnQoKQoreworICAgIGRpc3BhdGNoRXZl
bnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3RhcnRFdmVudCwgLypjYW5CdWJibGU9Ki9m
YWxzZSwgLypjYW5jZWxhYmxlPSovZmFsc2UpKTsKK30KKwordm9pZCBTcGVlY2hSZWNvZ25pdGlv
bjo6ZmlyZUVuZCgpCit7CisgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5lbmRFdmVudCwgLypjYW5CdWJibGU9Ki9mYWxzZSwgLypjYW5jZWxhYmxlPSovZmFsc2Up
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNDUklQ
VEVEX1NQRUVDSCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1Nw
ZWVjaFJlY29nbml0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hS
ZWNvZ25pdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4Y2UyMmZlNTIyMWVjZGMyOWZhMGYzMjdlMDE2Y2Y3
MTliZDY4MmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVj
aC9TcGVlY2hSZWNvZ25pdGlvbi5oCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBTcGVlY2hSZWNvZ25pdGlvbl9oCisjZGVmaW5lIFNwZWVjaFJlY29nbml0aW9uX2gKKworI2lm
IEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIK
KyNpbmNsdWRlICJFdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisj
aW5jbHVkZSAiU3BlZWNoR3JhbW1hckxpc3QuaCIKKyNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsK
K2NsYXNzIFNwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlcjsKK2NsYXNzIFNwZWVjaFJlY29nbml0
aW9uRXJyb3I7CitjbGFzcyBTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDsKK2NsYXNzIFNwZWVjaFJl
Y29nbml0aW9uUmVzdWx0TGlzdDsKKworY2xhc3MgU3BlZWNoUmVjb2duaXRpb24gOiBwdWJsaWMg
UmVmQ291bnRlZDxTcGVlY2hSZWNvZ25pdGlvbj4sIHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHB1
YmxpYyBFdmVudFRhcmdldCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3BlZWNo
UmVjb2duaXRpb24+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisKKyAgICBQYXNz
UmVmUHRyPFNwZWVjaEdyYW1tYXJMaXN0PiBncmFtbWFycygpIHsgcmV0dXJuIG1fZ3JhbW1hcnM7
IH0KKyAgICB2b2lkIHNldEdyYW1tYXJzKFBhc3NSZWZQdHI8U3BlZWNoR3JhbW1hckxpc3Q+IGdy
YW1tYXJzKSB7IG1fZ3JhbW1hcnMgPSBncmFtbWFyczsgfQorCisgICAgU3RyaW5nIGxhbmcoKSB7
IHJldHVybiBtX2xhbmc7IH0KKyAgICB2b2lkIHNldExhbmcoY29uc3QgU3RyaW5nJiBsYW5nKSB7
IG1fbGFuZyA9IGxhbmc7IH0KKworICAgIGJvb2wgY29udGludW91cygpIHsgcmV0dXJuIG1fY29u
dGludW91czsgfQorICAgIHZvaWQgc2V0Q29udGludW91cyhib29sIGNvbnRpbnVvdXMpIHsgbV9j
b250aW51b3VzID0gY29udGludW91czsgfQorCisgICAgLy8gQ2FsbGFibGUgYnkgdGhlIHVzZXIu
CisgICAgdm9pZCBzdGFydCgpOworICAgIHZvaWQgc3RvcEZ1bmN0aW9uKCk7CisgICAgdm9pZCBh
Ym9ydCgpOworCisgICAgLy8gQ2FsbGVkIGJ5IHRoZSBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudC4K
KyAgICB2b2lkIGF1ZGlvU3RhcnRDYWxsYmFjaygpOworICAgIHZvaWQgc291bmRTdGFydENhbGxi
YWNrKCk7CisgICAgdm9pZCBzcGVlY2hTdGFydENhbGxiYWNrKCk7CisgICAgdm9pZCBzcGVlY2hF
bmRDYWxsYmFjaygpOworICAgIHZvaWQgYXVkaW9FbmRDYWxsYmFjaygpOworICAgIHZvaWQgcmVz
dWx0Q2FsbGJhY2soUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4sIHVuc2lnbmVk
IGxvbmcgcmVzdWx0SW5kZXgsIFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0
PiByZXN1bHRIaXN0b3J5KTsKKyAgICB2b2lkIG5vTWF0Y2hDYWxsYmFjayhQYXNzUmVmUHRyPFNw
ZWVjaFJlY29nbml0aW9uUmVzdWx0Pik7CisgICAgdm9pZCByZXN1bHREZWxldGVkQ2FsbGJhY2so
dW5zaWduZWQgcmVzdWx0SW5kZXgsIFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHRM
aXN0PiByZXN1bHRIaXN0b3J5KTsKKyAgICB2b2lkIGVycm9yQ2FsbGJhY2soUGFzc1JlZlB0cjxT
cGVlY2hSZWNvZ25pdGlvbkVycm9yPik7CisgICAgdm9pZCBzdGFydENhbGxiYWNrKCk7CisgICAg
dm9pZCBlbmRDYWxsYmFjaygpOworCisgICAgLy8gQWN0aXZlRE9NT2JqZWN0CisgICAgdmlydHVh
bCBib29sIGNhblN1c3BlbmQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3Rv
cCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25z
dCBPVkVSUklERTsKKworICAgIC8vIEV2ZW50VGFyZ2V0CisgICAgdmlydHVhbCBjb25zdCBBdG9t
aWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBPVkVS
UklERTsKKworICAgIHVzaW5nIFJlZkNvdW50ZWQ8U3BlZWNoUmVjb2duaXRpb24+OjpyZWY7Cisg
ICAgdXNpbmcgUmVmQ291bnRlZDxTcGVlY2hSZWNvZ25pdGlvbj46OmRlcmVmOworCisgICAgREVG
SU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihhdWRpb3N0YXJ0KTsKKyAgICBERUZJTkVfQVRU
UklCVVRFX0VWRU5UX0xJU1RFTkVSKHNvdW5kc3RhcnQpOworICAgIERFRklORV9BVFRSSUJVVEVf
RVZFTlRfTElTVEVORVIoc3BlZWNoc3RhcnQpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRf
TElTVEVORVIoc3BlZWNoZW5kKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVS
KHNvdW5kZW5kKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGF1ZGlvZW5k
KTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHJlc3VsdCk7CisgICAgREVG
SU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihub21hdGNoKTsKKyAgICBERUZJTkVfQVRUUklC
VVRFX0VWRU5UX0xJU1RFTkVSKHJlc3VsdGRlbGV0ZWQpOworICAgIERFRklORV9BVFRSSUJVVEVf
RVZFTlRfTElTVEVORVIoZXJyb3IpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVO
RVIoc3RhcnQpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZW5kKTsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUmVmQ291bnRlZDxTcGVlY2hSZWNvZ25pdGlvbj47
CisKKyAgICBTcGVlY2hSZWNvZ25pdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAg
flNwZWVjaFJlY29nbml0aW9uKCk7CisKKyAgICAvLyBFdmVudFRhcmdldAorICAgIHZpcnR1YWwg
dm9pZCByZWZFdmVudFRhcmdldCgpIE9WRVJSSURFIHsgcmVmKCk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgZGVyZWZFdmVudFRhcmdldCgpIE9WRVJSSURFIHsgZGVyZWYoKTsgfQorICAgIHZpcnR1YWwg
RXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKSBPVkVSUklERSB7IHJldHVybiAmbV9l
dmVudFRhcmdldERhdGE7IH0KKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZW5zdXJlRXZl
bnRUYXJnZXREYXRhKCkgT1ZFUlJJREUgeyByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOyB9CisK
KyAgICB2b2lkIGZpcmVBdWRpb1N0YXJ0KCk7CisgICAgdm9pZCBmaXJlU291bmRTdGFydCgpOwor
ICAgIHZvaWQgZmlyZVNwZWVjaFN0YXJ0KCk7CisgICAgdm9pZCBmaXJlU3BlZWNoRW5kKCk7Cisg
ICAgdm9pZCBmaXJlQXVkaW9FbmQoKTsKKyAgICB2b2lkIGZpcmVSZXN1bHQoUGFzc1JlZlB0cjxT
cGVlY2hSZWNvZ25pdGlvblJlc3VsdD4sIHVuc2lnbmVkIGxvbmcgcmVzdWx0SW5kZXgsIFBhc3NS
ZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0PiByZXN1bHRIaXN0b3J5KTsKKyAgICB2
b2lkIGZpcmVOb01hdGNoKFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+KTsKKyAg
ICB2b2lkIGZpcmVSZXN1bHREZWxldGVkKHVuc2lnbmVkIHJlc3VsdEluZGV4LCBQYXNzUmVmUHRy
PFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdD4gcmVzdWx0SGlzdG9yeSk7CisgICAgdm9pZCBm
aXJlRXJyb3IoUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvbkVycm9yPik7CisgICAgdm9pZCBm
aXJlU3RhcnQoKTsKKyAgICB2b2lkIGZpcmVFbmQoKTsKKworICAgIFJlZlB0cjxTcGVlY2hHcmFt
bWFyTGlzdD4gbV9ncmFtbWFyczsKKyAgICBTdHJpbmcgbV9sYW5nOworICAgIGJvb2wgbV9jb250
aW51b3VzOworCisgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJnZXREYXRhOworCisgICAg
U3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyKiBtX2NvbnRyb2xsZXI7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQorCisj
ZW5kaWYgLy8gU3BlZWNoUmVjb2duaXRpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb24uaWRsIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb24uaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkyYTRiYzBkY2Fh
NDIwNjVhNjlmNDllOWE0OGM3ZTI4ZjQzZjI2MGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbi5pZGwKQEAgLTAsMCArMSw1
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKK21vZHVsZSBjb3JlIHsKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBD
b25kaXRpb25hbD1TQ1JJUFRFRF9TUEVFQ0gsCisgICAgICAgIEFjdGl2ZURPTU9iamVjdCwKKyAg
ICAgICAgQ29uc3RydWN0b3IsCisgICAgICAgIENhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQsCisgICAgICAgIEV2ZW50VGFyZ2V0LAorICAgIF0gU3BlZWNoUmVjb2duaXRpb24geworICAg
ICAgICBhdHRyaWJ1dGUgU3BlZWNoR3JhbW1hckxpc3QgZ3JhbW1hcnM7CisgICAgICAgIGF0dHJp
YnV0ZSBET01TdHJpbmcgbGFuZzsKKyAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gY29udGludW91
czsKKworICAgICAgICB2b2lkIHN0YXJ0KCk7CisgICAgICAgIFtJbXBsZW1lbnRlZEFzPXN0b3BG
dW5jdGlvbl0gdm9pZCBzdG9wKCk7CisgICAgICAgIHZvaWQgYWJvcnQoKTsKKworICAgICAgICBh
dHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmF1ZGlvc3RhcnQ7CisgICAgICAgIGF0dHJpYnV0ZSBF
dmVudExpc3RlbmVyIG9uc291bmRzdGFydDsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVu
ZXIgb25zcGVlY2hzdGFydDsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25zcGVl
Y2hlbmQ7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uc291bmRlbmQ7CisgICAg
ICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uYXVkaW9lbmQ7CisgICAgICAgIGF0dHJpYnV0
ZSBFdmVudExpc3RlbmVyIG9ucmVzdWx0OworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5l
ciBvbm5vbWF0Y2g7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ucmVzdWx0ZGVs
ZXRlZDsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25lcnJvcjsKKyAgICAgICAg
YXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25zdGFydDsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50
TGlzdGVuZXIgb25lbmQ7CisgICAgfTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ2MjU1
ODA3ZjFjMTY4NjM0YzljNDBiNmZlMTE3ZjY4YjBmMWJiZDQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkNsaWVudC5oCkBA
IC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50
X2gKKyNkZWZpbmUgU3BlZWNoUmVjb2duaXRpb25DbGllbnRfaAorCisjaWYgRU5BQkxFKFNDUklQ
VEVEX1NQRUVDSCkKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgUGFnZTsKK2NsYXNzIFNwZWVjaEdyYW1tYXJMaXN0OworY2xhc3Mg
U3BlZWNoUmVjb2duaXRpb247CisKK2NsYXNzIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50IHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoU3BlZWNoUmVjb2duaXRpb24qLCBjb25zdCBT
cGVlY2hHcmFtbWFyTGlzdCosIGNvbnN0IFN0cmluZyYgbGFuZywgYm9vbCBjb250aW51b3VzKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoU3BlZWNoUmVjb2duaXRpb24qKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGFib3J0KFNwZWVjaFJlY29nbml0aW9uKikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCB2aXNpYmlsaXR5SGlkZGVuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVy
U3BlZWNoUmVjb2duaXRpb24oU3BlZWNoUmVjb2duaXRpb24qKSA9IDA7CisKKyAgICB2aXJ0dWFs
IH5TcGVlY2hSZWNvZ25pdGlvbkNsaWVudCgpIHsgfQorfTsKKwordm9pZCBwcm92aWRlU3BlZWNo
UmVjb2duaXRpb25UbyhQYWdlKiwgU3BlZWNoUmVjb2duaXRpb25DbGllbnQqKTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkKKwor
I2VuZGlmIC8vIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmQ0YmNjODVmZWM2N2U5NzFhZjk2ZDYyNzNmZjNkYWYxMDYzNmEzZmMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hS
ZWNvZ25pdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyLmgi
CisKKyNpZiBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NvbnN0IEF0b21pY1N0cmluZyYgU3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyOjpzdXBwbGVt
ZW50TmFtZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUs
ICgiU3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyIikpOworICAgIHJldHVybiBuYW1lOworfQor
CitTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXI6OlNwZWVjaFJlY29nbml0aW9uQ29udHJvbGxl
cihTcGVlY2hSZWNvZ25pdGlvbkNsaWVudCogY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50
KQoreworfQorCitTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXI6On5TcGVlY2hSZWNvZ25pdGlv
bkNvbnRyb2xsZXIoKQoreworICAgIC8vIEZJWE1FOiBDYWxsIG1fY2xpZW50LT5wYWdlRGVzdHJv
eWVkKCk7IG9uY2Ugd2UgaGF2ZSBpbXBsZW1lbnRlZCBhIGNsaWVudC4KK30KKworUGFzc093blB0
cjxTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXI+IFNwZWVjaFJlY29nbml0aW9uQ29udHJvbGxl
cjo6Y3JlYXRlKFNwZWVjaFJlY29nbml0aW9uQ2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXIoY2xpZW50KSk7Cit9CisK
K3ZvaWQgcHJvdmlkZVNwZWVjaFJlY29nbml0aW9uVG8oUGFnZSogcGFnZSwgU3BlZWNoUmVjb2du
aXRpb25DbGllbnQqIGNsaWVudCkKK3sKKyAgICBTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXI6
OnByb3ZpZGVUbyhwYWdlLCBTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXI6OnN1cHBsZW1lbnRO
YW1lKCksIFNwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKGNsaWVudCkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU0NSSVBURURfU1BF
RUNIKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVj
b2duaXRpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVl
Y2hSZWNvZ25pdGlvbkNvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjVjMTkwNzUwZTg1ZTM5ZTVi
MWNjMjU2ODEzZGExODViNjg4NzFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyLmgKQEAgLTAsMCArMSw2
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgU3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyX2gKKyNk
ZWZpbmUgU3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyX2gKKworI2lmIEVOQUJMRShTQ1JJUFRF
RF9TUEVFQ0gpCisKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRp
b25DbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFNwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlciA6IHB1YmxpYyBTdXBw
bGVtZW50PFBhZ2U+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5TcGVlY2hSZWNvZ25pdGlvbkNv
bnRyb2xsZXIoKTsKKworICAgIHZvaWQgc3RhcnQoU3BlZWNoUmVjb2duaXRpb24qIHJlY29nbml0
aW9uLCBjb25zdCBTcGVlY2hHcmFtbWFyTGlzdCogZ3JhbW1hcnMsIGNvbnN0IFN0cmluZyYgbGFu
ZywgYm9vbCBjb250aW51b3VzKSB7IG1fY2xpZW50LT5zdGFydChyZWNvZ25pdGlvbiwgZ3JhbW1h
cnMsIGxhbmcsIGNvbnRpbnVvdXMpOyB9CisgICAgdm9pZCBzdG9wKFNwZWVjaFJlY29nbml0aW9u
KiByZWNvZ25pdGlvbikgeyBtX2NsaWVudC0+c3RvcChyZWNvZ25pdGlvbik7IH0KKyAgICB2b2lk
IGFib3J0KFNwZWVjaFJlY29nbml0aW9uKiByZWNvZ25pdGlvbikgeyBtX2NsaWVudC0+YWJvcnQo
cmVjb2duaXRpb24pOyB9CisgICAgdm9pZCB2aXNpYmlsaXR5SGlkZGVuKCkgeyBtX2NsaWVudC0+
dmlzaWJpbGl0eUhpZGRlbigpOyB9CisgICAgdm9pZCB1bnJlZ2lzdGVyU3BlZWNoUmVjb2duaXRp
b24oU3BlZWNoUmVjb2duaXRpb24qIHJlY29nbml0aW9uKSB7IG1fY2xpZW50LT51bnJlZ2lzdGVy
U3BlZWNoUmVjb2duaXRpb24ocmVjb2duaXRpb24pOyB9CisKKyAgICBzdGF0aWMgUGFzc093blB0
cjxTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXI+IGNyZWF0ZShTcGVlY2hSZWNvZ25pdGlvbkNs
aWVudCopOworICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHN1cHBsZW1lbnROYW1lKCk7
CisgICAgc3RhdGljIFNwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlciogZnJvbShQYWdlKiBwYWdl
KSB7IHJldHVybiBzdGF0aWNfY2FzdDxTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXIqPihTdXBw
bGVtZW50PFBhZ2U+Ojpmcm9tKHBhZ2UsIHN1cHBsZW1lbnROYW1lKCkpKTsgfQorCitwcml2YXRl
OgorICAgIFNwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlcihTcGVlY2hSZWNvZ25pdGlvbkNsaWVu
dCopOworCisgICAgU3BlZWNoUmVjb2duaXRpb25DbGllbnQqIG1fY2xpZW50OworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkK
KworI2VuZGlmIC8vIFNwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
aW5kZXggNTcxMmZkNDQxYjUxYzI0NmZiZjkxZWFmYTE4ZDhhMjljNDExYjhkZS4uNzc1YTViMTI4
Y2RhYTgwMGVjMzUwOWVkN2ZlZTVhOTc3YjExY2U4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNzY3
LDYgKzc2Nyw3IEBACiAgICAgICAgICAgICAnTW9kdWxlcy9zcGVlY2gvRE9NV2luZG93U3BlZWNo
LmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9zcGVlY2gvU3BlZWNoR3JhbW1hci5pZGwnLAog
ICAgICAgICAgICAgJ01vZHVsZXMvc3BlZWNoL1NwZWVjaEdyYW1tYXJMaXN0LmlkbCcsCisgICAg
ICAgICAgICAnTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb24uaWRsJywKICAgICAgICAg
ICAgICdNb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkFsdGVybmF0aXZlLmlkbCcsCiAg
ICAgICAgICAgICAnTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25FcnJvci5pZGwnLAog
ICAgICAgICAgICAgJ01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uRXZlbnQuaWRsJywK
QEAgLTE0MTUsOCArMTQxNiwxMyBAQAogICAgICAgICAgICAgJ01vZHVsZXMvc3BlZWNoL1NwZWVj
aEdyYW1tYXIuaCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9zcGVlY2gvU3BlZWNoR3JhbW1hckxp
c3QuY3BwJywKICAgICAgICAgICAgICdNb2R1bGVzL3NwZWVjaC9TcGVlY2hHcmFtbWFyTGlzdC5o
JywKKyAgICAgICAgICAgICdNb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbi5jcHAnLAor
ICAgICAgICAgICAgJ01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uLmgnLAogICAgICAg
ICAgICAgJ01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQWx0ZXJuYXRpdmUuY3BwJywK
ICAgICAgICAgICAgICdNb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkFsdGVybmF0aXZl
LmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50
LmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ29udHJv
bGxlci5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9u
Q29udHJvbGxlci5oJywKICAgICAgICAgICAgICdNb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25p
dGlvbkVycm9yLmNwcCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2du
aXRpb25FcnJvci5oJywKICAgICAgICAgICAgICdNb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25p
dGlvbkV2ZW50LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJn
ZXRGYWN0b3J5LmluIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0RmFjdG9yeS5pbgpp
bmRleCA2MTk1ODczOTM4MjcwZDM2Yjc2NjVkYzlkY2VkMWI5ODE1ZGFlYTRmLi42Y2UxYWRjNGFh
OTRjMDMwMzBhYjQzYTZmYzVjYWVlZTdiYzY4MzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnRUYXJnZXRGYWN0b3J5LmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dFRhcmdldEZhY3RvcnkuaW4KQEAgLTIxLDYgKzIxLDcgQEAgTm9kZQogTm90aWZpY2F0aW9uIGNv
bmRpdGlvbmFsPU5PVElGSUNBVElPTlMKIFNoYXJlZFdvcmtlciBjb25kaXRpb25hbD1TSEFSRURf
V09SS0VSUwogU2hhcmVkV29ya2VyQ29udGV4dCBjb25kaXRpb25hbD1TSEFSRURfV09SS0VSUwor
U3BlZWNoUmVjb2duaXRpb24gY29uZGl0aW9uYWw9U0NSSVBURURfU1BFRUNICiBTVkdFbGVtZW50
SW5zdGFuY2UgY29uZGl0aW9uYWw9U1ZHCiBUZXh0VHJhY2sgY29uZGl0aW9uYWw9VklERU9fVFJB
Q0sKIFRleHRUcmFja0N1ZSBjb25kaXRpb25hbD1WSURFT19UUkFDSwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IDIwZTJlNGVmMzEzY2Y3MzI1ZjI1MmI4
NDY1MWY4NjA2ODQ5YWJhYTMuLjczY2QzOTg0ZmRjNDMyOTRlMGEzZTZjODNiY2RkZDQwMzI5NmM3
MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTEw
Niw2ICsxMDYsNyBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJTcGVlY2hJbnB1dENsaWVudEltcGwuaCIKKyNp
bmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudC5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRv
ci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgpAQCAtMzg5
LDYgKzM5MCw5IEBAIFdlYlZpZXdJbXBsOjpXZWJWaWV3SW1wbChXZWJWaWV3Q2xpZW50KiBjbGll
bnQpCiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKICAgICBwcm92aWRlU3BlZWNoSW5wdXRUbyht
X3BhZ2UuZ2V0KCksIG1fc3BlZWNoSW5wdXRDbGllbnQuZ2V0KCkpOwogI2VuZGlmCisjaWYgRU5B
QkxFKFNDUklQVEVEX1NQRUVDSCkKKyAgICBwcm92aWRlU3BlZWNoUmVjb2duaXRpb25UbyhtX3Bh
Z2UuZ2V0KCksIDApOyAvLyBGSVhNRTogUHJvdmlkZSBhIHJlYWwgaW1wbGVtZW50YXRpb24uCisj
ZW5kaWYKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKICAgICBwcm92aWRlTm90aWZpY2F0aW9u
KG1fcGFnZS5nZXQoKSwgbm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCgpKTsKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IDM1OWQ5NDc0M2E1ZTQyNTE5OGUzNTVhZjQ3YzM4MjIxMmM1Yzk1YTcuLmZmY2Y3MWZjNDg3
YTI3N2E1YTYwYjU0OGU4Yjk4YTk3N2YwZGZlMDYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0No
YW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAx
Mi0wMy0xNCAgSGFucyBXZW5uYm9yZyAgPGhhbnNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNw
ZWVjaCBKYXZhU2NyaXB0IEFQSTogU3BlZWNoUmVjb2duaXRpb24sIENvbnRyb2xsZXIgYW5kIENs
aWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODEw
OTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
dGVzdHMgZm9yIHRoZSBiYXNpY3Mgb2YgdGhlIFNwZWVjaFJlY29nbml0aW9uIGludGVyZmFjZS4K
KworICAgICAgICAqIGZhc3Qvc3BlZWNoL3NjcmlwdGVkL2Jhc2ljcy1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3Qvc3BlZWNoL3NjcmlwdGVkL2Jhc2ljcy5odG1sOiBBZGRlZC4K
KwogMjAxMi0wMy0xNCAgS3Jpc3TDs2YgS29zenR5w7MgIDxra3Jpc3RvZkBpbmYudS1zemVnZWQu
aHU+CiAKICAgICAgICAgW1F0XSBVbnJldmlld2VkLiBVcGRhdGUgZXhwZWN0YWlvbnMgYWZ0ZXIg
cjExMDY3NgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zcGVlY2gvc2NyaXB0ZWQvYmFz
aWNzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3Qvc3BlZWNoL3NjcmlwdGVkL2Jhc2lj
cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzYwNzkxNjZkYzZjN2M3ODJiZjgyMWQ1YjI3ZmYw
OTE3NjZlZGEyZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvc3BlZWNoL3Nj
cmlwdGVkL2Jhc2ljcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyOSBAQAorVGVzdHMgdGhlIGJh
c2ljcyBvZiB0aGUgU3BlZWNoIEphdmFTY3JpcHQgQVBJCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCitQQVNTICd3ZWJraXRTcGVlY2hSZWNvZ25pdGlvbicgaW4gc2VsZiBpcyB0cnVl
CitQQVNTIHdlYmtpdFNwZWVjaFJlY29nbml0aW9uID09IG51bGwgaXMgZmFsc2UKK1BBU1Mgc3Bl
ZWNoUmVjbyA9PSBudWxsIGlzIGZhbHNlCitQQVNTICdncmFtbWFycycgaW4gc3BlZWNoUmVjbyBp
cyB0cnVlCitQQVNTIHNwZWVjaFJlY28uZ3JhbW1hcnMgPT0gbnVsbCBpcyBmYWxzZQorUEFTUyBz
cGVlY2hSZWNvLmdyYW1tYXJzLmxlbmd0aCA9PT0gMCBpcyB0cnVlCitQQVNTICdsYW5nJyBpbiBz
cGVlY2hSZWNvIGlzIHRydWUKK1BBU1MgJ2NvbnRpbnVvdXMnIGluIHNwZWVjaFJlY28gaXMgdHJ1
ZQorUEFTUyAnc3RhcnQnIGluIHNwZWVjaFJlY28gaXMgdHJ1ZQorUEFTUyAnc3RvcCcgaW4gc3Bl
ZWNoUmVjbyBpcyB0cnVlCitQQVNTICdhYm9ydCcgaW4gc3BlZWNoUmVjbyBpcyB0cnVlCitQQVNT
ICdvbmF1ZGlvc3RhcnQnIGluIHNwZWVjaFJlY28gaXMgdHJ1ZQorUEFTUyAnb25zb3VuZHN0YXJ0
JyBpbiBzcGVlY2hSZWNvIGlzIHRydWUKK1BBU1MgJ29uc3BlZWNoc3RhcnQnIGluIHNwZWVjaFJl
Y28gaXMgdHJ1ZQorUEFTUyAnb25zcGVlY2hlbmQnIGluIHNwZWVjaFJlY28gaXMgdHJ1ZQorUEFT
UyAnb25zb3VuZGVuZCcgaW4gc3BlZWNoUmVjbyBpcyB0cnVlCitQQVNTICdvbmF1ZGlvZW5kJyBp
biBzcGVlY2hSZWNvIGlzIHRydWUKK1BBU1MgJ29ucmVzdWx0JyBpbiBzcGVlY2hSZWNvIGlzIHRy
dWUKK1BBU1MgJ29ubm9tYXRjaCcgaW4gc3BlZWNoUmVjbyBpcyB0cnVlCitQQVNTICdvbnJlc3Vs
dGRlbGV0ZWQnIGluIHNwZWVjaFJlY28gaXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4gc3BlZWNo
UmVjbyBpcyB0cnVlCitQQVNTICdvbnN0YXJ0JyBpbiBzcGVlY2hSZWNvIGlzIHRydWUKK1BBU1Mg
J29uZW5kJyBpbiBzcGVlY2hSZWNvIGlzIHRydWUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9zcGVlY2gvc2NyaXB0ZWQvYmFzaWNzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3NwZWVj
aC9zY3JpcHRlZC9iYXNpY3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YjE0OGY0NjJjYzU4NjljMjUyZGUy
YzNlMzNjZDQ2NTY3MGM4YmZlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9z
cGVlY2gvc2NyaXB0ZWQvYmFzaWNzLmh0bWwKQEAgLTAsMCArMSw0NyBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitkZXNjcmlwdGlv
bignVGVzdHMgdGhlIGJhc2ljcyBvZiB0aGUgU3BlZWNoIEphdmFTY3JpcHQgQVBJJyk7CisKK2Z1
bmN0aW9uIHJ1bigpIHsKKyAgICAvLyBDaGVjayBhdmFpbGFiaWxpdHkgb2YgY29uc3RydWN0b3Jz
LgorICAgIHNob3VsZEJlVHJ1ZSgiJ3dlYmtpdFNwZWVjaFJlY29nbml0aW9uJyBpbiBzZWxmIik7
CisgICAgc2hvdWxkQmVGYWxzZSgid2Via2l0U3BlZWNoUmVjb2duaXRpb24gPT0gbnVsbCIpOwor
CisgICAgLy8gQ2hlY2sgZm9yIG1lbWJlcnMgb2YgU3BlZWNoUmVjb2duaXRpb24uCisgICAgd2lu
ZG93LnNwZWVjaFJlY28gPSBuZXcgd2Via2l0U3BlZWNoUmVjb2duaXRpb24oKTsKKyAgICBzaG91
bGRCZUZhbHNlKCJzcGVlY2hSZWNvID09IG51bGwiKTsKKyAgICBzaG91bGRCZVRydWUoIidncmFt
bWFycycgaW4gc3BlZWNoUmVjbyIpOworICAgIHNob3VsZEJlRmFsc2UoInNwZWVjaFJlY28uZ3Jh
bW1hcnMgPT0gbnVsbCIpOworICAgIHNob3VsZEJlVHJ1ZSgic3BlZWNoUmVjby5ncmFtbWFycy5s
ZW5ndGggPT09IDAiKTsKKyAgICBzaG91bGRCZVRydWUoIidsYW5nJyBpbiBzcGVlY2hSZWNvIik7
CisgICAgc2hvdWxkQmVUcnVlKCInY29udGludW91cycgaW4gc3BlZWNoUmVjbyIpOworICAgIHNo
b3VsZEJlVHJ1ZSgiJ3N0YXJ0JyBpbiBzcGVlY2hSZWNvIik7CisgICAgc2hvdWxkQmVUcnVlKCIn
c3RvcCcgaW4gc3BlZWNoUmVjbyIpOworICAgIHNob3VsZEJlVHJ1ZSgiJ2Fib3J0JyBpbiBzcGVl
Y2hSZWNvIik7CisgICAgc2hvdWxkQmVUcnVlKCInb25hdWRpb3N0YXJ0JyBpbiBzcGVlY2hSZWNv
Iik7CisgICAgc2hvdWxkQmVUcnVlKCInb25zb3VuZHN0YXJ0JyBpbiBzcGVlY2hSZWNvIik7Cisg
ICAgc2hvdWxkQmVUcnVlKCInb25zcGVlY2hzdGFydCcgaW4gc3BlZWNoUmVjbyIpOworICAgIHNo
b3VsZEJlVHJ1ZSgiJ29uc3BlZWNoZW5kJyBpbiBzcGVlY2hSZWNvIik7CisgICAgc2hvdWxkQmVU
cnVlKCInb25zb3VuZGVuZCcgaW4gc3BlZWNoUmVjbyIpOworICAgIHNob3VsZEJlVHJ1ZSgiJ29u
YXVkaW9lbmQnIGluIHNwZWVjaFJlY28iKTsKKyAgICBzaG91bGRCZVRydWUoIidvbnJlc3VsdCcg
aW4gc3BlZWNoUmVjbyIpOworICAgIHNob3VsZEJlVHJ1ZSgiJ29ubm9tYXRjaCcgaW4gc3BlZWNo
UmVjbyIpOworICAgIHNob3VsZEJlVHJ1ZSgiJ29ucmVzdWx0ZGVsZXRlZCcgaW4gc3BlZWNoUmVj
byIpOworICAgIHNob3VsZEJlVHJ1ZSgiJ29uZXJyb3InIGluIHNwZWVjaFJlY28iKTsKKyAgICBz
aG91bGRCZVRydWUoIidvbnN0YXJ0JyBpbiBzcGVlY2hSZWNvIik7CisgICAgc2hvdWxkQmVUcnVl
KCInb25lbmQnIGluIHNwZWVjaFJlY28iKTsKKworICAgIGZpbmlzaEpTVGVzdCgpOworfQorCit3
aW5kb3cub25sb2FkID0gcnVuOword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworPC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132047</attachid>
            <date>2012-03-15 07:54:28 -0700</date>
            <delta_ts>2012-03-15 23:35:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81096-20120315145426.patch</filename>
            <type>text/plain</type>
            <size>34226</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwODM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTk2NjZmZTVmNjE4MDVk
NWI1ODI0YmYzZTYxODg3MmMwNjQxNWQzNS4uY2FkMjY4ZDUzM2YxNDgyYmY4NTRkMjIxMTk2OTdm
NjJkZmZkMjY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDEyLTAzLTE1ICBIYW5z
IFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU3BlZWNoIEphdmFTY3Jp
cHQgQVBJOiBTcGVlY2hSZWNvZ25pdGlvbiwgQ29udHJvbGxlciBhbmQgQ2xpZW50CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTA5NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBpbXBsZW1lbnRhdGlv
biBzdHViIGZvciBTcGVlY2hSZWNvZ25pdGlvbi4gQWRkIHRoZQorICAgICAgICBTcGVlY2hSZWNv
Z25pdGlvbkNvbnRyb2xsZXIgY2xhc3MgYW5kIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50CisgICAg
ICAgIGludGVyZmFjZS4KKworICAgICAgICBUZXN0OiBmYXN0L3NwZWVjaC9zY3JpcHRlZC9iYXNp
Y3MuaHRtbAorCisgICAgICAgICogTW9kdWxlcy9zcGVlY2gvRE9NV2luZG93U3BlZWNoLmlkbDoK
KyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbi5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpzdGFydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6c3RvcEZ1bmN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjphYm9ydCk6CisgICAgICAgIChXZWJDb3Jl
OjpTcGVlY2hSZWNvZ25pdGlvbjo6YXVkaW9TdGFydENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWVjaFJlY29nbml0aW9uOjpzb3VuZFN0YXJ0Q2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6U3BlZWNoUmVjb2duaXRpb246OnNwZWVjaFN0YXJ0Q2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb246OnNwZWVjaEVuZENhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjphdWRpb0VuZENhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpyZXN1bHRDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6bm9NYXRjaENhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpyZXN1bHREZWxldGVkQ2FsbGJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb246OmVycm9yQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb246OnN0YXJ0Q2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6U3BlZWNoUmVjb2duaXRpb246OmVuZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OlNwZWVjaFJlY29nbml0aW9uOjppbnRlcmZhY2VOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNw
ZWVjaFJlY29nbml0aW9uOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWVjaFJlY29nbml0aW9uOjpTcGVlY2hSZWNvZ25pdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6flNwZWVjaFJlY29nbml0aW9uKToKKyAgICAgICAgKiBN
b2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoU3BlZWNoUmVjb2duaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3Bl
ZWNoUmVjb2duaXRpb246OmdyYW1tYXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29n
bml0aW9uOjpzZXRHcmFtbWFycyk6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlv
bjo6bGFuZyk6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6c2V0TGFuZyk6
CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6Y29udGludW91cyk6CisgICAg
ICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6c2V0Q29udGludW91cyk6CisgICAgICAg
ICogTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb24uaWRsOgorICAgICAgICAqIE1vZHVs
ZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFNwZWVjaFJlY29nbml0aW9uQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNw
ZWVjaFJlY29nbml0aW9uQ2xpZW50Ojp+U3BlZWNoUmVjb2duaXRpb25DbGllbnQpOgorICAgICAg
ICAqIE1vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uQ29udHJv
bGxlcjo6c3VwcGxlbWVudE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRp
b25Db250cm9sbGVyOjpTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyOjp+U3BlZWNoUmVjb2duaXRpb25Db250
cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnByb3ZpZGVTcGVlY2hSZWNvZ25pdGlvblRvKToK
KyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXIuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNwZWVjaFJlY29nbml0aW9uQ29u
dHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXI6
OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlcjo6
c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXI6OmFi
b3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlcjo6dmlz
aWJpbGl0eUhpZGRlbik6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbkNvbnRy
b2xsZXI6OnVucmVnaXN0ZXJTcGVlY2hSZWNvZ25pdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpT
cGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXI6OmZyb20pOgorICAgICAgICAqIFdlYkNvcmUuZ3lw
aToKKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXRGYWN0b3J5LmluOgorCiAyMDEyLTAzLTE0ICBD
aHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgQVhEZXNjcmlw
dGlvbiBmb3IgSFRNTDUgZm9vdGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGY5ZDYz
MzEwNDE3NzkxNTM2ZWJlNGJjNDI3MWU5YTBhODJhNGE3YzMuLjM1ZTQ4NTI2NTIyZWE5NTQ1NjE4
NzUzN2VmNmIzYmViZjM0NDhlN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTYgQEAKKzIwMTItMDMtMTUgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4K
KworICAgICAgICBTcGVlY2ggSmF2YVNjcmlwdCBBUEk6IFNwZWVjaFJlY29nbml0aW9uLCBDb250
cm9sbGVyIGFuZCBDbGllbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTgxMDk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUHJvdmlkZSBhIFNwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlciB0byBQYWdlLCB3
aXRoIGEgTlVMTCBjbGllbnQgZm9yCisgICAgICAgIG5vdy4KKworICAgICAgICAqIHNyYy9XZWJW
aWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpXZWJWaWV3SW1wbCk6
CisKIDIwMTItMDMtMTQgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBWERlc2NyaXB0aW9uIGZvciBIVE1MNSBmb290ZXIgYW5kIEFSSUEgcm9sZSBjb250
ZW50aW5mbyBpbmNvcnJlY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3Bl
ZWNoL0RPTVdpbmRvd1NwZWVjaC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9E
T01XaW5kb3dTcGVlY2guaWRsCmluZGV4IDcwMjAwYjFiZTQ2N2JkM2RhZTA1NDBhZjdiZjM2ZTg3
NjVmOTM0ZTcuLjBjMjZmMDNkNzA5OGEzZWFhMTZlMWE3MDkyMjk0OTJjNDA0ZmUwM2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL0RPTVdpbmRvd1NwZWVjaC5pZGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvRE9NV2luZG93U3BlZWNoLmlkbApA
QCAtMjgsNiArMjgsNyBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgQ29uZGl0aW9uYWw9U0NS
SVBURURfU1BFRUNILAogICAgICAgICBTdXBwbGVtZW50YWw9RE9NV2luZG93CiAgICAgXSBET01X
aW5kb3dTcGVlY2ggeworICAgICAgICBhdHRyaWJ1dGUgW1Y4RW5hYmxlZEF0UnVudGltZV0gU3Bl
ZWNoUmVjb2duaXRpb25Db25zdHJ1Y3RvciB3ZWJraXRTcGVlY2hSZWNvZ25pdGlvbjsKICAgICAg
ICAgYXR0cmlidXRlIFtWOEVuYWJsZWRBdFJ1bnRpbWVdIFNwZWVjaFJlY29nbml0aW9uRXJyb3JD
b25zdHJ1Y3RvciB3ZWJraXRTcGVlY2hSZWNvZ25pdGlvbkVycm9yOwogICAgICAgICBhdHRyaWJ1
dGUgW1Y4RW5hYmxlZEF0UnVudGltZV0gU3BlZWNoUmVjb2duaXRpb25FdmVudENvbnN0cnVjdG9y
IHdlYmtpdFNwZWVjaFJlY29nbml0aW9uRXZlbnQ7CiAgICAgICAgIGF0dHJpYnV0ZSBbVjhFbmFi
bGVkQXRSdW50aW1lXSBTcGVlY2hHcmFtbWFyQ29uc3RydWN0b3Igd2Via2l0U3BlZWNoR3JhbW1h
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29n
bml0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0
aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xYjNhYjMyNTQ4NTcyMDFhNjRlNGI4M2E1M2I3YmMxNWMxNjlh
ZTAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3Bl
ZWNoUmVjb2duaXRpb24uY3BwCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkKKworI2luY2x1ZGUgIlNw
ZWVjaFJlY29nbml0aW9uLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIlBh
Z2UuaCIKKyNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRl
ICJTcGVlY2hSZWNvZ25pdGlvbkVycm9yLmgiCisjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb25F
dmVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8U3BlZWNoUmVjb2du
aXRpb24+IFNwZWVjaFJlY29nbml0aW9uOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCkKK3sKKyAgICBSZWZQdHI8U3BlZWNoUmVjb2duaXRpb24+IHNwZWVjaFJlY29nbml0
aW9uKGFkb3B0UmVmKG5ldyBTcGVlY2hSZWNvZ25pdGlvbihjb250ZXh0KSkpOworICAgIHNwZWVj
aFJlY29nbml0aW9uLT5zdXNwZW5kSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gc3BlZWNoUmVjb2du
aXRpb24ucmVsZWFzZSgpOworfQorCit2b2lkIFNwZWVjaFJlY29nbml0aW9uOjpzdGFydCgpCit7
CisgICAgQVNTRVJUKG1fY29udHJvbGxlcik7IC8vIEZJWE1FOiBTcGVjIHNob3VsZCBzYXkgd2hh
dCB0byBkbyBpZiB3ZSBhcmUgYWxyZWFkeSBzdGFydGVkLgorICAgIG1fY29udHJvbGxlci0+c3Rh
cnQodGhpcywgbV9ncmFtbWFycy5nZXQoKSwgbV9sYW5nLCBtX2NvbnRpbnVvdXMpOworfQorCit2
b2lkIFNwZWVjaFJlY29nbml0aW9uOjpzdG9wRnVuY3Rpb24oKQoreworICAgIEFTU0VSVChtX2Nv
bnRyb2xsZXIpOworICAgIG1fY29udHJvbGxlci0+c3RvcCh0aGlzKTsgLy8gRklYTUU6IFNwZWMg
c2hvdWxkIHNheSB3aGF0IHRvIGRvIGlmIHdlIGFyZSBub3Qgc3RhcnRlZC4KK30KKwordm9pZCBT
cGVlY2hSZWNvZ25pdGlvbjo6YWJvcnQoKQoreworICAgIEFTU0VSVChtX2NvbnRyb2xsZXIpOwor
ICAgIG1fY29udHJvbGxlci0+YWJvcnQodGhpcyk7IC8vIEZJWE1FOiBTcGVjIHNob3VsZCBzYXkg
d2hhdCB0byBkbyBpZiB3ZSBhcmUgbm90IHN0YXJ0ZWQuCit9CisKK3ZvaWQgU3BlZWNoUmVjb2du
aXRpb246OmF1ZGlvU3RhcnRDYWxsYmFjaygpCit7CisgICAgLy8gRklYTUU6IFRoZSBzcGVjIHNo
b3VsZCBzcGVjaWZ5IHdoZXRoZXIgdGhlc2UgZXZlbnRzIGNhbiBidWJibGUgYW5kIGFyZSBjYW5j
ZWxhYmxlLgorICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuYXVk
aW9zdGFydEV2ZW50LCAvKmNhbkJ1YmJsZT0qL2ZhbHNlLCAvKmNhbmNlbGFibGU9Ki9mYWxzZSkp
OworfQorCit2b2lkIFNwZWVjaFJlY29nbml0aW9uOjpzb3VuZFN0YXJ0Q2FsbGJhY2soKQorewor
ICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc291bmRzdGFydEV2
ZW50LCAvKmNhbkJ1YmJsZT0qL2ZhbHNlLCAvKmNhbmNlbGFibGU9Ki9mYWxzZSkpOworfQorCit2
b2lkIFNwZWVjaFJlY29nbml0aW9uOjpzcGVlY2hTdGFydENhbGxiYWNrKCkKK3sKKyAgICBkaXNw
YXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnNwZWVjaHN0YXJ0RXZlbnQsIC8q
Y2FuQnViYmxlPSovZmFsc2UsIC8qY2FuY2VsYWJsZT0qL2ZhbHNlKSk7Cit9CisKK3ZvaWQgU3Bl
ZWNoUmVjb2duaXRpb246OnNwZWVjaEVuZENhbGxiYWNrKCkKK3sKKyAgICBkaXNwYXRjaEV2ZW50
KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnNwZWVjaGVuZEV2ZW50LCAvKmNhbkJ1YmJsZT0q
L2ZhbHNlLCAvKmNhbmNlbGFibGU9Ki9mYWxzZSkpOworfQorCit2b2lkIFNwZWVjaFJlY29nbml0
aW9uOjphdWRpb0VuZENhbGxiYWNrKCkKK3sKKyAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLmF1ZGlvZW5kRXZlbnQsIC8qY2FuQnViYmxlPSovZmFsc2UsIC8qY2Fu
Y2VsYWJsZT0qL2ZhbHNlKSk7Cit9CisKK3ZvaWQgU3BlZWNoUmVjb2duaXRpb246OnJlc3VsdENh
bGxiYWNrKFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+IHJlc3VsdCwgdW5zaWdu
ZWQgbG9uZyByZXN1bHRJbmRleCwgUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdExp
c3Q+IHJlc3VsdEhpc3RvcnkpCit7CisgICAgZGlzcGF0Y2hFdmVudChTcGVlY2hSZWNvZ25pdGlv
bkV2ZW50OjpjcmVhdGVSZXN1bHQocmVzdWx0LCByZXN1bHRJbmRleCwgcmVzdWx0SGlzdG9yeSkp
OworfQorCit2b2lkIFNwZWVjaFJlY29nbml0aW9uOjpub01hdGNoQ2FsbGJhY2soUGFzc1JlZlB0
cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4gcmVzdWx0KQoreworICAgIGRpc3BhdGNoRXZlbnQo
U3BlZWNoUmVjb2duaXRpb25FdmVudDo6Y3JlYXRlTm9NYXRjaChyZXN1bHQpKTsKK30KKwordm9p
ZCBTcGVlY2hSZWNvZ25pdGlvbjo6cmVzdWx0RGVsZXRlZENhbGxiYWNrKHVuc2lnbmVkIHJlc3Vs
dEluZGV4LCBQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdD4gcmVzdWx0SGlz
dG9yeSkKK3sKKyAgICBkaXNwYXRjaEV2ZW50KFNwZWVjaFJlY29nbml0aW9uRXZlbnQ6OmNyZWF0
ZVJlc3VsdERlbGV0ZWQocmVzdWx0SW5kZXgsIHJlc3VsdEhpc3RvcnkpKTsKK30KKwordm9pZCBT
cGVlY2hSZWNvZ25pdGlvbjo6ZXJyb3JDYWxsYmFjayhQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0
aW9uRXJyb3I+IGVycm9yKQoreworICAgIGRpc3BhdGNoRXZlbnQoU3BlZWNoUmVjb2duaXRpb25F
dmVudDo6Y3JlYXRlRXJyb3IoZXJyb3IpKTsKK30KKwordm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6
c3RhcnRDYWxsYmFjaygpCit7CisgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS5zdGFydEV2ZW50LCAvKmNhbkJ1YmJsZT0qL2ZhbHNlLCAvKmNhbmNlbGFibGU9Ki9m
YWxzZSkpOworfQorCit2b2lkIFNwZWVjaFJlY29nbml0aW9uOjplbmRDYWxsYmFjaygpCit7Cisg
ICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lbmRFdmVudCwgLypj
YW5CdWJibGU9Ki9mYWxzZSwgLypjYW5jZWxhYmxlPSovZmFsc2UpKTsKK30KKworY29uc3QgQXRv
bWljU3RyaW5nJiBTcGVlY2hSZWNvZ25pdGlvbjo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JTcGVlY2hSZWNvZ25pdGlvbjsKK30K
KworU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogU3BlZWNoUmVjb2duaXRpb246OnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKK30KKworU3BlZWNoUmVjb2duaXRpb246OlNwZWVjaFJlY29n
bml0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgOiBBY3RpdmVET01P
YmplY3QoY29udGV4dCwgdGhpcykKKyAgICAsIG1fZ3JhbW1hcnMoU3BlZWNoR3JhbW1hckxpc3Q6
OmNyZWF0ZSgpKSAvLyBGSVhNRTogVGhlIHNwZWMgaXMgbm90IGNsZWFyIG9uIHRoZSBkZWZhdWx0
IHZhbHVlIGZvciB0aGUgZ3JhbW1hcnMgYXR0cmlidXRlLgorICAgICwgbV9jb250aW51b3VzKGZh
bHNlKQorICAgICwgbV9jb250cm9sbGVyKDApCit7CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+aXNEb2N1bWVudCgpKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0
aWNfY2FzdDxEb2N1bWVudCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisKKyAgICBQYWdl
KiBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoKTsKKyAgICBBU1NFUlQocGFnZSk7CisKKyAgICBtX2Nv
bnRyb2xsZXIgPSBTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXI6OmZyb20ocGFnZSk7CisgICAg
QVNTRVJUKG1fY29udHJvbGxlcik7CisKKyAgICAvLyBGSVhNRTogTmVlZCB0byBob29rIHVwIHdp
dGggUGFnZSB0byBnZXQgbm90aWZpZWQgd2hlbiB0aGUgdmlzaWJpbGl0eSBjaGFuZ2VzLgorfQor
CitTcGVlY2hSZWNvZ25pdGlvbjo6flNwZWVjaFJlY29nbml0aW9uKCkKK3sKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbi5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjFhYTU3YzZmMmI5MTVjZTQyNGUyZjhkZTIxNDE1YjIwZjNhYzBmNTEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25p
dGlvbi5oCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTcGVlY2hSZWNvZ25p
dGlvbl9oCisjZGVmaW5lIFNwZWVjaFJlY29nbml0aW9uX2gKKworI2lmIEVOQUJMRShTQ1JJUFRF
RF9TUEVFQ0gpCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJFdmVu
dFRhcmdldC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU3BlZWNo
R3JhbW1hckxpc3QuaCIKKyNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNzIFNwZWVjaFJl
Y29nbml0aW9uQ29udHJvbGxlcjsKK2NsYXNzIFNwZWVjaFJlY29nbml0aW9uRXJyb3I7CitjbGFz
cyBTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDsKK2NsYXNzIFNwZWVjaFJlY29nbml0aW9uUmVzdWx0
TGlzdDsKKworY2xhc3MgU3BlZWNoUmVjb2duaXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxTcGVl
Y2hSZWNvZ25pdGlvbj4sIHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHB1YmxpYyBFdmVudFRhcmdl
dCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb24+IGNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisKKyAgICBQYXNzUmVmUHRyPFNwZWVjaEdy
YW1tYXJMaXN0PiBncmFtbWFycygpIHsgcmV0dXJuIG1fZ3JhbW1hcnM7IH0KKyAgICB2b2lkIHNl
dEdyYW1tYXJzKFBhc3NSZWZQdHI8U3BlZWNoR3JhbW1hckxpc3Q+IGdyYW1tYXJzKSB7IG1fZ3Jh
bW1hcnMgPSBncmFtbWFyczsgfQorCisgICAgU3RyaW5nIGxhbmcoKSB7IHJldHVybiBtX2xhbmc7
IH0KKyAgICB2b2lkIHNldExhbmcoY29uc3QgU3RyaW5nJiBsYW5nKSB7IG1fbGFuZyA9IGxhbmc7
IH0KKworICAgIGJvb2wgY29udGludW91cygpIHsgcmV0dXJuIG1fY29udGludW91czsgfQorICAg
IHZvaWQgc2V0Q29udGludW91cyhib29sIGNvbnRpbnVvdXMpIHsgbV9jb250aW51b3VzID0gY29u
dGludW91czsgfQorCisgICAgLy8gQ2FsbGFibGUgYnkgdGhlIHVzZXIuCisgICAgdm9pZCBzdGFy
dCgpOworICAgIHZvaWQgc3RvcEZ1bmN0aW9uKCk7CisgICAgdm9pZCBhYm9ydCgpOworCisgICAg
Ly8gQ2FsbGVkIGJ5IHRoZSBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudC4KKyAgICB2b2lkIGF1ZGlv
U3RhcnRDYWxsYmFjaygpOworICAgIHZvaWQgc291bmRTdGFydENhbGxiYWNrKCk7CisgICAgdm9p
ZCBzcGVlY2hTdGFydENhbGxiYWNrKCk7CisgICAgdm9pZCBzcGVlY2hFbmRDYWxsYmFjaygpOwor
ICAgIHZvaWQgYXVkaW9FbmRDYWxsYmFjaygpOworICAgIHZvaWQgcmVzdWx0Q2FsbGJhY2soUGFz
c1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4sIHVuc2lnbmVkIGxvbmcgcmVzdWx0SW5k
ZXgsIFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0PiByZXN1bHRIaXN0b3J5
KTsKKyAgICB2b2lkIG5vTWF0Y2hDYWxsYmFjayhQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9u
UmVzdWx0Pik7CisgICAgdm9pZCByZXN1bHREZWxldGVkQ2FsbGJhY2sodW5zaWduZWQgcmVzdWx0
SW5kZXgsIFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0PiByZXN1bHRIaXN0
b3J5KTsKKyAgICB2b2lkIGVycm9yQ2FsbGJhY2soUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlv
bkVycm9yPik7CisgICAgdm9pZCBzdGFydENhbGxiYWNrKCk7CisgICAgdm9pZCBlbmRDYWxsYmFj
aygpOworCisgICAgLy8gRXZlbnRUYXJnZXQKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IE9WRVJSSURFOwor
CisgICAgdXNpbmcgUmVmQ291bnRlZDxTcGVlY2hSZWNvZ25pdGlvbj46OnJlZjsKKyAgICB1c2lu
ZyBSZWZDb3VudGVkPFNwZWVjaFJlY29nbml0aW9uPjo6ZGVyZWY7CisKKyAgICBERUZJTkVfQVRU
UklCVVRFX0VWRU5UX0xJU1RFTkVSKGF1ZGlvc3RhcnQpOworICAgIERFRklORV9BVFRSSUJVVEVf
RVZFTlRfTElTVEVORVIoc291bmRzdGFydCk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9M
SVNURU5FUihzcGVlY2hzdGFydCk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5F
UihzcGVlY2hlbmQpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoc291bmRl
bmQpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYXVkaW9lbmQpOworICAg
IERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIocmVzdWx0KTsKKyAgICBERUZJTkVfQVRU
UklCVVRFX0VWRU5UX0xJU1RFTkVSKG5vbWF0Y2gpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZF
TlRfTElTVEVORVIocmVzdWx0ZGVsZXRlZCk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9M
SVNURU5FUihlcnJvcik7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihzdGFy
dCk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihlbmQpOworCitwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyBSZWZDb3VudGVkPFNwZWVjaFJlY29nbml0aW9uPjsKKworICAg
IFNwZWVjaFJlY29nbml0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICB+U3BlZWNo
UmVjb2duaXRpb24oKTsKKworICAgIC8vIEV2ZW50VGFyZ2V0CisgICAgdmlydHVhbCB2b2lkIHJl
ZkV2ZW50VGFyZ2V0KCkgT1ZFUlJJREUgeyByZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJl
ZkV2ZW50VGFyZ2V0KCkgT1ZFUlJJREUgeyBkZXJlZigpOyB9CisgICAgdmlydHVhbCBFdmVudFRh
cmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpIE9WRVJSSURFIHsgcmV0dXJuICZtX2V2ZW50VGFy
Z2V0RGF0YTsgfQorICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdl
dERhdGEoKSBPVkVSUklERSB7IHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7IH0KKworICAgIFJl
ZlB0cjxTcGVlY2hHcmFtbWFyTGlzdD4gbV9ncmFtbWFyczsKKyAgICBTdHJpbmcgbV9sYW5nOwor
ICAgIGJvb2wgbV9jb250aW51b3VzOworCisgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJn
ZXREYXRhOworCisgICAgU3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyKiBtX2NvbnRyb2xsZXI7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU0NSSVBU
RURfU1BFRUNIKQorCisjZW5kaWYgLy8gU3BlZWNoUmVjb2duaXRpb25faApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb24uaWRsIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb24uaWRsCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjkyYTRiYzBkY2FhNDIwNjVhNjlmNDllOWE0OGM3ZTI4ZjQzZjI2MGMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbi5p
ZGwKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBjb3JlIHsKKyAgICBpbnRlcmZh
Y2UgWworICAgICAgICBDb25kaXRpb25hbD1TQ1JJUFRFRF9TUEVFQ0gsCisgICAgICAgIEFjdGl2
ZURPTU9iamVjdCwKKyAgICAgICAgQ29uc3RydWN0b3IsCisgICAgICAgIENhbGxXaXRoPVNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQsCisgICAgICAgIEV2ZW50VGFyZ2V0LAorICAgIF0gU3BlZWNoUmVj
b2duaXRpb24geworICAgICAgICBhdHRyaWJ1dGUgU3BlZWNoR3JhbW1hckxpc3QgZ3JhbW1hcnM7
CisgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgbGFuZzsKKyAgICAgICAgYXR0cmlidXRlIGJv
b2xlYW4gY29udGludW91czsKKworICAgICAgICB2b2lkIHN0YXJ0KCk7CisgICAgICAgIFtJbXBs
ZW1lbnRlZEFzPXN0b3BGdW5jdGlvbl0gdm9pZCBzdG9wKCk7CisgICAgICAgIHZvaWQgYWJvcnQo
KTsKKworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmF1ZGlvc3RhcnQ7CisgICAg
ICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uc291bmRzdGFydDsKKyAgICAgICAgYXR0cmli
dXRlIEV2ZW50TGlzdGVuZXIgb25zcGVlY2hzdGFydDsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50
TGlzdGVuZXIgb25zcGVlY2hlbmQ7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9u
c291bmRlbmQ7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uYXVkaW9lbmQ7Cisg
ICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ucmVzdWx0OworICAgICAgICBhdHRyaWJ1
dGUgRXZlbnRMaXN0ZW5lciBvbm5vbWF0Y2g7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3Rl
bmVyIG9ucmVzdWx0ZGVsZXRlZDsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25l
cnJvcjsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25zdGFydDsKKyAgICAgICAg
YXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25lbmQ7CisgICAgfTsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkNsaWVudC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQ2MjU1ODA3ZjFjMTY4NjM0YzljNDBiNmZlMTE3ZjY4YjBmMWJiZDQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25p
dGlvbkNsaWVudC5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNwZWVjaFJl
Y29nbml0aW9uQ2xpZW50X2gKKyNkZWZpbmUgU3BlZWNoUmVjb2duaXRpb25DbGllbnRfaAorCisj
aWYgRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGFnZTsKK2NsYXNzIFNwZWVjaEdyYW1t
YXJMaXN0OworY2xhc3MgU3BlZWNoUmVjb2duaXRpb247CisKK2NsYXNzIFNwZWVjaFJlY29nbml0
aW9uQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoU3BlZWNoUmVjb2du
aXRpb24qLCBjb25zdCBTcGVlY2hHcmFtbWFyTGlzdCosIGNvbnN0IFN0cmluZyYgbGFuZywgYm9v
bCBjb250aW51b3VzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoU3BlZWNoUmVjb2duaXRp
b24qKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFib3J0KFNwZWVjaFJlY29nbml0aW9uKikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCB2aXNpYmlsaXR5SGlkZGVuKCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCB1bnJlZ2lzdGVyU3BlZWNoUmVjb2duaXRpb24oU3BlZWNoUmVjb2duaXRpb24qKSA9IDA7
CisKKyAgICB2aXJ0dWFsIH5TcGVlY2hSZWNvZ25pdGlvbkNsaWVudCgpIHsgfQorfTsKKwordm9p
ZCBwcm92aWRlU3BlZWNoUmVjb2duaXRpb25UbyhQYWdlKiwgU3BlZWNoUmVjb2duaXRpb25DbGll
bnQqKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNDUklQ
VEVEX1NQRUVDSCkKKworI2VuZGlmIC8vIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25p
dGlvbkNvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ0YmNjODVmZWM2N2U5NzFhZjk2ZDYyNzNm
ZjNkYWYxMDYzNmEzZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsNjEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRp
b25Db250cm9sbGVyLmgiCisKKyNpZiBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NvbnN0IEF0b21pY1N0cmluZyYgU3BlZWNoUmVjb2duaXRpb25Db250
cm9sbGVyOjpzdXBwbGVtZW50TmFtZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9t
aWNTdHJpbmcsIG5hbWUsICgiU3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyIikpOworICAgIHJl
dHVybiBuYW1lOworfQorCitTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXI6OlNwZWVjaFJlY29n
bml0aW9uQ29udHJvbGxlcihTcGVlY2hSZWNvZ25pdGlvbkNsaWVudCogY2xpZW50KQorICAgIDog
bV9jbGllbnQoY2xpZW50KQoreworfQorCitTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXI6On5T
cGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXIoKQoreworICAgIC8vIEZJWE1FOiBDYWxsIG1fY2xp
ZW50LT5wYWdlRGVzdHJveWVkKCk7IG9uY2Ugd2UgaGF2ZSBpbXBsZW1lbnRlZCBhIGNsaWVudC4K
K30KKworUGFzc093blB0cjxTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXI+IFNwZWVjaFJlY29n
bml0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKFNwZWVjaFJlY29nbml0aW9uQ2xpZW50KiBjbGllbnQp
Cit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXIo
Y2xpZW50KSk7Cit9CisKK3ZvaWQgcHJvdmlkZVNwZWVjaFJlY29nbml0aW9uVG8oUGFnZSogcGFn
ZSwgU3BlZWNoUmVjb2duaXRpb25DbGllbnQqIGNsaWVudCkKK3sKKyAgICBTcGVlY2hSZWNvZ25p
dGlvbkNvbnRyb2xsZXI6OnByb3ZpZGVUbyhwYWdlLCBTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xs
ZXI6OnN1cHBsZW1lbnROYW1lKCksIFNwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlcjo6Y3JlYXRl
KGNsaWVudCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoU0NSSVBURURfU1BFRUNIKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9z
cGVlY2gvU3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjVj
MTkwNzUwZTg1ZTM5ZTViMWNjMjU2ODEzZGExODViNjg4NzFiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVy
LmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3BlZWNoUmVjb2duaXRpb25D
b250cm9sbGVyX2gKKyNkZWZpbmUgU3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyX2gKKworI2lm
IEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCisKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
U3BlZWNoUmVjb2duaXRpb25DbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNwZWVjaFJlY29nbml0aW9uQ29udHJvbGxl
ciA6IHB1YmxpYyBTdXBwbGVtZW50PFBhZ2U+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5TcGVl
Y2hSZWNvZ25pdGlvbkNvbnRyb2xsZXIoKTsKKworICAgIHZvaWQgc3RhcnQoU3BlZWNoUmVjb2du
aXRpb24qIHJlY29nbml0aW9uLCBjb25zdCBTcGVlY2hHcmFtbWFyTGlzdCogZ3JhbW1hcnMsIGNv
bnN0IFN0cmluZyYgbGFuZywgYm9vbCBjb250aW51b3VzKSB7IG1fY2xpZW50LT5zdGFydChyZWNv
Z25pdGlvbiwgZ3JhbW1hcnMsIGxhbmcsIGNvbnRpbnVvdXMpOyB9CisgICAgdm9pZCBzdG9wKFNw
ZWVjaFJlY29nbml0aW9uKiByZWNvZ25pdGlvbikgeyBtX2NsaWVudC0+c3RvcChyZWNvZ25pdGlv
bik7IH0KKyAgICB2b2lkIGFib3J0KFNwZWVjaFJlY29nbml0aW9uKiByZWNvZ25pdGlvbikgeyBt
X2NsaWVudC0+YWJvcnQocmVjb2duaXRpb24pOyB9CisgICAgdm9pZCB2aXNpYmlsaXR5SGlkZGVu
KCkgeyBtX2NsaWVudC0+dmlzaWJpbGl0eUhpZGRlbigpOyB9CisgICAgdm9pZCB1bnJlZ2lzdGVy
U3BlZWNoUmVjb2duaXRpb24oU3BlZWNoUmVjb2duaXRpb24qIHJlY29nbml0aW9uKSB7IG1fY2xp
ZW50LT51bnJlZ2lzdGVyU3BlZWNoUmVjb2duaXRpb24ocmVjb2duaXRpb24pOyB9CisKKyAgICBz
dGF0aWMgUGFzc093blB0cjxTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXI+IGNyZWF0ZShTcGVl
Y2hSZWNvZ25pdGlvbkNsaWVudCopOworICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHN1
cHBsZW1lbnROYW1lKCk7CisgICAgc3RhdGljIFNwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlciog
ZnJvbShQYWdlKiBwYWdlKSB7IHJldHVybiBzdGF0aWNfY2FzdDxTcGVlY2hSZWNvZ25pdGlvbkNv
bnRyb2xsZXIqPihTdXBwbGVtZW50PFBhZ2U+Ojpmcm9tKHBhZ2UsIHN1cHBsZW1lbnROYW1lKCkp
KTsgfQorCitwcml2YXRlOgorICAgIFNwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlcihTcGVlY2hS
ZWNvZ25pdGlvbkNsaWVudCopOworCisgICAgU3BlZWNoUmVjb2duaXRpb25DbGllbnQqIG1fY2xp
ZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFND
UklQVEVEX1NQRUVDSCkKKworI2VuZGlmIC8vIFNwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlcl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKaW5kZXggNzVmMGM4ZjA1YmNjZjRlYjg5MmFiYjgwYmYyN2RiNjkyZDIw
ZjFjZS4uMzgxZGRkNGZjNTAwYmY1OGIwMTk4MGQzNGU5ODAzNDhlNGIzMjczOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQpAQCAtNzcwLDYgKzc3MCw3IEBACiAgICAgICAgICAgICAnTW9kdWxlcy9zcGVlY2gv
RE9NV2luZG93U3BlZWNoLmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9zcGVlY2gvU3BlZWNo
R3JhbW1hci5pZGwnLAogICAgICAgICAgICAgJ01vZHVsZXMvc3BlZWNoL1NwZWVjaEdyYW1tYXJM
aXN0LmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb24u
aWRsJywKICAgICAgICAgICAgICdNb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkFsdGVy
bmF0aXZlLmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRp
b25FcnJvci5pZGwnLAogICAgICAgICAgICAgJ01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0
aW9uRXZlbnQuaWRsJywKQEAgLTE0MjAsOCArMTQyMSwxMyBAQAogICAgICAgICAgICAgJ01vZHVs
ZXMvc3BlZWNoL1NwZWVjaEdyYW1tYXIuaCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9zcGVlY2gv
U3BlZWNoR3JhbW1hckxpc3QuY3BwJywKICAgICAgICAgICAgICdNb2R1bGVzL3NwZWVjaC9TcGVl
Y2hHcmFtbWFyTGlzdC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNv
Z25pdGlvbi5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0
aW9uLmgnLAogICAgICAgICAgICAgJ01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQWx0
ZXJuYXRpdmUuY3BwJywKICAgICAgICAgICAgICdNb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25p
dGlvbkFsdGVybmF0aXZlLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvc3BlZWNoL1NwZWVjaFJl
Y29nbml0aW9uQ2xpZW50LmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvc3BlZWNoL1NwZWVjaFJl
Y29nbml0aW9uQ29udHJvbGxlci5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvc3BlZWNoL1Nw
ZWVjaFJlY29nbml0aW9uQ29udHJvbGxlci5oJywKICAgICAgICAgICAgICdNb2R1bGVzL3NwZWVj
aC9TcGVlY2hSZWNvZ25pdGlvbkVycm9yLmNwcCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9zcGVl
Y2gvU3BlZWNoUmVjb2duaXRpb25FcnJvci5oJywKICAgICAgICAgICAgICdNb2R1bGVzL3NwZWVj
aC9TcGVlY2hSZWNvZ25pdGlvbkV2ZW50LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnRUYXJnZXRGYWN0b3J5LmluIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFy
Z2V0RmFjdG9yeS5pbgppbmRleCBjOGQyNzZlMWIwYmUzOWI2MTU5MGJlM2JmNWE1Y2MwOGU5MjY3
ZjJhLi44NTc3ZDNlMzk3NGEzYTJhMmUwYjlhMzY0NjlmYmEzM2VmZDA4ZjUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXRGYWN0b3J5LmluCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudFRhcmdldEZhY3RvcnkuaW4KQEAgLTIxLDYgKzIxLDcgQEAgTm9kZQog
Tm90aWZpY2F0aW9uIGNvbmRpdGlvbmFsPU5PVElGSUNBVElPTlN8TEVHQUNZX05PVElGSUNBVElP
TlMKIFNoYXJlZFdvcmtlciBjb25kaXRpb25hbD1TSEFSRURfV09SS0VSUwogU2hhcmVkV29ya2Vy
Q29udGV4dCBjb25kaXRpb25hbD1TSEFSRURfV09SS0VSUworU3BlZWNoUmVjb2duaXRpb24gY29u
ZGl0aW9uYWw9U0NSSVBURURfU1BFRUNICiBTVkdFbGVtZW50SW5zdGFuY2UgY29uZGl0aW9uYWw9
U1ZHCiBUZXh0VHJhY2sgY29uZGl0aW9uYWw9VklERU9fVFJBQ0sKIFRleHRUcmFja0N1ZSBjb25k
aXRpb25hbD1WSURFT19UUkFDSwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuY3BwCmluZGV4IGU1OThjNGMwMWUyMWY0ZGFlODIzOGE1YjhkNDY2Yzk4ZWFiYTdjOGEuLmQw
MGQzMzA4NDYwZjBkMGI5MjQ3MTc5MDI3MTRiZTQ0NjVhNTc0MzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTEwNiw2ICsxMDYsNyBAQAogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCIKICNp
bmNsdWRlICJTcGVlY2hJbnB1dENsaWVudEltcGwuaCIKKyNpbmNsdWRlICJTcGVlY2hSZWNvZ25p
dGlvbkNsaWVudC5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRpbWVy
LmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgpAQCAtMzg5LDYgKzM5MCw5IEBAIFdlYlZpZXdJ
bXBsOjpXZWJWaWV3SW1wbChXZWJWaWV3Q2xpZW50KiBjbGllbnQpCiAjaWYgRU5BQkxFKElOUFVU
X1NQRUVDSCkKICAgICBwcm92aWRlU3BlZWNoSW5wdXRUbyhtX3BhZ2UuZ2V0KCksIG1fc3BlZWNo
SW5wdXRDbGllbnQuZ2V0KCkpOwogI2VuZGlmCisjaWYgRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkK
KyAgICBwcm92aWRlU3BlZWNoUmVjb2duaXRpb25UbyhtX3BhZ2UuZ2V0KCksIDApOyAvLyBGSVhN
RTogUHJvdmlkZSBhIHJlYWwgaW1wbGVtZW50YXRpb24uCisjZW5kaWYKICNpZiBFTkFCTEUoTk9U
SUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQogICAgIHByb3ZpZGVO
b3RpZmljYXRpb24obV9wYWdlLmdldCgpLCBub3RpZmljYXRpb25QcmVzZW50ZXJJbXBsKCkpOwog
I2VuZGlmCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggYmU4OTIwNTQyMGNmYzFhNTdkZjU2ODQ0MTY4ZWYzNTA3M2Q1Y2NjNi4u
OTJiMTUwZjViMDYwMGJiMDkzZjcyY2YxZDEyOGEyNmU5ZDQzYmE3MyAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE1IEBACisyMDEyLTAzLTE1ICBIYW5zIFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgU3BlZWNoIEphdmFTY3JpcHQgQVBJOiBTcGVlY2hSZWNvZ25pdGlvbiwgQ29udHJv
bGxlciBhbmQgQ2xpZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04MTA5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCB0ZXN0cyBmb3IgdGhlIGJhc2ljcyBvZiB0aGUgU3BlZWNoUmVjb2duaXRpb24g
aW50ZXJmYWNlLgorCisgICAgICAgICogZmFzdC9zcGVlY2gvc2NyaXB0ZWQvYmFzaWNzLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9zcGVlY2gvc2NyaXB0ZWQvYmFzaWNzLmh0
bWw6IEFkZGVkLgorCiAyMDEyLTAzLTE1ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdh
bGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBHVEsgYmFzZWxpbmVzIGZvciBuZXcgZmFz
dC9jc3MgdGVzdC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc3BlZWNoL3NjcmlwdGVk
L2Jhc2ljcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L3NwZWVjaC9zY3JpcHRlZC9i
YXNpY3MtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc2MDc5MTY2ZGM2YzdjNzgyYmY4MjFkNWIy
N2ZmMDkxNzY2ZWRhMmUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3NwZWVj
aC9zY3JpcHRlZC9iYXNpY3MtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjkgQEAKK1Rlc3RzIHRo
ZSBiYXNpY3Mgb2YgdGhlIFNwZWVjaCBKYXZhU2NyaXB0IEFQSQorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUEFTUyAnd2Via2l0U3BlZWNoUmVjb2duaXRpb24nIGluIHNlbGYgaXMg
dHJ1ZQorUEFTUyB3ZWJraXRTcGVlY2hSZWNvZ25pdGlvbiA9PSBudWxsIGlzIGZhbHNlCitQQVNT
IHNwZWVjaFJlY28gPT0gbnVsbCBpcyBmYWxzZQorUEFTUyAnZ3JhbW1hcnMnIGluIHNwZWVjaFJl
Y28gaXMgdHJ1ZQorUEFTUyBzcGVlY2hSZWNvLmdyYW1tYXJzID09IG51bGwgaXMgZmFsc2UKK1BB
U1Mgc3BlZWNoUmVjby5ncmFtbWFycy5sZW5ndGggPT09IDAgaXMgdHJ1ZQorUEFTUyAnbGFuZycg
aW4gc3BlZWNoUmVjbyBpcyB0cnVlCitQQVNTICdjb250aW51b3VzJyBpbiBzcGVlY2hSZWNvIGlz
IHRydWUKK1BBU1MgJ3N0YXJ0JyBpbiBzcGVlY2hSZWNvIGlzIHRydWUKK1BBU1MgJ3N0b3AnIGlu
IHNwZWVjaFJlY28gaXMgdHJ1ZQorUEFTUyAnYWJvcnQnIGluIHNwZWVjaFJlY28gaXMgdHJ1ZQor
UEFTUyAnb25hdWRpb3N0YXJ0JyBpbiBzcGVlY2hSZWNvIGlzIHRydWUKK1BBU1MgJ29uc291bmRz
dGFydCcgaW4gc3BlZWNoUmVjbyBpcyB0cnVlCitQQVNTICdvbnNwZWVjaHN0YXJ0JyBpbiBzcGVl
Y2hSZWNvIGlzIHRydWUKK1BBU1MgJ29uc3BlZWNoZW5kJyBpbiBzcGVlY2hSZWNvIGlzIHRydWUK
K1BBU1MgJ29uc291bmRlbmQnIGluIHNwZWVjaFJlY28gaXMgdHJ1ZQorUEFTUyAnb25hdWRpb2Vu
ZCcgaW4gc3BlZWNoUmVjbyBpcyB0cnVlCitQQVNTICdvbnJlc3VsdCcgaW4gc3BlZWNoUmVjbyBp
cyB0cnVlCitQQVNTICdvbm5vbWF0Y2gnIGluIHNwZWVjaFJlY28gaXMgdHJ1ZQorUEFTUyAnb25y
ZXN1bHRkZWxldGVkJyBpbiBzcGVlY2hSZWNvIGlzIHRydWUKK1BBU1MgJ29uZXJyb3InIGluIHNw
ZWVjaFJlY28gaXMgdHJ1ZQorUEFTUyAnb25zdGFydCcgaW4gc3BlZWNoUmVjbyBpcyB0cnVlCitQ
QVNTICdvbmVuZCcgaW4gc3BlZWNoUmVjbyBpcyB0cnVlCisKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3Qvc3BlZWNoL3NjcmlwdGVkL2Jhc2ljcy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9z
cGVlY2gvc2NyaXB0ZWQvYmFzaWNzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGIxNDhmNDYyY2M1ODY5YzI1
MmRlMmMzZTMzY2Q0NjU2NzBjOGJmZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3Qvc3BlZWNoL3NjcmlwdGVkL2Jhc2ljcy5odG1sCkBAIC0wLDAgKzEsNDcgQEAKKzwhRE9DVFlQ
RSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorZGVzY3Jp
cHRpb24oJ1Rlc3RzIHRoZSBiYXNpY3Mgb2YgdGhlIFNwZWVjaCBKYXZhU2NyaXB0IEFQSScpOwor
CitmdW5jdGlvbiBydW4oKSB7CisgICAgLy8gQ2hlY2sgYXZhaWxhYmlsaXR5IG9mIGNvbnN0cnVj
dG9ycy4KKyAgICBzaG91bGRCZVRydWUoIid3ZWJraXRTcGVlY2hSZWNvZ25pdGlvbicgaW4gc2Vs
ZiIpOworICAgIHNob3VsZEJlRmFsc2UoIndlYmtpdFNwZWVjaFJlY29nbml0aW9uID09IG51bGwi
KTsKKworICAgIC8vIENoZWNrIGZvciBtZW1iZXJzIG9mIFNwZWVjaFJlY29nbml0aW9uLgorICAg
IHdpbmRvdy5zcGVlY2hSZWNvID0gbmV3IHdlYmtpdFNwZWVjaFJlY29nbml0aW9uKCk7CisgICAg
c2hvdWxkQmVGYWxzZSgic3BlZWNoUmVjbyA9PSBudWxsIik7CisgICAgc2hvdWxkQmVUcnVlKCIn
Z3JhbW1hcnMnIGluIHNwZWVjaFJlY28iKTsKKyAgICBzaG91bGRCZUZhbHNlKCJzcGVlY2hSZWNv
LmdyYW1tYXJzID09IG51bGwiKTsKKyAgICBzaG91bGRCZVRydWUoInNwZWVjaFJlY28uZ3JhbW1h
cnMubGVuZ3RoID09PSAwIik7CisgICAgc2hvdWxkQmVUcnVlKCInbGFuZycgaW4gc3BlZWNoUmVj
byIpOworICAgIHNob3VsZEJlVHJ1ZSgiJ2NvbnRpbnVvdXMnIGluIHNwZWVjaFJlY28iKTsKKyAg
ICBzaG91bGRCZVRydWUoIidzdGFydCcgaW4gc3BlZWNoUmVjbyIpOworICAgIHNob3VsZEJlVHJ1
ZSgiJ3N0b3AnIGluIHNwZWVjaFJlY28iKTsKKyAgICBzaG91bGRCZVRydWUoIidhYm9ydCcgaW4g
c3BlZWNoUmVjbyIpOworICAgIHNob3VsZEJlVHJ1ZSgiJ29uYXVkaW9zdGFydCcgaW4gc3BlZWNo
UmVjbyIpOworICAgIHNob3VsZEJlVHJ1ZSgiJ29uc291bmRzdGFydCcgaW4gc3BlZWNoUmVjbyIp
OworICAgIHNob3VsZEJlVHJ1ZSgiJ29uc3BlZWNoc3RhcnQnIGluIHNwZWVjaFJlY28iKTsKKyAg
ICBzaG91bGRCZVRydWUoIidvbnNwZWVjaGVuZCcgaW4gc3BlZWNoUmVjbyIpOworICAgIHNob3Vs
ZEJlVHJ1ZSgiJ29uc291bmRlbmQnIGluIHNwZWVjaFJlY28iKTsKKyAgICBzaG91bGRCZVRydWUo
IidvbmF1ZGlvZW5kJyBpbiBzcGVlY2hSZWNvIik7CisgICAgc2hvdWxkQmVUcnVlKCInb25yZXN1
bHQnIGluIHNwZWVjaFJlY28iKTsKKyAgICBzaG91bGRCZVRydWUoIidvbm5vbWF0Y2gnIGluIHNw
ZWVjaFJlY28iKTsKKyAgICBzaG91bGRCZVRydWUoIidvbnJlc3VsdGRlbGV0ZWQnIGluIHNwZWVj
aFJlY28iKTsKKyAgICBzaG91bGRCZVRydWUoIidvbmVycm9yJyBpbiBzcGVlY2hSZWNvIik7Cisg
ICAgc2hvdWxkQmVUcnVlKCInb25zdGFydCcgaW4gc3BlZWNoUmVjbyIpOworICAgIHNob3VsZEJl
VHJ1ZSgiJ29uZW5kJyBpbiBzcGVlY2hSZWNvIik7CisKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30K
Kword2luZG93Lm9ubG9hZCA9IHJ1bjsKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKzwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>