<?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>142710</bug_id>
          
          <creation_ts>2015-03-15 02:54:30 -0700</creation_ts>
          <short_desc>[Content Filtering] Adopt new NEFilterSource SPI</short_desc>
          <delta_ts>2015-03-15 22:44:36 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>128858</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andy Estes">aestes</reporter>
          <assigned_to name="Andy Estes">aestes</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>kling</cc>
    
    <cc>mitz</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1077232</commentid>
    <comment_count>0</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2015-03-15 02:54:30 -0700</bug_when>
    <thetext>[Content Filtering] Adopt new NEFilterSource SPI</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077233</commentid>
    <comment_count>1</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2015-03-15 02:55:05 -0700</bug_when>
    <thetext>rdar://problem/19023855</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077234</commentid>
    <comment_count>2</comment_count>
      <attachid>248676</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2015-03-15 03:24:52 -0700</bug_when>
    <thetext>Created attachment 248676
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077235</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-15 03:27:49 -0700</bug_when>
    <thetext>Attachment 248676 did not pass style-queue:


ERROR: Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.mm:77:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.mm:85:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.mm:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.mm:117:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.mm:131:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.mm:135:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 6 in 5 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>1077306</commentid>
    <comment_count>4</comment_count>
      <attachid>248676</attachid>
    <who name="">mitz</who>
    <bug_when>2015-03-15 19:27:14 -0700</bug_when>
    <thetext>Comment on attachment 248676
Patch

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

&gt; Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.h:30
&gt; +#include &lt;objc/NSObjCRuntime.h&gt;

What is this used for here?

&gt; Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.mm:44
&gt; +static inline NSData *decisionInfoReplacementData(NSDictionary *decisionInfo)

I’d call this replacementDataFromDecisionInfo, but that’s just a matter of taste.

&gt; Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.mm:85
&gt; +    [m_neFilterSource receivedResponse:response.nsURLResponse() decisionHandler:^(NEFilterSourceStatus status, NSDictionary *decisionInfo) {

I think we prefer to use lambdas in C++ code, because it makes captures explicit.

&gt; Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.mm:99
&gt; +    dispatch_release(m_queue);
&gt; +    dispatch_release(m_semaphore);

Can we use OSObjectPtr for these things so that we don’t have to manage them manually?

&gt; Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.mm:118
&gt; +    [m_neFilterSource receivedData:copiedData.get() decisionHandler:^(NEFilterSourceStatus status, NSDictionary *decisionInfo) {
&gt; +        handleDecision(status, decisionInfoReplacementData(decisionInfo));
&gt; +    }];
&gt; +#else
&gt; +    [m_neFilterSource addData:copiedData.get() withCompletionQueue:m_queue completionHandler:^(NEFilterSourceStatus status, NSData *replacementData) {
&gt; +        handleDecision(status, replacementData);

Same comment about lambdas vs. blocks.

&gt; Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.mm:137
&gt; +    [m_neFilterSource finishedLoadingWithDecisionHandler:^(NEFilterSourceStatus status, NSDictionary *decisionInfo) {
&gt; +        handleDecision(status, decisionInfoReplacementData(decisionInfo));
&gt;      }];
&gt; +#else
&gt; +    [m_neFilterSource dataCompleteWithCompletionQueue:m_queue completionHandler:^(NEFilterSourceStatus status, NSData *replacementData) {
&gt; +        handleDecision(status, replacementData);
&gt; +    }];

Ditto.

&gt; Source/WebCore/platform/spi/cocoa/NEFilterSourceSPI.h:26
&gt; +#define HAVE_MODERN_NE_FILTER_SOURCE (PLATFORM(MAC) &amp;&amp; __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101100) || (PLATFORM(IOS) &amp;&amp; __IPHONE_OS_VERSION_MIN_REQUIRED &gt;= 90000)

Hopefully we can retire this macro before modern becomes old.

&gt; Source/WebCore/platform/spi/cocoa/NEFilterSourceSPI.h:49
&gt; +@interface NEFilterSource (LegacyDetails)

Even though this class is SPI, best practice is for categories added by WebKit to be prefixed with Web (or WK).

&gt; Source/WebCore/platform/spi/cocoa/NEFilterSourceSPI.h:63
&gt; +@interface NEFilterSource (ModernDetails)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077329</commentid>
    <comment_count>5</comment_count>
      <attachid>248676</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2015-03-15 21:59:26 -0700</bug_when>
    <thetext>Comment on attachment 248676
Patch

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

&gt;&gt; Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.h:30
&gt;&gt; +#include &lt;objc/NSObjCRuntime.h&gt;
&gt; 
&gt; What is this used for here?

For NSInteger.

&gt;&gt; Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.mm:85
&gt;&gt; +    [m_neFilterSource receivedResponse:response.nsURLResponse() decisionHandler:^(NEFilterSourceStatus status, NSDictionary *decisionInfo) {
&gt; 
&gt; I think we prefer to use lambdas in C++ code, because it makes captures explicit.

Ok, I&apos;ll do that.

&gt;&gt; Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.mm:99
&gt;&gt; +    dispatch_release(m_semaphore);
&gt; 
&gt; Can we use OSObjectPtr for these things so that we don’t have to manage them manually?

I had no idea this class existed! I can and will use it.

&gt;&gt; Source/WebCore/platform/spi/cocoa/NEFilterSourceSPI.h:49
&gt;&gt; +@interface NEFilterSource (LegacyDetails)
&gt; 
&gt; Even though this class is SPI, best practice is for categories added by WebKit to be prefixed with Web (or WK).

You&apos;re right. I&apos;ll change this. I&apos;ve also updated our document on using SPI in WebKit to reflect this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077344</commentid>
    <comment_count>6</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2015-03-15 22:44:36 -0700</bug_when>
    <thetext>Committed r181523: &lt;http://trac.webkit.org/changeset/181523&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248676</attachid>
            <date>2015-03-15 03:24:52 -0700</date>
            <delta_ts>2015-03-15 19:27:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142710-20150315032424.patch</filename>
            <type>text/plain</type>
            <size>15581</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxNDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODRiYzQxZWY5ZTk5MDlk
ZTRhMDA5M2QwNmNmMTU1YmVhNWNhZWI5Ni4uYTVhMGQzZmYxM2EyZTRmNWFhZWZkNmU4NjJmMmVi
MjVhYzA2ZTkwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDE1LTAzLTE1ICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29udGVudCBGaWx0ZXJpbmdd
IEFkb3B0IG5ldyBORUZpbHRlclNvdXJjZSBTUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjcxMAorICAgICAgICByZGFyOi8vcHJvYmxlbS8xOTAy
Mzg1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRl
YWNoIE5ldHdvcmtFeHRlbnNpb25Db250ZW50RmlsdGVyIHRvIHVzZSBhIG5ldywgYWx0ZXJuYXRl
IE5FRmlsdGVyU291cmNlIFNQSSBvbiBwbGF0Zm9ybXMgd2hlcmUgaXQgaXMgYXZhaWxhYmxlLgor
CisgICAgICAgICogcGxhdGZvcm0vQ29udGVudEZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RmlsdGVyOjp0eXBlcyk6IFJlbmFtZWQgSEFWRShORV9GSUxURVJfU09VUkNFKSB0
byBIQVZFKE5FVFdPUktfRVhURU5TSU9OKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9OZXR3
b3JrRXh0ZW5zaW9uQ29udGVudEZpbHRlci5oOiBSZW5hbWVkIG1lbWJlciB2YXJpYWJsZXMgdG8g
cmVtb3ZlIHJlZHVuZGFuY3ksIGZvcndhcmQtZGVjbGFyZWQgTkVGaWx0ZXJTb3VyY2VTdGF0dXMs
CisgICAgICAgIGFkZGVkIGEgZGlzcGF0Y2hfc2VtYXBob3JlIG1lbWJlciB2YXJpYWJsZSB0byBh
dm9pZCBjcmVhdGluZyBhbmQgZGVzdHJveWluZyBtdWx0aXBsZSBzZW1hcGhvcmVzLCBhbmQgbWFk
ZSBtX29yaWdpbmFsRGF0YSBhIFNoYXJlZEJ1ZmZlci4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2Nv
YS9OZXR3b3JrRXh0ZW5zaW9uQ29udGVudEZpbHRlci5tbToKKyAgICAgICAgKGRlY2lzaW9uSW5m
b1JlcGxhY2VtZW50RGF0YSk6IFJldHVybmVkIHRoZSByZXBsYWNlbWVudCBkYXRhIGZyb20gYSBk
ZWNpc2lvbiBoYW5kbGVyIGluZm8gZGljdGlvbmFyeS4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZU5FRmlsdGVyU291cmNlKTogQ3JlYXRlZCBlaXRoZXIgYW4gb2xkLXN0eWxlIG9yIG5ldy1zdHls
ZSBORUZpbHRlclNvdXJjZSBvYmplY3QuCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrRXh0ZW5z
aW9uQ29udGVudEZpbHRlcjo6TmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXIpOiBDYWxsZWQg
cmVjZWl2ZWRSZXNwb25zZTpkZWNpc2lvbkhhbmRsZXI6IHdoZW4gdXNpbmcgdGhlIG5ldyBTUEku
CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrRXh0ZW5zaW9uQ29udGVudEZpbHRlcjo6fk5ldHdv
cmtFeHRlbnNpb25Db250ZW50RmlsdGVyKTogUmVsZWFzZWQgdGhlIGRpc3BhdGNoX3NlbWFwaG9y
ZS4KKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtFeHRlbnNpb25Db250ZW50RmlsdGVyOjphZGRE
YXRhKTogQXBwZW5kZWQgdGhlIGNvcGllZCBOU0RhdGEgdG8gbV9vcmlnaW5hbERhdGEsIGF2b2lk
aW5nIGFuIGFkZGl0aW9uYWwgY29weSBwcmV2aW91c2x5CisgICAgICAgIGJlaW5nIG1hZGUgYnkg
TlNNdXRhYmxlRGF0YS4gVXNlZCB0aGUgbmV3IHJlY2VpdmVkRGF0YTpkZWNpc2lvbkhhbmRsZXI6
IFNQSSB3aGVuIGFwcHJvcHJpYXRlLgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya0V4dGVuc2lv
bkNvbnRlbnRGaWx0ZXI6OmZpbmlzaGVkQWRkaW5nRGF0YSk6IFVzZWQgdGhlIG5ldyBmaW5pc2hl
ZExvYWRpbmdXaXRoRGVjaXNpb25IYW5kbGVyOiBTUEkgd2hlbiBhcHByb3ByaWF0ZS4KKyAgICAg
ICAgKFdlYkNvcmU6Ok5ldHdvcmtFeHRlbnNpb25Db250ZW50RmlsdGVyOjpuZWVkc01vcmVEYXRh
KTogQ2hhbmdlZCBtX25lRmlsdGVyU291cmNlU3RhdHVzIHRvIG1fc3RhdHVzLgorICAgICAgICAo
V2ViQ29yZTo6TmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXI6OmRpZEJsb2NrRGF0YSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXI6Omdl
dFJlcGxhY2VtZW50RGF0YSk6IFJldHVybmVkIHRoZSByZXBsYWNlbWVudCBkYXRhIGZyb20gTkVG
aWx0ZXJTb3VyY2UgaWYgdGhlIGxvYWQgd2FzIGJsb2NrZWQuCisgICAgICAgIE90aGVyd2lzZSwg
cmV0dXJuZWQgdGhlIG9yaWdpbmFsIGRhdGEuCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrRXh0
ZW5zaW9uQ29udGVudEZpbHRlcjo6aGFuZGxlRGVjaXNpb24pOiBBZGRlZCBhIGhlbHBlciB0byBz
ZXQgbV9zdGF0dXMgYW5kIG1fcmVwbGFjZW1lbnREYXRhLCBhbmQgdG8gc2lnbmFsIG1fc2VtYXBo
b3JlLgorICAgICAgICAqIHBsYXRmb3JtL3NwaS9jb2NvYS9ORUZpbHRlclNvdXJjZVNQSS5oOiBE
ZWNsYXJlZCB0aGUgbmV3IE5FRmlsdGVyU291cmNlIFNQSSBvbiBwbGF0Zm9ybXMgdGhhdCBzdXBw
b3J0IGl0LgorCiAyMDE1LTAzLTEzICBUaW1vdGh5IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFw
cGxlLmNvbT4KIAogICAgICAgICBTaXRlcyB0aGF0IHVzZSBhIGRldmljZS13aWR0aCB2aWV3cG9y
dCBidXQgZG9uJ3QgaGF2ZSBlbm91Z2ggaGVpZ2h0IHRvIGZpbGwgdGhlIHZpZXcgYXJlIHNjYWxl
ZCB1cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGVudEZpbHRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db250ZW50RmlsdGVyLmNwcAppbmRleCA5MWY5
ZGIyZGZkYjhjNWJhZDQ2NGIxZmY4MDZlNmE0Y2E3NmExOTkxLi43ZDVjMmQzOTBlNmIxMmZmZGZi
MGY0ZTM5MDZkNzJhZDZkYzIzYzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Db250ZW50RmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db250ZW50
RmlsdGVyLmNwcApAQCAtNDAsNyArNDAsNyBAQCBWZWN0b3I8Q29udGVudEZpbHRlcjo6VHlwZT4m
IENvbnRlbnRGaWx0ZXI6OnR5cGVzKCkKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVjdG9y
PENvbnRlbnRGaWx0ZXI6OlR5cGU+PiB0eXBlcyB7CiAgICAgICAgIFZlY3RvcjxDb250ZW50Rmls
dGVyOjpUeXBlPiB7CiAgICAgICAgICAgICB0eXBlPFBhcmVudGFsQ29udHJvbHNDb250ZW50Rmls
dGVyPigpLAotI2lmIEhBVkUoTkVfRklMVEVSX1NPVVJDRSkKKyNpZiBIQVZFKE5FVFdPUktfRVhU
RU5TSU9OKQogICAgICAgICAgICAgdHlwZTxOZXR3b3JrRXh0ZW5zaW9uQ29udGVudEZpbHRlcj4o
KQogI2VuZGlmCiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL05ldHdvcmtFeHRlbnNpb25Db250ZW50RmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9OZXR3b3JrRXh0ZW5zaW9uQ29udGVudEZpbHRlci5oCmluZGV4IDQ2NDA3
NjIwOTk3ZWUzZjcyOWUxMWIyZTY3OGM5NDZkZjZlN2JkZjYuLjEzZWYyOWVlOTcwOWU5NTIzZjFj
NjliMTk3MjdmY2QzNDg3ZDgwMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL05ldHdvcmtFeHRlbnNpb25Db250ZW50RmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvTmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXIuaApAQCAtMjcs
MTYgKzI3LDI0IEBACiAjZGVmaW5lIE5ldHdvcmtFeHRlbnNpb25Db250ZW50RmlsdGVyX2gKIAog
I2luY2x1ZGUgIkNvbnRlbnRGaWx0ZXIuaCIKKyNpbmNsdWRlIDxvYmpjL05TT2JqQ1J1bnRpbWUu
aD4KICNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgogCi0jZGVmaW5lIEhBVkVfTkVfRklMVEVSX1NPVVJDRSBU
QVJHRVRfT1NfRU1CRURERUQgfHwgKCFUQVJHRVRfT1NfSVBIT05FICYmIF9fTUFDX09TX1hfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMDAwICYmIENQVShYODZfNjQpKQorI2RlZmluZSBIQVZF
X05FVFdPUktfRVhURU5TSU9OIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19N
QUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEwMDAgJiYgQ1BVKFg4Nl82NCkpCisK
K2VudW0gTkVGaWx0ZXJTb3VyY2VTdGF0dXMgOiBOU0ludGVnZXI7CiAKIE9CSkNfQ0xBU1MgTkVG
aWx0ZXJTb3VyY2U7CitPQkpDX0NMQVNTIE5TRGF0YTsKK09CSkNfQ0xBU1MgTlNEaWN0aW9uYXJ5
OwogT0JKQ19DTEFTUyBOU011dGFibGVEYXRhOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Ns
YXNzIFNoYXJlZEJ1ZmZlcjsKKwogY2xhc3MgTmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXIg
ZmluYWwgOiBwdWJsaWMgQ29udGVudEZpbHRlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0
ZXIpOwpAQCAtNTYsMTEgKzY0LDE0IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBleHBsaWNp
dCBOZXR3b3JrRXh0ZW5zaW9uQ29udGVudEZpbHRlcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7
CisgICAgdm9pZCBoYW5kbGVEZWNpc2lvbihORUZpbHRlclNvdXJjZVN0YXR1cywgTlNEYXRhICpy
ZXBsYWNlbWVudERhdGEpOwogCi0gICAgbG9uZyBtX25lRmlsdGVyU291cmNlU3RhdHVzOworICAg
IE5FRmlsdGVyU291cmNlU3RhdHVzIG1fc3RhdHVzOworICAgIGRpc3BhdGNoX3F1ZXVlX3QgbV9x
dWV1ZTsKKyAgICBkaXNwYXRjaF9zZW1hcGhvcmVfdCBtX3NlbWFwaG9yZTsKKyAgICBSZWY8U2hh
cmVkQnVmZmVyPiBtX29yaWdpbmFsRGF0YTsKKyAgICBSZXRhaW5QdHI8TlNEYXRhPiBtX3JlcGxh
Y2VtZW50RGF0YTsKICAgICBSZXRhaW5QdHI8TkVGaWx0ZXJTb3VyY2U+IG1fbmVGaWx0ZXJTb3Vy
Y2U7Ci0gICAgZGlzcGF0Y2hfcXVldWVfdCBtX25lRmlsdGVyU291cmNlUXVldWU7Ci0gICAgUmV0
YWluUHRyPE5TTXV0YWJsZURhdGE+IG1fb3JpZ2luYWxEYXRhOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvTmV0
d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9OZXR3b3JrRXh0ZW5zaW9uQ29udGVudEZpbHRlci5tbQppbmRleCA2MzY4OWNjM2E1Mjky
M2QwOGQ5MDM2YWMxMmEyMGY5NmVmYTYxYjFiLi4zMDViMjZkYzNiMzYxMzY0NjdjNzYwMmM5OTNh
MTZiOGJkYzg2OTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9O
ZXR3b3JrRXh0ZW5zaW9uQ29udGVudEZpbHRlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9OZXR3b3JrRXh0ZW5zaW9uQ29udGVudEZpbHRlci5tbQpAQCAtMjYsMTYgKzI2
LDI5IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIk5ldHdvcmtFeHRlbnNpb25Db250
ZW50RmlsdGVyLmgiCiAKLSNpZiBIQVZFKE5FX0ZJTFRFUl9TT1VSQ0UpCisjaWYgSEFWRShORVRX
T1JLX0VYVEVOU0lPTikKIAogI2ltcG9ydCAiTkVGaWx0ZXJTb3VyY2VTUEkuaCIKICNpbXBvcnQg
IlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgogI2ltcG9ydCAi
U29mdExpbmtpbmcuaCIKICNpbXBvcnQgPG9iamMvcnVudGltZS5oPgogCiBTT0ZUX0xJTktfRlJB
TUVXT1JLKE5ldHdvcmtFeHRlbnNpb24pOwogU09GVF9MSU5LX0NMQVNTKE5ldHdvcmtFeHRlbnNp
b24sIE5FRmlsdGVyU291cmNlKTsKIAorI2lmIEhBVkUoTU9ERVJOX05FX0ZJTFRFUl9TT1VSQ0Up
CisvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzIwMTY1NjY0PiBFeHBvc2UgZGVjaXNpb25IYW5k
bGVyIGRpY3Rpb25hcnkga2V5cyBhcyBOU1N0cmluZyBjb25zdGFudHMgaW4gTkVGaWx0ZXJTb3Vy
Y2UuaAorc3RhdGljIE5TU3RyaW5nICogY29uc3Qgb3B0aW9uc1BhZ2VEYXRhID0gQCJQYWdlRGF0
YSI7CisKK3N0YXRpYyBpbmxpbmUgTlNEYXRhICpkZWNpc2lvbkluZm9SZXBsYWNlbWVudERhdGEo
TlNEaWN0aW9uYXJ5ICpkZWNpc2lvbkluZm8pCit7CisgICAgaWQgcmVwbGFjZW1lbnREYXRhID0g
ZGVjaXNpb25JbmZvW29wdGlvbnNQYWdlRGF0YV07CisgICAgQVNTRVJUKCFyZXBsYWNlbWVudERh
dGEgfHwgW3JlcGxhY2VtZW50RGF0YSBpc0tpbmRPZkNsYXNzOltOU0RhdGEgY2xhc3NdXSk7Cisg
ICAgcmV0dXJuIHJlcGxhY2VtZW50RGF0YTsKK30KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGJvb2wgTmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXI6OmNhbkhhbmRsZVJlc3Bv
bnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQpAQCAtNDgsODAgKzYxLDEwNyBA
QCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXI+IE5ldHdvcmtF
eHRlbnNpb25Db250ZW50RmlsdGVyOjpjcgogICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPE5l
dHdvcmtFeHRlbnNpb25Db250ZW50RmlsdGVyPihyZXNwb25zZSk7CiB9CiAKK3N0YXRpYyBpbmxp
bmUgUmV0YWluUHRyPE5FRmlsdGVyU291cmNlPiBjcmVhdGVORUZpbHRlclNvdXJjZShjb25zdCBV
UkwmIHVybCwgZGlzcGF0Y2hfcXVldWVfdCBkZWNpc2lvblF1ZXVlKQoreworI2lmIEhBVkUoTU9E
RVJOX05FX0ZJTFRFUl9TT1VSQ0UpCisgICAgVU5VU0VEX1BBUkFNKHVybCk7CisgICAgcmV0dXJu
IGFkb3B0TlMoW2FsbG9jTkVGaWx0ZXJTb3VyY2VJbnN0YW5jZSgpIGluaXRXaXRoRGVjaXNpb25R
dWV1ZTpkZWNpc2lvblF1ZXVlXSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShkZWNpc2lvblF1
ZXVlKTsKKyAgICByZXR1cm4gYWRvcHROUyhbYWxsb2NORUZpbHRlclNvdXJjZUluc3RhbmNlKCkg
aW5pdFdpdGhVUkw6dXJsIGRpcmVjdGlvbjpORUZpbHRlclNvdXJjZURpcmVjdGlvbkluYm91bmQg
c29ja2V0SWRlbnRpZmllcjowXSk7CisjZW5kaWYKK30KKwogTmV0d29ya0V4dGVuc2lvbkNvbnRl
bnRGaWx0ZXI6Ok5ldHdvcmtFeHRlbnNpb25Db250ZW50RmlsdGVyKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlKQotICAgIDogbV9uZUZpbHRlclNvdXJjZVN0YXR1cyB7IE5FRmlsdGVy
U291cmNlU3RhdHVzTmVlZHNNb3JlRGF0YSB9Ci0gICAgLCBtX25lRmlsdGVyU291cmNlIHsgYWRv
cHROUyhbYWxsb2NORUZpbHRlclNvdXJjZUluc3RhbmNlKCkgaW5pdFdpdGhVUkw6W3Jlc3BvbnNl
Lm5zVVJMUmVzcG9uc2UoKSBVUkxdIGRpcmVjdGlvbjpORUZpbHRlclNvdXJjZURpcmVjdGlvbklu
Ym91bmQgc29ja2V0SWRlbnRpZmllcjowXSkgfQotICAgICwgbV9uZUZpbHRlclNvdXJjZVF1ZXVl
IHsgZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJjb20uYXBwbGUuV2ViQ29yZS5ORUZpbHRlclNvdXJj
ZVF1ZXVlIiwgRElTUEFUQ0hfUVVFVUVfU0VSSUFMKSB9CisgICAgOiBtX3N0YXR1cyB7IE5FRmls
dGVyU291cmNlU3RhdHVzTmVlZHNNb3JlRGF0YSB9CisgICAgLCBtX3F1ZXVlIHsgZGlzcGF0Y2hf
cXVldWVfY3JlYXRlKCJjb20uYXBwbGUuV2ViQ29yZS5ORUZpbHRlclNvdXJjZVF1ZXVlIiwgRElT
UEFUQ0hfUVVFVUVfU0VSSUFMKSB9CisgICAgLCBtX3NlbWFwaG9yZSB7IGRpc3BhdGNoX3NlbWFw
aG9yZV9jcmVhdGUoMCkgfQorICAgICwgbV9vcmlnaW5hbERhdGEgeyAqU2hhcmVkQnVmZmVyOjpj
cmVhdGUoKSB9CisgICAgLCBtX25lRmlsdGVyU291cmNlIHsgY3JlYXRlTkVGaWx0ZXJTb3VyY2Uo
cmVzcG9uc2UudXJsKCksIG1fcXVldWUpIH0KIHsKICAgICBBU1NFUlQoW2dldE5FRmlsdGVyU291
cmNlQ2xhc3MoKSBmaWx0ZXJSZXF1aXJlZF0pOwogCi0gICAgbG9uZyBsb25nIGV4cGVjdGVkQ29u
dGVudFNpemUgPSBbcmVzcG9uc2UubnNVUkxSZXNwb25zZSgpIGV4cGVjdGVkQ29udGVudExlbmd0
aF07Ci0gICAgaWYgKGV4cGVjdGVkQ29udGVudFNpemUgPCAwKQotICAgICAgICBtX29yaWdpbmFs
RGF0YSA9IGFkb3B0TlMoW1tOU011dGFibGVEYXRhIGFsbG9jXSBpbml0XSk7Ci0gICAgZWxzZQot
ICAgICAgICBtX29yaWdpbmFsRGF0YSA9IGFkb3B0TlMoW1tOU011dGFibGVEYXRhIGFsbG9jXSBp
bml0V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKWV4cGVjdGVkQ29udGVudFNpemVdKTsKKyNpZiBI
QVZFKE1PREVSTl9ORV9GSUxURVJfU09VUkNFKQorICAgIFttX25lRmlsdGVyU291cmNlIHJlY2Vp
dmVkUmVzcG9uc2U6cmVzcG9uc2UubnNVUkxSZXNwb25zZSgpIGRlY2lzaW9uSGFuZGxlcjpeKE5F
RmlsdGVyU291cmNlU3RhdHVzIHN0YXR1cywgTlNEaWN0aW9uYXJ5ICpkZWNpc2lvbkluZm8pIHsK
KyAgICAgICAgaGFuZGxlRGVjaXNpb24oc3RhdHVzLCBkZWNpc2lvbkluZm9SZXBsYWNlbWVudERh
dGEoZGVjaXNpb25JbmZvKSk7CisgICAgfV07CisKKyAgICAvLyBGSVhNRTogV2UgaGF2ZSB0byBi
bG9jayBoZXJlIHNpbmNlIERvY3VtZW50TG9hZGVyIGV4cGVjdHMgdG8gaGF2ZSBhCisgICAgLy8g
YmxvY2tlZC9ub3QgYmxvY2tlZCBhbnN3ZXIgZnJvbSB0aGUgZmlsdGVyIGltbWVkaWF0ZWx5IGFm
dGVyIGNhbGxpbmcKKyAgICAvLyBhZGREYXRhKCkuIFdlIHNob3VsZCBmaW5kIGEgd2F5IHRvIG1h
a2UgdGhpcyBhc3luY2hyb25vdXMuCisgICAgZGlzcGF0Y2hfc2VtYXBob3JlX3dhaXQobV9zZW1h
cGhvcmUsIERJU1BBVENIX1RJTUVfRk9SRVZFUik7CisjZW5kaWYKIH0KIAogTmV0d29ya0V4dGVu
c2lvbkNvbnRlbnRGaWx0ZXI6On5OZXR3b3JrRXh0ZW5zaW9uQ29udGVudEZpbHRlcigpCiB7Ci0g
ICAgZGlzcGF0Y2hfcmVsZWFzZShtX25lRmlsdGVyU291cmNlUXVldWUpOworICAgIGRpc3BhdGNo
X3JlbGVhc2UobV9xdWV1ZSk7CisgICAgZGlzcGF0Y2hfcmVsZWFzZShtX3NlbWFwaG9yZSk7CiB9
CiAKIHZvaWQgTmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXI6OmFkZERhdGEoY29uc3QgY2hh
ciogZGF0YSwgaW50IGxlbmd0aCkKIHsKKyAgICBSZXRhaW5QdHI8TlNEYXRhPiBjb3BpZWREYXRh
IHsgW05TRGF0YSBkYXRhV2l0aEJ5dGVzOih2b2lkKilkYXRhIGxlbmd0aDpsZW5ndGhdIH07CisK
ICAgICAvLyBGSVhNRTogTkVGaWx0ZXJTb3VyY2UgZG9lc24ndCBidWZmZXIgZGF0YSBsaWtlIFdl
YkZpbHRlckV2YWx1YXRvciBkb2VzLAogICAgIC8vIHNvIHdlIG5lZWQgdG8gZG8gaXQgb3Vyc2Vs
dmVzIHNvIGdldFJlcGxhY2VtZW50RGF0YSgpIGNhbiByZXR1cm4gdGhlCiAgICAgLy8gb3JpZ2lu
YWwgYnl0ZXMgYmFjayB0byB0aGUgbG9hZGVyLiBXZSBzaG91bGQgZmluZCBhIHdheSB0byByZW1v
dmUgdGhpcwogICAgIC8vIGFkZGl0aW9uYWwgY29weS4KLSAgICBbbV9vcmlnaW5hbERhdGEgYXBw
ZW5kQnl0ZXM6ZGF0YSBsZW5ndGg6bGVuZ3RoXTsKKyAgICBtX29yaWdpbmFsRGF0YS0+YXBwZW5k
KChDRkRhdGFSZWYpY29waWVkRGF0YS5nZXQoKSk7CiAKLSAgICBkaXNwYXRjaF9zZW1hcGhvcmVf
dCBuZUZpbHRlclNvdXJjZVNlbWFwaG9yZSA9IGRpc3BhdGNoX3NlbWFwaG9yZV9jcmVhdGUoMCk7
Ci0gICAgW21fbmVGaWx0ZXJTb3VyY2UgYWRkRGF0YTpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6KHZv
aWQqKWRhdGEgbGVuZ3RoOmxlbmd0aF0gd2l0aENvbXBsZXRpb25RdWV1ZTptX25lRmlsdGVyU291
cmNlUXVldWUgY29tcGxldGlvbkhhbmRsZXI6XihORUZpbHRlclNvdXJjZVN0YXR1cyBzdGF0dXMs
IE5TRGF0YSAqKSB7Ci0gICAgICAgIG1fbmVGaWx0ZXJTb3VyY2VTdGF0dXMgPSBzdGF0dXM7Ci0g
ICAgICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9zaWduYWwobmVGaWx0ZXJTb3VyY2VTZW1hcGhvcmUp
OworI2lmIEhBVkUoTU9ERVJOX05FX0ZJTFRFUl9TT1VSQ0UpCisgICAgW21fbmVGaWx0ZXJTb3Vy
Y2UgcmVjZWl2ZWREYXRhOmNvcGllZERhdGEuZ2V0KCkgZGVjaXNpb25IYW5kbGVyOl4oTkVGaWx0
ZXJTb3VyY2VTdGF0dXMgc3RhdHVzLCBOU0RpY3Rpb25hcnkgKmRlY2lzaW9uSW5mbykgeworICAg
ICAgICBoYW5kbGVEZWNpc2lvbihzdGF0dXMsIGRlY2lzaW9uSW5mb1JlcGxhY2VtZW50RGF0YShk
ZWNpc2lvbkluZm8pKTsKKyAgICB9XTsKKyNlbHNlCisgICAgW21fbmVGaWx0ZXJTb3VyY2UgYWRk
RGF0YTpjb3BpZWREYXRhLmdldCgpIHdpdGhDb21wbGV0aW9uUXVldWU6bV9xdWV1ZSBjb21wbGV0
aW9uSGFuZGxlcjpeKE5FRmlsdGVyU291cmNlU3RhdHVzIHN0YXR1cywgTlNEYXRhICpyZXBsYWNl
bWVudERhdGEpIHsKKyAgICAgICAgaGFuZGxlRGVjaXNpb24oc3RhdHVzLCByZXBsYWNlbWVudERh
dGEpOwogICAgIH1dOworI2VuZGlmCiAKICAgICAvLyBGSVhNRTogV2UgaGF2ZSB0byBibG9jayBo
ZXJlIHNpbmNlIERvY3VtZW50TG9hZGVyIGV4cGVjdHMgdG8gaGF2ZSBhCiAgICAgLy8gYmxvY2tl
ZC9ub3QgYmxvY2tlZCBhbnN3ZXIgZnJvbSB0aGUgZmlsdGVyIGltbWVkaWF0ZWx5IGFmdGVyIGNh
bGxpbmcKICAgICAvLyBhZGREYXRhKCkuIFdlIHNob3VsZCBmaW5kIGEgd2F5IHRvIG1ha2UgdGhp
cyBhc3luY2hyb25vdXMuCi0gICAgZGlzcGF0Y2hfc2VtYXBob3JlX3dhaXQobmVGaWx0ZXJTb3Vy
Y2VTZW1hcGhvcmUsIERJU1BBVENIX1RJTUVfRk9SRVZFUik7Ci0gICAgZGlzcGF0Y2hfcmVsZWFz
ZShuZUZpbHRlclNvdXJjZVNlbWFwaG9yZSk7CisgICAgZGlzcGF0Y2hfc2VtYXBob3JlX3dhaXQo
bV9zZW1hcGhvcmUsIERJU1BBVENIX1RJTUVfRk9SRVZFUik7CiB9CiAKIHZvaWQgTmV0d29ya0V4
dGVuc2lvbkNvbnRlbnRGaWx0ZXI6OmZpbmlzaGVkQWRkaW5nRGF0YSgpCiB7Ci0gICAgZGlzcGF0
Y2hfc2VtYXBob3JlX3QgbmVGaWx0ZXJTb3VyY2VTZW1hcGhvcmUgPSBkaXNwYXRjaF9zZW1hcGhv
cmVfY3JlYXRlKDApOwotICAgIFttX25lRmlsdGVyU291cmNlIGRhdGFDb21wbGV0ZVdpdGhDb21w
bGV0aW9uUXVldWU6bV9uZUZpbHRlclNvdXJjZVF1ZXVlIGNvbXBsZXRpb25IYW5kbGVyOl4oTkVG
aWx0ZXJTb3VyY2VTdGF0dXMgc3RhdHVzLCBOU0RhdGEgKikgewotICAgICAgICBtX25lRmlsdGVy
U291cmNlU3RhdHVzID0gc3RhdHVzOwotICAgICAgICBkaXNwYXRjaF9zZW1hcGhvcmVfc2lnbmFs
KG5lRmlsdGVyU291cmNlU2VtYXBob3JlKTsKKyNpZiBIQVZFKE1PREVSTl9ORV9GSUxURVJfU09V
UkNFKQorICAgIFttX25lRmlsdGVyU291cmNlIGZpbmlzaGVkTG9hZGluZ1dpdGhEZWNpc2lvbkhh
bmRsZXI6XihORUZpbHRlclNvdXJjZVN0YXR1cyBzdGF0dXMsIE5TRGljdGlvbmFyeSAqZGVjaXNp
b25JbmZvKSB7CisgICAgICAgIGhhbmRsZURlY2lzaW9uKHN0YXR1cywgZGVjaXNpb25JbmZvUmVw
bGFjZW1lbnREYXRhKGRlY2lzaW9uSW5mbykpOwogICAgIH1dOworI2Vsc2UKKyAgICBbbV9uZUZp
bHRlclNvdXJjZSBkYXRhQ29tcGxldGVXaXRoQ29tcGxldGlvblF1ZXVlOm1fcXVldWUgY29tcGxl
dGlvbkhhbmRsZXI6XihORUZpbHRlclNvdXJjZVN0YXR1cyBzdGF0dXMsIE5TRGF0YSAqcmVwbGFj
ZW1lbnREYXRhKSB7CisgICAgICAgIGhhbmRsZURlY2lzaW9uKHN0YXR1cywgcmVwbGFjZW1lbnRE
YXRhKTsKKyAgICB9XTsKKyNlbmRpZgogCiAgICAgLy8gRklYTUU6IFdlIGhhdmUgdG8gYmxvY2sg
aGVyZSBzaW5jZSBEb2N1bWVudExvYWRlciBleHBlY3RzIHRvIGhhdmUgYQogICAgIC8vIGJsb2Nr
ZWQvbm90IGJsb2NrZWQgYW5zd2VyIGZyb20gdGhlIGZpbHRlciBpbW1lZGlhdGVseSBhZnRlciBj
YWxsaW5nCiAgICAgLy8gZmluaXNoZWRBZGRpbmdEYXRhKCkuIFdlIHNob3VsZCBmaW5kIGEgd2F5
IHRvIG1ha2UgdGhpcyBhc3luY2hyb25vdXMuCi0gICAgZGlzcGF0Y2hfc2VtYXBob3JlX3dhaXQo
bmVGaWx0ZXJTb3VyY2VTZW1hcGhvcmUsIERJU1BBVENIX1RJTUVfRk9SRVZFUik7Ci0gICAgZGlz
cGF0Y2hfcmVsZWFzZShuZUZpbHRlclNvdXJjZVNlbWFwaG9yZSk7CisgICAgZGlzcGF0Y2hfc2Vt
YXBob3JlX3dhaXQobV9zZW1hcGhvcmUsIERJU1BBVENIX1RJTUVfRk9SRVZFUik7CiB9CiAKIGJv
b2wgTmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXI6Om5lZWRzTW9yZURhdGEoKSBjb25zdAog
ewotICAgIHJldHVybiBtX25lRmlsdGVyU291cmNlU3RhdHVzID09IE5FRmlsdGVyU291cmNlU3Rh
dHVzTmVlZHNNb3JlRGF0YTsKKyAgICByZXR1cm4gbV9zdGF0dXMgPT0gTkVGaWx0ZXJTb3VyY2VT
dGF0dXNOZWVkc01vcmVEYXRhOwogfQogCiBib29sIE5ldHdvcmtFeHRlbnNpb25Db250ZW50Rmls
dGVyOjpkaWRCbG9ja0RhdGEoKSBjb25zdAogewotICAgIHJldHVybiBtX25lRmlsdGVyU291cmNl
U3RhdHVzID09IE5FRmlsdGVyU291cmNlU3RhdHVzQmxvY2s7CisgICAgcmV0dXJuIG1fc3RhdHVz
ID09IE5FRmlsdGVyU291cmNlU3RhdHVzQmxvY2s7CiB9CiAKIGNvbnN0IGNoYXIqIE5ldHdvcmtF
eHRlbnNpb25Db250ZW50RmlsdGVyOjpnZXRSZXBsYWNlbWVudERhdGEoaW50JiBsZW5ndGgpIGNv
bnN0CiB7CiAgICAgaWYgKGRpZEJsb2NrRGF0YSgpKSB7Ci0gICAgICAgIGxlbmd0aCA9IDA7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBsZW5ndGggPSBbbV9yZXBsYWNlbWVudERh
dGEgbGVuZ3RoXTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihbbV9y
ZXBsYWNlbWVudERhdGEgYnl0ZXNdKTsKICAgICB9CiAKLSAgICBsZW5ndGggPSBbbV9vcmlnaW5h
bERhdGEgbGVuZ3RoXTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KFttX29y
aWdpbmFsRGF0YSBieXRlc10pOworICAgIGxlbmd0aCA9IG1fb3JpZ2luYWxEYXRhLT5zaXplKCk7
CisgICAgcmV0dXJuIG1fb3JpZ2luYWxEYXRhLT5kYXRhKCk7CiB9CiAKIENvbnRlbnRGaWx0ZXJV
bmJsb2NrSGFuZGxlciBOZXR3b3JrRXh0ZW5zaW9uQ29udGVudEZpbHRlcjo6dW5ibG9ja0hhbmRs
ZXIoKSBjb25zdApAQCAtMTI5LDYgKzE2OSwxNCBAQCBDb250ZW50RmlsdGVyVW5ibG9ja0hhbmRs
ZXIgTmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXI6OnVuYmxvY2tIYW5kbGVyKCkgY29ucwog
ICAgIHJldHVybiB7IH07CiB9CiAKK3ZvaWQgTmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXI6
OmhhbmRsZURlY2lzaW9uKE5FRmlsdGVyU291cmNlU3RhdHVzIHN0YXR1cywgTlNEYXRhICpyZXBs
YWNlbWVudERhdGEpCit7CisgICAgbV9zdGF0dXMgPSBzdGF0dXM7CisgICAgaWYgKHN0YXR1cyA9
PSBORUZpbHRlclNvdXJjZVN0YXR1c0Jsb2NrKQorICAgICAgICBtX3JlcGxhY2VtZW50RGF0YSA9
IHJlcGxhY2VtZW50RGF0YTsKKyAgICBkaXNwYXRjaF9zZW1hcGhvcmVfc2lnbmFsKG1fc2VtYXBo
b3JlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gSEFWRShORV9G
SUxURVJfU09VUkNFKQorI2VuZGlmIC8vIEhBVkUoTkVUV09SS19FWFRFTlNJT04pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvY29jb2EvTkVGaWx0ZXJTb3VyY2VTUEku
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9ORUZpbHRlclNvdXJjZVNQSS5o
CmluZGV4IDdlMGI1MTJjOTQzYWI3ZDQ4NDMwOWQ0MjRjNzJhNjJlMDMwMGRmM2MuLjdhMDQ0YjFh
NzFiN2IxMDQxNjVlYzJjNWZhMzc5NmUxZTRlYjdmYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9ORUZpbHRlclNvdXJjZVNQSS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9ORUZpbHRlclNvdXJjZVNQSS5oCkBAIC0yMyw2ICsy
Myw4IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2RlZmlu
ZSBIQVZFX01PREVSTl9ORV9GSUxURVJfU09VUkNFIChQTEFURk9STShNQUMpICYmIF9fTUFDX09T
X1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMTAwKSB8fCAoUExBVEZPUk0oSU9TKSAmJiBf
X0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSA5MDAwMCkKKwogI2lmIFVTRShBUFBM
RV9JTlRFUk5BTF9TREspCiAKICNpbXBvcnQgPE5ldHdvcmtFeHRlbnNpb24vTkVGaWx0ZXJTb3Vy
Y2UuaD4KQEAgLTQ0LDcgKzQ2LDcgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgTkVGaWx0
ZXJTb3VyY2VEaXJlY3Rpb24pIHsKIEBpbnRlcmZhY2UgTkVGaWx0ZXJTb3VyY2UgOiBOU09iamVj
dAogQGVuZAogCi1AaW50ZXJmYWNlIE5FRmlsdGVyU291cmNlIChEZXRhaWxzKQorQGludGVyZmFj
ZSBORUZpbHRlclNvdXJjZSAoTGVnYWN5RGV0YWlscykKICsgKEJPT0wpZmlsdGVyUmVxdWlyZWQ7
CiAtIChpZClpbml0V2l0aFVSTDooTlNVUkwgKil1cmwgZGlyZWN0aW9uOihORUZpbHRlclNvdXJj
ZURpcmVjdGlvbilkaXJlY3Rpb24gc29ja2V0SWRlbnRpZmllcjoodWludDY0X3Qpc29ja2V0SWRl
bnRpZmllcjsKIC0gKHZvaWQpYWRkRGF0YTooTlNEYXRhICopZGF0YSB3aXRoQ29tcGxldGlvblF1
ZXVlOihkaXNwYXRjaF9xdWV1ZV90KXF1ZXVlIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShO
RUZpbHRlclNvdXJjZVN0YXR1cywgTlNEYXRhICopKWNvbXBsZXRpb25IYW5kbGVyOwpAQCAtNTUs
NCArNTcsMTcgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgTkVGaWx0ZXJTb3VyY2VEaXJl
Y3Rpb24pIHsKIEBwcm9wZXJ0eSAocmVhZG9ubHkpIHVpbnQ2NF90IHNvY2tldElkZW50aWZpZXI7
CiBAZW5kCiAKKyNpZiBIQVZFKE1PREVSTl9ORV9GSUxURVJfU09VUkNFKQordHlwZWRlZiB2b2lk
ICheTkVGaWx0ZXJTb3VyY2VEZWNpc2lvbkhhbmRsZXIpKE5FRmlsdGVyU291cmNlU3RhdHVzLCBO
U0RpY3Rpb25hcnkgKik7CisKK0BpbnRlcmZhY2UgTkVGaWx0ZXJTb3VyY2UgKE1vZGVybkRldGFp
bHMpCistIChpZClpbml0V2l0aERlY2lzaW9uUXVldWU6KGRpc3BhdGNoX3F1ZXVlX3QpcXVldWU7
CistICh2b2lkKXdpbGxTZW5kUmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdCBkZWNpc2lv
bkhhbmRsZXI6KE5FRmlsdGVyU291cmNlRGVjaXNpb25IYW5kbGVyKWRlY2lzaW9uSGFuZGxlcjsK
Ky0gKHZvaWQpcmVjZWl2ZWRSZXNwb25zZTooTlNVUkxSZXNwb25zZSAqKXJlc3BvbnNlIGRlY2lz
aW9uSGFuZGxlcjooTkVGaWx0ZXJTb3VyY2VEZWNpc2lvbkhhbmRsZXIpZGVjaXNpb25IYW5kbGVy
OworLSAodm9pZClyZWNlaXZlZERhdGE6KE5TRGF0YSAqKWRhdGEgZGVjaXNpb25IYW5kbGVyOihO
RUZpbHRlclNvdXJjZURlY2lzaW9uSGFuZGxlcilkZWNpc2lvbkhhbmRsZXI7CistICh2b2lkKWZp
bmlzaGVkTG9hZGluZ1dpdGhEZWNpc2lvbkhhbmRsZXI6KE5FRmlsdGVyU291cmNlRGVjaXNpb25I
YW5kbGVyKWRlY2lzaW9uSGFuZGxlcjsKKy0gKHZvaWQpcmVtZWRpYXRlV2l0aERlY2lzaW9uSGFu
ZGxlcjooTkVGaWx0ZXJTb3VyY2VEZWNpc2lvbkhhbmRsZXIpZGVjaXNpb25IYW5kbGVyOworQGVu
ZAorI2VuZGlmCisKICNlbmRpZgo=
</data>
<flag name="review"
          id="273549"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>