<?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>124698</bug_id>
          
          <creation_ts>2013-11-20 23:21:49 -0800</creation_ts>
          <short_desc>Hook up WebProcess-side of getOrEstablishIDBDatabaseMetadata</short_desc>
          <delta_ts>2013-12-16 14:22:00 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>124521</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>andersca</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>952952</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-20 23:21:49 -0800</bug_when>
    <thetext>Hook up WebProcess-side of getOrEstablishIDBDatabaseMetadata

With this change, the indexedDB API in WK2 with the DatabaseProcess actually does something - window.indexedDB.open(...) calls the javascript error handler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952954</commentid>
    <comment_count>1</comment_count>
      <attachid>217521</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-20 23:30:26 -0800</bug_when>
    <thetext>Created attachment 217521
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952955</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-20 23:31:04 -0800</bug_when>
    <thetext>Attachment 217521 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.messages.in&apos;, u&apos;Source/WebKit2/Shared/AsyncRequest.cpp&apos;, u&apos;Source/WebKit2/Shared/AsyncRequest.h&apos;, u&apos;Source/WebKit2/WebKit2.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp&apos;, u&apos;Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.h&apos;, u&apos;Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.messages.in&apos;]&quot; exit_code: 1
Source/WebKit2/Shared/AsyncRequest.h:60:  Extra space before ( in function call  [whitespace/parens] [4]
Source/WebKit2/Shared/AsyncRequest.h:78:  Extra space before ( in function call  [whitespace/parens] [4]
Source/WebKit2/Shared/AsyncRequest.h:89:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952961</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-20 23:53:37 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 217521 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, 
&gt; Source/WebKit2/Shared/AsyncRequest.h:60:  Extra space before ( in function call  [whitespace/parens] [4]
&gt; Source/WebKit2/Shared/AsyncRequest.h:78:  Extra space before ( in function call  [whitespace/parens] [4]
&gt; Source/WebKit2/Shared/AsyncRequest.h:89:  Extra space before ( in function call  [whitespace/parens] [4]
&gt; Total errors found: 3 in 10 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

Not clear to me that these styles should be in place for std::function formats.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953173</commentid>
    <comment_count>4</comment_count>
      <attachid>217521</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-11-21 10:58:16 -0800</bug_when>
    <thetext>Comment on attachment 217521
Patch v1

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

&gt; Source/WebKit2/Shared/AsyncRequest.cpp:37
&gt; +    DEFINE_STATIC_LOCAL(uint64_t, requestID, (0));

There’s no need to allocate a uint64_t on the heap. Just declare the ID variable static like we do for other IDs.

&gt; Source/WebKit2/Shared/AsyncRequest.cpp:53
&gt; +    m_abortHandler = handler;

should use std::move(handler)

&gt; Source/WebKit2/Shared/AsyncRequest.cpp:58
&gt; +    if (m_abortHandler != nullptr) {

We don’t check != nullptr, just if (m_abortHandler) should be enough.

&gt; Source/WebKit2/Shared/AsyncRequest.cpp:69
&gt; +void AsyncRequest::clearAbortHandler()
&gt; +{
&gt; +    m_abortHandler = nullptr;
&gt; +}

I don’t think this function is needed.

&gt; Source/WebKit2/Shared/AsyncRequest.h:44
&gt; +    template&lt;typename... Arguments&gt; void requestCompleted(Arguments... arguments);

This should take a parameter pack of rvalue references: Arguments&amp;&amp;...

&gt; Source/WebKit2/Shared/AsyncRequest.h:54
&gt; +private:
&gt; +    uint64_t m_requestID;
&gt; +    std::function&lt;void()&gt; m_abortHandler;

Just make m_abortHandler protected, then you don’t need clearAbortHandler().

&gt; Source/WebKit2/Shared/AsyncRequest.h:58
&gt; +class SpecializedAsyncRequest FINAL : public AsyncRequest {

I think this should be called AsyncRequestImpl.

&gt; Source/WebKit2/Shared/AsyncRequest.h:70
&gt; +    void requestCompleted(Arguments... arguments)

This should take a parameter pack of rvalues, Arguments&amp;&amp;...

&gt; Source/WebKit2/Shared/AsyncRequest.h:72
&gt; +        m_completionHandler(arguments...);

You should use std::forward here to forward the arguments:

m_completionHandler(std::forward&lt;Arguments&gt;(arguments)…)

&gt; Source/WebKit2/Shared/AsyncRequest.h:92
&gt; +template&lt;typename... Arguments&gt; void AsyncRequest::requestCompleted(Arguments... arguments)

Again, rvalue reference pack.

&gt; Source/WebKit2/Shared/AsyncRequest.h:94
&gt; +    SpecializedAsyncRequest&lt;Arguments...&gt;* serverTask = static_cast&lt;SpecializedAsyncRequest&lt;Arguments...&gt;*&gt;(this);

You may have to use std::decay on the parameter pack here to be able to cast.

&gt; Source/WebKit2/Shared/AsyncRequest.h:95
&gt; +    serverTask-&gt;requestCompleted(arguments...);

Who deletes this task? This should also use std::forward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953190</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-21 11:30:57 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; Source/WebKit2/Shared/AsyncRequest.h:95
&gt; &gt; +    serverTask-&gt;requestCompleted(arguments...);
&gt; 
&gt; Who deletes this task? 

The AsyncRequest itself is RefCounted and managed by its user.  In the case of this patch, WebIDBServerConnection.

New patch for the rest of the feedback on its way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953194</commentid>
    <comment_count>6</comment_count>
      <attachid>217587</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-21 11:34:21 -0800</bug_when>
    <thetext>Created attachment 217587
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953196</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-21 11:35:26 -0800</bug_when>
    <thetext>Attachment 217587 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.messages.in&apos;, u&apos;Source/WebKit2/Shared/AsyncRequest.cpp&apos;, u&apos;Source/WebKit2/Shared/AsyncRequest.h&apos;, u&apos;Source/WebKit2/WebKit2.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp&apos;, u&apos;Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.h&apos;, u&apos;Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.messages.in&apos;]&quot; exit_code: 1
Source/WebKit2/Shared/AsyncRequest.h:44:  Missing spaces around &amp;&amp;  [whitespace/operators] [3]
Source/WebKit2/Shared/AsyncRequest.h:60:  Extra space before ( in function call  [whitespace/parens] [4]
Source/WebKit2/Shared/AsyncRequest.h:70:  Missing spaces around &amp;&amp;  [whitespace/operators] [3]
Source/WebKit2/Shared/AsyncRequest.h:77:  Extra space before ( in function call  [whitespace/parens] [4]
Source/WebKit2/Shared/AsyncRequest.h:88:  Extra space before ( in function call  [whitespace/parens] [4]
Source/WebKit2/Shared/AsyncRequest.h:91:  Missing spaces around &amp;&amp;  [whitespace/operators] [3]
Total errors found: 6 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953203</commentid>
    <comment_count>8</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-21 11:40:32 -0800</bug_when>
    <thetext>Talked to Anders IRL re: style bot - We both agree it&apos;s wrong here.

Filed https://bugs.webkit.org/show_bug.cgi?id=124730 for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953204</commentid>
    <comment_count>9</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-21 11:41:01 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Attachment 217587 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.messages.in&apos;, u&apos;Source/WebKit2/Shared/AsyncRequest.cpp&apos;, u&apos;Source/WebKit2/Shared/AsyncRequest.h&apos;, u&apos;Source/WebKit2/WebKit2.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp&apos;, u&apos;Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.h&apos;, u&apos;Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.messages.in&apos;]&quot; exit_code: 1
&gt; Source/WebKit2/Shared/AsyncRequest.h:44:  Missing spaces around &amp;&amp;  [whitespace/operators] [3]
&gt; Source/WebKit2/Shared/AsyncRequest.h:70:  Missing spaces around &amp;&amp;  [whitespace/operators] [3]
&gt; Source/WebKit2/Shared/AsyncRequest.h:91:  Missing spaces around &amp;&amp;  [whitespace/operators] [3]

Well it&apos;s wrong about this, too!  I&apos;ll file that also.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953208</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-21 11:46:31 -0800</bug_when>
    <thetext>Filed https://bugs.webkit.org/show_bug.cgi?id=124731 for the (Arguments&amp;&amp;...) complaint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953210</commentid>
    <comment_count>11</comment_count>
      <attachid>217587</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-11-21 11:48:14 -0800</bug_when>
    <thetext>Comment on attachment 217587
Patch v2

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

&gt; Source/WebKit2/Shared/AsyncRequest.h:62
&gt; +        return adoptRef(new AsyncRequestImpl&lt;Arguments...&gt;(completionHandler));

std::move.

&gt; Source/WebKit2/Shared/AsyncRequest.h:78
&gt; +        : m_completionHandler(completionHandler)

std::move.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953211</commentid>
    <comment_count>12</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-21 11:58:04 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/159639</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217521</attachid>
            <date>2013-11-20 23:30:26 -0800</date>
            <delta_ts>2013-11-21 11:34:21 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>20335</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5NmMwMTRmLi40MmJiYmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDQg
QEAKIDIwMTMtMTEtMjAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCisgICAg
ICAgIEhvb2sgdXAgV2ViUHJvY2Vzcy1zaWRlIG9mIGdldE9yRXN0YWJsaXNoSURCRGF0YWJhc2VN
ZXRhZGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI0Njk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
V2l0aCB0aGlzIGNoYW5nZSB0aGUgSURCIEFQSSBpbiBXZWJLaXQyIHVzaW5nIHRoZSBEYXRhYmFz
ZVByb2Nlc3MgZmluYWxseSBkb2VzIHNvbWV0aGluZyBvYnNlcnZhYmxlOgorICAgICAgICB3aW5k
b3cuaW5kZXhlZERCLm9wZW4oKSBzZW5kcyBhbiBlcnJvciB0byBKYXZhc2NyaXB0LgorCisgICAg
ICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0
aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6
Z2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRhKTogQ29udGludWUgY2FsbGluZyBiYWNr
IHRvIHRoZQorICAgICAgICAgIFdlYlByb2Nlc3Mgd2l0aCBkdW1teSBkYXRhLCBidXQgaW5jbHVk
ZSB0aGUgcmVxdWVzdCBJRCBmb3IgcmVmZXJlbmNlLgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vz
cy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5oOgorICAgICAgICAqIERh
dGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5tZXNz
YWdlcy5pbjoKKworICAgICAgICBBZGQgYSBuZXcgY2xhc3MgdGhhdCB3cmFwcyBhIGNvbXBsZXRp
b24gY2FsbGJhY2sgZnVuY3Rpb24gYW5kIGdpdmVzIGl0IGEgdW5pcXVlIGludGVnZXIgaWRlbnRp
Zmllci4KKyAgICAgICAgSXQgYWxzbyBhbGxvd3MgZm9yIHdyYXBwaW5nIGFuIGFib3J0IGNhbGxi
YWNrIGZ1bmN0aW9uIChpbiBjYXNlIGEgY29ubmVjdGlvbiBpcyBsb3N0LCBmb3IgZXhhbXBsZSku
CisgICAgICAgIEl0IGlzIHRlbXBsYXRlZCB0byBmbGV4aWJseSBoYW5kbGUgYW55IGNhbGxiYWNr
IGZ1bmN0aW9uIHNpZ25hdHVyZS4KKyAgICAgICAgKiBTaGFyZWQvQXN5bmNSZXF1ZXN0LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OmdlbmVyYXRlUmVxdWVzdElEKToKKyAgICAgICAgKFdl
YktpdDo6QXN5bmNSZXF1ZXN0OjpBc3luY1JlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpBc3lu
Y1JlcXVlc3Q6On5Bc3luY1JlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpBc3luY1JlcXVlc3Q6
OnNldEFib3J0SGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6OkFzeW5jUmVxdWVzdDo6cmVxdWVz
dEFib3J0ZWQpOgorICAgICAgICAoV2ViS2l0OjpBc3luY1JlcXVlc3Q6OmNsZWFyQWJvcnRIYW5k
bGVyKToKKyAgICAgICAgKiBTaGFyZWQvQXN5bmNSZXF1ZXN0Lmg6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpBc3luY1JlcXVlc3Q6OnJlcXVlc3RJRCk6CisgICAgICAgIChXZWJLaXQ6OkFzeW5j
UmVxdWVzdDo6cmVxdWVzdENvbXBsZXRlZCk6CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0RhdGFi
YXNlcy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYklEQlNlcnZlckNvbm5lY3Rpb246OmdldE9yRXN0YWJsaXNoSURCRGF0YWJhc2VNZXRh
ZGF0YSk6IFdyYXAgdGhlIGNvbXBsZXRpb24gaGFuZGxlciBpbiBhbgorICAgICAgICAgIEFzeW5j
UmVxdWVzdCBhbmQgc2F2ZSBvZmYgdGhlIHJlcXVlc3QgZm9yIGxhdGVyIHVzZS4KKyAgICAgICAg
KFdlYktpdDo6V2ViSURCU2VydmVyQ29ubmVjdGlvbjo6ZGlkR2V0T3JFc3RhYmxpc2hJREJEYXRh
YmFzZU1ldGFkYXRhKTogU2VuZCB0aGUgcmVzdWx0cyB0byB0aGUgQXN5bmNSZXF1ZXN0LgorICAg
ICAgICAqIFdlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJTZXJ2ZXJDb25uZWN0
aW9uLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNl
cnZlckNvbm5lY3Rpb24ubWVzc2FnZXMuaW46CisKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisKKzIwMTMtMTEtMjAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25A
YXBwbGUuY29tPgorCiAgICAgICAgIEFkZCBtb3JlIGluZnJhc3RydWN0dXJlIGZvciBTZXJ2ZXJD
b25uZWN0aW9uIGNvbW11bmljYXRpb24gYmV0d2VlbiBXZWIgYW5kIERhdGFiYXNlIHByb2Nlc3Nl
cwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0Njkz
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIv
RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFz
ZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uY3BwCmluZGV4
IDhjNGM4OTQuLjZjODI1YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJv
Y2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJD
b25uZWN0aW9uLmNwcApAQCAtNjQsMTMgKzY0LDEzIEBAIHZvaWQgRGF0YWJhc2VQcm9jZXNzSURC
Q29ubmVjdGlvbjo6ZXN0YWJsaXNoQ29ubmVjdGlvbihjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFt
CiAgICAgbV9tYWluRnJhbWVPcmlnaW4gPSBtYWluRnJhbWVPcmlnaW47CiB9CiAKLXZvaWQgRGF0
YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6Z2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFk
YXRhKCkKK3ZvaWQgRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6Z2V0T3JFc3RhYmxpc2hJ
REJEYXRhYmFzZU1ldGFkYXRhKHVpbnQ2NF90IHJlcXVlc3RJRCkKIHsKICAgICAvLyBGSVhNRTog
VGhpcyBtZXRob2QgaXMgc3VjY2Vzc2Z1bGx5IGNhbGxlZCBieSBtZXNzYWdpbmcgZnJvbSB0aGUg
V2ViUHJvY2VzcywgYW5kIGNhbGxzIGJhY2sgd2l0aCBkdW1teSBkYXRhLgogICAgIC8vIE5lZWRz
IHJlYWwgaW1wbGVtZW50YXRpb24uCiAKICAgICBJREJEYXRhYmFzZU1ldGFkYXRhIGRhdGE7Ci0g
ICAgc2VuZChNZXNzYWdlczo6V2ViSURCU2VydmVyQ29ubmVjdGlvbjo6RGlkR2V0T3JFc3RhYmxp
c2hJREJEYXRhYmFzZU1ldGFkYXRhKGZhbHNlLCBkYXRhKSk7CisgICAgc2VuZChNZXNzYWdlczo6
V2ViSURCU2VydmVyQ29ubmVjdGlvbjo6RGlkR2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFk
YXRhKHJlcXVlc3RJRCwgZmFsc2UsIGRhdGEpKTsKIH0KIAogQ29yZUlQQzo6Q29ubmVjdGlvbiog
RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRh
YmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uaAppbmRleCBhZDFkMzBi
Li45MzM1MzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5k
ZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24u
aApAQCAtNjAsNyArNjAsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gTWVzc2FnZSBoYW5kbGVycy4K
ICAgICB2b2lkIGVzdGFibGlzaENvbm5lY3Rpb24oY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUs
IGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3BlbmluZ09yaWdpbiwgY29uc3QgU2VjdXJpdHlP
cmlnaW5EYXRhJiBtYWluRnJhbWVPcmlnaW4pOwotICAgIHZvaWQgZ2V0T3JFc3RhYmxpc2hJREJE
YXRhYmFzZU1ldGFkYXRhKCk7CisgICAgdm9pZCBnZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0
YWRhdGEodWludDY0X3QgcmVxdWVzdElEKTsKIAogICAgIFJlZjxEYXRhYmFzZVRvV2ViUHJvY2Vz
c0Nvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKICAgICB1aW50NjRfdCBtX3NlcnZlckNvbm5lY3Rp
b25JZGVudGlmaWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNz
L0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLm1lc3NhZ2VzLmluIGIvU291
cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJD
b25uZWN0aW9uLm1lc3NhZ2VzLmluCmluZGV4IGRlNDU2MDYuLjQ4MzJmMzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNz
SURCQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVBy
b2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24ubWVzc2FnZXMuaW4K
QEAgLTI0LDcgKzI0LDcgQEAKIAogbWVzc2FnZXMgLT4gRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVj
dGlvbiBMZWdhY3lSZWNlaXZlciB7CiAgICAgRXN0YWJsaXNoQ29ubmVjdGlvbihXVEY6OlN0cmlu
ZyBkYXRhYmFzZU5hbWUsIFdlYktpdDo6U2VjdXJpdHlPcmlnaW5EYXRhIG9wZW5pbmdPcmlnaW4s
IFdlYktpdDo6U2VjdXJpdHlPcmlnaW5EYXRhIG1haW5GcmFtZU9yaWdpbikKLSAgICBHZXRPckVz
dGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEoKQorICAgIEdldE9yRXN0YWJsaXNoSURCRGF0YWJh
c2VNZXRhZGF0YSh1aW50NjRfdCByZXF1ZXN0SUQpCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXN5bmNSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9Bc3luY1JlcXVlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjE1ZTlkN2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXN5bmNS
ZXF1ZXN0LmNwcApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkFzeW5jUmVxdWVzdC5oIgorCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVJlcXVlc3RJRCgp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KHVpbnQ2NF90LCByZXF1ZXN0SUQsICgwKSk7CisgICAgcmV0dXJuICsrcmVxdWVzdElEOworfQor
CitBc3luY1JlcXVlc3Q6OkFzeW5jUmVxdWVzdCgpCisgICAgOiBtX3JlcXVlc3RJRChnZW5lcmF0
ZVJlcXVlc3RJRCgpKQoreworfQorCitBc3luY1JlcXVlc3Q6On5Bc3luY1JlcXVlc3QoKQorewor
ICAgIEFTU0VSVCghbV9hYm9ydEhhbmRsZXIpOworfQorCit2b2lkIEFzeW5jUmVxdWVzdDo6c2V0
QWJvcnRIYW5kbGVyKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBoYW5kbGVyKQoreworICAgIG1fYWJv
cnRIYW5kbGVyID0gaGFuZGxlcjsKK30KKwordm9pZCBBc3luY1JlcXVlc3Q6OnJlcXVlc3RBYm9y
dGVkKCkKK3sKKyAgICBpZiAobV9hYm9ydEhhbmRsZXIgIT0gbnVsbHB0cikgeworICAgICAgICBt
X2Fib3J0SGFuZGxlcigpOworICAgICAgICBjbGVhckFib3J0SGFuZGxlcigpOworICAgIH0KKwor
ICAgIGNsZWFyQ29tcGxldGlvbkhhbmRsZXIoKTsKK30KKwordm9pZCBBc3luY1JlcXVlc3Q6OmNs
ZWFyQWJvcnRIYW5kbGVyKCkKK3sKKyAgICBtX2Fib3J0SGFuZGxlciA9IG51bGxwdHI7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L0FzeW5jUmVxdWVzdC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0FzeW5jUmVxdWVzdC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNzMyMzYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXN5bmNSZXF1ZXN0LmgKQEAgLTAsMCArMSwxMDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoK
KyAqLworCisjaWZuZGVmIEFzeW5jUmVxdWVzdF9oCisjZGVmaW5lIEFzeW5jUmVxdWVzdF9oCisK
KyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEFz
eW5jUmVxdWVzdCA6IHB1YmxpYyBSZWZDb3VudGVkPEFzeW5jUmVxdWVzdD4geworcHVibGljOgor
ICAgIHZpcnR1YWwgfkFzeW5jUmVxdWVzdCgpOworCisgICAgdWludDY0X3QgcmVxdWVzdElEKCkg
eyByZXR1cm4gbV9yZXF1ZXN0SUQ7IH0KKworICAgIHZvaWQgc2V0QWJvcnRIYW5kbGVyKHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPik7CisgICAgdm9pZCByZXF1ZXN0QWJvcnRlZCgpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4gdm9pZCByZXF1ZXN0Q29tcGxldGVkKEFyZ3VtZW50
cy4uLiBhcmd1bWVudHMpOworCitwcm90ZWN0ZWQ6CisgICAgQXN5bmNSZXF1ZXN0KCk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXJDb21wbGV0aW9uSGFuZGxlcigpID0gMDsKKyAgICB2b2lkIGNs
ZWFyQWJvcnRIYW5kbGVyKCk7CisKK3ByaXZhdGU6CisgICAgdWludDY0X3QgbV9yZXF1ZXN0SUQ7
CisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IG1fYWJvcnRIYW5kbGVyOworfTsKKwordGVtcGxh
dGUgPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK2NsYXNzIFNwZWNpYWxpemVkQXN5bmNSZXF1ZXN0
IEZJTkFMIDogcHVibGljIEFzeW5jUmVxdWVzdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8QXN5bmNSZXF1ZXN0PiBjcmVhdGUoc3RkOjpmdW5jdGlvbjx2b2lkIChBcmd1bWVudHMu
Li4pPiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgU3BlY2lhbGl6ZWRBc3luY1JlcXVlc3Q8QXJndW1lbnRzLi4uPihjb21wbGV0aW9uSGFuZGxl
cikpOworICAgIH0KKworICAgIHZpcnR1YWwgflNwZWNpYWxpemVkQXN5bmNSZXF1ZXN0KCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghbV9jb21wbGV0aW9uSGFuZGxlcik7CisgICAgfQorCisgICAg
dm9pZCByZXF1ZXN0Q29tcGxldGVkKEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgeworICAg
ICAgICBtX2NvbXBsZXRpb25IYW5kbGVyKGFyZ3VtZW50cy4uLik7CisgICAgICAgIG1fY29tcGxl
dGlvbkhhbmRsZXIgPSBudWxscHRyOworICAgICAgICBjbGVhckFib3J0SGFuZGxlcigpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBTcGVjaWFsaXplZEFzeW5jUmVxdWVzdChzdGQ6OmZ1bmN0aW9u
PHZvaWQgKEFyZ3VtZW50cy4uLik+IGNvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICA6IG1fY29t
cGxldGlvbkhhbmRsZXIoY29tcGxldGlvbkhhbmRsZXIpCisgICAgeworICAgICAgICBBU1NFUlQo
bV9jb21wbGV0aW9uSGFuZGxlcik7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNsZWFyQ29t
cGxldGlvbkhhbmRsZXIoKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgbV9jb21wbGV0aW9uSGFu
ZGxlciA9IG51bGxwdHI7CisgICAgfQorCisgICAgc3RkOjpmdW5jdGlvbjx2b2lkIChBcmd1bWVu
dHMuLi4pPiBtX2NvbXBsZXRpb25IYW5kbGVyOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRzPiB2b2lkIEFzeW5jUmVxdWVzdDo6cmVxdWVzdENvbXBsZXRlZChBcmd1bWVudHMu
Li4gYXJndW1lbnRzKQoreworICAgIFNwZWNpYWxpemVkQXN5bmNSZXF1ZXN0PEFyZ3VtZW50cy4u
Lj4qIHNlcnZlclRhc2sgPSBzdGF0aWNfY2FzdDxTcGVjaWFsaXplZEFzeW5jUmVxdWVzdDxBcmd1
bWVudHMuLi4+Kj4odGhpcyk7CisgICAgc2VydmVyVGFzay0+cmVxdWVzdENvbXBsZXRlZChhcmd1
bWVudHMuLi4pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEFzeW5j
UmVxdWVzdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggY2RiMjY5Mi4uN2NmNWQ2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTI4LDYgKzUyOCw4IEBACiAJ
CTUxNTM1NjlDMTI5MUIxRDIwMDA3NDlEQyAvKiBXZWJQYWdlQ29udGV4dE1lbnVDbGllbnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1MzU2OUEx
MjkxQjFEMjAwMDc0OURDIC8qIFdlYlBhZ2VDb250ZXh0TWVudUNsaWVudC5jcHAgKi87IH07CiAJ
CTUxNTM1NjlEMTI5MUIxRDIwMDA3NDlEQyAvKiBXZWJQYWdlQ29udGV4dE1lbnVDbGllbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNTM1NjlCMTI5
MUIxRDIwMDA3NDlEQyAvKiBXZWJQYWdlQ29udGV4dE1lbnVDbGllbnQuaCAqLzsgfTsKIAkJNTE1
NzhCODMxMjA5RUNFRjAwQTM3QzRBIC8qIFdlYkRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNTc4QjgyMTIwOUVDRUYwMEEzN0M0QSAvKiBXZWJE
YXRhLmggKi87IH07CisJCTUxNUU3NzI3MTgzREQ2RjYwMDA3MjAzRiAvKiBBc3luY1JlcXVlc3Qu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1RTc3
MjUxODNERDZGNjAwMDcyMDNGIC8qIEFzeW5jUmVxdWVzdC5jcHAgKi87IH07CisJCTUxNUU3NzI4
MTgzREQ2RjYwMDA3MjAzRiAvKiBBc3luY1JlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUU3NzI2MTgzREQ2RjYwMDA3MjAzRiAvKiBBc3lu
Y1JlcXVlc3QuaCAqLzsgfTsKIAkJNTE2MEJGRTExMzM4MURGOTAwOTE4OTk5IC8qIExvZ2dpbmcu
bWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2
MEJGRTAxMzM4MURGOTAwOTE4OTk5IC8qIExvZ2dpbmcubWFjLm1tICovOyB9OwogCQk1MTYzMTk5
MjE2Mjg5ODBBMDBFMjJGMDAgLyogTmV0d29ya1Byb2Nlc3NQcm94eU1hYy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjMxOTkxMTYyODk4MEEwMEUy
MkYwMCAvKiBOZXR3b3JrUHJvY2Vzc1Byb3h5TWFjLm1tICovOyB9OwogCQk1MTYzMTk5NDE2Mjg5
QTYwMDBFMjJGMDAgLyogTmV0d29ya1Byb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBQ0M5MzQxNjI4MDY0ODAw
MzQyNTUwIC8qIE5ldHdvcmtQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKQEAgLTIw
NDcsNiArMjA0OSw4IEBACiAJCTUxNTM1NjlBMTI5MUIxRDIwMDA3NDlEQyAvKiBXZWJQYWdlQ29u
dGV4dE1lbnVDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViUGFnZUNvbnRleHRNZW51Q2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTE1MzU2OUIxMjkxQjFEMjAwMDc0OURDIC8qIFdlYlBhZ2VDb250ZXh0TWVudUNsaWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQYWdlQ29udGV4dE1lbnVDbGll
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE1NzhCODIxMjA5RUNFRjAwQTM3
QzRBIC8qIFdlYkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRGF0
YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTVFNzcyNTE4M0RENkY2MDAwNzIw
M0YgLyogQXN5bmNSZXF1ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEFzeW5jUmVxdWVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNUU3
NzI2MTgzREQ2RjYwMDA3MjAzRiAvKiBBc3luY1JlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQXN5bmNSZXF1ZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUxNjBCRkUwMTMzODFERjkwMDkxODk5OSAvKiBMb2dnaW5nLm1hYy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IExvZ2dpbmcubWFjLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MTYzMTk5MTE2Mjg5ODBBMDBFMjJGMDAgLyogTmV0d29ya1By
b2Nlc3NQcm94eU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9
IE5ldHdvcmtQcm9jZXNzUHJveHlNYWMubW07IHBhdGggPSBtYWMvTmV0d29ya1Byb2Nlc3NQcm94
eU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2N0VFOUUxNzAzNzdCRjAw
NzY4MUNBIC8qIERpc2tDYWNoZU1vbml0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGlza0NhY2hlTW9uaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MzMyOSw4ICszMzMzLDYgQEAKIAkJCQlCQzExMUI1QTExMkY2MjgyMDAzMzdCQUIgLyogbWFjICov
LAogCQkJCTUxQThBNjBEMTYyN0YyQUMwMDBEOTBFOSAvKiBOZXR3b3JrICovLAogCQkJCTFBQUUw
NThDMTI3OURDRDQwMDg1MjQxOCAvKiBQbHVnaW5zICovLAotCQkJCUE3RDc5MkQ1MTc2N0NCNkUw
MDg4MUNCRSAvKiBBY3Rpdml0eUFzc2VydGlvbi5jcHAgKi8sCi0JCQkJQTdENzkyRDQxNzY3Q0Iw
OTAwODgxQ0JFIC8qIEFjdGl2aXR5QXNzZXJ0aW9uLmggKi8sCiAJCQkJQkM2NDY5NkQxMURCRTYw
MzAwNjQ1NUIwIC8qIEFQSUFycmF5LmNwcCAqLywKIAkJCQlCQzY0Njk2RTExREJFNjAzMDA2NDU1
QjAgLyogQVBJQXJyYXkuaCAqLywKIAkJCQkxQTNERDIwNTEyNUU1QTJGMDA0NTE1RTYgLyogQVBJ
Q2xpZW50LmggKi8sCkBAIC0zMzM4LDYgKzMzNDAsMTAgQEAKIAkJCQk1RDUxODQ1NDEzQkNGOUND
MDBDN0ZGNEEgLyogQVBJQ2xpZW50VHJhaXRzLmggKi8sCiAJCQkJQjYzNDAzRjgxNDkxMEQ1NzAw
MTA3MEI1IC8qIEFQSU9iamVjdC5jcHAgKi8sCiAJCQkJQkNGMDRDOEMxMUZGOUI3RDAwRjg2QTU4
IC8qIEFQSU9iamVjdC5oICovLAorCQkJCUE3RDc5MkQ1MTc2N0NCNkUwMDg4MUNCRSAvKiBBY3Rp
dml0eUFzc2VydGlvbi5jcHAgKi8sCisJCQkJQTdENzkyRDQxNzY3Q0IwOTAwODgxQ0JFIC8qIEFj
dGl2aXR5QXNzZXJ0aW9uLmggKi8sCisJCQkJNTE1RTc3MjUxODNERDZGNjAwMDcyMDNGIC8qIEFz
eW5jUmVxdWVzdC5jcHAgKi8sCisJCQkJNTE1RTc3MjYxODNERDZGNjAwMDcyMDNGIC8qIEFzeW5j
UmVxdWVzdC5oICovLAogCQkJCTRGNjAxNDMwMTU1QzVBMzIwMDFGQkRFMCAvKiBCbG9ja2luZ1Jl
c3BvbnNlTWFwLmggKi8sCiAJCQkJQkNGMTg2MzcxNjdEMDcxRTAwQTFBODVBIC8qIENhY2hlTW9k
ZWwuY3BwICovLAogCQkJCUJDMzA2NUY5MTI1OTM0NEUwMEU3MTI3OCAvKiBDYWNoZU1vZGVsLmgg
Ki8sCkBAIC01NTM1LDYgKzU1NDEsNyBAQAogCQkJCTFBQTU3NUZCMTQ5NkI1MjYwMEE0RUUwNiAv
KiBFdmVudERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOTBDMUY0MTI2NEZENzEw
MDNFNDRENCAvKiBGaW5kQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE5MTAwNzEx
MjY2NzVDNDAwMTg0MkY1IC8qIEZpbmRJbmRpY2F0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTUx
NUU3NzI4MTgzREQ2RjYwMDA3MjAzRiAvKiBBc3luY1JlcXVlc3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCTM3QzRDMDg3MTgxNDlDNUIwMDM2ODhCOSAvKiBXS0JhY2tGb3J3YXJkTGlzdEl0ZW0uaCBp
biBIZWFkZXJzICovLAogCQkJCTFBOTEwMTBBMTI2OEM4Q0EwMDE4NDJGNSAvKiBGaW5kSW5kaWNh
dG9yV2luZG93LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0U4MUQ4RDEzMTlGN0VGMDAyNDE5MTAg
LyogRm9udEluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtNzI0OSw2ICs3MjU2LDcgQEAKIAkJCQlC
QzE0REY5RTEyMEI2MzVGMDA4MjZDMEMgLyogV0tCdW5kbGVTY3JpcHRXb3JsZC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQzQwNzVGNTEyNEZGMDI3MDA2OEYyMEEgLyogV0tDZXJ0aWZpY2F0ZUlu
Zm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM0MDc2MjgxMjRGRjA0MDAwNjhGMjBBIC8qIFdL
Q2VydGlmaWNhdGVJbmZvTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTE1RTc3MjcxODNERDZG
NjAwMDcyMDNGIC8qIEFzeW5jUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGMDM2OTc4
NTE1RjRCRTZCMDBDM0E4MEUgLyogV0tDb2xvclBpY2tlclJlc3VsdExpc3RlbmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDQTI4NEQ2MTQ5MkYyQzcwMDFGOTA0MiAvKiBXS0Nvbm5lY3Rpb24u
bW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzRBNjI5NjE0NzMxM0EwMDA2QzY4MUEgLyogV0tDb25u
ZWN0aW9uUmVmLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24uY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNl
cnZlckNvbm5lY3Rpb24uY3BwCmluZGV4IDdmZjA5ZmMuLmU3MTA5ZDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJTZXJ2ZXJD
b25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9J
bmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKIAog
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykK
IAorI2luY2x1ZGUgIkFzeW5jUmVxdWVzdC5oIgogI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vzc0lE
QkNvbm5lY3Rpb25NZXNzYWdlcy5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVG9XZWJQcm9jZXNzQ29u
bmVjdGlvbk1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5EYXRhLmgiCkBAIC04
MiwxMyArODMsMjUgQEAgdm9pZCBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpkZWxldGVEYXRhYmFz
ZShjb25zdCBTdHJpbmcmIG5hbWUsIEJvb2xDYWxsYmFja0Z1bmMKIAogdm9pZCBXZWJJREJTZXJ2
ZXJDb25uZWN0aW9uOjpnZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEoR2V0SURCRGF0
YWJhc2VNZXRhZGF0YUZ1bmN0aW9uIGNvbXBsZXRpb25DYWxsYmFjaykKIHsKLSAgICAvLyBGSVhN
RTogU2F2ZSB0aGUgY29tcGxldGlvbkNhbGxiYWNrIHRvIHBlcmZvcm0gdGhpcyByZXF1ZXN0IGlz
IGNvbXBsZXRlLgotICAgIHNlbmQoTWVzc2FnZXM6OkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rp
b246OkdldE9yRXN0YWJsaXNoSURCRGF0YWJhc2VNZXRhZGF0YSgpKTsKKyAgICBSZWZQdHI8QXN5
bmNSZXF1ZXN0PiBzZXJ2ZXJSZXF1ZXN0ID0gU3BlY2lhbGl6ZWRBc3luY1JlcXVlc3Q8Y29uc3Qg
SURCRGF0YWJhc2VNZXRhZGF0YSYsIGJvb2w+OjpjcmVhdGUoY29tcGxldGlvbkNhbGxiYWNrKTsK
KworICAgIHNlcnZlclJlcXVlc3QtPnNldEFib3J0SGFuZGxlcihbY29tcGxldGlvbkNhbGxiYWNr
XSgpIHsKKyAgICAgICAgSURCRGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YTsKKyAgICAgICAgY29t
cGxldGlvbkNhbGxiYWNrKG1ldGFkYXRhLCBmYWxzZSk7CisgICAgfSk7CisKKyAgICB1aW50NjRf
dCByZXF1ZXN0SUQgPSBzZXJ2ZXJSZXF1ZXN0LT5yZXF1ZXN0SUQoKTsKKyAgICBtX3NlcnZlclJl
cXVlc3RzLnNldChyZXF1ZXN0SUQsIHNlcnZlclJlcXVlc3QucmVsZWFzZSgpKTsKKworICAgIHNl
bmQoTWVzc2FnZXM6OkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246OkdldE9yRXN0YWJsaXNo
SURCRGF0YWJhc2VNZXRhZGF0YShyZXF1ZXN0SUQpKTsKIH0KIAotdm9pZCBXZWJJREJTZXJ2ZXJD
b25uZWN0aW9uOjpkaWRHZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEoYm9vbCwgY29u
c3QgSURCRGF0YWJhc2VNZXRhZGF0YSYpCit2b2lkIFdlYklEQlNlcnZlckNvbm5lY3Rpb246OmRp
ZEdldE9yRXN0YWJsaXNoSURCRGF0YWJhc2VNZXRhZGF0YSh1aW50NjRfdCByZXF1ZXN0SUQsIGJv
b2wgc3VjY2VzcywgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpCiB7Ci0gICAg
Ly8gRklYTUU6IExvb2t1cCB0aGUgYXBwcm9wcmlhdGUgY29tcGxldGlvbkNhbGxiYWNrIHRvIHBl
cmZvcm0gd2l0aCB0aGVzZSByZXN1bHRzLgorICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHNlcnZl
clJlcXVlc3QgPSBtX3NlcnZlclJlcXVlc3RzLnRha2UocmVxdWVzdElEKTsKKyAgICBBU1NFUlQo
c2VydmVyUmVxdWVzdCk7CisKKyAgICBzZXJ2ZXJSZXF1ZXN0LT5yZXF1ZXN0Q29tcGxldGVkPGNv
bnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmLCBib29sPihtZXRhZGF0YSwgc3VjY2Vzcyk7CiB9CiAK
IHZvaWQgV2ViSURCU2VydmVyQ29ubmVjdGlvbjo6Y2xvc2UoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5l
Y3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9X
ZWJJREJTZXJ2ZXJDb25uZWN0aW9uLmgKaW5kZXggN2U1MGRiOS4uOTU3NjgzOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNl
cnZlckNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNl
cy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5oCkBAIC0zNSw2ICszNSw4IEBACiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBBc3luY1JlcXVlc3Q7CisKIGNsYXNzIFdlYklE
QlNlcnZlckNvbm5lY3Rpb24gRklOQUwgOiBwdWJsaWMgV2ViQ29yZTo6SURCU2VydmVyQ29ubmVj
dGlvbiwgcHVibGljIENvcmVJUEM6Ok1lc3NhZ2VTZW5kZXIgewogcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFdlYklEQlNlcnZlckNvbm5lY3Rpb24+IGNyZWF0ZShjb25zdCBTdHJpbmcm
IGRhdGFiYXNlTmFtZSwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4mIG9wZW5pbmdPcmln
aW4sIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiBtYWluRnJhbWVPcmlnaW4pOwpAQCAt
OTEsMTMgKzkzLDE1IEBAIHByaXZhdGU6CiAgICAgLy8gQ29yZUlQQzo6TWVzc2FnZVNlbmRlcgog
ICAgIHZpcnR1YWwgQ29yZUlQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24o
KSBPVkVSUklERTsKIAotICAgIHZvaWQgZGlkR2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFk
YXRhKGJvb2wgc3VjY2VzcywgY29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSYpOwor
ICAgIHZvaWQgZGlkR2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRhKHVpbnQ2NF90IHJl
cXVlc3RJRCwgYm9vbCBzdWNjZXNzLCBjb25zdCBXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRh
Jik7CiAKICAgICB1aW50NjRfdCBtX3NlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyOwogCiAgICAg
U3RyaW5nIG1fZGF0YWJhc2VOYW1lOwogICAgIFJlZjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4g
bV9vcGVuaW5nT3JpZ2luOwogICAgIFJlZjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4gbV9tYWlu
RnJhbWVPcmlnaW47CisKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8QXN5bmNSZXF1ZXN0
Pj4gbV9zZXJ2ZXJSZXF1ZXN0czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklE
QlNlcnZlckNvbm5lY3Rpb24ubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgpp
bmRleCAyM2EwOGZkLi5iOTQ3YjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5tZXNzYWdlcy5p
bgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2Vi
SURCU2VydmVyQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgpAQCAtMjMsNyArMjMsNyBAQAogI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKIAogbWVz
c2FnZXMgLT4gV2ViSURCU2VydmVyQ29ubmVjdGlvbiBMZWdhY3lSZWNlaXZlciB7Ci0gICAgRGlk
R2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRhKGJvb2wgc3VjY2VzcywgV2ViQ29yZTo6
SURCRGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YSkKKyAgICBEaWRHZXRPckVzdGFibGlzaElEQkRh
dGFiYXNlTWV0YWRhdGEodWludDY0X3QgcmVxdWVzdElELCBib29sIHN1Y2Nlc3MsIFdlYkNvcmU6
OklEQkRhdGFiYXNlTWV0YWRhdGEgbWV0YWRhdGEpCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCg==
</data>
<flag name="review"
          id="240658"
          type_id="1"
          status="-"
          setter="andersca"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217587</attachid>
            <date>2013-11-21 11:34:21 -0800</date>
            <delta_ts>2013-11-21 11:48:14 -0800</delta_ts>
            <desc>Patch v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>20184</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5NmMwMTRmLi40MmJiYmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDQg
QEAKIDIwMTMtMTEtMjAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCisgICAg
ICAgIEhvb2sgdXAgV2ViUHJvY2Vzcy1zaWRlIG9mIGdldE9yRXN0YWJsaXNoSURCRGF0YWJhc2VN
ZXRhZGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI0Njk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
V2l0aCB0aGlzIGNoYW5nZSB0aGUgSURCIEFQSSBpbiBXZWJLaXQyIHVzaW5nIHRoZSBEYXRhYmFz
ZVByb2Nlc3MgZmluYWxseSBkb2VzIHNvbWV0aGluZyBvYnNlcnZhYmxlOgorICAgICAgICB3aW5k
b3cuaW5kZXhlZERCLm9wZW4oKSBzZW5kcyBhbiBlcnJvciB0byBKYXZhc2NyaXB0LgorCisgICAg
ICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0
aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6
Z2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRhKTogQ29udGludWUgY2FsbGluZyBiYWNr
IHRvIHRoZQorICAgICAgICAgIFdlYlByb2Nlc3Mgd2l0aCBkdW1teSBkYXRhLCBidXQgaW5jbHVk
ZSB0aGUgcmVxdWVzdCBJRCBmb3IgcmVmZXJlbmNlLgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vz
cy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5oOgorICAgICAgICAqIERh
dGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5tZXNz
YWdlcy5pbjoKKworICAgICAgICBBZGQgYSBuZXcgY2xhc3MgdGhhdCB3cmFwcyBhIGNvbXBsZXRp
b24gY2FsbGJhY2sgZnVuY3Rpb24gYW5kIGdpdmVzIGl0IGEgdW5pcXVlIGludGVnZXIgaWRlbnRp
Zmllci4KKyAgICAgICAgSXQgYWxzbyBhbGxvd3MgZm9yIHdyYXBwaW5nIGFuIGFib3J0IGNhbGxi
YWNrIGZ1bmN0aW9uIChpbiBjYXNlIGEgY29ubmVjdGlvbiBpcyBsb3N0LCBmb3IgZXhhbXBsZSku
CisgICAgICAgIEl0IGlzIHRlbXBsYXRlZCB0byBmbGV4aWJseSBoYW5kbGUgYW55IGNhbGxiYWNr
IGZ1bmN0aW9uIHNpZ25hdHVyZS4KKyAgICAgICAgKiBTaGFyZWQvQXN5bmNSZXF1ZXN0LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OmdlbmVyYXRlUmVxdWVzdElEKToKKyAgICAgICAgKFdl
YktpdDo6QXN5bmNSZXF1ZXN0OjpBc3luY1JlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpBc3lu
Y1JlcXVlc3Q6On5Bc3luY1JlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpBc3luY1JlcXVlc3Q6
OnNldEFib3J0SGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6OkFzeW5jUmVxdWVzdDo6cmVxdWVz
dEFib3J0ZWQpOgorICAgICAgICAoV2ViS2l0OjpBc3luY1JlcXVlc3Q6OmNsZWFyQWJvcnRIYW5k
bGVyKToKKyAgICAgICAgKiBTaGFyZWQvQXN5bmNSZXF1ZXN0Lmg6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpBc3luY1JlcXVlc3Q6OnJlcXVlc3RJRCk6CisgICAgICAgIChXZWJLaXQ6OkFzeW5j
UmVxdWVzdDo6cmVxdWVzdENvbXBsZXRlZCk6CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0RhdGFi
YXNlcy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYklEQlNlcnZlckNvbm5lY3Rpb246OmdldE9yRXN0YWJsaXNoSURCRGF0YWJhc2VNZXRh
ZGF0YSk6IFdyYXAgdGhlIGNvbXBsZXRpb24gaGFuZGxlciBpbiBhbgorICAgICAgICAgIEFzeW5j
UmVxdWVzdCBhbmQgc2F2ZSBvZmYgdGhlIHJlcXVlc3QgZm9yIGxhdGVyIHVzZS4KKyAgICAgICAg
KFdlYktpdDo6V2ViSURCU2VydmVyQ29ubmVjdGlvbjo6ZGlkR2V0T3JFc3RhYmxpc2hJREJEYXRh
YmFzZU1ldGFkYXRhKTogU2VuZCB0aGUgcmVzdWx0cyB0byB0aGUgQXN5bmNSZXF1ZXN0LgorICAg
ICAgICAqIFdlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJTZXJ2ZXJDb25uZWN0
aW9uLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNl
cnZlckNvbm5lY3Rpb24ubWVzc2FnZXMuaW46CisKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisKKzIwMTMtMTEtMjAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25A
YXBwbGUuY29tPgorCiAgICAgICAgIEFkZCBtb3JlIGluZnJhc3RydWN0dXJlIGZvciBTZXJ2ZXJD
b25uZWN0aW9uIGNvbW11bmljYXRpb24gYmV0d2VlbiBXZWIgYW5kIERhdGFiYXNlIHByb2Nlc3Nl
cwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0Njkz
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIv
RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFz
ZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uY3BwCmluZGV4
IDhjNGM4OTQuLjZjODI1YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJv
Y2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJD
b25uZWN0aW9uLmNwcApAQCAtNjQsMTMgKzY0LDEzIEBAIHZvaWQgRGF0YWJhc2VQcm9jZXNzSURC
Q29ubmVjdGlvbjo6ZXN0YWJsaXNoQ29ubmVjdGlvbihjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFt
CiAgICAgbV9tYWluRnJhbWVPcmlnaW4gPSBtYWluRnJhbWVPcmlnaW47CiB9CiAKLXZvaWQgRGF0
YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6Z2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFk
YXRhKCkKK3ZvaWQgRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6Z2V0T3JFc3RhYmxpc2hJ
REJEYXRhYmFzZU1ldGFkYXRhKHVpbnQ2NF90IHJlcXVlc3RJRCkKIHsKICAgICAvLyBGSVhNRTog
VGhpcyBtZXRob2QgaXMgc3VjY2Vzc2Z1bGx5IGNhbGxlZCBieSBtZXNzYWdpbmcgZnJvbSB0aGUg
V2ViUHJvY2VzcywgYW5kIGNhbGxzIGJhY2sgd2l0aCBkdW1teSBkYXRhLgogICAgIC8vIE5lZWRz
IHJlYWwgaW1wbGVtZW50YXRpb24uCiAKICAgICBJREJEYXRhYmFzZU1ldGFkYXRhIGRhdGE7Ci0g
ICAgc2VuZChNZXNzYWdlczo6V2ViSURCU2VydmVyQ29ubmVjdGlvbjo6RGlkR2V0T3JFc3RhYmxp
c2hJREJEYXRhYmFzZU1ldGFkYXRhKGZhbHNlLCBkYXRhKSk7CisgICAgc2VuZChNZXNzYWdlczo6
V2ViSURCU2VydmVyQ29ubmVjdGlvbjo6RGlkR2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFk
YXRhKHJlcXVlc3RJRCwgZmFsc2UsIGRhdGEpKTsKIH0KIAogQ29yZUlQQzo6Q29ubmVjdGlvbiog
RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRh
YmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uaAppbmRleCBhZDFkMzBi
Li45MzM1MzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5k
ZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24u
aApAQCAtNjAsNyArNjAsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gTWVzc2FnZSBoYW5kbGVycy4K
ICAgICB2b2lkIGVzdGFibGlzaENvbm5lY3Rpb24oY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUs
IGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3BlbmluZ09yaWdpbiwgY29uc3QgU2VjdXJpdHlP
cmlnaW5EYXRhJiBtYWluRnJhbWVPcmlnaW4pOwotICAgIHZvaWQgZ2V0T3JFc3RhYmxpc2hJREJE
YXRhYmFzZU1ldGFkYXRhKCk7CisgICAgdm9pZCBnZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0
YWRhdGEodWludDY0X3QgcmVxdWVzdElEKTsKIAogICAgIFJlZjxEYXRhYmFzZVRvV2ViUHJvY2Vz
c0Nvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKICAgICB1aW50NjRfdCBtX3NlcnZlckNvbm5lY3Rp
b25JZGVudGlmaWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNz
L0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLm1lc3NhZ2VzLmluIGIvU291
cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJD
b25uZWN0aW9uLm1lc3NhZ2VzLmluCmluZGV4IGRlNDU2MDYuLjQ4MzJmMzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNz
SURCQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVBy
b2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24ubWVzc2FnZXMuaW4K
QEAgLTI0LDcgKzI0LDcgQEAKIAogbWVzc2FnZXMgLT4gRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVj
dGlvbiBMZWdhY3lSZWNlaXZlciB7CiAgICAgRXN0YWJsaXNoQ29ubmVjdGlvbihXVEY6OlN0cmlu
ZyBkYXRhYmFzZU5hbWUsIFdlYktpdDo6U2VjdXJpdHlPcmlnaW5EYXRhIG9wZW5pbmdPcmlnaW4s
IFdlYktpdDo6U2VjdXJpdHlPcmlnaW5EYXRhIG1haW5GcmFtZU9yaWdpbikKLSAgICBHZXRPckVz
dGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEoKQorICAgIEdldE9yRXN0YWJsaXNoSURCRGF0YWJh
c2VNZXRhZGF0YSh1aW50NjRfdCByZXF1ZXN0SUQpCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXN5bmNSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9Bc3luY1JlcXVlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjNkYTgxNmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXN5bmNS
ZXF1ZXN0LmNwcApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkFzeW5jUmVxdWVzdC5oIgorCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVJlcXVlc3RJRCgp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBzdGF0aWMgdWludDY0X3QgcmVx
dWVzdElEID0gMDsKKyAgICByZXR1cm4gKytyZXF1ZXN0SUQ7Cit9CisKK0FzeW5jUmVxdWVzdDo6
QXN5bmNSZXF1ZXN0KCkKKyAgICA6IG1fcmVxdWVzdElEKGdlbmVyYXRlUmVxdWVzdElEKCkpCit7
Cit9CisKK0FzeW5jUmVxdWVzdDo6fkFzeW5jUmVxdWVzdCgpCit7CisgICAgQVNTRVJUKCFtX2Fi
b3J0SGFuZGxlcik7Cit9CisKK3ZvaWQgQXN5bmNSZXF1ZXN0OjpzZXRBYm9ydEhhbmRsZXIoc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+IGhhbmRsZXIpCit7CisgICAgbV9hYm9ydEhhbmRsZXIgPSBzdGQ6
Om1vdmUoaGFuZGxlcik7Cit9CisKK3ZvaWQgQXN5bmNSZXF1ZXN0OjpyZXF1ZXN0QWJvcnRlZCgp
Cit7CisgICAgaWYgKG1fYWJvcnRIYW5kbGVyKSB7CisgICAgICAgIG1fYWJvcnRIYW5kbGVyKCk7
CisgICAgICAgIG1fYWJvcnRIYW5kbGVyID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBjbGVhckNv
bXBsZXRpb25IYW5kbGVyKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0FzeW5jUmVxdWVzdC5oIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL0FzeW5jUmVxdWVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjMzNTYwNWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXN5bmNS
ZXF1ZXN0LmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIEFzeW5jUmVxdWVzdF9oCisj
ZGVmaW5lIEFzeW5jUmVxdWVzdF9oCisKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIEFzeW5jUmVxdWVzdCA6IHB1YmxpYyBSZWZDb3VudGVkPEFz
eW5jUmVxdWVzdD4geworcHVibGljOgorICAgIHZpcnR1YWwgfkFzeW5jUmVxdWVzdCgpOworCisg
ICAgdWludDY0X3QgcmVxdWVzdElEKCkgeyByZXR1cm4gbV9yZXF1ZXN0SUQ7IH0KKworICAgIHZv
aWQgc2V0QWJvcnRIYW5kbGVyKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPik7CisgICAgdm9pZCByZXF1
ZXN0QWJvcnRlZCgpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4gdm9pZCBy
ZXF1ZXN0Q29tcGxldGVkKEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cyk7CisKK3Byb3RlY3RlZDoK
KyAgICBBc3luY1JlcXVlc3QoKTsKKworICAgIHZpcnR1YWwgdm9pZCBjbGVhckNvbXBsZXRpb25I
YW5kbGVyKCkgPSAwOworCisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IG1fYWJvcnRIYW5kbGVy
OworCitwcml2YXRlOgorICAgIHVpbnQ2NF90IG1fcmVxdWVzdElEOworfTsKKwordGVtcGxhdGUg
PHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK2NsYXNzIEFzeW5jUmVxdWVzdEltcGwgRklOQUwgOiBw
dWJsaWMgQXN5bmNSZXF1ZXN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBc3lu
Y1JlcXVlc3Q+IGNyZWF0ZShzdGQ6OmZ1bmN0aW9uPHZvaWQgKEFyZ3VtZW50cy4uLik+IGNvbXBs
ZXRpb25IYW5kbGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBc3luY1Jl
cXVlc3RJbXBsPEFyZ3VtZW50cy4uLj4oY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIH5Bc3luY1JlcXVlc3RJbXBsKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9j
b21wbGV0aW9uSGFuZGxlcik7CisgICAgfQorCisgICAgdm9pZCByZXF1ZXN0Q29tcGxldGVkKEFy
Z3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIG1fY29tcGxldGlvbkhhbmRs
ZXIoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7CisgICAgICAgIG1fY29t
cGxldGlvbkhhbmRsZXIgPSBudWxscHRyOworICAgIH0KKworcHJpdmF0ZToKKyAgICBBc3luY1Jl
cXVlc3RJbXBsKHN0ZDo6ZnVuY3Rpb248dm9pZCAoQXJndW1lbnRzLi4uKT4gY29tcGxldGlvbkhh
bmRsZXIpCisgICAgICAgIDogbV9jb21wbGV0aW9uSGFuZGxlcihjb21wbGV0aW9uSGFuZGxlcikK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX2NvbXBsZXRpb25IYW5kbGVyKTsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXJDb21wbGV0aW9uSGFuZGxlcigpIE9WRVJSSURFCisgICAgewor
ICAgICAgICBtX2NvbXBsZXRpb25IYW5kbGVyID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBzdGQ6
OmZ1bmN0aW9uPHZvaWQgKEFyZ3VtZW50cy4uLik+IG1fY29tcGxldGlvbkhhbmRsZXI7Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+IHZvaWQgQXN5bmNSZXF1ZXN0OjpyZXF1
ZXN0Q29tcGxldGVkKEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKK3sKKyAgICBBc3luY1JlcXVl
c3RJbXBsPEFyZ3VtZW50cy4uLj4qIHJlcXVlc3QgPSBzdGF0aWNfY2FzdDxBc3luY1JlcXVlc3RJ
bXBsPEFyZ3VtZW50cy4uLj4qPih0aGlzKTsKKyAgICByZXF1ZXN0LT5yZXF1ZXN0Q29tcGxldGVk
KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIG1fYWJvcnRIYW5k
bGVyID0gbnVsbHB0cjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBB
c3luY1JlcXVlc3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGNkYjI2OTIuLjdjZjVkNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTUyOCw2ICs1MjgsOCBA
QAogCQk1MTUzNTY5QzEyOTFCMUQyMDAwNzQ5REMgLyogV2ViUGFnZUNvbnRleHRNZW51Q2xpZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNTM1
NjlBMTI5MUIxRDIwMDA3NDlEQyAvKiBXZWJQYWdlQ29udGV4dE1lbnVDbGllbnQuY3BwICovOyB9
OwogCQk1MTUzNTY5RDEyOTFCMUQyMDAwNzQ5REMgLyogV2ViUGFnZUNvbnRleHRNZW51Q2xpZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTUzNTY5
QjEyOTFCMUQyMDAwNzQ5REMgLyogV2ViUGFnZUNvbnRleHRNZW51Q2xpZW50LmggKi87IH07CiAJ
CTUxNTc4QjgzMTIwOUVDRUYwMEEzN0M0QSAvKiBXZWJEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTU3OEI4MjEyMDlFQ0VGMDBBMzdDNEEgLyog
V2ViRGF0YS5oICovOyB9OworCQk1MTVFNzcyNzE4M0RENkY2MDAwNzIwM0YgLyogQXN5bmNSZXF1
ZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
NUU3NzI1MTgzREQ2RjYwMDA3MjAzRiAvKiBBc3luY1JlcXVlc3QuY3BwICovOyB9OworCQk1MTVF
NzcyODE4M0RENkY2MDAwNzIwM0YgLyogQXN5bmNSZXF1ZXN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVFNzcyNjE4M0RENkY2MDAwNzIwM0YgLyog
QXN5bmNSZXF1ZXN0LmggKi87IH07CiAJCTUxNjBCRkUxMTMzODFERjkwMDkxODk5OSAvKiBMb2dn
aW5nLm1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxNjBCRkUwMTMzODFERjkwMDkxODk5OSAvKiBMb2dnaW5nLm1hYy5tbSAqLzsgfTsKIAkJNTE2
MzE5OTIxNjI4OTgwQTAwRTIyRjAwIC8qIE5ldHdvcmtQcm9jZXNzUHJveHlNYWMubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTYzMTk5MTE2Mjg5ODBB
MDBFMjJGMDAgLyogTmV0d29ya1Byb2Nlc3NQcm94eU1hYy5tbSAqLzsgfTsKIAkJNTE2MzE5OTQx
NjI4OUE2MDAwRTIyRjAwIC8qIE5ldHdvcmtQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUNDOTM0MTYyODA2
NDgwMDM0MjU1MCAvKiBOZXR3b3JrUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CkBA
IC0yMDQ3LDYgKzIwNDksOCBAQAogCQk1MTUzNTY5QTEyOTFCMUQyMDAwNzQ5REMgLyogV2ViUGFn
ZUNvbnRleHRNZW51Q2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdlYlBhZ2VDb250ZXh0TWVudUNsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxNTM1NjlCMTI5MUIxRDIwMDA3NDlEQyAvKiBXZWJQYWdlQ29udGV4dE1lbnVDbGll
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFnZUNvbnRleHRNZW51
Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNTc4QjgyMTIwOUVDRUYw
MEEzN0M0QSAvKiBXZWJEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE1RTc3MjUxODNERDZGNjAw
MDcyMDNGIC8qIEFzeW5jUmVxdWVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBBc3luY1JlcXVlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MTVFNzcyNjE4M0RENkY2MDAwNzIwM0YgLyogQXN5bmNSZXF1ZXN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEFzeW5jUmVxdWVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MTYwQkZFMDEzMzgxREY5MDA5MTg5OTkgLyogTG9nZ2luZy5tYWMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMb2dnaW5nLm1hYy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2MzE5OTExNjI4OTgwQTAwRTIyRjAwIC8qIE5ldHdv
cmtQcm9jZXNzUHJveHlNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5h
bWUgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5TWFjLm1tOyBwYXRoID0gbWFjL05ldHdvcmtQcm9jZXNz
UHJveHlNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNjdFRTlFMTcwMzc3
QkYwMDc2ODFDQSAvKiBEaXNrQ2FjaGVNb25pdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERpc2tDYWNoZU1vbml0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTMzMjksOCArMzMzMyw2IEBACiAJCQkJQkMxMTFCNUExMTJGNjI4MjAwMzM3QkFCIC8qIG1h
YyAqLywKIAkJCQk1MUE4QTYwRDE2MjdGMkFDMDAwRDkwRTkgLyogTmV0d29yayAqLywKIAkJCQkx
QUFFMDU4QzEyNzlEQ0Q0MDA4NTI0MTggLyogUGx1Z2lucyAqLywKLQkJCQlBN0Q3OTJENTE3NjdD
QjZFMDA4ODFDQkUgLyogQWN0aXZpdHlBc3NlcnRpb24uY3BwICovLAotCQkJCUE3RDc5MkQ0MTc2
N0NCMDkwMDg4MUNCRSAvKiBBY3Rpdml0eUFzc2VydGlvbi5oICovLAogCQkJCUJDNjQ2OTZEMTFE
QkU2MDMwMDY0NTVCMCAvKiBBUElBcnJheS5jcHAgKi8sCiAJCQkJQkM2NDY5NkUxMURCRTYwMzAw
NjQ1NUIwIC8qIEFQSUFycmF5LmggKi8sCiAJCQkJMUEzREQyMDUxMjVFNUEyRjAwNDUxNUU2IC8q
IEFQSUNsaWVudC5oICovLApAQCAtMzMzOCw2ICszMzQwLDEwIEBACiAJCQkJNUQ1MTg0NTQxM0JD
RjlDQzAwQzdGRjRBIC8qIEFQSUNsaWVudFRyYWl0cy5oICovLAogCQkJCUI2MzQwM0Y4MTQ5MTBE
NTcwMDEwNzBCNSAvKiBBUElPYmplY3QuY3BwICovLAogCQkJCUJDRjA0QzhDMTFGRjlCN0QwMEY4
NkE1OCAvKiBBUElPYmplY3QuaCAqLywKKwkJCQlBN0Q3OTJENTE3NjdDQjZFMDA4ODFDQkUgLyog
QWN0aXZpdHlBc3NlcnRpb24uY3BwICovLAorCQkJCUE3RDc5MkQ0MTc2N0NCMDkwMDg4MUNCRSAv
KiBBY3Rpdml0eUFzc2VydGlvbi5oICovLAorCQkJCTUxNUU3NzI1MTgzREQ2RjYwMDA3MjAzRiAv
KiBBc3luY1JlcXVlc3QuY3BwICovLAorCQkJCTUxNUU3NzI2MTgzREQ2RjYwMDA3MjAzRiAvKiBB
c3luY1JlcXVlc3QuaCAqLywKIAkJCQk0RjYwMTQzMDE1NUM1QTMyMDAxRkJERTAgLyogQmxvY2tp
bmdSZXNwb25zZU1hcC5oICovLAogCQkJCUJDRjE4NjM3MTY3RDA3MUUwMEExQTg1QSAvKiBDYWNo
ZU1vZGVsLmNwcCAqLywKIAkJCQlCQzMwNjVGOTEyNTkzNDRFMDBFNzEyNzggLyogQ2FjaGVNb2Rl
bC5oICovLApAQCAtNTUzNSw2ICs1NTQxLDcgQEAKIAkJCQkxQUE1NzVGQjE0OTZCNTI2MDBBNEVF
MDYgLyogRXZlbnREaXNwYXRjaGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTkwQzFGNDEyNjRG
RDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOTEw
MDcxMTI2Njc1QzQwMDE4NDJGNSAvKiBGaW5kSW5kaWNhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk1MTVFNzcyODE4M0RENkY2MDAwNzIwM0YgLyogQXN5bmNSZXF1ZXN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkzN0M0QzA4NzE4MTQ5QzVCMDAzNjg4QjkgLyogV0tCYWNrRm9yd2FyZExpc3RJdGVt
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTkxMDEwQTEyNjhDOENBMDAxODQyRjUgLyogRmluZElu
ZGljYXRvcldpbmRvdy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFODFEOEQxMzE5RjdFRjAwMjQx
OTEwIC8qIEZvbnRJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTcyNDksNiArNzI1Niw3IEBACiAJ
CQkJQkMxNERGOUUxMjBCNjM1RjAwODI2QzBDIC8qIFdLQnVuZGxlU2NyaXB0V29ybGQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkM0MDc1RjUxMjRGRjAyNzAwNjhGMjBBIC8qIFdLQ2VydGlmaWNh
dGVJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNDA3NjI4MTI0RkYwNDAwMDY4RjIwQSAv
KiBXS0NlcnRpZmljYXRlSW5mb01hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTUxNUU3NzI3MTgz
REQ2RjYwMDA3MjAzRiAvKiBBc3luY1JlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjAz
Njk3ODUxNUY0QkU2QjAwQzNBODBFIC8qIFdLQ29sb3JQaWNrZXJSZXN1bHRMaXN0ZW5lci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQ0EyODRENjE0OTJGMkM3MDAxRjkwNDIgLyogV0tDb25uZWN0
aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM0QTYyOTYxNDczMTNBMDAwNkM2ODFBIC8qIFdL
Q29ubmVjdGlvblJlZi5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJTZXJ2ZXJDb25uZWN0aW9u
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJ
REJTZXJ2ZXJDb25uZWN0aW9uLmNwcAppbmRleCA3ZmYwOWZjLi5hMzg1ZTJlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCU2Vy
dmVyQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFz
ZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24uY3BwCkBAIC0yOSw2ICsyOSw3IEBA
CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNFX1BST0NF
U1MpCiAKKyNpbmNsdWRlICJBc3luY1JlcXVlc3QuaCIKICNpbmNsdWRlICJEYXRhYmFzZVByb2Nl
c3NJREJDb25uZWN0aW9uTWVzc2FnZXMuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRvV2ViUHJvY2Vz
c0Nvbm5lY3Rpb25NZXNzYWdlcy5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luRGF0YS5oIgpA
QCAtODIsMTMgKzgzLDI1IEBAIHZvaWQgV2ViSURCU2VydmVyQ29ubmVjdGlvbjo6ZGVsZXRlRGF0
YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBCb29sQ2FsbGJhY2tGdW5jCiAKIHZvaWQgV2ViSURC
U2VydmVyQ29ubmVjdGlvbjo6Z2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRhKEdldElE
QkRhdGFiYXNlTWV0YWRhdGFGdW5jdGlvbiBjb21wbGV0aW9uQ2FsbGJhY2spCiB7Ci0gICAgLy8g
RklYTUU6IFNhdmUgdGhlIGNvbXBsZXRpb25DYWxsYmFjayB0byBwZXJmb3JtIHRoaXMgcmVxdWVz
dCBpcyBjb21wbGV0ZS4KLSAgICBzZW5kKE1lc3NhZ2VzOjpEYXRhYmFzZVByb2Nlc3NJREJDb25u
ZWN0aW9uOjpHZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEoKSk7CisgICAgUmVmUHRy
PEFzeW5jUmVxdWVzdD4gc2VydmVyUmVxdWVzdCA9IEFzeW5jUmVxdWVzdEltcGw8Y29uc3QgSURC
RGF0YWJhc2VNZXRhZGF0YSYsIGJvb2w+OjpjcmVhdGUoY29tcGxldGlvbkNhbGxiYWNrKTsKKwor
ICAgIHNlcnZlclJlcXVlc3QtPnNldEFib3J0SGFuZGxlcihbY29tcGxldGlvbkNhbGxiYWNrXSgp
IHsKKyAgICAgICAgSURCRGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YTsKKyAgICAgICAgY29tcGxl
dGlvbkNhbGxiYWNrKG1ldGFkYXRhLCBmYWxzZSk7CisgICAgfSk7CisKKyAgICB1aW50NjRfdCBy
ZXF1ZXN0SUQgPSBzZXJ2ZXJSZXF1ZXN0LT5yZXF1ZXN0SUQoKTsKKyAgICBtX3NlcnZlclJlcXVl
c3RzLnNldChyZXF1ZXN0SUQsIHNlcnZlclJlcXVlc3QucmVsZWFzZSgpKTsKKworICAgIHNlbmQo
TWVzc2FnZXM6OkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246OkdldE9yRXN0YWJsaXNoSURC
RGF0YWJhc2VNZXRhZGF0YShyZXF1ZXN0SUQpKTsKIH0KIAotdm9pZCBXZWJJREJTZXJ2ZXJDb25u
ZWN0aW9uOjpkaWRHZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEoYm9vbCwgY29uc3Qg
SURCRGF0YWJhc2VNZXRhZGF0YSYpCit2b2lkIFdlYklEQlNlcnZlckNvbm5lY3Rpb246OmRpZEdl
dE9yRXN0YWJsaXNoSURCRGF0YWJhc2VNZXRhZGF0YSh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wg
c3VjY2VzcywgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpCiB7Ci0gICAgLy8g
RklYTUU6IExvb2t1cCB0aGUgYXBwcm9wcmlhdGUgY29tcGxldGlvbkNhbGxiYWNrIHRvIHBlcmZv
cm0gd2l0aCB0aGVzZSByZXN1bHRzLgorICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHNlcnZlclJl
cXVlc3QgPSBtX3NlcnZlclJlcXVlc3RzLnRha2UocmVxdWVzdElEKTsKKyAgICBBU1NFUlQoc2Vy
dmVyUmVxdWVzdCk7CisKKyAgICBzZXJ2ZXJSZXF1ZXN0LT5yZXF1ZXN0Q29tcGxldGVkKG1ldGFk
YXRhLCBzdWNjZXNzKTsKIH0KIAogdm9pZCBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpjbG9zZSgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVk
REIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9E
YXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24uaAppbmRleCA3ZTUwZGI5
Li45NTc2ODM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNl
cy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJTZXJ2ZXJDb25uZWN0aW9uLmgK
QEAgLTM1LDYgKzM1LDggQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIEFzeW5jUmVx
dWVzdDsKKwogY2xhc3MgV2ViSURCU2VydmVyQ29ubmVjdGlvbiBGSU5BTCA6IHB1YmxpYyBXZWJD
b3JlOjpJREJTZXJ2ZXJDb25uZWN0aW9uLCBwdWJsaWMgQ29yZUlQQzo6TWVzc2FnZVNlbmRlciB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViSURCU2VydmVyQ29ubmVjdGlvbj4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbiYgb3BlbmluZ09yaWdpbiwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4mIG1h
aW5GcmFtZU9yaWdpbik7CkBAIC05MSwxMyArOTMsMTUgQEAgcHJpdmF0ZToKICAgICAvLyBDb3Jl
SVBDOjpNZXNzYWdlU2VuZGVyCiAgICAgdmlydHVhbCBDb3JlSVBDOjpDb25uZWN0aW9uKiBtZXNz
YWdlU2VuZGVyQ29ubmVjdGlvbigpIE9WRVJSSURFOwogCi0gICAgdm9pZCBkaWRHZXRPckVzdGFi
bGlzaElEQkRhdGFiYXNlTWV0YWRhdGEoYm9vbCBzdWNjZXNzLCBjb25zdCBXZWJDb3JlOjpJREJE
YXRhYmFzZU1ldGFkYXRhJik7CisgICAgdm9pZCBkaWRHZXRPckVzdGFibGlzaElEQkRhdGFiYXNl
TWV0YWRhdGEodWludDY0X3QgcmVxdWVzdElELCBib29sIHN1Y2Nlc3MsIGNvbnN0IFdlYkNvcmU6
OklEQkRhdGFiYXNlTWV0YWRhdGEmKTsKIAogICAgIHVpbnQ2NF90IG1fc2VydmVyQ29ubmVjdGlv
bklkZW50aWZpZXI7CiAKICAgICBTdHJpbmcgbV9kYXRhYmFzZU5hbWU7CiAgICAgUmVmPFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luPiBtX29wZW5pbmdPcmlnaW47CiAgICAgUmVmPFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luPiBtX21haW5GcmFtZU9yaWdpbjsKKworICAgIEhhc2hNYXA8dWludDY0X3Qs
IFJlZlB0cjxBc3luY1JlcXVlc3Q+PiBtX3NlcnZlclJlcXVlc3RzOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFi
YXNlcy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJTZXJ2ZXJDb25u
ZWN0aW9uLm1lc3NhZ2VzLmluCmluZGV4IDIzYTA4ZmQuLmI5NDdiN2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJTZXJ2ZXJD
b25uZWN0aW9uLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0
YWJhc2VzL0luZGV4ZWREQi9XZWJJREJTZXJ2ZXJDb25uZWN0aW9uLm1lc3NhZ2VzLmluCkBAIC0y
Myw3ICsyMyw3IEBACiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJMRShEQVRB
QkFTRV9QUk9DRVNTKQogCiBtZXNzYWdlcyAtPiBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uIExlZ2Fj
eVJlY2VpdmVyIHsKLSAgICBEaWRHZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEoYm9v
bCBzdWNjZXNzLCBXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKQorICAgIERp
ZEdldE9yRXN0YWJsaXNoSURCRGF0YWJhc2VNZXRhZGF0YSh1aW50NjRfdCByZXF1ZXN0SUQsIGJv
b2wgc3VjY2VzcywgV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YSkKIH0KIAog
I2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJP
Q0VTUykK
</data>
<flag name="review"
          id="240753"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>