<?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>143783</bug_id>
          
          <creation_ts>2015-04-15 10:27:01 -0700</creation_ts>
          <short_desc>Network Cache: Inline small body data to record file</short_desc>
          <delta_ts>2015-04-18 07:20:50 -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>Page Loading</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1085567</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-15 10:27:01 -0700</bug_when>
    <thetext>We currently save all body data as separate files. We can improve space efficiency and do less reads by inlining smaller resources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085590</commentid>
    <comment_count>1</comment_count>
      <attachid>250824</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-15 10:58:48 -0700</bug_when>
    <thetext>Created attachment 250824
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085591</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-15 11:00:13 -0700</bug_when>
    <thetext>Attachment 250824 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannel.h:47:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannel.h:48:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannel.h:49:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:82:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:99:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:109:  Extra space before ( in function call  [whitespace/parens] [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>1085592</commentid>
    <comment_count>3</comment_count>
      <attachid>250824</attachid>
    <who name="Pratik Solanki">psolanki</who>
    <bug_when>2015-04-15 11:04:23 -0700</bug_when>
    <thetext>Comment on attachment 250824
patch

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

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:497
&gt; +    const size_t maximumInlineBodySize = 16 &lt;&lt; 10;

Not sure what the preferred style is but writing this as 16 * 1024 would be clearer to me than the bitshift.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085630</commentid>
    <comment_count>4</comment_count>
      <attachid>250824</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-04-15 12:29:14 -0700</bug_when>
    <thetext>Comment on attachment 250824
patch

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

r=me

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:349
&gt; +        return { };

Slight preference for &quot;return Nullopt;&quot;

&gt;&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:497
&gt;&gt; +    const size_t maximumInlineBodySize = 16 &lt;&lt; 10;
&gt; 
&gt; Not sure what the preferred style is but writing this as 16 * 1024 would be clearer to me than the bitshift.

I agree with Pratik here.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:516
&gt; +        bool storeAsBlob = shouldStoreBodyAsBlob(write.record.body);

shouldStoreAsBlob as per our boolean variable naming coding style?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085636</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-15 12:56:39 -0700</bug_when>
    <thetext>https://trac.webkit.org/r182856</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086548</commentid>
    <comment_count>6</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2015-04-18 07:20:50 -0700</bug_when>
    <thetext>&lt;rdar://problem/20578464&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250824</attachid>
            <date>2015-04-15 10:58:48 -0700</date>
            <delta_ts>2015-04-15 12:29:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>disk-cache-small-inline.patch</filename>
            <type>text/plain</type>
            <size>17372</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mjg0NSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDE1LTA0LTE1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBOZXR3b3JrIENhY2hlOiBJbmxp
bmUgc21hbGwgYm9keSBkYXRhIHRvIHJlY29yZCBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDM3ODMKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBjdXJyZW50bHkgc2F2ZSBhbGwgYm9keSBkYXRh
IGFzIHNlcGFyYXRlIGZpbGVzLiBXZSBjYW4gaW1wcm92ZSBzcGFjZSBlZmZpY2llbmN5IGFuZCBk
byBsZXNzIHJlYWRzIGFuZCB3cml0ZXMKKyAgICAgICAgYnkgaW5saW5pbmcgc21hbGxlciByZXNv
dXJjZSBib2RpZXMgd2l0aCB0aGUgaGVhZGVyLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6SU9DaGFubmVsOjpyZWFkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpJT0NoYW5uZWw6OnJlYWRTeW5jKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpJT0NoYW5uZWw6OndyaXRlKToKKworICAgICAgICAgICAgQWRkIFdvcmtRdWV1ZSBhcmd1bWVu
dCB0byBhbGxvdyBzcGVjaWZ5aW5nIHdoaWNoIHF1ZXVlIHRoZSByZXN1bHQgaXMgc3VibWl0dGVk
IHRvLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFn
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZGVjb2RlUmVjb3JkTWV0YURh
dGEpOgorCisgICAgICAgICAgICBBZGQgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUg
Ym9keSBpcyBpbmxpbmVkLgorCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZGVjb2Rl
UmVjb3JkSGVhZGVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpk
ZWNvZGVSZWNvcmQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmVuY29kZVJlY29y
ZE1ldGFEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpzdG9y
ZUJvZHlBc0Jsb2IpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OmVu
Y29kZVJlY29yZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6ZGlz
cGF0Y2hSZWFkT3BlcmF0aW9uKToKKworICAgICAgICAgICAgUmVhZCB0aGUgcmVjb3JkIGZpcnN0
LCB0aGVuIHJlYWQgdGhlIGJsb2IgaWYgbmVlZGVkLgorICAgICAgICAgICAgU3VibWl0IHRoZSBy
ZWFkIG9wZXJhdGlvbiBkaXJlY3RseSBmcm9tIHRoZSBtYWluIHF1ZXVlLiBPbmx5IHRoaW5nIHdl
IGRvIGlzIG9wZW5pbmcgYW4gSU8gY2hhbm5lbAorICAgICAgICAgICAgYW5kIHRoYXQgdXNlcyBP
X05PTkJMT0NLLgorICAgICAgICAgICAgUHJvY2VzcyB0aGUgcmVhZCByZXN1bHRzIGluIHRoZSBJ
TyB3b3JrIHF1ZXVlIHdoZXJlIHdlIG5vdyBkbyB0aGUgYmxvYiByZXRyaWV2YWwuCisKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpzaG91bGRTdG9yZUJvZHlBc0Jsb2IpOgorCisgICAg
ICAgICAgICBUaGUgY3VycmVudCB0aHJlc2hvbGQgZm9yIHNhdmluZyBhIHNlcGFyYXRlIGJsb2Ig
aXMgMTZLQi4KKworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OmRpc3Bh
dGNoV3JpdGVPcGVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3Jh
Z2U6OnRyYXZlcnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpjcmVhdGVSZWNv
cmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmVuY29kZVJlY29y
ZEhlYWRlcik6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3RvcmFnZS5oOgorCiAyMDE1LTA0LTE0ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNj
YUBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBjcmVhdGluZyBzZW5kIHJpZ2h0cyBmcm9tIHNo
YXJlZCBtZW1vcnkgbW9yZSByb2J1c3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbC5oCShyZXZp
c2lvbiAxODI4NDApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVJT0NoYW5uZWwuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lu
Y2x1ZGUgIk5ldHdvcmtDYWNoZURhdGEuaCIKICNpbmNsdWRlIDxmdW5jdGlvbmFsPgogI2luY2x1
ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7
CkBAIC00MSw5ICs0MiwxMSBAQCBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBUeXBlIHsgUmVhZCwg
V3JpdGUsIENyZWF0ZSB9OwogICAgIHN0YXRpYyBSZWY8SU9DaGFubmVsPiBvcGVuKGNvbnN0IFN0
cmluZyYgZmlsZSwgVHlwZSk7CiAKLSAgICB2b2lkIHJlYWQoc2l6ZV90IG9mZnNldCwgc2l6ZV90
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKERhdGEmLCBpbnQgZXJyb3IpPik7Ci0gICAgdm9pZCByZWFk
U3luYyhzaXplX3Qgb2Zmc2V0LCBzaXplX3QsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoRGF0YSYsIGlu
dCBlcnJvcik+KTsKLSAgICB2b2lkIHdyaXRlKHNpemVfdCBvZmZzZXQsIGNvbnN0IERhdGEmLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKGludCBlcnJvcik+KTsKKyAgICAvLyBVc2luZyBudWxscHRyIGFz
IHF1ZXVlIHN1Ym1pdHMgdGhlIHJlc3VsdCB0byB0aGUgbWFpbiBxdWV1ZS4KKyAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGFkZCBXb3JrUXVldWU6Om1haW4oKSBpbnN0ZWFkLgorICAgIHZvaWQgcmVh
ZChzaXplX3Qgb2Zmc2V0LCBzaXplX3QsIFdvcmtRdWV1ZSosIHN0ZDo6ZnVuY3Rpb248dm9pZCAo
RGF0YSYsIGludCBlcnJvcik+KTsKKyAgICB2b2lkIHJlYWRTeW5jKHNpemVfdCBvZmZzZXQsIHNp
emVfdCwgV29ya1F1ZXVlKiwgc3RkOjpmdW5jdGlvbjx2b2lkIChEYXRhJiwgaW50IGVycm9yKT4p
OworICAgIHZvaWQgd3JpdGUoc2l6ZV90IG9mZnNldCwgY29uc3QgRGF0YSYsIFdvcmtRdWV1ZSos
IHN0ZDo6ZnVuY3Rpb248dm9pZCAoaW50IGVycm9yKT4pOwogCiAgICAgY29uc3QgU3RyaW5nJiBw
YXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxDb2NvYS5tbQko
cmV2aXNpb24gMTgyODQwKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlSU9DaGFubmVsQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTc5LDExICs3
OSwxMiBAQCBSZWY8SU9DaGFubmVsPiBJT0NoYW5uZWw6Om9wZW4oY29uc3QgU3RyCiAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgSU9DaGFubmVsKGZpbGVQYXRoLCB0eXBlKSk7CiB9CiAKLXZvaWQg
SU9DaGFubmVsOjpyZWFkKHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLCBzdGQ6OmZ1bmN0aW9u
PHZvaWQgKERhdGEmLCBpbnQgZXJyb3IpPiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgSU9DaGFu
bmVsOjpyZWFkKHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLCBXb3JrUXVldWUqIHF1ZXVlLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKERhdGEmLCBpbnQgZXJyb3IpPiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBSZWZQdHI8SU9DaGFubmVsPiBjaGFubmVsKHRoaXMpOwogICAgIGJvb2wgZGlkQ2Fs
bENvbXBsZXRpb25IYW5kbGVyID0gZmFsc2U7Ci0gICAgZGlzcGF0Y2hfaW9fcmVhZChtX2Rpc3Bh
dGNoSU8uZ2V0KCksIG9mZnNldCwgc2l6ZSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW2No
YW5uZWwsIGNvbXBsZXRpb25IYW5kbGVyLCBkaWRDYWxsQ29tcGxldGlvbkhhbmRsZXJdKGJvb2wg
ZG9uZSwgZGlzcGF0Y2hfZGF0YV90IGZpbGVEYXRhLCBpbnQgZXJyb3IpIG11dGFibGUgeworICAg
IGF1dG8gZGlzcGF0Y2hRdWV1ZSA9IHF1ZXVlID8gcXVldWUtPmRpc3BhdGNoUXVldWUoKSA6IGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCk7CisgICAgZGlzcGF0Y2hfaW9fcmVhZChtX2Rpc3BhdGNo
SU8uZ2V0KCksIG9mZnNldCwgc2l6ZSwgZGlzcGF0Y2hRdWV1ZSwgW2NoYW5uZWwsIGNvbXBsZXRp
b25IYW5kbGVyLCBkaWRDYWxsQ29tcGxldGlvbkhhbmRsZXJdKGJvb2wgZG9uZSwgZGlzcGF0Y2hf
ZGF0YV90IGZpbGVEYXRhLCBpbnQgZXJyb3IpIG11dGFibGUgewogICAgICAgICBBU1NFUlRfVU5V
U0VEKGRvbmUsIGRvbmUgfHwgIWRpZENhbGxDb21wbGV0aW9uSGFuZGxlcik7CiAgICAgICAgIGlm
IChkaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgICAgICByZXR1cm47CkBAIC05NSwy
MSArOTYsMjIgQEAgdm9pZCBJT0NoYW5uZWw6OnJlYWQoc2l6ZV90IG9mZnNldCwgc2l6ZQogfQog
CiAvLyBGSVhNRTogSXQgd291bGQgYmUgYmV0dGVyIHRvIGRvIHdpdGhvdXQgdGhpcy4KLXZvaWQg
SU9DaGFubmVsOjpyZWFkU3luYyhzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgc3RkOjpmdW5j
dGlvbjx2b2lkIChEYXRhJiwgaW50IGVycm9yKT4gY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIElP
Q2hhbm5lbDo6cmVhZFN5bmMoc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsIFdvcmtRdWV1ZSog
cXVldWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoRGF0YSYsIGludCBlcnJvcik+IGNvbXBsZXRpb25I
YW5kbGVyKQogewogICAgIGF1dG8gc2VtYXBob3JlID0gYWRvcHREaXNwYXRjaChkaXNwYXRjaF9z
ZW1hcGhvcmVfY3JlYXRlKDApKTsKLSAgICByZWFkKG9mZnNldCwgc2l6ZSwgW3NlbWFwaG9yZSwg
JmNvbXBsZXRpb25IYW5kbGVyXShEYXRhJiBkYXRhLCBpbnQgZXJyb3IpIHsKKyAgICByZWFkKG9m
ZnNldCwgc2l6ZSwgcXVldWUsIFtzZW1hcGhvcmUsICZjb21wbGV0aW9uSGFuZGxlcl0oRGF0YSYg
ZGF0YSwgaW50IGVycm9yKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGRhdGEsIGVycm9y
KTsKICAgICAgICAgZGlzcGF0Y2hfc2VtYXBob3JlX3NpZ25hbChzZW1hcGhvcmUuZ2V0KCkpOwog
ICAgIH0pOwogICAgIGRpc3BhdGNoX3NlbWFwaG9yZV93YWl0KHNlbWFwaG9yZS5nZXQoKSwgRElT
UEFUQ0hfVElNRV9GT1JFVkVSKTsKIH0KIAotdm9pZCBJT0NoYW5uZWw6OndyaXRlKHNpemVfdCBv
ZmZzZXQsIGNvbnN0IERhdGEmIGRhdGEsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoaW50IGVycm9yKT4g
Y29tcGxldGlvbkhhbmRsZXIpCit2b2lkIElPQ2hhbm5lbDo6d3JpdGUoc2l6ZV90IG9mZnNldCwg
Y29uc3QgRGF0YSYgZGF0YSwgV29ya1F1ZXVlKiBxdWV1ZSwgc3RkOjpmdW5jdGlvbjx2b2lkIChp
bnQgZXJyb3IpPiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBSZWZQdHI8SU9DaGFubmVsPiBj
aGFubmVsKHRoaXMpOwogICAgIGF1dG8gZGlzcGF0Y2hEYXRhID0gZGF0YS5kaXNwYXRjaERhdGEo
KTsKLSAgICBkaXNwYXRjaF9pb193cml0ZShtX2Rpc3BhdGNoSU8uZ2V0KCksIG9mZnNldCwgZGlz
cGF0Y2hEYXRhLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbY2hhbm5lbCwgY29tcGxldGlv
bkhhbmRsZXJdKGJvb2wgZG9uZSwgZGlzcGF0Y2hfZGF0YV90IGZpbGVEYXRhLCBpbnQgZXJyb3Ip
IHsKKyAgICBhdXRvIGRpc3BhdGNoUXVldWUgPSBxdWV1ZSA/IHF1ZXVlLT5kaXNwYXRjaFF1ZXVl
KCkgOiBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpOworICAgIGRpc3BhdGNoX2lvX3dyaXRlKG1f
ZGlzcGF0Y2hJTy5nZXQoKSwgb2Zmc2V0LCBkaXNwYXRjaERhdGEsIGRpc3BhdGNoUXVldWUsIFtj
aGFubmVsLCBjb21wbGV0aW9uSGFuZGxlcl0oYm9vbCBkb25lLCBkaXNwYXRjaF9kYXRhX3QgZmls
ZURhdGEsIGludCBlcnJvcikgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGRvbmUsIGRvbmUpOwog
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihlcnJvcik7CiAgICAgfSk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdG9yYWdlLmNwcAkocmV2aXNpb24gMTgyODQxKQorKysgU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyNSw2ICsyMjUsNyBAQCBzdHJ1Y3QgUmVjb3JkTWV0YURhdGEgewogICAgIHVpbnQ2NF90IGhl
YWRlclNpemU7CiAgICAgU0hBMTo6RGlnZXN0IGJvZHlIYXNoOwogICAgIHVpbnQ2NF90IGJvZHlT
aXplOworICAgIGJvb2wgaXNCb2R5SW5saW5lOwogfTsKIAogc3RhdGljIGJvb2wgZGVjb2RlUmVj
b3JkTWV0YURhdGEoUmVjb3JkTWV0YURhdGEmIG1ldGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0
YSkKQEAgLTI0Niw2ICsyNDcsOCBAQCBzdGF0aWMgYm9vbCBkZWNvZGVSZWNvcmRNZXRhRGF0YShS
ZWNvcmRNCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUobWV0YURhdGEuYm9keVNpemUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmlzQm9keUlubGluZSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghZGVjb2Rlci52ZXJpZnlDaGVja3N1bSgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBtZXRhRGF0YS5oZWFkZXJPZmZz
ZXQgPSBkZWNvZGVyLmN1cnJlbnRPZmZzZXQoKTsKQEAgLTI1NSw3ICsyNTgsNyBAQCBzdGF0aWMg
Ym9vbCBkZWNvZGVSZWNvcmRNZXRhRGF0YShSZWNvcmRNCiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9
CiAKLXN0YXRpYyBib29sIGRlY29kZVJlY29yZEhlYWRlcihjb25zdCBEYXRhJiBmaWxlRGF0YSwg
UmVjb3JkTWV0YURhdGEmIG1ldGFEYXRhLCBEYXRhJiBkYXRhKQorc3RhdGljIGJvb2wgZGVjb2Rl
UmVjb3JkSGVhZGVyKGNvbnN0IERhdGEmIGZpbGVEYXRhLCBSZWNvcmRNZXRhRGF0YSYgbWV0YURh
dGEsIERhdGEmIGhlYWRlckRhdGEpCiB7CiAgICAgaWYgKCFkZWNvZGVSZWNvcmRNZXRhRGF0YSht
ZXRhRGF0YSwgZmlsZURhdGEpKSB7CiAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAi
KE5ldHdvcmtQcm9jZXNzKSBtZXRhIGRhdGEgZGVjb2RlIGZhaWx1cmUiKTsKQEAgLTI2NywxNyAr
MjcwLDE4IEBAIHN0YXRpYyBib29sIGRlY29kZVJlY29yZEhlYWRlcihjb25zdCBEYXQKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGF1dG8gaGVhZGVyRGF0YSA9IGZpbGVEYXRh
LnN1YnJhbmdlKG1ldGFEYXRhLmhlYWRlck9mZnNldCwgbWV0YURhdGEuaGVhZGVyU2l6ZSk7Cisg
ICAgaGVhZGVyRGF0YSA9IGZpbGVEYXRhLnN1YnJhbmdlKG1ldGFEYXRhLmhlYWRlck9mZnNldCwg
bWV0YURhdGEuaGVhZGVyU2l6ZSk7CiAgICAgaWYgKG1ldGFEYXRhLmhlYWRlckNoZWNrc3VtICE9
IGhhc2hEYXRhKGhlYWRlckRhdGEpKSB7CiAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdl
LCAiKE5ldHdvcmtQcm9jZXNzKSBoZWFkZXIgY2hlY2tzdW0gbWlzbWF0Y2giKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBkYXRhID0geyBoZWFkZXJEYXRhIH07CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZTo6UmVjb3JkPiBj
cmVhdGVSZWNvcmQoY29uc3QgRGF0YSYgcmVjb3JkRGF0YSwgY29uc3QgQmxvYlN0b3JhZ2U6OkJs
b2ImIGJvZHlCbG9iLCBjb25zdCBLZXkmIGtleSkKK3N0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlOjpS
ZWNvcmQ+IFN0b3JhZ2U6OmRlY29kZVJlY29yZChjb25zdCBEYXRhJiByZWNvcmREYXRhLCBjb25z
dCBLZXkmIGtleSkKIHsKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKwogICAgIFJl
Y29yZE1ldGFEYXRhIG1ldGFEYXRhOwogICAgIERhdGEgaGVhZGVyRGF0YTsKICAgICBpZiAoIWRl
Y29kZVJlY29yZEhlYWRlcihyZWNvcmREYXRhLCBtZXRhRGF0YSwgaGVhZGVyRGF0YSkpCkBAIC0y
OTAsMTYgKzI5NCwzMCBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2U6OlJlY29yZD4g
CiAgICAgYXV0byB0aW1lU3RhbXAgPSBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3Bv
aW50KG1ldGFEYXRhLmVwb2NoUmVsYXRpdmVUaW1lU3RhbXApOwogICAgIGlmICh0aW1lU3RhbXAg
PiBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgaWYgKG1ldGFEYXRhLmJvZHlTaXplICE9IGJvZHlCbG9iLmRhdGEuc2l6ZSgpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAobWV0YURhdGEuYm9keUhhc2ggIT0gYm9k
eUJsb2IuaGFzaCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBEYXRhIGJvZHlEYXRh
OworICAgIGlmIChtZXRhRGF0YS5pc0JvZHlJbmxpbmUpIHsKKyAgICAgICAgc2l6ZV90IGJvZHlP
ZmZzZXQgPSBtZXRhRGF0YS5oZWFkZXJPZmZzZXQgKyBoZWFkZXJEYXRhLnNpemUoKTsKKyAgICAg
ICAgaWYgKGJvZHlPZmZzZXQgKyBtZXRhRGF0YS5ib2R5U2l6ZSAhPSByZWNvcmREYXRhLnNpemUo
KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBib2R5RGF0YSA9IHJlY29y
ZERhdGEuc3VicmFuZ2UoYm9keU9mZnNldCwgbWV0YURhdGEuYm9keVNpemUpOworICAgICAgICBp
ZiAobWV0YURhdGEuYm9keUhhc2ggIT0gY29tcHV0ZVNIQTEoYm9keURhdGEpKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byBib2R5UGF0aCA9
IGJvZHlQYXRoRm9yS2V5KGtleSwgcmVjb3Jkc1BhdGgoKSk7CisgICAgICAgIGF1dG8gYm9keUJs
b2IgPSBtX2Jsb2JTdG9yYWdlLmdldChib2R5UGF0aCk7CisgICAgICAgIGlmIChtZXRhRGF0YS5i
b2R5U2l6ZSAhPSBib2R5QmxvYi5kYXRhLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICBpZiAobWV0YURhdGEuYm9keUhhc2ggIT0gYm9keUJsb2IuaGFzaCkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBib2R5RGF0YSA9IGJvZHlCbG9iLmRh
dGE7CisgICAgfQogCiAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8U3RvcmFnZTo6UmVjb3Jk
PihTdG9yYWdlOjpSZWNvcmQgewogICAgICAgICBtZXRhRGF0YS5rZXksCiAgICAgICAgIHRpbWVT
dGFtcCwKICAgICAgICAgaGVhZGVyRGF0YSwKLSAgICAgICAgYm9keUJsb2IuZGF0YQorICAgICAg
ICBib2R5RGF0YQogICAgIH0pOwogfQogCkBAIC0zMTQsMjMgKzMzMiw0OSBAQCBzdGF0aWMgRGF0
YSBlbmNvZGVSZWNvcmRNZXRhRGF0YShjb25zdCBSCiAgICAgZW5jb2RlciA8PCBtZXRhRGF0YS5o
ZWFkZXJTaXplOwogICAgIGVuY29kZXIgPDwgbWV0YURhdGEuYm9keUhhc2g7CiAgICAgZW5jb2Rl
ciA8PCBtZXRhRGF0YS5ib2R5U2l6ZTsKKyAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmlzQm9keUlu
bGluZTsKIAogICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKIAogICAgIHJldHVybiBEYXRh
KGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKIH0KIAotc3RhdGljIERh
dGEgZW5jb2RlUmVjb3JkSGVhZGVyKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYgcmVjb3JkLCBTSEEx
OjpEaWdlc3QgYm9keUhhc2gpCitPcHRpb25hbDxCbG9iU3RvcmFnZTo6QmxvYj4gU3RvcmFnZTo6
c3RvcmVCb2R5QXNCbG9iKGNvbnN0IFJlY29yZCYgcmVjb3JkLCBjb25zdCBNYXBwZWRCb2R5SGFu
ZGxlciYgbWFwcGVkQm9keUhhbmRsZXIpCit7CisgICAgYXV0byBib2R5UGF0aCA9IGJvZHlQYXRo
Rm9yS2V5KHJlY29yZC5rZXksIHJlY29yZHNQYXRoKCkpOworCisgICAgLy8gU3RvcmUgdGhlIGJv
ZHkuCisgICAgYXV0byBibG9iID0gbV9ibG9iU3RvcmFnZS5hZGQoYm9keVBhdGgsIHJlY29yZC5i
b2R5KTsKKyAgICBpZiAoYmxvYi5kYXRhLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4geyB9Owor
CisgICAgLy8gVGVsbCB0aGUgY2xpZW50IHdlIG5vdyBoYXZlIGEgZGlzay1iYWNrZWQgbWFwIGZv
ciB0aGlzIGRhdGEuCisgICAgaWYgKG1hcHBlZEJvZHlIYW5kbGVyKSB7CisgICAgICAgIFJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaChbYmxvYiwgbWFwcGVkQm9keUhhbmRsZXJdIHsKKyAgICAgICAg
ICAgIG1hcHBlZEJvZHlIYW5kbGVyKGJsb2IuZGF0YSk7CisgICAgICAgIH0pOworICAgIH0KKyAg
ICByZXR1cm4gYmxvYjsKK30KKworRGF0YSBTdG9yYWdlOjplbmNvZGVSZWNvcmQoY29uc3QgUmVj
b3JkJiByZWNvcmQsIE9wdGlvbmFsPEJsb2JTdG9yYWdlOjpCbG9iPiBibG9iKQogeworICAgIEFT
U0VSVCghYmxvYiB8fCBieXRlc0VxdWFsKGJsb2IudmFsdWUoKS5kYXRhLCByZWNvcmQuYm9keSkp
OworCiAgICAgUmVjb3JkTWV0YURhdGEgbWV0YURhdGEocmVjb3JkLmtleSk7CiAgICAgbWV0YURh
dGEuZXBvY2hSZWxhdGl2ZVRpbWVTdGFtcCA9IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0
ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KHJlY29yZC50aW1lU3RhbXAudGltZV9zaW5jZV9lcG9j
aCgpKTsKICAgICBtZXRhRGF0YS5oZWFkZXJDaGVja3N1bSA9IGhhc2hEYXRhKHJlY29yZC5oZWFk
ZXIpOwogICAgIG1ldGFEYXRhLmhlYWRlclNpemUgPSByZWNvcmQuaGVhZGVyLnNpemUoKTsKLSAg
ICBtZXRhRGF0YS5ib2R5SGFzaCA9IGJvZHlIYXNoOworICAgIG1ldGFEYXRhLmJvZHlIYXNoID0g
YmxvYiA/IGJsb2IudmFsdWUoKS5oYXNoIDogY29tcHV0ZVNIQTEocmVjb3JkLmJvZHkpOwogICAg
IG1ldGFEYXRhLmJvZHlTaXplID0gcmVjb3JkLmJvZHkuc2l6ZSgpOworICAgIG1ldGFEYXRhLmlz
Qm9keUlubGluZSA9ICFibG9iOwogCiAgICAgYXV0byBlbmNvZGVkTWV0YURhdGEgPSBlbmNvZGVS
ZWNvcmRNZXRhRGF0YShtZXRhRGF0YSk7CiAgICAgYXV0byBoZWFkZXJEYXRhID0gY29uY2F0ZW5h
dGUoZW5jb2RlZE1ldGFEYXRhLCByZWNvcmQuaGVhZGVyKTsKKworICAgIGlmIChtZXRhRGF0YS5p
c0JvZHlJbmxpbmUpCisgICAgICAgIHJldHVybiBjb25jYXRlbmF0ZShoZWFkZXJEYXRhLCByZWNv
cmQuYm9keSk7CisKICAgICByZXR1cm4geyBoZWFkZXJEYXRhIH07CiB9CiAKQEAgLTM2MiwxNiAr
NDA2LDE2IEBAIHZvaWQgU3RvcmFnZTo6ZGlzcGF0Y2hSZWFkT3BlcmF0aW9uKGNvbnMKICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIEFTU0VSVChtX2FjdGl2ZVJlYWRPcGVyYXRp
b25zLmNvbnRhaW5zKCZyZWFkKSk7CiAKLSAgICBpb1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsICZy
ZWFkXSB7Ci0gICAgICAgIGF1dG8gcmVjb3Jkc1BhdGggPSB0aGlzLT5yZWNvcmRzUGF0aCgpOwot
ICAgICAgICBhdXRvIHJlY29yZFBhdGggPSByZWNvcmRQYXRoRm9yS2V5KHJlYWQua2V5LCByZWNv
cmRzUGF0aCk7Ci0gICAgICAgIGF1dG8gYm9keVBhdGggPSBib2R5UGF0aEZvcktleShyZWFkLmtl
eSwgcmVjb3Jkc1BhdGgpOwotICAgICAgICAvLyBGSVhNRTogQm9keSBhbmQgaGVhZGVyIHJldHJp
ZXZlcyBjYW4gYmUgZG9uZSBpbiBwYXJhbGxlbC4KLSAgICAgICAgYXV0byBib2R5QmxvYiA9IG1f
YmxvYlN0b3JhZ2UuZ2V0KGJvZHlQYXRoKTsKKyAgICBhdXRvIHJlY29yZHNQYXRoID0gdGhpcy0+
cmVjb3Jkc1BhdGgoKTsKKyAgICBhdXRvIHJlY29yZFBhdGggPSByZWNvcmRQYXRoRm9yS2V5KHJl
YWQua2V5LCByZWNvcmRzUGF0aCk7CiAKLSAgICAgICAgUmVmUHRyPElPQ2hhbm5lbD4gY2hhbm5l
bCA9IElPQ2hhbm5lbDo6b3BlbihyZWNvcmRQYXRoLCBJT0NoYW5uZWw6OlR5cGU6OlJlYWQpOwot
ICAgICAgICBjaGFubmVsLT5yZWFkKDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4
KCksIFt0aGlzLCAmcmVhZCwgYm9keUJsb2JdKERhdGEmIGZpbGVEYXRhLCBpbnQgZXJyb3IpIHsK
LSAgICAgICAgICAgIGF1dG8gcmVjb3JkID0gZXJyb3IgPyBudWxscHRyIDogY3JlYXRlUmVjb3Jk
KGZpbGVEYXRhLCBib2R5QmxvYiwgcmVhZC5rZXkpOworICAgIFJlZlB0cjxJT0NoYW5uZWw+IGNo
YW5uZWwgPSBJT0NoYW5uZWw6Om9wZW4ocmVjb3JkUGF0aCwgSU9DaGFubmVsOjpUeXBlOjpSZWFk
KTsKKyAgICBjaGFubmVsLT5yZWFkKDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4
KCksICZpb1F1ZXVlKCksIFt0aGlzLCAmcmVhZF0oY29uc3QgRGF0YSYgZmlsZURhdGEsIGludCBl
cnJvcikgeworICAgICAgICBhdXRvIHJlY29yZCA9IGVycm9yID8gbnVsbHB0ciA6IGRlY29kZVJl
Y29yZChmaWxlRGF0YSwgcmVhZC5rZXkpOworCisgICAgICAgIGF1dG8qIHJlY29yZFB0ciA9IHJl
Y29yZC5yZWxlYXNlKCk7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywg
JnJlYWQsIHJlY29yZFB0cl0geworICAgICAgICAgICAgYXV0byByZWNvcmQgPSBzdGQ6OnVuaXF1
ZV9wdHI8UmVjb3JkPihyZWNvcmRQdHIpOwogICAgICAgICAgICAgZmluaXNoUmVhZE9wZXJhdGlv
bihyZWFkLCBXVEY6Om1vdmUocmVjb3JkKSk7CiAgICAgICAgIH0pOwogICAgIH0pOwpAQCAtNDQ4
LDYgKzQ5MiwxMiBAQCB2b2lkIFN0b3JhZ2U6OmRpc3BhdGNoUGVuZGluZ1dyaXRlT3BlcmF0CiAg
ICAgfQogfQogCitzdGF0aWMgYm9vbCBzaG91bGRTdG9yZUJvZHlBc0Jsb2IoY29uc3QgRGF0YSYg
ZGF0YSkKK3sKKyAgICBjb25zdCBzaXplX3QgbWF4aW11bUlubGluZUJvZHlTaXplID0gMTYgPDwg
MTA7CisgICAgcmV0dXJuIGRhdGEuc2l6ZSgpID4gbWF4aW11bUlubGluZUJvZHlTaXplOworfQor
CiB2b2lkIFN0b3JhZ2U6OmRpc3BhdGNoV3JpdGVPcGVyYXRpb24oY29uc3QgV3JpdGVPcGVyYXRp
b24mIHdyaXRlKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CkBAIC00NjAsMzYg
KzUxMCwyNSBAQCB2b2lkIFN0b3JhZ2U6OmRpc3BhdGNoV3JpdGVPcGVyYXRpb24oY29uCiAgICAg
ICAgIGF1dG8gcmVjb3Jkc1BhdGggPSB0aGlzLT5yZWNvcmRzUGF0aCgpOwogICAgICAgICBhdXRv
IHBhcnRpdGlvblBhdGggPSBwYXJ0aXRpb25QYXRoRm9yS2V5KHdyaXRlLnJlY29yZC5rZXksIHJl
Y29yZHNQYXRoKTsKICAgICAgICAgYXV0byByZWNvcmRQYXRoID0gcmVjb3JkUGF0aEZvcktleSh3
cml0ZS5yZWNvcmQua2V5LCByZWNvcmRzUGF0aCk7Ci0gICAgICAgIGF1dG8gYm9keVBhdGggPSBi
b2R5UGF0aEZvcktleSh3cml0ZS5yZWNvcmQua2V5LCByZWNvcmRzUGF0aCk7CiAKICAgICAgICAg
V2ViQ29yZTo6bWFrZUFsbERpcmVjdG9yaWVzKHBhcnRpdGlvblBhdGgpOwogCi0gICAgICAgIC8v
IFN0b3JlIHRoZSBib2R5LgotICAgICAgICBhdXRvIGJsb2IgPSBtX2Jsb2JTdG9yYWdlLmFkZChi
b2R5UGF0aCwgd3JpdGUucmVjb3JkLmJvZHkpOwotICAgICAgICBpZiAoYmxvYi5kYXRhLmlzTnVs
bCgpKSB7CisgICAgICAgIGJvb2wgc3RvcmVBc0Jsb2IgPSBzaG91bGRTdG9yZUJvZHlBc0Jsb2Io
d3JpdGUucmVjb3JkLmJvZHkpOworICAgICAgICBhdXRvIGJvZHlCbG9iID0gc3RvcmVBc0Jsb2Ig
PyBzdG9yZUJvZHlBc0Jsb2Iod3JpdGUucmVjb3JkLCB3cml0ZS5tYXBwZWRCb2R5SGFuZGxlcikg
OiBOdWxsb3B0OworCisgICAgICAgIGF1dG8gZW5jb2RlZFJlY29yZCA9IGVuY29kZVJlY29yZCh3
cml0ZS5yZWNvcmQsIGJvZHlCbG9iKTsKKyAgICAgICAgaWYgKGVuY29kZWRSZWNvcmQuaXNOdWxs
KCkpIHsKICAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgJndyaXRl
XSB7CiAgICAgICAgICAgICAgICAgZmluaXNoV3JpdGVPcGVyYXRpb24od3JpdGUpOwogICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLQotICAgICAgICAvLyBU
ZWxsIHRoZSBjbGllbnQgd2Ugbm93IGhhdmUgYSBkaXNrLWJhY2tlZCBtYXAgZm9yIHRoaXMgZGF0
YS4KLSAgICAgICAgc2l6ZV90IG1pbmltdW1NYXBTaXplID0gcGFnZVNpemUoKTsKLSAgICAgICAg
aWYgKGJsb2IuZGF0YS5zaXplKCkgPj0gbWluaW11bU1hcFNpemUgJiYgYmxvYi5kYXRhLmlzTWFw
KCkgJiYgd3JpdGUubWFwcGVkQm9keUhhbmRsZXIpIHsKLSAgICAgICAgICAgIGF1dG8mIG1hcHBl
ZEJvZHlIYW5kbGVyID0gd3JpdGUubWFwcGVkQm9keUhhbmRsZXI7Ci0gICAgICAgICAgICBSdW5M
b29wOjptYWluKCkuZGlzcGF0Y2goW2Jsb2IsIG1hcHBlZEJvZHlIYW5kbGVyXSB7Ci0gICAgICAg
ICAgICAgICAgbWFwcGVkQm9keUhhbmRsZXIoYmxvYi5kYXRhKTsKLSAgICAgICAgICAgIH0pOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gU3RvcmUgdGhlIGhlYWRlciBhbmQgbWV0YSBkYXRhLgot
ICAgICAgICBhdXRvIGVuY29kZWRIZWFkZXIgPSBlbmNvZGVSZWNvcmRIZWFkZXIod3JpdGUucmVj
b3JkLCBibG9iLmhhc2gpOwogICAgICAgICBhdXRvIGNoYW5uZWwgPSBJT0NoYW5uZWw6Om9wZW4o
cmVjb3JkUGF0aCwgSU9DaGFubmVsOjpUeXBlOjpDcmVhdGUpOwogICAgICAgICBpbnQgZmQgPSBj
aGFubmVsLT5maWxlRGVzY3JpcHRvcigpOwotICAgICAgICBzaXplX3QgaGVhZGVyU2l6ZSA9IGVu
Y29kZWRIZWFkZXIuc2l6ZSgpOwotICAgICAgICBjaGFubmVsLT53cml0ZSgwLCBlbmNvZGVkSGVh
ZGVyLCBbdGhpcywgJndyaXRlLCBoZWFkZXJTaXplLCBmZF0oaW50IGVycm9yKSB7CisgICAgICAg
IHNpemVfdCByZWNvcmRTaXplID0gZW5jb2RlZFJlY29yZC5zaXplKCk7CisgICAgICAgIGNoYW5u
ZWwtPndyaXRlKDAsIGVuY29kZWRSZWNvcmQsIG51bGxwdHIsIFt0aGlzLCAmd3JpdGUsIHJlY29y
ZFNpemUsIGZkXShpbnQgZXJyb3IpIHsKICAgICAgICAgICAgIC8vIE9uIGVycm9yIHRoZSBlbnRy
eSBzdGlsbCBzdGF5cyBpbiB0aGUgY29udGVudHMgZmlsdGVyIHVudGlsIG5leHQgc3luY2hyb25p
emF0aW9uLgotICAgICAgICAgICAgbV9hcHByb3hpbWF0ZVNpemUgKz0gaGVhZGVyU2l6ZTsKKyAg
ICAgICAgICAgIG1fYXBwcm94aW1hdGVTaXplICs9IHJlY29yZFNpemU7CiAgICAgICAgICAgICBm
aW5pc2hXcml0ZU9wZXJhdGlvbih3cml0ZSk7CiAKICAgICAgICAgICAgIExPRyhOZXR3b3JrQ2Fj
aGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSB3cml0ZSBjb21wbGV0ZSBlcnJvcj0lZCIsIGVy
cm9yKTsKQEAgLTU2MSw3ICs2MDAsNyBAQCB2b2lkIFN0b3JhZ2U6OnRyYXZlcnNlKFRyYXZlcnNl
RmxhZ3MgZmxhCiAKICAgICAgICAgICAgIGF1dG8gY2hhbm5lbCA9IElPQ2hhbm5lbDo6b3Blbihy
ZWNvcmRQYXRoLCBJT0NoYW5uZWw6OlR5cGU6OlJlYWQpOwogICAgICAgICAgICAgLy8gRklYTUU6
IFRyYXZlcnNhbCBpcyBzbG93ZXIgdGhhbiBpdCBzaG91bGQgYmUgZHVlIHRvIGxhY2sgb2YgcGFy
YWxsZWxpc20uCi0gICAgICAgICAgICBjaGFubmVsLT5yZWFkU3luYygwLCBzdGQ6Om51bWVyaWNf
bGltaXRzPHNpemVfdD46Om1heCgpLCBbdGhpcywgJnRyYXZlcnNlSGFuZGxlciwgJmluZm9dKERh
dGEmIGZpbGVEYXRhLCBpbnQpIHsKKyAgICAgICAgICAgIGNoYW5uZWwtPnJlYWRTeW5jKDAsIHN0
ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCksIG51bGxwdHIsIFt0aGlzLCAmdHJhdmVy
c2VIYW5kbGVyLCAmaW5mb10oRGF0YSYgZmlsZURhdGEsIGludCkgewogICAgICAgICAgICAgICAg
IFJlY29yZE1ldGFEYXRhIG1ldGFEYXRhOwogICAgICAgICAgICAgICAgIERhdGEgaGVhZGVyRGF0
YTsKICAgICAgICAgICAgICAgICBpZiAoZGVjb2RlUmVjb3JkSGVhZGVyKGZpbGVEYXRhLCBtZXRh
RGF0YSwgaGVhZGVyRGF0YSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgJKHJldmlzaW9uIDE4
Mjg0MSkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZVN0b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTExLDYgKzExMSwxMCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgZGlzcGF0Y2hQZW5kaW5nV3JpdGVPcGVyYXRpb25zKCk7CiAgICAgdm9pZCBmaW5p
c2hXcml0ZU9wZXJhdGlvbihjb25zdCBXcml0ZU9wZXJhdGlvbiYpOwogCisgICAgT3B0aW9uYWw8
QmxvYlN0b3JhZ2U6OkJsb2I+IHN0b3JlQm9keUFzQmxvYihjb25zdCBSZWNvcmQmLCBjb25zdCBN
YXBwZWRCb2R5SGFuZGxlciYpOworICAgIERhdGEgZW5jb2RlUmVjb3JkKGNvbnN0IFJlY29yZCYs
IE9wdGlvbmFsPEJsb2JTdG9yYWdlOjpCbG9iPik7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlY29y
ZD4gZGVjb2RlUmVjb3JkKGNvbnN0IERhdGEmLCBjb25zdCBLZXkmKTsKKwogICAgIHZvaWQgdXBk
YXRlRmlsZU1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBwYXRoKTsKIAogICAgIFdvcmtR
dWV1ZSYgaW9RdWV1ZSgpIHsgcmV0dXJuIG1faW9RdWV1ZS5nZXQoKTsgfQo=
</data>
<flag name="review"
          id="275619"
          type_id="1"
          status="+"
          setter="cdumez"
    />
          </attachment>
      

    </bug>

</bugzilla>