<?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>144950</bug_id>
          
          <creation_ts>2015-05-13 02:01:30 -0700</creation_ts>
          <short_desc>Network Cache: Make Data::adoptMap take the ownership of the file descriptor</short_desc>
          <delta_ts>2015-05-17 23:31:40 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>144380</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1094446</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-05-13 02:01:30 -0700</bug_when>
    <thetext>It will be required to implement ShareableResource for soup network backend. Also move the common code of Data to a common file and add mapToFile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1094448</commentid>
    <comment_count>1</comment_count>
      <attachid>253028</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-05-13 02:10:37 -0700</bug_when>
    <thetext>Created attachment 253028
Patch

This will fail to build in mac, since I need someone with a mac who add the new file to xcode file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095110</commentid>
    <comment_count>2</comment_count>
      <attachid>253196</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-05-15 06:33:00 -0700</bug_when>
    <thetext>Created attachment 253196
with xcode project file changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095111</commentid>
    <comment_count>3</comment_count>
      <attachid>253197</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-05-15 06:34:15 -0700</bug_when>
    <thetext>Created attachment 253197
with xcode project file changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095119</commentid>
    <comment_count>4</comment_count>
      <attachid>253198</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-05-15 08:43:20 -0700</bug_when>
    <thetext>Created attachment 253198
again with xcode project file changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095553</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-05-17 23:31:40 -0700</bug_when>
    <thetext>Committed r184449: &lt;http://trac.webkit.org/changeset/184449&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253028</attachid>
            <date>2015-05-13 02:10:37 -0700</date>
            <delta_ts>2015-05-15 06:23:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-data.diff</filename>
            <type>text/plain</type>
            <size>16051</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktp
dDIvQ01ha2VMaXN0cy50eHQKaW5kZXggOWJkOTlkMy4uNGY1ZTA5YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0
cy50eHQKQEAgLTE2NSw2ICsxNjUsNyBAQCBzZXQoTmV0d29ya1Byb2Nlc3NfQ09NTU9OX1NPVVJD
RVMKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCiAgICAgTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwCiAgICAgTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmNwcAorICAgIE5ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlRGVjb2Rlci5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVF
bmNvZGVyLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCmluZGV4IGM5ZmE4Y2MuLjdlNDVmYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0
MiBAQAorMjAxNS0wNS0xMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5j
b20+CisKKyAgICAgICAgTmV0d29yayBDYWNoZTogTWFrZSBEYXRhOjphZG9wdE1hcCB0YWtlIHRo
ZSBvd25lcnNoaXAgb2YgdGhlIGZpbGUgZGVzY3JpcHRvcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0OTUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSXQgd2lsbCBiZSByZXF1aXJlZCB0byBpbXBsZW1l
bnQgU2hhcmVhYmxlUmVzb3VyY2UgZm9yIHNvdXAKKyAgICAgICAgbmV0d29yayBiYWNrZW5kLiBB
bHNvIG1vdmUgdGhlIGNvbW1vbiBjb2RlIG9mIERhdGEgdG8gYSBjb21tb24KKyAgICAgICAgZmls
ZSBhbmQgYWRkIG1hcFRvRmlsZSgpLiBUaGUgbWFwRmlsZSB2ZXJzaW9uIHRoYXQgcmVjZWl2ZXMg
YSBmaWxlCisgICAgICAgIGRlc2NyaXB0b3IgaGFzIGJlZW4gcmVuYW1lZCB0byBhZG9wdEFuZE1h
cEZpbGUoKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBBZGQgbmV3IGZpbGUgdG8gY29t
cGlsYXRpb24uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQmxv
YlN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkJsb2JTdG9yYWdl
OjphZGQpOiBVc2UgbWFwVG9GaWxlKCkuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OkRhdGE6Om1hcFRvRmlsZSk6IFdyaXRlIHRoZSBkYXRhIHRvIHRoZQorICAgICAgICBnaXZl
biBmaWxlIGFuZCBtYXAgaXQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6bWFwRmls
ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6YWRvcHRBbmRNYXBGaWxlKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpjb21wdXRlU0hBMSk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6Ynl0ZXNFcXVhbCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpEYXRhOjphZG9wdE1hcCk6IENsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3IuCisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OkRhdGEpOiBVc2UgYSBjb25zdHJ1Y3RvciB0aGF0
CisgICAgICAgIHJlY2VpdmVzIGEgZmlsZSBkZXNjcmlwdG9yIGluc3RlYWQgb2YgdGhlIG9uZSBy
ZWNlaXZpbmcKKyAgICAgICAgQmFja2luZy4gSWYgdGhlIGZpbGUgZGVzY3JpcHRvciBpcyBub3Qg
LTEgdGhlbiB0aGUgRGF0YSBpcyBhIG1hcC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpNYXBXcmFwcGVyOjp+TWFwV3JhcHBlcik6IEFsc28gY2xvc2UgdGhlCisgICAgICAgIGZpbGUg
ZGVzY3JpcHRvci4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjphZG9wdE1h
cCk6IFBhc3MgdGhlIGZpbGUgZGVzY3JpcHRvcgorICAgICAgICB0byB0aGUgTWFwV3JhcHBlciBh
bmQgY3JlYXRlIHRoZSBEYXRhIHBhc3NpbmcgdGhlIGZpbGUgZGVzY3JpcHRvci4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwOgorICAgICAg
ICAoQVBJOjpvcGVuQW5kTWFwQ29udGVudEV4dGVuc2lvbik6IFVzZSBtYXBGaWxlIHRoYXQgcmVj
ZWl2ZXMgYQorICAgICAgICBmaWxlIHBhdGguCisgICAgICAgIChBUEk6OmNvbXBpbGVkVG9GaWxl
KTogVXNlIGFkb3B0QW5kTWFwRmlsZSgpIGFuZCBkb24ndCBjbG9zZSB0aGUKKyAgICAgICAgZGVz
Y3JpcHRvci4KKwogMjAxNS0wNS0xMiAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgog
CiAgICAgICAgIEluIFNhZmFyaSwgRGVidWcgPiBHZXQgQnl0ZWNvZGUgUHJvZmlsZSBjcmFzaGVz
IHRoZSBXZWIgQ29udGVudCBwcm9jZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVCbG9iU3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVCbG9iU3RvcmFnZS5jcHAKaW5k
ZXggN2IwM2JlMi4uMGRmY2Y0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmNwcApAQCAt
MTAxLDM3ICsxMDEsMTMgQEAgQmxvYlN0b3JhZ2U6OkJsb2IgQmxvYlN0b3JhZ2U6OmFkZChjb25z
dCBTdHJpbmcmIHBhdGgsIGNvbnN0IERhdGEmIGRhdGEpCiAgICAgICAgIHVubGluayhibG9iUGF0
aC5kYXRhKCkpOwogICAgIH0KIAotICAgIGludCBmZCA9IG9wZW4oYmxvYlBhdGguZGF0YSgpLCBP
X0NSRUFUIHwgT19FWENMIHwgT19SRFdSICwgU19JUlVTUiB8IFNfSVdVU1IpOwotICAgIGlmIChm
ZCA8IDApCisgICAgYXV0byBtYXBwZWREYXRhID0gZGF0YS5tYXBUb0ZpbGUoYmxvYlBhdGguZGF0
YSgpKTsKKyAgICBpZiAobWFwcGVkRGF0YS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgIHNpemVfdCBzaXplID0gZGF0YS5zaXplKCk7Ci0gICAgaWYgKGZ0cnVuY2F0ZShmZCwg
c2l6ZSkgPCAwKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICB9Ci0KLSAgICB2b2lkKiBtYXAgPSBtbWFwKG51bGxwdHIsIHNpemUsIFBST1RfUkVBRCB8IFBS
T1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkLCAwKTsKLSAgICBjbG9zZShmZCk7Ci0KLSAgICBpZiAo
bWFwID09IE1BUF9GQUlMRUQpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICB1aW50OF90KiBt
YXBEYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1hcCk7Ci0gICAgZGF0YS5hcHBseShbJm1h
cERhdGFdKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgYnl0ZXNTaXplKSB7Ci0gICAgICAg
IG1lbWNweShtYXBEYXRhLCBieXRlcywgYnl0ZXNTaXplKTsKLSAgICAgICAgbWFwRGF0YSArPSBi
eXRlc1NpemU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0pOwotCi0gICAgLy8gRHJvcCB0
aGUgd3JpdGUgcGVybWlzc2lvbi4KLSAgICBtcHJvdGVjdChtYXAsIHNpemUsIFBST1RfUkVBRCk7
Ci0KLSAgICBhdXRvIG1hcHBlZERhdGEgPSBEYXRhOjphZG9wdE1hcChtYXAsIHNpemUpOwotCiAg
ICAgbGluayhibG9iUGF0aC5kYXRhKCksIGxpbmtQYXRoLmRhdGEoKSk7CiAKLSAgICBtX2FwcHJv
eGltYXRlU2l6ZSArPSBzaXplOworICAgIG1fYXBwcm94aW1hdGVTaXplICs9IG1hcHBlZERhdGEu
c2l6ZSgpOwogCiAgICAgcmV0dXJuIHsgbWFwcGVkRGF0YSwgaGFzaCB9OwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmY4OWY1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRGF0YS5jcHAKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRGF0YS5oIgorCisjaWYgRU5BQkxFKE5FVFdP
UktfQ0FDSEUpCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+Cisj
aW5jbHVkZSA8c3lzL3N0YXQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0
d29ya0NhY2hlIHsKKworRGF0YSBEYXRhOjptYXBUb0ZpbGUoY29uc3QgY2hhciogcGF0aCkgY29u
c3QKK3sKKyAgICBpbnQgZmQgPSBvcGVuKHBhdGgsIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1JEV1Ig
LCBTX0lSVVNSIHwgU19JV1VTUik7CisgICAgaWYgKGZkIDwgMCkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIGlmIChmdHJ1bmNhdGUoZmQsIG1fc2l6ZSkgPCAwKSB7CisgICAgICAgIGNsb3Nl
KGZkKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICB2b2lkKiBtYXAgPSBtbWFw
KG51bGxwdHIsIG1fc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQs
IDApOworICAgIGlmIChtYXAgPT0gTUFQX0ZBSUxFRCkgeworICAgICAgICBjbG9zZShmZCk7Cisg
ICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgdWludDhfdCogbWFwRGF0YSA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3QqPihtYXApOworICAgIGFwcGx5KFsmbWFwRGF0YV0oY29uc3QgdWludDhf
dCogYnl0ZXMsIHNpemVfdCBieXRlc1NpemUpIHsKKyAgICAgICAgbWVtY3B5KG1hcERhdGEsIGJ5
dGVzLCBieXRlc1NpemUpOworICAgICAgICBtYXBEYXRhICs9IGJ5dGVzU2l6ZTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfSk7CisKKyAgICAvLyBEcm9wIHRoZSB3cml0ZSBwZXJtaXNzaW9u
LgorICAgIG1wcm90ZWN0KG1hcCwgbV9zaXplLCBQUk9UX1JFQUQpOworCisgICAgcmV0dXJuIERh
dGE6OmFkb3B0TWFwKG1hcCwgbV9zaXplLCBmZCk7Cit9CisKK0RhdGEgbWFwRmlsZShjb25zdCBj
aGFyKiBwYXRoKQoreworICAgIGludCBmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFksIDApOworICAg
IGlmIChmZCA8IDApCisgICAgICAgIHJldHVybiB7IH07CisgICAgc3RydWN0IHN0YXQgc3RhdDsK
KyAgICBpZiAoZnN0YXQoZmQsICZzdGF0KSA8IDApIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAg
ICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICBzaXplX3Qgc2l6ZSA9IHN0YXQuc3Rfc2l6ZTsK
KyAgICBpZiAoIXNpemUpIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm4gRGF0
YTo6ZW1wdHkoKTsKKyAgICB9CisKKyAgICByZXR1cm4gYWRvcHRBbmRNYXBGaWxlKGZkLCAwLCBz
aXplKTsKK30KKworRGF0YSBhZG9wdEFuZE1hcEZpbGUoaW50IGZkLCBzaXplX3Qgb2Zmc2V0LCBz
aXplX3Qgc2l6ZSkKK3sKKyAgICBpZiAoIXNpemUpCisgICAgICAgIHJldHVybiBEYXRhOjplbXB0
eSgpOworCisgICAgdm9pZCogbWFwID0gbW1hcChudWxscHRyLCBzaXplLCBQUk9UX1JFQUQsIE1B
UF9QUklWQVRFLCBmZCwgb2Zmc2V0KTsKKyAgICBpZiAobWFwID09IE1BUF9GQUlMRUQpIHsKKyAg
ICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVy
biBEYXRhOjphZG9wdE1hcChtYXAsIHNpemUsIGZkKTsKK30KKworU0hBMTo6RGlnZXN0IGNvbXB1
dGVTSEExKGNvbnN0IERhdGEmIGRhdGEpCit7CisgICAgU0hBMSBzaGExOworICAgIGRhdGEuYXBw
bHkoWyZzaGExXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgICAgICBz
aGExLmFkZEJ5dGVzKGRhdGEsIHNpemUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9KTsK
KyAgICBTSEExOjpEaWdlc3QgZGlnZXN0OworICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsK
KyAgICByZXR1cm4gZGlnZXN0OworfQorCitib29sIGJ5dGVzRXF1YWwoY29uc3QgRGF0YSYgYSwg
Y29uc3QgRGF0YSYgYikKK3sKKyAgICBpZiAoYS5pc051bGwoKSB8fCBiLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGEuc2l6ZSgpICE9IGIuc2l6ZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuICFtZW1jbXAoYS5kYXRhKCksIGIuZGF0YSgpLCBh
LnNpemUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYWNoZQorfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
LmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
LmgKaW5kZXggODRmY2NjOC4uOGM3NGFlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaApAQCAtMTA0LDE0ICsxMDQs
MTQgQEAgcHVibGljOgogICAgIERhdGEoY29uc3QgdWludDhfdCosIHNpemVfdCk7CiAKICAgICBz
dGF0aWMgRGF0YSBlbXB0eSgpOwotICAgIHN0YXRpYyBEYXRhIGFkb3B0TWFwKHZvaWQqIG1hcCwg
c2l6ZV90KTsKKyAgICBzdGF0aWMgRGF0YSBhZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCwgaW50
IGZkKTsKIAotICAgIGVudW0gY2xhc3MgQmFja2luZyB7IEJ1ZmZlciwgTWFwIH07CiAjaWYgUExB
VEZPUk0oQ09DT0EpCisgICAgZW51bSBjbGFzcyBCYWNraW5nIHsgQnVmZmVyLCBNYXAgfTsKICAg
ICBEYXRhKERpc3BhdGNoUHRyPGRpc3BhdGNoX2RhdGFfdD4sIEJhY2tpbmcgPSBCYWNraW5nOjpC
dWZmZXIpOwogI2VuZGlmCiAjaWYgVVNFKFNPVVApCi0gICAgRGF0YShHUmVmUHRyPFNvdXBCdWZm
ZXI+JiYsIEJhY2tpbmcgPSBCYWNraW5nOjpCdWZmZXIpOworICAgIERhdGEoR1JlZlB0cjxTb3Vw
QnVmZmVyPiYmLCBpbnQgZmQgPSAtMSk7CiAjZW5kaWYKICAgICBib29sIGlzTnVsbCgpIGNvbnN0
OwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX3NpemU7IH0KQEAgLTEyNCw2
ICsxMjQsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGFwcGx5KGNvbnN0IHN0ZDo6ZnVuY3Rpb248
Ym9vbCAoY29uc3QgdWludDhfdCosIHNpemVfdCk+JiYpIGNvbnN0OwogCisgICAgRGF0YSBtYXBU
b0ZpbGUoY29uc3QgY2hhciogcGF0aCkgY29uc3Q7CisKICNpZiBQTEFURk9STShDT0NPQSkKICAg
ICBkaXNwYXRjaF9kYXRhX3QgZGlzcGF0Y2hEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwYXRj
aERhdGEuZ2V0KCk7IH0KICNlbmRpZgpAQCAtMTM3LDYgKzEzOSw3IEBAIHByaXZhdGU6CiAjZW5k
aWYKICNpZiBVU0UoU09VUCkKICAgICBtdXRhYmxlIEdSZWZQdHI8U291cEJ1ZmZlcj4gbV9idWZm
ZXI7CisgICAgaW50IG1fZmlsZURlc2NyaXB0b3IgeyAtMSB9OwogI2VuZGlmCiAgICAgbXV0YWJs
ZSBjb25zdCB1aW50OF90KiBtX2RhdGEgeyBudWxscHRyIH07CiAgICAgc2l6ZV90IG1fc2l6ZSB7
IDAgfTsKQEAgLTE0NSw3ICsxNDgsNyBAQCBwcml2YXRlOgogCiBEYXRhIGNvbmNhdGVuYXRlKGNv
bnN0IERhdGEmLCBjb25zdCBEYXRhJik7CiBib29sIGJ5dGVzRXF1YWwoY29uc3QgRGF0YSYsIGNv
bnN0IERhdGEmKTsKLURhdGEgbWFwRmlsZShpbnQgZmQsIHNpemVfdCBvZmZzZXQsIHNpemVfdCk7
CitEYXRhIGFkb3B0QW5kTWFwRmlsZShpbnQgZmQsIHNpemVfdCBvZmZzZXQsIHNpemVfdCk7CiBE
YXRhIG1hcEZpbGUoY29uc3QgY2hhciogcGF0aCk7CiBTSEExOjpEaWdlc3QgY29tcHV0ZVNIQTEo
Y29uc3QgRGF0YSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0KaW5kZXggNGEzYzdiYi4uZThl
ZGNiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRGF0YUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQpAQCAtOTMsNjMgKzkzLDE3IEBAIERhdGEg
Y29uY2F0ZW5hdGUoY29uc3QgRGF0YSYgYSwgY29uc3QgRGF0YSYgYikKICAgICByZXR1cm4geyBh
ZG9wdERpc3BhdGNoKGRpc3BhdGNoX2RhdGFfY3JlYXRlX2NvbmNhdChhLmRpc3BhdGNoRGF0YSgp
LCBiLmRpc3BhdGNoRGF0YSgpKSkgfTsKIH0KIAotRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBt
YXAsIHNpemVfdCBzaXplKQorRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCBz
aXplLCBpbnQgZmQpCiB7CiAgICAgQVNTRVJUKG1hcCAmJiBtYXAgIT0gTUFQX0ZBSUxFRCk7Cisg
ICAgY2xvc2UoZmQpOwogICAgIGF1dG8gYm9keU1hcCA9IGFkb3B0RGlzcGF0Y2goZGlzcGF0Y2hf
ZGF0YV9jcmVhdGUobWFwLCBzaXplLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbbWFwLCBz
aXplXSB7CiAgICAgICAgIG11bm1hcChtYXAsIHNpemUpOwogICAgIH0pKTsKICAgICByZXR1cm4g
eyBib2R5TWFwLCBEYXRhOjpCYWNraW5nOjpNYXAgfTsKIH0KIAotRGF0YSBtYXBGaWxlKGludCBm
ZCwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCi17Ci0gICAgaWYgKCFzaXplKQotICAgICAg
ICByZXR1cm4gRGF0YTo6ZW1wdHkoKTsKLQotICAgIHZvaWQqIG1hcCA9IG1tYXAobnVsbHB0ciwg
c2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIG9mZnNldCk7Ci0gICAgaWYgKG1hcCA9
PSBNQVBfRkFJTEVEKQotICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBEYXRhOjphZG9w
dE1hcChtYXAsIHNpemUpOwotfQotCi1EYXRhIG1hcEZpbGUoY29uc3QgY2hhciogcGF0aCkKLXsK
LSAgICBpbnQgZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZLCAwKTsKLSAgICBpZiAoZmQgPCAwKQot
ICAgICAgICByZXR1cm4geyB9OwotICAgIHN0cnVjdCBzdGF0IHN0YXQ7Ci0gICAgaWYgKGZzdGF0
KGZkLCAmc3RhdCkgPCAwKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgcmV0dXJuIHsg
fTsKLSAgICB9Ci0gICAgc2l6ZV90IHNpemUgPSBzdGF0LnN0X3NpemU7Ci0gICAgYXV0byBkYXRh
ID0gbWFwRmlsZShmZCwgMCwgc2l6ZSk7Ci0gICAgY2xvc2UoZmQpOwotCi0gICAgcmV0dXJuIGRh
dGE7Ci19Ci0KLVNIQTE6OkRpZ2VzdCBjb21wdXRlU0hBMShjb25zdCBEYXRhJiBkYXRhKQotewot
ICAgIFNIQTEgc2hhMTsKLSAgICBkYXRhLmFwcGx5KFsmc2hhMV0oY29uc3QgdWludDhfdCogZGF0
YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhkYXRhLCBzaXplKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSk7Ci0gICAgU0hBMTo6RGlnZXN0IGRpZ2VzdDsKLSAg
ICBzaGExLmNvbXB1dGVIYXNoKGRpZ2VzdCk7Ci0gICAgcmV0dXJuIGRpZ2VzdDsKLX0KIAotYm9v
bCBieXRlc0VxdWFsKGNvbnN0IERhdGEmIGEsIGNvbnN0IERhdGEmIGIpCi17Ci0gICAgaWYgKGEu
aXNOdWxsKCkgfHwgYi5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChh
LnNpemUoKSAhPSBiLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiAh
bWVtY21wKGEuZGF0YSgpLCBiLmRhdGEoKSwgYS5zaXplKCkpOwotfQogCiB9CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
U291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVEYXRhU291cC5jcHAKaW5kZXggYjRlNTA3Mi4uYWE2ZDNiZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFT
b3VwLmNwcApAQCAtNDUsMTAgKzQ1LDExIEBAIERhdGE6OkRhdGEoY29uc3QgdWludDhfdCogZGF0
YSwgc2l6ZV90IHNpemUpCiAgICAgbV9idWZmZXIgPSBhZG9wdEdSZWYoc291cF9idWZmZXJfbmV3
X3dpdGhfb3duZXIoY29waWVkRGF0YSwgc2l6ZSwgY29waWVkRGF0YSwgZmFzdEZyZWUpKTsKIH0K
IAotRGF0YTo6RGF0YShHUmVmUHRyPFNvdXBCdWZmZXI+JiYgYnVmZmVyLCBCYWNraW5nIGJhY2tp
bmcpCitEYXRhOjpEYXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4mJiBidWZmZXIsIGludCBmZCkKICAg
ICA6IG1fYnVmZmVyKGJ1ZmZlcikKKyAgICAsIG1fZmlsZURlc2NyaXB0b3IoZmQpCiAgICAgLCBt
X3NpemUoYnVmZmVyID8gYnVmZmVyLT5sZW5ndGggOiAwKQotICAgICwgbV9pc01hcChtX3NpemUg
JiYgYmFja2luZyA9PSBCYWNraW5nOjpNYXApCisgICAgLCBtX2lzTWFwKG1fc2l6ZSAmJiBmZCAh
PSAtMSkKIHsKIH0KIApAQCAtMTA0LDEwICsxMDUsMTIgQEAgc3RydWN0IE1hcFdyYXBwZXIgewog
ICAgIH5NYXBXcmFwcGVyKCkKICAgICB7CiAgICAgICAgIG11bm1hcChtYXAsIHNpemUpOworICAg
ICAgICBjbG9zZShmaWxlRGVzY3JpcHRvcik7CiAgICAgfQogCiAgICAgdm9pZCogbWFwOwogICAg
IHNpemVfdCBzaXplOworICAgIGludCBmaWxlRGVzY3JpcHRvcjsKIH07CiAKIHN0YXRpYyB2b2lk
IGRlbGV0ZU1hcFdyYXBwZXIoTWFwV3JhcHBlciogd3JhcHBlcikKQEAgLTExNSw2MyArMTE4LDE2
IEBAIHN0YXRpYyB2b2lkIGRlbGV0ZU1hcFdyYXBwZXIoTWFwV3JhcHBlciogd3JhcHBlcikKICAg
ICBkZWxldGUgd3JhcHBlcjsKIH0KIAotRGF0YSBtYXBGaWxlKGludCBmZCwgc2l6ZV90IG9mZnNl
dCwgc2l6ZV90IHNpemUpCi17Ci0gICAgaWYgKCFzaXplKQotICAgICAgICByZXR1cm4gRGF0YTo6
ZW1wdHkoKTsKLQotICAgIHZvaWQqIG1hcCA9IG1tYXAobnVsbHB0ciwgc2l6ZSwgUFJPVF9SRUFE
LCBNQVBfUFJJVkFURSwgZmQsIG9mZnNldCk7Ci0gICAgaWYgKG1hcCA9PSBNQVBfRkFJTEVEKQot
ICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBEYXRhOjphZG9wdE1hcChtYXAsIHNpemUp
OwotfQotCi1EYXRhIERhdGE6OmFkb3B0TWFwKHZvaWQqIG1hcCwgc2l6ZV90IHNpemUpCitEYXRh
IERhdGE6OmFkb3B0TWFwKHZvaWQqIG1hcCwgc2l6ZV90IHNpemUsIGludCBmZCkKIHsKICAgICBB
U1NFUlQobWFwKTsKICAgICBBU1NFUlQobWFwICE9IE1BUF9GQUlMRUQpOwotICAgIE1hcFdyYXBw
ZXIqIHdyYXBwZXIgPSBuZXcgTWFwV3JhcHBlciB7IG1hcCwgc2l6ZSB9OworICAgIE1hcFdyYXBw
ZXIqIHdyYXBwZXIgPSBuZXcgTWFwV3JhcHBlciB7IG1hcCwgc2l6ZSwgZmQgfTsKICAgICBHUmVm
UHRyPFNvdXBCdWZmZXI+IGJ1ZmZlciA9IGFkb3B0R1JlZihzb3VwX2J1ZmZlcl9uZXdfd2l0aF9v
d25lcihtYXAsIHNpemUsIHdyYXBwZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+
KGRlbGV0ZU1hcFdyYXBwZXIpKSk7Ci0gICAgcmV0dXJuIHsgV1RGOjptb3ZlKGJ1ZmZlciksIERh
dGE6OkJhY2tpbmc6Ok1hcCB9OwotfQotCi1EYXRhIG1hcEZpbGUoY29uc3QgY2hhciogcGF0aCkK
LXsKLSAgICBpbnQgZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZLCAwKTsKLSAgICBpZiAoZmQgPCAw
KQotICAgICAgICByZXR1cm4geyB9OwotICAgIHN0cnVjdCBzdGF0IHN0YXQ7Ci0gICAgaWYgKGZz
dGF0KGZkLCAmc3RhdCkgPCAwKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICB9Ci0gICAgc2l6ZV90IHNpemUgPSBzdGF0LnN0X3NpemU7Ci0gICAgYXV0byBk
YXRhID0gbWFwRmlsZShmZCwgMCwgc2l6ZSk7Ci0gICAgY2xvc2UoZmQpOwotCi0gICAgcmV0dXJu
IGRhdGE7CisgICAgcmV0dXJuIHsgV1RGOjptb3ZlKGJ1ZmZlciksIGZkIH07CiB9CiAKLVNIQTE6
OkRpZ2VzdCBjb21wdXRlU0hBMShjb25zdCBEYXRhJiBkYXRhKQotewotICAgIFNIQTEgc2hhMTsK
LSAgICBkYXRhLmFwcGx5KFsmc2hhMV0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUp
IHsKLSAgICAgICAgc2hhMS5hZGRCeXRlcyhkYXRhLCBzaXplKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfSk7Ci0gICAgU0hBMTo6RGlnZXN0IGRpZ2VzdDsKLSAgICBzaGExLmNvbXB1dGVI
YXNoKGRpZ2VzdCk7Ci0gICAgcmV0dXJuIGRpZ2VzdDsKLX0KIAotYm9vbCBieXRlc0VxdWFsKGNv
bnN0IERhdGEmIGEsIGNvbnN0IERhdGEmIGIpCi17Ci0gICAgaWYgKGEuaXNOdWxsKCkgfHwgYi5p
c051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChhLnNpemUoKSAhPSBiLnNp
emUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiAhbWVtY21wKGEuZGF0YSgp
LCBiLmRhdGEoKSwgYS5zaXplKCkpOwotfQogCiB9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAKaW5kZXggZmQy
ZTY1ZC4uOTYwNzJhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9B
UElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCkBAIC0xMzQsMTkgKzEz
NCw3IEBAIHN0YXRpYyBib29sIGRlY29kZUNvbnRlbnRFeHRlbnNpb25NZXRhRGF0YShDb250ZW50
RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhLCBjCiAKIHN0YXRpYyBib29sIG9wZW5BbmRNYXBD
b250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgcGF0aCwgQ29udGVudEV4dGVuc2lvbk1ldGFE
YXRhJiBtZXRhRGF0YSwgRGF0YSYgZmlsZURhdGEpCiB7Ci0gICAgYXV0byBmZCA9IFdlYkNvcmU6
Om9wZW5GaWxlKHBhdGgsIFdlYkNvcmU6Ok9wZW5Gb3JSZWFkKTsKLSAgICBpZiAoZmQgPT0gV2Vi
Q29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgbG9uZyBsb25nIGZpbGVTaXplID0gMDsKLSAgICBpZiAoIVdlYkNvcmU6OmdldEZpbGVT
aXplKGZkLCBmaWxlU2l6ZSkpIHsKLSAgICAgICAgV2ViQ29yZTo6Y2xvc2VGaWxlKGZkKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGZpbGVEYXRhID0gbWFwRmlsZShmZCwg
MCwgc3RhdGljX2Nhc3Q8c2l6ZV90PihmaWxlU2l6ZSkpOwotICAgIFdlYkNvcmU6OmNsb3NlRmls
ZShmZCk7Ci0KKyAgICBmaWxlRGF0YSA9IG1hcEZpbGUoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uKHBhdGgpLmRhdGEoKSk7CiAgICAgaWYgKGZpbGVEYXRhLmlzTnVsbCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTI3MCw5ICsyNTgsNyBAQCBzdGF0aWMgc3RkOjplcnJv
cl9jb2RlIGNvbXBpbGVkVG9GaWxlKFN0cmluZyYmIGpzb24sIGNvbnN0IFN0cmluZyYgZmluYWxG
aWxlUGF0aAogICAgIGlmIChjb21waWxhdGlvbkNsaWVudC5oYWRFcnJvcldoaWxlV3JpdGluZ1Rv
RmlsZSgpKQogICAgICAgICByZXR1cm4gVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6
OkNvbXBpbGVGYWlsZWQ7CiAgICAgCi0gICAgbWFwcGVkRGF0YSA9IG1hcEZpbGUodGVtcG9yYXJ5
RmlsZUhhbmRsZSwgMCwgbWV0YURhdGEuZmlsZVNpemUoKSk7Ci0gICAgV2ViQ29yZTo6Y2xvc2VG
aWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUpOwotCisgICAgbWFwcGVkRGF0YSA9IGFkb3B0QW5kTWFw
RmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlLCAwLCBtZXRhRGF0YS5maWxlU2l6ZSgpKTsKICAgICBp
ZiAobWFwcGVkRGF0YS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIFVzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOwogCg==
</data>
<flag name="review"
          id="277885"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253196</attachid>
            <date>2015-05-15 06:33:00 -0700</date>
            <delta_ts>2015-05-15 06:34:15 -0700</delta_ts>
            <desc>with xcode project file changes</desc>
            <filename>networkcachedata-cpp.patch</filename>
            <type>text/plain</type>
            <size>31440</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NDM4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDE1LTA1LTE1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBXaGVuIHJlZGlyZWN0aW5nIHRv
IGRhdGEgVVJMIHVzZSBIVFRQIHJlc3BvbnNlIGZvciBzYW1lIG9yaWdpbiBwb2xpY3kgY2hlY2tz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDUwNTQK
KyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjAyOTkwNTAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBodHRwL3Rlc3RzL3NlY3VyaXR5L2NhbnZh
cy1yZW1vdGUtcmVhZC1kYXRhLXVybC1pbWFnZS1yZWRpcmVjdC5odG1sCisKKyAgICAgICAgKiBk
b20vU2NyaXB0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50Ojpu
b3RpZnlGaW5pc2hlZCk6CisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c2FuaXRpemVTY3Jp
cHRFcnJvcik6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0Ojp3b3VsZFRhaW50
T3JpZ2luKToKKyAgICAgICAgKiBsb2FkZXIvSW1hZ2VMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKiBsb2FkZXIvTWVk
aWFSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVJlc291cmNlTG9h
ZGVyOjpyZXNwb25zZVJlY2VpdmVkKToKKyAgICAgICAgKiBsb2FkZXIvVGV4dFRyYWNrTG9hZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0xvYWRlcjo6bm90aWZ5RmluaXNoZWQp
OgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRJbWFnZTo6aXNPcmlnaW5DbGVhbik6CisgICAgICAgICogbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjpw
YXNzZXNBY2Nlc3NDb250cm9sQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3Vy
Y2U6OnBhc3Nlc1NhbWVPcmlnaW5Qb2xpY3lDaGVjayk6CisKKyAgICAgICAgICAgIEZhY3RvciBy
ZXBlYXRlZGx5IHVzZWQgc2FtZSBvcmlnaW4gcG9saWN5IHRlc3QgaW50byBhIGZ1bmN0aW9uLgor
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6cmVkaXJlY3RSZWNlaXZlZCk6CisK
KyAgICAgICAgICAgIFdoZW4gcmVkaXJlY3RpbmcgdG8gYSBkYXRhIFVSTCBzYXZlIHRoZSByZWRp
cmVjdCByZXNwb25zZS4KKworICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OnJlc3Bv
bnNlRm9yU2FtZU9yaWdpblBvbGljeSk6CisKKyAgICAgICAgICAgIEluIGNhc2Ugd2UgZ290IHJl
ZGlyZWN0ZWQgdG8gZGF0YSB1c2UgdGhhdCByZXNwb25zZSBpbnN0ZWFkIG9mIHRoZSBmaW5hbCBk
YXRhIHJlc3BvbnNlIGZvciBwb2xpY3kgY2hlY2tzLgorCisgICAgICAgICogbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlLmg6CisKIDIwMTUtMDUtMTQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8
Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjE4Mzg2MSk6IFtTT1VQ
XSBEb3dubG9hZHMgYXJlIGJyb2tlbiB3aGVuIHVzaW5nIHRoZSBOZXR3b3JrIFByb2Nlc3MKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE4NDMzNSkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzM2LDEwICszMzYsNyBAQCB2b2lkIFNjcmlwdEVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVkKENhY2hl
CiAgICAgaWYgKCFtX2NhY2hlZFNjcmlwdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1f
cmVxdWVzdFVzZXNBY2Nlc3NDb250cm9sCi0gICAgICAgICYmICFtX2VsZW1lbnQuZG9jdW1lbnQo
KS5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KG1fY2FjaGVkU2NyaXB0LT5yZXNwb25zZSgp
LnVybCgpKQotICAgICAgICAmJiAhbV9jYWNoZWRTY3JpcHQtPnBhc3Nlc0FjY2Vzc0NvbnRyb2xD
aGVjayhtX2VsZW1lbnQuZG9jdW1lbnQoKS5zZWN1cml0eU9yaWdpbigpKSkgewotCisgICAgaWYg
KG1fcmVxdWVzdFVzZXNBY2Nlc3NDb250cm9sICYmICFtX2NhY2hlZFNjcmlwdC0+cGFzc2VzU2Ft
ZU9yaWdpblBvbGljeUNoZWNrKCptX2VsZW1lbnQuZG9jdW1lbnQoKS5zZWN1cml0eU9yaWdpbigp
KSkgewogICAgICAgICBkaXNwYXRjaEVycm9yRXZlbnQoKTsKICAgICAgICAgREVQUkVDQVRFRF9E
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgY29uc29sZU1lc3NhZ2UsIChBU0NJSUxpdGVyYWwo
IkNyb3NzLW9yaWdpbiBzY3JpcHQgbG9hZCBkZW5pZWQgYnkgQ3Jvc3MtT3JpZ2luIFJlc291cmNl
IFNoYXJpbmcgcG9saWN5LiIpKSk7CiAgICAgICAgIG1fZWxlbWVudC5kb2N1bWVudCgpLmFkZENv
bnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBjb25z
b2xlTWVzc2FnZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuY3BwCShyZXZpc2lvbiAxODQzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Nyw3ICszNDcsNyBA
QCB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OndpbGxEZXN0cm95CiBib29sIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OnNhbml0aXplU2NyaXB0RXJyb3IoU3RyaW5nJiBlcnJvck1lc3NhZ2Us
IGludCYgbGluZU51bWJlciwgaW50JiBjb2x1bW5OdW1iZXIsIFN0cmluZyYgc291cmNlVVJMLCBD
YWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCkKIHsKICAgICBVUkwgdGFyZ2V0VVJMID0gY29tcGxl
dGVVUkwoc291cmNlVVJMKTsKLSAgICBpZiAoc2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh0
YXJnZXRVUkwpIHx8IChjYWNoZWRTY3JpcHQgJiYgY2FjaGVkU2NyaXB0LT5wYXNzZXNBY2Nlc3ND
b250cm9sQ2hlY2soc2VjdXJpdHlPcmlnaW4oKSkpKQorICAgIGlmIChzZWN1cml0eU9yaWdpbigp
LT5jYW5SZXF1ZXN0KHRhcmdldFVSTCkgfHwgKGNhY2hlZFNjcmlwdCAmJiBjYWNoZWRTY3JpcHQt
PnBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjaygqc2VjdXJpdHlPcmlnaW4oKSkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgZXJyb3JNZXNzYWdlID0gIlNjcmlwdCBlcnJvci4iOwogICAgIHNv
dXJjZVVSTCA9IFN0cmluZygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDE4NDMzNSkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDo6d291bGRUYWludE8KICAgICBpZiAoIWNhY2hlZEltYWdlLT5pbWFnZSgpLT5oYXNTaW5nbGVT
ZWN1cml0eU9yaWdpbigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJldHVybiB3b3Vs
ZFRhaW50T3JpZ2luKGNhY2hlZEltYWdlLT5yZXNwb25zZSgpLnVybCgpKSAmJiAhY2FjaGVkSW1h
Z2UtPnBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhjYW52YXMoKS0+c2VjdXJpdHlPcmlnaW4oKSk7
CisgICAgcmV0dXJuIHdvdWxkVGFpbnRPcmlnaW4oY2FjaGVkSW1hZ2UtPnJlc3BvbnNlRm9yU2Ft
ZU9yaWdpblBvbGljeSgpLnVybCgpKSAmJiAhY2FjaGVkSW1hZ2UtPnBhc3Nlc0FjY2Vzc0NvbnRy
b2xDaGVjaygqY2FudmFzKCktPnNlY3VyaXR5T3JpZ2luKCkpOwogfQogCiBib29sIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQ6OndvdWxkVGFpbnRPcmlnaW4oY29uc3QgSFRNTFZpZGVvRWxlbWVudCog
dmlkZW8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5jcHAJKHJldmlzaW9u
IDE4NDMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4NSwxMCArMjg1LDcgQEAgdm9pZCBJbWFnZUxvYWRlcjo6bm90aWZ5Rmlu
aXNoZWQoQ2FjaGVkUgogICAgIGlmICghbV9oYXNQZW5kaW5nTG9hZEV2ZW50KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoZWxlbWVudCgpLmZhc3RIYXNBdHRyaWJ1dGUoSFRNTE5hbWVzOjpj
cm9zc29yaWdpbkF0dHIpCi0gICAgICAgICYmICFlbGVtZW50KCkuZG9jdW1lbnQoKS5zZWN1cml0
eU9yaWdpbigpLT5jYW5SZXF1ZXN0KGltYWdlKCktPnJlc3BvbnNlKCkudXJsKCkpCi0gICAgICAg
ICYmICFyZXNvdXJjZS0+cGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKGVsZW1lbnQoKS5kb2N1bWVu
dCgpLnNlY3VyaXR5T3JpZ2luKCkpKSB7Ci0KKyAgICBpZiAoZWxlbWVudCgpLmZhc3RIYXNBdHRy
aWJ1dGUoSFRNTE5hbWVzOjpjcm9zc29yaWdpbkF0dHIpICYmICFyZXNvdXJjZS0+cGFzc2VzU2Ft
ZU9yaWdpblBvbGljeUNoZWNrKCplbGVtZW50KCkuZG9jdW1lbnQoKS5zZWN1cml0eU9yaWdpbigp
KSkgewogICAgICAgICBjbGVhckltYWdlV2l0aG91dENvbnNpZGVyaW5nUGVuZGluZ0xvYWRFdmVu
dCgpOwogCiAgICAgICAgIG1faGFzUGVuZGluZ0Vycm9yRXZlbnQgPSB0cnVlOwpJbmRleDogU291
cmNlL1dlYkNvcmUvbG9hZGVyL01lZGlhUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9NZWRpYVJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24g
MTg0MzM1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL01lZGlhUmVzb3VyY2VMb2FkZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NCw5ICs5NCw3IEBAIHZvaWQgTWVkaWFSZXNvdXJjZUxvYWRl
cjo6cmVzcG9uc2VSZWNlaXYKICAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCByZXNvdXJjZSA9
PSBtX3Jlc291cmNlKTsKIAogICAgIFJlZlB0cjxNZWRpYVJlc291cmNlTG9hZGVyPiBwcm90ZWN0
KHRoaXMpOwotICAgIGlmICghbV9jcm9zc09yaWdpbk1vZGUuaXNOdWxsKCkKLSAgICAgICAgJiYg
IW1fZG9jdW1lbnQuc2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXNvdXJjZS0+cmVzcG9u
c2UoKS51cmwoKSkKLSAgICAgICAgJiYgIXJlc291cmNlLT5wYXNzZXNBY2Nlc3NDb250cm9sQ2hl
Y2sobV9kb2N1bWVudC5zZWN1cml0eU9yaWdpbigpKSkgeworICAgIGlmICghbV9jcm9zc09yaWdp
bk1vZGUuaXNOdWxsKCkgJiYgIXJlc291cmNlLT5wYXNzZXNTYW1lT3JpZ2luUG9saWN5Q2hlY2so
Km1fZG9jdW1lbnQuc2VjdXJpdHlPcmlnaW4oKSkpIHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPGNvbnN0IFN0cmluZz4gY29uc29sZU1lc3NhZ2UoIkNyb3NzLW9yaWdpbiBtZWRpYSBy
ZXNvdXJjZSBsb2FkIGRlbmllZCBieSBDcm9zcy1PcmlnaW4gUmVzb3VyY2UgU2hhcmluZyBwb2xp
Y3kuIik7CiAgICAgICAgIG1fZG9jdW1lbnQuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJj
ZTo6U2VjdXJpdHksIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIGNvbnNvbGVNZXNzYWdlLmdldCgpKTsK
ICAgICAgICAgbV9kaWRQYXNzQWNjZXNzQ29udHJvbENoZWNrID0gZmFsc2U7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmNwcAkocmV2aXNpb24gMTg0MzM1KQor
KysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRUcmFja0xvYWRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNSwxMiArMTI1LDggQEAgdm9pZCBUZXh0VHJhY2tMb2FkZXI6Om5vdGlmeUZpbmlz
aGVkKENhYwogICAgIEFTU0VSVChtX3Jlc291cmNlID09IHJlc291cmNlKTsKIAogICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQpOwotICAgIGlmICghbV9jcm9zc09yaWdpbk1vZGUuaXNOdWxsKCkKLSAgICAgICAgJiYgIWRv
Y3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHJlc291cmNlLT5yZXNwb25zZSgp
LnVybCgpKQotICAgICAgICAmJiAhcmVzb3VyY2UtPnBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhk
b2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSkpIHsKLQorICAgIGlmICghbV9jcm9zc09yaWdpbk1v
ZGUuaXNOdWxsKCkgJiYgIXJlc291cmNlLT5wYXNzZXNTYW1lT3JpZ2luUG9saWN5Q2hlY2soKmRv
Y3VtZW50LT5zZWN1cml0eU9yaWdpbigpKSkKICAgICAgICAgY29yc1BvbGljeVByZXZlbnRlZExv
YWQoKTsKLSAgICB9CiAKICAgICBpZiAobV9zdGF0ZSAhPSBGYWlsZWQpIHsKICAgICAgICAgcHJv
Y2Vzc05ld0N1ZURhdGEocmVzb3VyY2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCShyZXZpc2lvbiAxODQzMzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTAsOSAr
NTEwLDkgQEAgYm9vbCBDYWNoZWRJbWFnZTo6aXNPcmlnaW5DbGVhbihTZWN1cml0eQogewogICAg
IGlmICghaW1hZ2UoKS0+aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChwYXNzZXNBY2Nlc3NDb250cm9sQ2hlY2soc2VjdXJpdHlPcmlnaW4p
KQorICAgIGlmIChwYXNzZXNBY2Nlc3NDb250cm9sQ2hlY2soKnNlY3VyaXR5T3JpZ2luKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuICFzZWN1cml0eU9yaWdpbi0+dGFpbnRzQ2Fu
dmFzKHJlc3BvbnNlKCkudXJsKCkpOworICAgIHJldHVybiAhc2VjdXJpdHlPcmlnaW4tPnRhaW50
c0NhbnZhcyhyZXNwb25zZUZvclNhbWVPcmlnaW5Qb2xpY3koKS51cmwoKSk7CiB9CiAKIENhY2hl
ZFJlc291cmNlOjpSZXZhbGlkYXRpb25EZWNpc2lvbiBDYWNoZWRJbWFnZTo6bWFrZVJldmFsaWRh
dGlvbkRlY2lzaW9uKENhY2hlUG9saWN5IGNhY2hlUG9saWN5KSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCShyZXZpc2lvbiAx
ODQzMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMzMsMTAgKzMzMywxNyBAQCB2b2lkIENhY2hlZFJlc291cmNl
OjpmaW5pc2goKQogICAgICAgICBtX3N0YXR1cyA9IENhY2hlZDsKIH0KIAotYm9vbCBDYWNoZWRS
ZXNvdXJjZTo6cGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0
eU9yaWdpbikKK2Jvb2wgQ2FjaGVkUmVzb3VyY2U6OnBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhT
ZWN1cml0eU9yaWdpbiYgc2VjdXJpdHlPcmlnaW4pCiB7CiAgICAgU3RyaW5nIGVycm9yRGVzY3Jp
cHRpb247Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhtX3Jl
c3BvbnNlLCByZXNvdXJjZVJlcXVlc3QoKS5hbGxvd0Nvb2tpZXMoKSA/IEFsbG93U3RvcmVkQ3Jl
ZGVudGlhbHMgOiBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIHNlY3VyaXR5T3JpZ2luLCBl
cnJvckRlc2NyaXB0aW9uKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6cGFzc2VzQWNjZXNzQ29udHJv
bENoZWNrKHJlc3BvbnNlKCksIHJlc291cmNlUmVxdWVzdCgpLmFsbG93Q29va2llcygpID8gQWxs
b3dTdG9yZWRDcmVkZW50aWFscyA6IERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFscywgJnNlY3Vy
aXR5T3JpZ2luLCBlcnJvckRlc2NyaXB0aW9uKTsKK30KKworYm9vbCBDYWNoZWRSZXNvdXJjZTo6
cGFzc2VzU2FtZU9yaWdpblBvbGljeUNoZWNrKFNlY3VyaXR5T3JpZ2luJiBzZWN1cml0eU9yaWdp
bikKK3sKKyAgICBpZiAoc2VjdXJpdHlPcmlnaW4uY2FuUmVxdWVzdChyZXNwb25zZUZvclNhbWVP
cmlnaW5Qb2xpY3koKS51cmwoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBw
YXNzZXNBY2Nlc3NDb250cm9sQ2hlY2soc2VjdXJpdHlPcmlnaW4pOwogfQogCiBib29sIENhY2hl
ZFJlc291cmNlOjppc0V4cGlyZWQoKSBjb25zdApAQCAtMzYyLDE0ICszNjksMjQgQEAgc3RkOjpj
aHJvbm86Om1pY3Jvc2Vjb25kcyBDYWNoZWRSZXNvdXJjZQogICAgIHJldHVybiBjb21wdXRlRnJl
c2huZXNzTGlmZXRpbWVGb3JIVFRQRmFtaWx5KHJlc3BvbnNlLCBtX3Jlc3BvbnNlVGltZXN0YW1w
KTsKIH0KIAotdm9pZCBDYWNoZWRSZXNvdXJjZTo6cmVkaXJlY3RSZWNlaXZlZChSZXNvdXJjZVJl
cXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3ZvaWQgQ2FjaGVkUmVz
b3VyY2U6OnJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKICAgICBtX3JlcXVlc3RlZEZyb21OZXR3b3Jr
aW5nTGF5ZXIgPSB0cnVlOwogICAgIGlmIChyZXNwb25zZS5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuOworCisgICAgLy8gUmVkaXJlY3QgdG8gZGF0YTogVVJMIHVzZXMgdGhlIGxhc3QgSFRUUCBy
ZXNwb25zZSBmb3IgU09QLgorICAgIGlmIChyZXNwb25zZS5pc0hUVFAoKSAmJiByZXF1ZXN0LnVy
bCgpLnByb3RvY29sSXNEYXRhKCkpCisgICAgICAgIG1fcmVkaXJlY3RSZXNwb25zZUZvclNhbWVP
cmlnaW5Qb2xpY3kgPSByZXNwb25zZTsKKwogICAgIHVwZGF0ZVJlZGlyZWN0Q2hhaW5TdGF0dXMo
bV9yZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMsIHJlc3BvbnNlKTsKIH0KIAorY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgQ2FjaGVkUmVzb3VyY2U6OnJlc3BvbnNlRm9yU2FtZU9yaWdpblBvbGljeSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVkaXJlY3RSZXNwb25zZUZvclNhbWVPcmlnaW5Qb2xp
Y3kuaXNOdWxsKCkgPyBtX3Jlc3BvbnNlIDogbV9yZWRpcmVjdFJlc3BvbnNlRm9yU2FtZU9yaWdp
blBvbGljeTsKK30KKwogdm9pZCBDYWNoZWRSZXNvdXJjZTo6cmVzcG9uc2VSZWNlaXZlZChjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKICAgICBzZXRSZXNwb25zZShyZXNwb25z
ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2Uu
aAkocmV2aXNpb24gMTg0MzM1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw3ICsxODAsOCBAQCBwdWJsaWM6CiAg
ICAgLy8gVXBkYXRlcyB0aGUgZXhwaXJlIGRhdGUgb24gdGhlIGNhY2hlIGVudHJ5IGZpbGUKICAg
ICB2b2lkIGZpbmlzaCgpOwogCi0gICAgYm9vbCBwYXNzZXNBY2Nlc3NDb250cm9sQ2hlY2soU2Vj
dXJpdHlPcmlnaW4qKTsKKyAgICBib29sIHBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhTZWN1cml0
eU9yaWdpbiYpOworICAgIGJvb2wgcGFzc2VzU2FtZU9yaWdpblBvbGljeUNoZWNrKFNlY3VyaXR5
T3JpZ2luJik7CiAKICAgICAvLyBDYWxsZWQgYnkgdGhlIGNhY2hlIGlmIHRoZSBvYmplY3QgaGFz
IGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZQogICAgIC8vIHdoaWxlIHN0aWxsIGJlaW5nIHJl
ZmVyZW5jZWQuIFRoaXMgbWVhbnMgdGhlIG9iamVjdCBzaG91bGQgZGVsZXRlIGl0c2VsZgpAQCAt
MTk3LDYgKzE5OCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVzcG9uc2VSZWNlaXZl
ZChjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgdm9pZCBzZXRSZXNwb25zZShjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkgeyBtX3Jlc3BvbnNlID0gcmVzcG9uc2U7IH0KICAg
ICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
cG9uc2U7IH0KKyAgICAvLyBUaGlzIGlzIHRoZSBzYW1lIGFzIHJlc3BvbnNlKCkgZXhjZXB0IGFm
dGVyIEhUVFAgcmVkaXJlY3QgdG8gZGF0YTogVVJMLgorICAgIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlRm9yU2FtZU9yaWdpblBvbGljeSgpIGNvbnN0OwogCiAgICAgYm9vbCBjYW5E
ZWxldGUoKSBjb25zdCB7IHJldHVybiAhaGFzQ2xpZW50cygpICYmICFtX2xvYWRlciAmJiAhbV9w
cmVsb2FkQ291bnQgJiYgIW1faGFuZGxlQ291bnQgJiYgIW1fcmVzb3VyY2VUb1JldmFsaWRhdGUg
JiYgIW1fcHJveHlSZXNvdXJjZTsgfQogICAgIGJvb2wgaGFzT25lSGFuZGxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYW5kbGVDb3VudCA9PSAxOyB9CkBAIC0yNjgsNiArMjcxLDcgQEAgcHJvdGVjdGVk
OgogICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbV9sb2FkZXI7CiAgICAgUmVzb3VyY2VM
b2FkZXJPcHRpb25zIG1fb3B0aW9uczsKICAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7
CisgICAgUmVzb3VyY2VSZXNwb25zZSBtX3JlZGlyZWN0UmVzcG9uc2VGb3JTYW1lT3JpZ2luUG9s
aWN5OwogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKICAgICBEZWZlcnJhYmxlT25l
U2hvdFRpbWVyIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyOwogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxODQzMzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSw0MiBAQAorMjAxNS0wNS0xNSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxj
Z2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgTmV0d29yayBDYWNoZTogTWFrZSBEYXRhOjph
ZG9wdE1hcCB0YWtlIHRoZSBvd25lcnNoaXAgb2YgdGhlIGZpbGUgZGVzY3JpcHRvcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0OTUwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSXQgd2lsbCBiZSByZXF1
aXJlZCB0byBpbXBsZW1lbnQgU2hhcmVhYmxlUmVzb3VyY2UgZm9yIHNvdXAKKyAgICAgICAgbmV0
d29yayBiYWNrZW5kLiBBbHNvIG1vdmUgdGhlIGNvbW1vbiBjb2RlIG9mIERhdGEgdG8gYSBjb21t
b24KKyAgICAgICAgZmlsZSBhbmQgYWRkIG1hcFRvRmlsZSgpLiBUaGUgbWFwRmlsZSB2ZXJzaW9u
IHRoYXQgcmVjZWl2ZXMgYSBmaWxlCisgICAgICAgIGRlc2NyaXB0b3IgaGFzIGJlZW4gcmVuYW1l
ZCB0byBhZG9wdEFuZE1hcEZpbGUoKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBBZGQg
bmV3IGZpbGUgdG8gY29tcGlsYXRpb24uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OkJsb2JTdG9yYWdlOjphZGQpOiBVc2UgbWFwVG9GaWxlKCkuCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6Om1hcFRvRmlsZSk6IFdyaXRlIHRoZSBkYXRhIHRvIHRo
ZQorICAgICAgICBnaXZlbiBmaWxlIGFuZCBtYXAgaXQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6bWFwRmlsZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6YWRvcHRB
bmRNYXBGaWxlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpjb21wdXRlU0hBMSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Ynl0ZXNFcXVhbCk6CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlOjpEYXRhOjphZG9wdE1hcCk6IENsb3NlIHRoZSBmaWxlIGRlc2NyaXB0
b3IuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OkRhdGEpOiBVc2UgYSBj
b25zdHJ1Y3RvciB0aGF0CisgICAgICAgIHJlY2VpdmVzIGEgZmlsZSBkZXNjcmlwdG9yIGluc3Rl
YWQgb2YgdGhlIG9uZSByZWNlaXZpbmcKKyAgICAgICAgQmFja2luZy4gSWYgdGhlIGZpbGUgZGVz
Y3JpcHRvciBpcyBub3QgLTEgdGhlbiB0aGUgRGF0YSBpcyBhIG1hcC4KKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlOjpNYXBXcmFwcGVyOjp+TWFwV3JhcHBlcik6IEFsc28gY2xvc2UgdGhl
CisgICAgICAgIGZpbGUgZGVzY3JpcHRvci4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpEYXRhOjphZG9wdE1hcCk6IFBhc3MgdGhlIGZpbGUgZGVzY3JpcHRvcgorICAgICAgICB0byB0
aGUgTWFwV3JhcHBlciBhbmQgY3JlYXRlIHRoZSBEYXRhIHBhc3NpbmcgdGhlIGZpbGUgZGVzY3Jp
cHRvci4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUuY3BwOgorICAgICAgICAoQVBJOjpvcGVuQW5kTWFwQ29udGVudEV4dGVuc2lvbik6IFVzZSBt
YXBGaWxlIHRoYXQgcmVjZWl2ZXMgYQorICAgICAgICBmaWxlIHBhdGguCisgICAgICAgIChBUEk6
OmNvbXBpbGVkVG9GaWxlKTogVXNlIGFkb3B0QW5kTWFwRmlsZSgpIGFuZCBkb24ndCBjbG9zZSB0
aGUKKyAgICAgICAgZGVzY3JpcHRvci4KKwogMjAxNS0wNS0xNCAgWmFuIERvYmVyc2VrICA8emRv
YmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQWRkIG1pc3NpbmcgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpIGJ1aWxkIGd1YXJkcwpJbmRleDogU291cmNlL1dlYktpdDIvQ01h
a2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDE4NDMzNSkKKysrIFNvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjUsNiArMTY1LDcgQEAgc2V0KE5ldHdvcmtQcm9jZXNzX0NPTU1PTl9T
T1VSQ0VTCiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAogICAgIE5l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmNwcAogICAgIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVycy5jcHAKKyAgICBOZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZURlY29kZXIuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRW5jb2Rlci5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRy
eS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZUJsb2JTdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVCbG9iU3RvcmFnZS5jcHAJKHJldmlzaW9uIDE4NDMz
NSkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUJs
b2JTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDM3ICsxMDEsMTMgQEAgQmxvYlN0
b3JhZ2U6OkJsb2IgQmxvYlN0b3JhZ2U6OmFkZChjb25zdAogICAgICAgICB1bmxpbmsoYmxvYlBh
dGguZGF0YSgpKTsKICAgICB9CiAKLSAgICBpbnQgZmQgPSBvcGVuKGJsb2JQYXRoLmRhdGEoKSwg
T19DUkVBVCB8IE9fRVhDTCB8IE9fUkRXUiAsIFNfSVJVU1IgfCBTX0lXVVNSKTsKLSAgICBpZiAo
ZmQgPCAwKQorICAgIGF1dG8gbWFwcGVkRGF0YSA9IGRhdGEubWFwVG9GaWxlKGJsb2JQYXRoLmRh
dGEoKSk7CisgICAgaWYgKG1hcHBlZERhdGEuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB7IH07
CiAKLSAgICBzaXplX3Qgc2l6ZSA9IGRhdGEuc2l6ZSgpOwotICAgIGlmIChmdHJ1bmNhdGUoZmQs
IHNpemUpIDwgMCkgewotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0g
ICAgfQotCi0gICAgdm9pZCogbWFwID0gbW1hcChudWxscHRyLCBzaXplLCBQUk9UX1JFQUQgfCBQ
Uk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCwgMCk7Ci0gICAgY2xvc2UoZmQpOwotCi0gICAgaWYg
KG1hcCA9PSBNQVBfRkFJTEVEKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgdWludDhfdCog
bWFwRGF0YSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtYXApOwotICAgIGRhdGEuYXBwbHkoWyZt
YXBEYXRhXShjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGJ5dGVzU2l6ZSkgewotICAgICAg
ICBtZW1jcHkobWFwRGF0YSwgYnl0ZXMsIGJ5dGVzU2l6ZSk7Ci0gICAgICAgIG1hcERhdGEgKz0g
Ynl0ZXNTaXplOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9KTsKLQotICAgIC8vIERyb3Ag
dGhlIHdyaXRlIHBlcm1pc3Npb24uCi0gICAgbXByb3RlY3QobWFwLCBzaXplLCBQUk9UX1JFQUQp
OwotCi0gICAgYXV0byBtYXBwZWREYXRhID0gRGF0YTo6YWRvcHRNYXAobWFwLCBzaXplKTsKLQog
ICAgIGxpbmsoYmxvYlBhdGguZGF0YSgpLCBsaW5rUGF0aC5kYXRhKCkpOwogCi0gICAgbV9hcHBy
b3hpbWF0ZVNpemUgKz0gc2l6ZTsKKyAgICBtX2FwcHJveGltYXRlU2l6ZSArPSBtYXBwZWREYXRh
LnNpemUoKTsKIAogICAgIHJldHVybiB7IG1hcHBlZERhdGEsIGhhc2ggfTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZURhdGEuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29y
a0NhY2hlRGF0YS5oIgorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisKKyNpbmNsdWRlIDxm
Y250bC5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKKworRGF0YSBEYXRh
OjptYXBUb0ZpbGUoY29uc3QgY2hhciogcGF0aCkgY29uc3QKK3sKKyAgICBpbnQgZmQgPSBvcGVu
KHBhdGgsIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1JEV1IgLCBTX0lSVVNSIHwgU19JV1VTUik7Cisg
ICAgaWYgKGZkIDwgMCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmIChmdHJ1bmNhdGUo
ZmQsIG1fc2l6ZSkgPCAwKSB7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICB9CisKKyAgICB2b2lkKiBtYXAgPSBtbWFwKG51bGxwdHIsIG1fc2l6ZSwgUFJPVF9S
RUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQsIDApOworICAgIGlmIChtYXAgPT0gTUFQ
X0ZBSUxFRCkgeworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAg
fQorCisgICAgdWludDhfdCogbWFwRGF0YSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtYXApOwor
ICAgIGFwcGx5KFsmbWFwRGF0YV0oY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBieXRlc1Np
emUpIHsKKyAgICAgICAgbWVtY3B5KG1hcERhdGEsIGJ5dGVzLCBieXRlc1NpemUpOworICAgICAg
ICBtYXBEYXRhICs9IGJ5dGVzU2l6ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSk7CisK
KyAgICAvLyBEcm9wIHRoZSB3cml0ZSBwZXJtaXNzaW9uLgorICAgIG1wcm90ZWN0KG1hcCwgbV9z
aXplLCBQUk9UX1JFQUQpOworCisgICAgcmV0dXJuIERhdGE6OmFkb3B0TWFwKG1hcCwgbV9zaXpl
LCBmZCk7Cit9CisKK0RhdGEgbWFwRmlsZShjb25zdCBjaGFyKiBwYXRoKQoreworICAgIGludCBm
ZCA9IG9wZW4ocGF0aCwgT19SRE9OTFksIDApOworICAgIGlmIChmZCA8IDApCisgICAgICAgIHJl
dHVybiB7IH07CisgICAgc3RydWN0IHN0YXQgc3RhdDsKKyAgICBpZiAoZnN0YXQoZmQsICZzdGF0
KSA8IDApIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0K
KyAgICBzaXplX3Qgc2l6ZSA9IHN0YXQuc3Rfc2l6ZTsKKyAgICBpZiAoIXNpemUpIHsKKyAgICAg
ICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm4gRGF0YTo6ZW1wdHkoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gYWRvcHRBbmRNYXBGaWxlKGZkLCAwLCBzaXplKTsKK30KKworRGF0YSBhZG9wdEFu
ZE1hcEZpbGUoaW50IGZkLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBpZiAo
IXNpemUpCisgICAgICAgIHJldHVybiBEYXRhOjplbXB0eSgpOworCisgICAgdm9pZCogbWFwID0g
bW1hcChudWxscHRyLCBzaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgb2Zmc2V0KTsK
KyAgICBpZiAobWFwID09IE1BUF9GQUlMRUQpIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAg
ICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiBEYXRhOjphZG9wdE1hcChtYXAsIHNp
emUsIGZkKTsKK30KKworU0hBMTo6RGlnZXN0IGNvbXB1dGVTSEExKGNvbnN0IERhdGEmIGRhdGEp
Cit7CisgICAgU0hBMSBzaGExOworICAgIGRhdGEuYXBwbHkoWyZzaGExXShjb25zdCB1aW50OF90
KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgICAgICBzaGExLmFkZEJ5dGVzKGRhdGEsIHNpemUp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9KTsKKyAgICBTSEExOjpEaWdlc3QgZGlnZXN0
OworICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsKKyAgICByZXR1cm4gZGlnZXN0OworfQor
Citib29sIGJ5dGVzRXF1YWwoY29uc3QgRGF0YSYgYSwgY29uc3QgRGF0YSYgYikKK3sKKyAgICBp
ZiAoYS5pc051bGwoKSB8fCBiLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKGEuc2l6ZSgpICE9IGIuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuICFtZW1jbXAoYS5kYXRhKCksIGIuZGF0YSgpLCBhLnNpemUoKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIE5ldHdvcmtDYWNoZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyAj
aWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oCShyZXZpc2lvbiAxODQz
MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVE
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCwxNCArMTA0LDE0IEBAIHB1YmxpYzoKICAgICBE
YXRhKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwogCiAgICAgc3RhdGljIERhdGEgZW1wdHkoKTsK
LSAgICBzdGF0aWMgRGF0YSBhZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCk7CisgICAgc3RhdGlj
IERhdGEgYWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3QsIGludCBmZCk7CiAKLSAgICBlbnVtIGNs
YXNzIEJhY2tpbmcgeyBCdWZmZXIsIE1hcCB9OwogI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGVu
dW0gY2xhc3MgQmFja2luZyB7IEJ1ZmZlciwgTWFwIH07CiAgICAgRGF0YShEaXNwYXRjaFB0cjxk
aXNwYXRjaF9kYXRhX3Q+LCBCYWNraW5nID0gQmFja2luZzo6QnVmZmVyKTsKICNlbmRpZgogI2lm
IFVTRShTT1VQKQotICAgIERhdGEoR1JlZlB0cjxTb3VwQnVmZmVyPiYmLCBCYWNraW5nID0gQmFj
a2luZzo6QnVmZmVyKTsKKyAgICBEYXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4mJiwgaW50IGZkID0g
LTEpOwogI2VuZGlmCiAgICAgYm9vbCBpc051bGwoKSBjb25zdDsKICAgICBib29sIGlzRW1wdHko
KSBjb25zdCB7IHJldHVybiAhbV9zaXplOyB9CkBAIC0xMjQsNiArMTI0LDggQEAgcHVibGljOgog
CiAgICAgYm9vbCBhcHBseShjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKGNvbnN0IHVpbnQ4X3Qq
LCBzaXplX3QpPiYmKSBjb25zdDsKIAorICAgIERhdGEgbWFwVG9GaWxlKGNvbnN0IGNoYXIqIHBh
dGgpIGNvbnN0OworCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgZGlzcGF0Y2hfZGF0YV90IGRp
c3BhdGNoRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGF0Y2hEYXRhLmdldCgpOyB9CiAjZW5k
aWYKQEAgLTEzNyw2ICsxMzksNyBAQCBwcml2YXRlOgogI2VuZGlmCiAjaWYgVVNFKFNPVVApCiAg
ICAgbXV0YWJsZSBHUmVmUHRyPFNvdXBCdWZmZXI+IG1fYnVmZmVyOworICAgIGludCBtX2ZpbGVE
ZXNjcmlwdG9yIHsgLTEgfTsKICNlbmRpZgogICAgIG11dGFibGUgY29uc3QgdWludDhfdCogbV9k
YXRhIHsgbnVsbHB0ciB9OwogICAgIHNpemVfdCBtX3NpemUgeyAwIH07CkBAIC0xNDUsNyArMTQ4
LDcgQEAgcHJpdmF0ZToKIAogRGF0YSBjb25jYXRlbmF0ZShjb25zdCBEYXRhJiwgY29uc3QgRGF0
YSYpOwogYm9vbCBieXRlc0VxdWFsKGNvbnN0IERhdGEmLCBjb25zdCBEYXRhJik7Ci1EYXRhIG1h
cEZpbGUoaW50IGZkLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QpOworRGF0YSBhZG9wdEFuZE1hcEZp
bGUoaW50IGZkLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QpOwogRGF0YSBtYXBGaWxlKGNvbnN0IGNo
YXIqIHBhdGgpOwogU0hBMTo6RGlnZXN0IGNvbXB1dGVTSEExKGNvbnN0IERhdGEmKTsKIApJbmRl
eDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNv
Y29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQkocmV2aXNpb24gMTg0MzM1KQorKysgU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Myw2MyArOTMsMTcgQEAgRGF0YSBjb25jYXRlbmF0ZShjb25zdCBEYXRh
JiBhLCBjb25zdCBEYQogICAgIHJldHVybiB7IGFkb3B0RGlzcGF0Y2goZGlzcGF0Y2hfZGF0YV9j
cmVhdGVfY29uY2F0KGEuZGlzcGF0Y2hEYXRhKCksIGIuZGlzcGF0Y2hEYXRhKCkpKSB9OwogfQog
Ci1EYXRhIERhdGE6OmFkb3B0TWFwKHZvaWQqIG1hcCwgc2l6ZV90IHNpemUpCitEYXRhIERhdGE6
OmFkb3B0TWFwKHZvaWQqIG1hcCwgc2l6ZV90IHNpemUsIGludCBmZCkKIHsKICAgICBBU1NFUlQo
bWFwICYmIG1hcCAhPSBNQVBfRkFJTEVEKTsKKyAgICBjbG9zZShmZCk7CiAgICAgYXV0byBib2R5
TWFwID0gYWRvcHREaXNwYXRjaChkaXNwYXRjaF9kYXRhX2NyZWF0ZShtYXAsIHNpemUsIGRpc3Bh
dGNoX2dldF9tYWluX3F1ZXVlKCksIFttYXAsIHNpemVdIHsKICAgICAgICAgbXVubWFwKG1hcCwg
c2l6ZSk7CiAgICAgfSkpOwogICAgIHJldHVybiB7IGJvZHlNYXAsIERhdGE6OkJhY2tpbmc6Ok1h
cCB9OwogfQogCi1EYXRhIG1hcEZpbGUoaW50IGZkLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6
ZSkKLXsKLSAgICBpZiAoIXNpemUpCi0gICAgICAgIHJldHVybiBEYXRhOjplbXB0eSgpOwotCi0g
ICAgdm9pZCogbWFwID0gbW1hcChudWxscHRyLCBzaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRF
LCBmZCwgb2Zmc2V0KTsKLSAgICBpZiAobWFwID09IE1BUF9GQUlMRUQpCi0gICAgICAgIHJldHVy
biB7IH07Ci0gICAgcmV0dXJuIERhdGE6OmFkb3B0TWFwKG1hcCwgc2l6ZSk7Ci19Ci0KLURhdGEg
bWFwRmlsZShjb25zdCBjaGFyKiBwYXRoKQotewotICAgIGludCBmZCA9IG9wZW4ocGF0aCwgT19S
RE9OTFksIDApOwotICAgIGlmIChmZCA8IDApCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgc3Ry
dWN0IHN0YXQgc3RhdDsKLSAgICBpZiAoZnN0YXQoZmQsICZzdGF0KSA8IDApIHsKLSAgICAgICAg
Y2xvc2UoZmQpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLSAgICBzaXplX3Qgc2l6ZSA9
IHN0YXQuc3Rfc2l6ZTsKLSAgICBhdXRvIGRhdGEgPSBtYXBGaWxlKGZkLCAwLCBzaXplKTsKLSAg
ICBjbG9zZShmZCk7Ci0KLSAgICByZXR1cm4gZGF0YTsKLX0KLQotU0hBMTo6RGlnZXN0IGNvbXB1
dGVTSEExKGNvbnN0IERhdGEmIGRhdGEpCi17Ci0gICAgU0hBMSBzaGExOwotICAgIGRhdGEuYXBw
bHkoWyZzaGExXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgewotICAgICAgICBz
aGExLmFkZEJ5dGVzKGRhdGEsIHNpemUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9KTsK
LSAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwotICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsK
LSAgICByZXR1cm4gZGlnZXN0OwotfQogCi1ib29sIGJ5dGVzRXF1YWwoY29uc3QgRGF0YSYgYSwg
Y29uc3QgRGF0YSYgYikKLXsKLSAgICBpZiAoYS5pc051bGwoKSB8fCBiLmlzTnVsbCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGEuc2l6ZSgpICE9IGIuc2l6ZSgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuICFtZW1jbXAoYS5kYXRhKCksIGIuZGF0YSgpLCBh
LnNpemUoKSk7Ci19CiAKIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAJKHJldmlz
aW9uIDE4NDMzNSkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGFTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTAgKzQ1LDExIEBAIERh
dGE6OkRhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHMKICAgICBtX2J1ZmZlciA9IGFk
b3B0R1JlZihzb3VwX2J1ZmZlcl9uZXdfd2l0aF9vd25lcihjb3BpZWREYXRhLCBzaXplLCBjb3Bp
ZWREYXRhLCBmYXN0RnJlZSkpOwogfQogCi1EYXRhOjpEYXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4m
JiBidWZmZXIsIEJhY2tpbmcgYmFja2luZykKK0RhdGE6OkRhdGEoR1JlZlB0cjxTb3VwQnVmZmVy
PiYmIGJ1ZmZlciwgaW50IGZkKQogICAgIDogbV9idWZmZXIoYnVmZmVyKQorICAgICwgbV9maWxl
RGVzY3JpcHRvcihmZCkKICAgICAsIG1fc2l6ZShidWZmZXIgPyBidWZmZXItPmxlbmd0aCA6IDAp
Ci0gICAgLCBtX2lzTWFwKG1fc2l6ZSAmJiBiYWNraW5nID09IEJhY2tpbmc6Ok1hcCkKKyAgICAs
IG1faXNNYXAobV9zaXplICYmIGZkICE9IC0xKQogewogfQogCkBAIC0xMDQsMTAgKzEwNSwxMiBA
QCBzdHJ1Y3QgTWFwV3JhcHBlciB7CiAgICAgfk1hcFdyYXBwZXIoKQogICAgIHsKICAgICAgICAg
bXVubWFwKG1hcCwgc2l6ZSk7CisgICAgICAgIGNsb3NlKGZpbGVEZXNjcmlwdG9yKTsKICAgICB9
CiAKICAgICB2b2lkKiBtYXA7CiAgICAgc2l6ZV90IHNpemU7CisgICAgaW50IGZpbGVEZXNjcmlw
dG9yOwogfTsKIAogc3RhdGljIHZvaWQgZGVsZXRlTWFwV3JhcHBlcihNYXBXcmFwcGVyKiB3cmFw
cGVyKQpAQCAtMTE1LDYzICsxMTgsMTYgQEAgc3RhdGljIHZvaWQgZGVsZXRlTWFwV3JhcHBlcihN
YXBXcmFwcGVyKgogICAgIGRlbGV0ZSB3cmFwcGVyOwogfQogCi1EYXRhIG1hcEZpbGUoaW50IGZk
LCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBpZiAoIXNpemUpCi0gICAgICAg
IHJldHVybiBEYXRhOjplbXB0eSgpOwotCi0gICAgdm9pZCogbWFwID0gbW1hcChudWxscHRyLCBz
aXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgb2Zmc2V0KTsKLSAgICBpZiAobWFwID09
IE1BUF9GQUlMRUQpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIERhdGE6OmFkb3B0
TWFwKG1hcCwgc2l6ZSk7Ci19Ci0KLURhdGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXpl
X3Qgc2l6ZSkKK0RhdGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3Qgc2l6ZSwgaW50
IGZkKQogewogICAgIEFTU0VSVChtYXApOwogICAgIEFTU0VSVChtYXAgIT0gTUFQX0ZBSUxFRCk7
Ci0gICAgTWFwV3JhcHBlciogd3JhcHBlciA9IG5ldyBNYXBXcmFwcGVyIHsgbWFwLCBzaXplIH07
CisgICAgTWFwV3JhcHBlciogd3JhcHBlciA9IG5ldyBNYXBXcmFwcGVyIHsgbWFwLCBzaXplLCBm
ZCB9OwogICAgIEdSZWZQdHI8U291cEJ1ZmZlcj4gYnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVm
ZmVyX25ld193aXRoX293bmVyKG1hcCwgc2l6ZSwgd3JhcHBlciwgcmVpbnRlcnByZXRfY2FzdDxH
RGVzdHJveU5vdGlmeT4oZGVsZXRlTWFwV3JhcHBlcikpKTsKLSAgICByZXR1cm4geyBXVEY6Om1v
dmUoYnVmZmVyKSwgRGF0YTo6QmFja2luZzo6TWFwIH07Ci19Ci0KLURhdGEgbWFwRmlsZShjb25z
dCBjaGFyKiBwYXRoKQotewotICAgIGludCBmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFksIDApOwot
ICAgIGlmIChmZCA8IDApCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgc3RydWN0IHN0YXQgc3Rh
dDsKLSAgICBpZiAoZnN0YXQoZmQsICZzdGF0KSA8IDApIHsKLSAgICAgICAgY2xvc2UoZmQpOwot
ICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLSAgICBzaXplX3Qgc2l6ZSA9IHN0YXQuc3Rfc2l6
ZTsKLSAgICBhdXRvIGRhdGEgPSBtYXBGaWxlKGZkLCAwLCBzaXplKTsKLSAgICBjbG9zZShmZCk7
Ci0KLSAgICByZXR1cm4gZGF0YTsKKyAgICByZXR1cm4geyBXVEY6Om1vdmUoYnVmZmVyKSwgZmQg
fTsKIH0KIAotU0hBMTo6RGlnZXN0IGNvbXB1dGVTSEExKGNvbnN0IERhdGEmIGRhdGEpCi17Ci0g
ICAgU0hBMSBzaGExOwotICAgIGRhdGEuYXBwbHkoWyZzaGExXShjb25zdCB1aW50OF90KiBkYXRh
LCBzaXplX3Qgc2l6ZSkgewotICAgICAgICBzaGExLmFkZEJ5dGVzKGRhdGEsIHNpemUpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9KTsKLSAgICBTSEExOjpEaWdlc3QgZGlnZXN0OwotICAg
IHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsKLSAgICByZXR1cm4gZGlnZXN0OwotfQogCi1ib29s
IGJ5dGVzRXF1YWwoY29uc3QgRGF0YSYgYSwgY29uc3QgRGF0YSYgYikKLXsKLSAgICBpZiAoYS5p
c051bGwoKSB8fCBiLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGEu
c2l6ZSgpICE9IGIuc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuICFt
ZW1jbXAoYS5kYXRhKCksIGIuZGF0YSgpLCBhLnNpemUoKSk7Ci19CiAKIH0gLy8gbmFtZXNwYWNl
IE5ldHdvcmtDYWNoZQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZS5jcHAJKHJldmlzaW9uIDE4NDMzNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzNCwxOSArMTM0LDcgQEAgc3RhdGljIGJvb2wgZGVjb2RlQ29udGVudEV4dGVuc2lvbk1ldGFE
YQogCiBzdGF0aWMgYm9vbCBvcGVuQW5kTWFwQ29udGVudEV4dGVuc2lvbihjb25zdCBTdHJpbmcm
IHBhdGgsIENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0YURhdGEsIERhdGEmIGZpbGVEYXRh
KQogewotICAgIGF1dG8gZmQgPSBXZWJDb3JlOjpvcGVuRmlsZShwYXRoLCBXZWJDb3JlOjpPcGVu
Rm9yUmVhZCk7Ci0gICAgaWYgKGZkID09IFdlYkNvcmU6OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5k
bGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGxvbmcgbG9uZyBmaWxlU2l6ZSA9IDA7
Ci0gICAgaWYgKCFXZWJDb3JlOjpnZXRGaWxlU2l6ZShmZCwgZmlsZVNpemUpKSB7Ci0gICAgICAg
IFdlYkNvcmU6OmNsb3NlRmlsZShmZCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBmaWxlRGF0YSA9IG1hcEZpbGUoZmQsIDAsIHN0YXRpY19jYXN0PHNpemVfdD4oZmlsZVNp
emUpKTsKLSAgICBXZWJDb3JlOjpjbG9zZUZpbGUoZmQpOwotCisgICAgZmlsZURhdGEgPSBtYXBG
aWxlKFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOwogICAg
IGlmIChmaWxlRGF0YS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yNzAs
OSArMjU4LDcgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlZFRvRmlsZShTdAogICAg
IGlmIChjb21waWxhdGlvbkNsaWVudC5oYWRFcnJvcldoaWxlV3JpdGluZ1RvRmlsZSgpKQogICAg
ICAgICByZXR1cm4gVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWls
ZWQ7CiAgICAgCi0gICAgbWFwcGVkRGF0YSA9IG1hcEZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSwg
MCwgbWV0YURhdGEuZmlsZVNpemUoKSk7Ci0gICAgV2ViQ29yZTo6Y2xvc2VGaWxlKHRlbXBvcmFy
eUZpbGVIYW5kbGUpOwotCisgICAgbWFwcGVkRGF0YSA9IGFkb3B0QW5kTWFwRmlsZSh0ZW1wb3Jh
cnlGaWxlSGFuZGxlLCAwLCBtZXRhRGF0YS5maWxlU2l6ZSgpKTsKICAgICBpZiAobWFwcGVkRGF0
YS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVy
cm9yOjpDb21waWxlRmFpbGVkOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODQzMzUpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTE3OTAsNiArMTc5MCw3IEBACiAJCUU0NDM2RUNFMUEwRDA0MEIwMEVBRDIwNCAvKiBOZXR3
b3JrQ2FjaGVLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0NDM2RUMxMUEwQ0ZEQjIwMEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGVLZXkuaCAqLzsgfTsK
IAkJRTQ0MzZFQ0YxQTBEMDQwQjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0b3JhZ2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NDM2RUMyMUEwQ0ZE
QjIwMEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGVTdG9yYWdlLmggKi87IH07CiAJCUU0NDM2RUQwMUEw
RDA0MEIwMEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NDM2RUMzMUEwQ0ZEQjIwMEVBRDIwNCAv
KiBOZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcCAqLzsgfTsKKwkJRTQ3RDFFOTcxQjA2MkI2NjAwMjY3
NkE4IC8qIE5ldHdvcmtDYWNoZURhdGEuY3BwIGluIENvcHkgRmlsZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3RDFFOTYxQjA2MkI2NjAwMjY3NkE4IC8qIE5ldHdvcmtD
YWNoZURhdGEuY3BwICovOyB9OwogCQlFNDg5RDI4QTFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29y
a0NhY2hlQ29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0ODlEMjgzMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2Rlci5oICovOyB9
OwogCQlFNDg5RDI4QjFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlQ29kZXJzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODlEMjg0MUEw
QTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2RlcnMuY3BwICovOyB9OwogCQlFNDg5RDI4
QzFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlQ29kZXJzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDg5RDI4NTFBMEEyREI4MDA3OEMwNkEg
LyogTmV0d29ya0NhY2hlQ29kZXJzLmggKi87IH07CkBAIC0yMDg1LDYgKzIwODYsNyBAQAogCQkJ
ZHN0UGF0aCA9ICJXZWJLaXQuZnJhbWV3b3JrLyQoRlJBTUVXT1JLX0NPTlRFTlRfRElSRUNUT1JZ
KSI7CiAJCQlkc3RTdWJmb2xkZXJTcGVjID0gMTsKIAkJCWZpbGVzID0gKAorCQkJCUU0N0QxRTk3
MUIwNjJCNjYwMDI2NzZBOCAvKiBOZXR3b3JrQ2FjaGVEYXRhLmNwcCBpbiBDb3B5IEZpbGVzICov
LAogCQkJCTUxQTYwQjJBMTgwQ0NFQjUwMEYzQkY1MCAvKiBEYXRhYmFzZVByb2Nlc3MuYXBwIGlu
IENvcHkgRmlsZXMgKi8sCiAJCQkJNTEwQ0M4NDkxNjEzQzg1QzAwRDAzRUQzIC8qIE5ldHdvcmtQ
cm9jZXNzLmFwcCBpbiBDb3B5IEZpbGVzICovLAogCQkJCUJDREUwQUJGMTMyNzI3MDgwMDEyNTlG
QiAvKiBQbHVnaW5Qcm9jZXNzLmFwcCBpbiBDb3B5IEZpbGVzICovLApAQCAtNDA1Niw2ICs0MDU4
LDcgQEAKIAkJRTQ0MzZFQzExQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZUtleS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVLZXkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ0MzZFQzIxQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdv
cmtDYWNoZVN0b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29y
a0NhY2hlU3RvcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDQzNkVDMzFB
MENGREIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ3RDFFOTYxQjA2MkI2NjAwMjY3NkE4IC8qIE5ldHdvcmtD
YWNoZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29y
a0NhY2hlRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0ODlEMjgzMUEw
QTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVDb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFNDg5RDI4NDFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlQ29kZXJzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtDYWNoZUNvZGVy
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0ODlEMjg1MUEwQTJEQjgwMDc4
QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2RlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTmV0d29ya0NhY2hlQ29kZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC03NTI0LDYgKzc1MjcsNyBAQAogCQkJCUU0ODlEMjgzMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3
b3JrQ2FjaGVDb2Rlci5oICovLAogCQkJCUU0ODlEMjg0MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3
b3JrQ2FjaGVDb2RlcnMuY3BwICovLAogCQkJCUU0ODlEMjg1MUEwQTJEQjgwMDc4QzA2QSAvKiBO
ZXR3b3JrQ2FjaGVDb2RlcnMuaCAqLywKKwkJCQlFNDdEMUU5NjFCMDYyQjY2MDAyNjc2QTggLyog
TmV0d29ya0NhY2hlRGF0YS5jcHAgKi8sCiAJCQkJRTQyRTA2MTExQUE3NUFCRDAwQjExNjk5IC8q
IE5ldHdvcmtDYWNoZURhdGEuaCAqLywKIAkJCQlFNDJFMDYxMzFBQTc1QjcwMDBCMTE2OTkgLyog
TmV0d29ya0NhY2hlRGF0YUNvY29hLm1tICovLAogCQkJCUU0ODlEMjg2MUEwQTJEQjgwMDc4QzA2
QSAvKiBOZXR3b3JrQ2FjaGVEZWNvZGVyLmNwcCAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253197</attachid>
            <date>2015-05-15 06:34:15 -0700</date>
            <delta_ts>2015-05-15 08:43:20 -0700</delta_ts>
            <desc>with xcode project file changes</desc>
            <filename>networkcachedata-cpp-2.patch</filename>
            <type>text/plain</type>
            <size>19601</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NDMzNSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDE1LTA1LTE1ICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBOZXR3b3JrIENh
Y2hlOiBNYWtlIERhdGE6OmFkb3B0TWFwIHRha2UgdGhlIG93bmVyc2hpcCBvZiB0aGUgZmlsZSBk
ZXNjcmlwdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDQ5NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJdCB3aWxsIGJlIHJlcXVpcmVkIHRvIGltcGxlbWVudCBTaGFyZWFibGVSZXNvdXJjZSBmb3Ig
c291cAorICAgICAgICBuZXR3b3JrIGJhY2tlbmQuIEFsc28gbW92ZSB0aGUgY29tbW9uIGNvZGUg
b2YgRGF0YSB0byBhIGNvbW1vbgorICAgICAgICBmaWxlIGFuZCBhZGQgbWFwVG9GaWxlKCkuIFRo
ZSBtYXBGaWxlIHZlcnNpb24gdGhhdCByZWNlaXZlcyBhIGZpbGUKKyAgICAgICAgZGVzY3JpcHRv
ciBoYXMgYmVlbiByZW5hbWVkIHRvIGFkb3B0QW5kTWFwRmlsZSgpLgorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6IEFkZCBuZXcgZmlsZSB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVCbG9iU3RvcmFnZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6QmxvYlN0b3JhZ2U6OmFkZCk6IFVzZSBtYXBUb0ZpbGUoKS4K
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6bWFwVG9GaWxlKTogV3Jp
dGUgdGhlIGRhdGEgdG8gdGhlCisgICAgICAgIGdpdmVuIGZpbGUgYW5kIG1hcCBpdC4KKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjptYXBGaWxlKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhY2hlOjphZG9wdEFuZE1hcEZpbGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OmNvbXB1dGVTSEExKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpieXRlc0Vx
dWFsKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmg6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1t
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OmFkb3B0TWFwKTogQ2xvc2Ug
dGhlIGZpbGUgZGVzY3JpcHRvci4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVEYXRhU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0
YTo6RGF0YSk6IFVzZSBhIGNvbnN0cnVjdG9yIHRoYXQKKyAgICAgICAgcmVjZWl2ZXMgYSBmaWxl
IGRlc2NyaXB0b3IgaW5zdGVhZCBvZiB0aGUgb25lIHJlY2VpdmluZworICAgICAgICBCYWNraW5n
LiBJZiB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIG5vdCAtMSB0aGVuIHRoZSBEYXRhIGlzIGEgbWFw
LgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6Ok1hcFdyYXBwZXI6On5NYXBXcmFwcGVy
KTogQWxzbyBjbG9zZSB0aGUKKyAgICAgICAgZmlsZSBkZXNjcmlwdG9yLgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OmFkb3B0TWFwKTogUGFzcyB0aGUgZmlsZSBkZXNjcmlw
dG9yCisgICAgICAgIHRvIHRoZSBNYXBXcmFwcGVyIGFuZCBjcmVhdGUgdGhlIERhdGEgcGFzc2lu
ZyB0aGUgZmlsZSBkZXNjcmlwdG9yLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5jcHA6CisgICAgICAgIChBUEk6Om9wZW5BbmRNYXBDb250ZW50
RXh0ZW5zaW9uKTogVXNlIG1hcEZpbGUgdGhhdCByZWNlaXZlcyBhCisgICAgICAgIGZpbGUgcGF0
aC4KKyAgICAgICAgKEFQSTo6Y29tcGlsZWRUb0ZpbGUpOiBVc2UgYWRvcHRBbmRNYXBGaWxlKCkg
YW5kIGRvbid0IGNsb3NlIHRoZQorICAgICAgICBkZXNjcmlwdG9yLgorCiAyMDE1LTA1LTE0ICBa
YW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBBZGQg
bWlzc2luZyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkgYnVpbGQgZ3VhcmRzCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTg0MzM1KQorKysgU291cmNlL1dlYktpdDIvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw2ICsxNjUsNyBAQCBzZXQoTmV0d29y
a1Byb2Nlc3NfQ09NTU9OX1NPVVJDRVMKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGUuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQmxvYlN0b3Jh
Z2UuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmNwcAor
ICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCiAgICAgTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGVjb2Rlci5jcHAKICAgICBOZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVFbmNvZGVyLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUVudHJ5LmNwcApJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmNw
cAkocmV2aXNpb24gMTg0MzM1KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMzcg
KzEwMSwxMyBAQCBCbG9iU3RvcmFnZTo6QmxvYiBCbG9iU3RvcmFnZTo6YWRkKGNvbnN0CiAgICAg
ICAgIHVubGluayhibG9iUGF0aC5kYXRhKCkpOwogICAgIH0KIAotICAgIGludCBmZCA9IG9wZW4o
YmxvYlBhdGguZGF0YSgpLCBPX0NSRUFUIHwgT19FWENMIHwgT19SRFdSICwgU19JUlVTUiB8IFNf
SVdVU1IpOwotICAgIGlmIChmZCA8IDApCisgICAgYXV0byBtYXBwZWREYXRhID0gZGF0YS5tYXBU
b0ZpbGUoYmxvYlBhdGguZGF0YSgpKTsKKyAgICBpZiAobWFwcGVkRGF0YS5pc051bGwoKSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHNpemVfdCBzaXplID0gZGF0YS5zaXplKCk7Ci0gICAg
aWYgKGZ0cnVuY2F0ZShmZCwgc2l6ZSkgPCAwKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICB2b2lkKiBtYXAgPSBtbWFwKG51bGxwdHIsIHNp
emUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkLCAwKTsKLSAgICBjbG9z
ZShmZCk7Ci0KLSAgICBpZiAobWFwID09IE1BUF9GQUlMRUQpCi0gICAgICAgIHJldHVybiB7IH07
Ci0KLSAgICB1aW50OF90KiBtYXBEYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1hcCk7Ci0g
ICAgZGF0YS5hcHBseShbJm1hcERhdGFdKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgYnl0
ZXNTaXplKSB7Ci0gICAgICAgIG1lbWNweShtYXBEYXRhLCBieXRlcywgYnl0ZXNTaXplKTsKLSAg
ICAgICAgbWFwRGF0YSArPSBieXRlc1NpemU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0p
OwotCi0gICAgLy8gRHJvcCB0aGUgd3JpdGUgcGVybWlzc2lvbi4KLSAgICBtcHJvdGVjdChtYXAs
IHNpemUsIFBST1RfUkVBRCk7Ci0KLSAgICBhdXRvIG1hcHBlZERhdGEgPSBEYXRhOjphZG9wdE1h
cChtYXAsIHNpemUpOwotCiAgICAgbGluayhibG9iUGF0aC5kYXRhKCksIGxpbmtQYXRoLmRhdGEo
KSk7CiAKLSAgICBtX2FwcHJveGltYXRlU2l6ZSArPSBzaXplOworICAgIG1fYXBwcm94aW1hdGVT
aXplICs9IG1hcHBlZERhdGEuc2l6ZSgpOwogCiAgICAgcmV0dXJuIHsgbWFwcGVkRGF0YSwgaGFz
aCB9OwogfQpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVEYXRhLmgiCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNI
RSkKKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRl
IDxzeXMvc3RhdC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2Fj
aGUgeworCitEYXRhIERhdGE6Om1hcFRvRmlsZShjb25zdCBjaGFyKiBwYXRoKSBjb25zdAorewor
ICAgIGludCBmZCA9IG9wZW4ocGF0aCwgT19DUkVBVCB8IE9fRVhDTCB8IE9fUkRXUiAsIFNfSVJV
U1IgfCBTX0lXVVNSKTsKKyAgICBpZiAoZmQgPCAwKQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgaWYgKGZ0cnVuY2F0ZShmZCwgbV9zaXplKSA8IDApIHsKKyAgICAgICAgY2xvc2UoZmQpOwor
ICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHZvaWQqIG1hcCA9IG1tYXAobnVsbHB0
ciwgbV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCwgMCk7Cisg
ICAgaWYgKG1hcCA9PSBNQVBfRkFJTEVEKSB7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICB1aW50OF90KiBtYXBEYXRhID0gc3RhdGljX2Nhc3Q8
dWludDhfdCo+KG1hcCk7CisgICAgYXBwbHkoWyZtYXBEYXRhXShjb25zdCB1aW50OF90KiBieXRl
cywgc2l6ZV90IGJ5dGVzU2l6ZSkgeworICAgICAgICBtZW1jcHkobWFwRGF0YSwgYnl0ZXMsIGJ5
dGVzU2l6ZSk7CisgICAgICAgIG1hcERhdGEgKz0gYnl0ZXNTaXplOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9KTsKKworICAgIC8vIERyb3AgdGhlIHdyaXRlIHBlcm1pc3Npb24uCisgICAg
bXByb3RlY3QobWFwLCBtX3NpemUsIFBST1RfUkVBRCk7CisKKyAgICByZXR1cm4gRGF0YTo6YWRv
cHRNYXAobWFwLCBtX3NpemUsIGZkKTsKK30KKworRGF0YSBtYXBGaWxlKGNvbnN0IGNoYXIqIHBh
dGgpCit7CisgICAgaW50IGZkID0gb3BlbihwYXRoLCBPX1JET05MWSwgMCk7CisgICAgaWYgKGZk
IDwgMCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBzdHJ1Y3Qgc3RhdCBzdGF0OworICAgIGlm
IChmc3RhdChmZCwgJnN0YXQpIDwgMCkgeworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJl
dHVybiB7IH07CisgICAgfQorICAgIHNpemVfdCBzaXplID0gc3RhdC5zdF9zaXplOworICAgIGlm
ICghc2l6ZSkgeworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybiBEYXRhOjplbXB0
eSgpOworICAgIH0KKworICAgIHJldHVybiBhZG9wdEFuZE1hcEZpbGUoZmQsIDAsIHNpemUpOwor
fQorCitEYXRhIGFkb3B0QW5kTWFwRmlsZShpbnQgZmQsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBz
aXplKQoreworICAgIGlmICghc2l6ZSkKKyAgICAgICAgcmV0dXJuIERhdGE6OmVtcHR5KCk7CisK
KyAgICB2b2lkKiBtYXAgPSBtbWFwKG51bGxwdHIsIHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZB
VEUsIGZkLCBvZmZzZXQpOworICAgIGlmIChtYXAgPT0gTUFQX0ZBSUxFRCkgeworICAgICAgICBj
bG9zZShmZCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIERhdGE6
OmFkb3B0TWFwKG1hcCwgc2l6ZSwgZmQpOworfQorCitTSEExOjpEaWdlc3QgY29tcHV0ZVNIQTEo
Y29uc3QgRGF0YSYgZGF0YSkKK3sKKyAgICBTSEExIHNoYTE7CisgICAgZGF0YS5hcHBseShbJnNo
YTFdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7CisgICAgICAgIHNoYTEuYWRk
Qnl0ZXMoZGF0YSwgc2l6ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0pOworICAgIFNI
QTE6OkRpZ2VzdCBkaWdlc3Q7CisgICAgc2hhMS5jb21wdXRlSGFzaChkaWdlc3QpOworICAgIHJl
dHVybiBkaWdlc3Q7Cit9CisKK2Jvb2wgYnl0ZXNFcXVhbChjb25zdCBEYXRhJiBhLCBjb25zdCBE
YXRhJiBiKQoreworICAgIGlmIChhLmlzTnVsbCgpIHx8IGIuaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoYS5zaXplKCkgIT0gYi5zaXplKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gIW1lbWNtcChhLmRhdGEoKSwgYi5kYXRhKCksIGEuc2l6ZSgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhY2hlCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
LmgJKHJldmlzaW9uIDE4NDMzNSkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDE0ICsxMDQsMTQg
QEAgcHVibGljOgogICAgIERhdGEoY29uc3QgdWludDhfdCosIHNpemVfdCk7CiAKICAgICBzdGF0
aWMgRGF0YSBlbXB0eSgpOwotICAgIHN0YXRpYyBEYXRhIGFkb3B0TWFwKHZvaWQqIG1hcCwgc2l6
ZV90KTsKKyAgICBzdGF0aWMgRGF0YSBhZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCwgaW50IGZk
KTsKIAotICAgIGVudW0gY2xhc3MgQmFja2luZyB7IEJ1ZmZlciwgTWFwIH07CiAjaWYgUExBVEZP
Uk0oQ09DT0EpCisgICAgZW51bSBjbGFzcyBCYWNraW5nIHsgQnVmZmVyLCBNYXAgfTsKICAgICBE
YXRhKERpc3BhdGNoUHRyPGRpc3BhdGNoX2RhdGFfdD4sIEJhY2tpbmcgPSBCYWNraW5nOjpCdWZm
ZXIpOwogI2VuZGlmCiAjaWYgVVNFKFNPVVApCi0gICAgRGF0YShHUmVmUHRyPFNvdXBCdWZmZXI+
JiYsIEJhY2tpbmcgPSBCYWNraW5nOjpCdWZmZXIpOworICAgIERhdGEoR1JlZlB0cjxTb3VwQnVm
ZmVyPiYmLCBpbnQgZmQgPSAtMSk7CiAjZW5kaWYKICAgICBib29sIGlzTnVsbCgpIGNvbnN0Owog
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX3NpemU7IH0KQEAgLTEyNCw2ICsx
MjQsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGFwcGx5KGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9v
bCAoY29uc3QgdWludDhfdCosIHNpemVfdCk+JiYpIGNvbnN0OwogCisgICAgRGF0YSBtYXBUb0Zp
bGUoY29uc3QgY2hhciogcGF0aCkgY29uc3Q7CisKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBk
aXNwYXRjaF9kYXRhX3QgZGlzcGF0Y2hEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwYXRjaERh
dGEuZ2V0KCk7IH0KICNlbmRpZgpAQCAtMTM3LDYgKzEzOSw3IEBAIHByaXZhdGU6CiAjZW5kaWYK
ICNpZiBVU0UoU09VUCkKICAgICBtdXRhYmxlIEdSZWZQdHI8U291cEJ1ZmZlcj4gbV9idWZmZXI7
CisgICAgaW50IG1fZmlsZURlc2NyaXB0b3IgeyAtMSB9OwogI2VuZGlmCiAgICAgbXV0YWJsZSBj
b25zdCB1aW50OF90KiBtX2RhdGEgeyBudWxscHRyIH07CiAgICAgc2l6ZV90IG1fc2l6ZSB7IDAg
fTsKQEAgLTE0NSw3ICsxNDgsNyBAQCBwcml2YXRlOgogCiBEYXRhIGNvbmNhdGVuYXRlKGNvbnN0
IERhdGEmLCBjb25zdCBEYXRhJik7CiBib29sIGJ5dGVzRXF1YWwoY29uc3QgRGF0YSYsIGNvbnN0
IERhdGEmKTsKLURhdGEgbWFwRmlsZShpbnQgZmQsIHNpemVfdCBvZmZzZXQsIHNpemVfdCk7CitE
YXRhIGFkb3B0QW5kTWFwRmlsZShpbnQgZmQsIHNpemVfdCBvZmZzZXQsIHNpemVfdCk7CiBEYXRh
IG1hcEZpbGUoY29uc3QgY2hhciogcGF0aCk7CiBTSEExOjpEaWdlc3QgY29tcHV0ZVNIQTEoY29u
c3QgRGF0YSYpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tCShyZXZpc2lvbiAxODQz
MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVE
YXRhQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTkzLDYzICs5MywxNyBAQCBEYXRhIGNvbmNh
dGVuYXRlKGNvbnN0IERhdGEmIGEsIGNvbnN0IERhCiAgICAgcmV0dXJuIHsgYWRvcHREaXNwYXRj
aChkaXNwYXRjaF9kYXRhX2NyZWF0ZV9jb25jYXQoYS5kaXNwYXRjaERhdGEoKSwgYi5kaXNwYXRj
aERhdGEoKSkpIH07CiB9CiAKLURhdGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3Qg
c2l6ZSkKK0RhdGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3Qgc2l6ZSwgaW50IGZk
KQogewogICAgIEFTU0VSVChtYXAgJiYgbWFwICE9IE1BUF9GQUlMRUQpOworICAgIGNsb3NlKGZk
KTsKICAgICBhdXRvIGJvZHlNYXAgPSBhZG9wdERpc3BhdGNoKGRpc3BhdGNoX2RhdGFfY3JlYXRl
KG1hcCwgc2l6ZSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW21hcCwgc2l6ZV0gewogICAg
ICAgICBtdW5tYXAobWFwLCBzaXplKTsKICAgICB9KSk7CiAgICAgcmV0dXJuIHsgYm9keU1hcCwg
RGF0YTo6QmFja2luZzo6TWFwIH07CiB9CiAKLURhdGEgbWFwRmlsZShpbnQgZmQsIHNpemVfdCBv
ZmZzZXQsIHNpemVfdCBzaXplKQotewotICAgIGlmICghc2l6ZSkKLSAgICAgICAgcmV0dXJuIERh
dGE6OmVtcHR5KCk7Ci0KLSAgICB2b2lkKiBtYXAgPSBtbWFwKG51bGxwdHIsIHNpemUsIFBST1Rf
UkVBRCwgTUFQX1BSSVZBVEUsIGZkLCBvZmZzZXQpOwotICAgIGlmIChtYXAgPT0gTUFQX0ZBSUxF
RCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gRGF0YTo6YWRvcHRNYXAobWFwLCBz
aXplKTsKLX0KLQotRGF0YSBtYXBGaWxlKGNvbnN0IGNoYXIqIHBhdGgpCi17Ci0gICAgaW50IGZk
ID0gb3BlbihwYXRoLCBPX1JET05MWSwgMCk7Ci0gICAgaWYgKGZkIDwgMCkKLSAgICAgICAgcmV0
dXJuIHsgfTsKLSAgICBzdHJ1Y3Qgc3RhdCBzdGF0OwotICAgIGlmIChmc3RhdChmZCwgJnN0YXQp
IDwgMCkgewotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQot
ICAgIHNpemVfdCBzaXplID0gc3RhdC5zdF9zaXplOwotICAgIGF1dG8gZGF0YSA9IG1hcEZpbGUo
ZmQsIDAsIHNpemUpOwotICAgIGNsb3NlKGZkKTsKLQotICAgIHJldHVybiBkYXRhOwotfQotCi1T
SEExOjpEaWdlc3QgY29tcHV0ZVNIQTEoY29uc3QgRGF0YSYgZGF0YSkKLXsKLSAgICBTSEExIHNo
YTE7Ci0gICAgZGF0YS5hcHBseShbJnNoYTFdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBz
aXplKSB7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0pOwotICAgIFNIQTE6OkRpZ2VzdCBkaWdlc3Q7Ci0gICAgc2hhMS5jb21w
dXRlSGFzaChkaWdlc3QpOwotICAgIHJldHVybiBkaWdlc3Q7Ci19CiAKLWJvb2wgYnl0ZXNFcXVh
bChjb25zdCBEYXRhJiBhLCBjb25zdCBEYXRhJiBiKQotewotICAgIGlmIChhLmlzTnVsbCgpIHx8
IGIuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoYS5zaXplKCkgIT0g
Yi5zaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gIW1lbWNtcChhLmRh
dGEoKSwgYi5kYXRhKCksIGEuc2l6ZSgpKTsKLX0KIAogfQogfQpJbmRleDogU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURh
dGFTb3VwLmNwcAkocmV2aXNpb24gMTg0MzM1KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NSwxMCArNDUsMTEgQEAgRGF0YTo6RGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgcwog
ICAgIG1fYnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25ld193aXRoX293bmVyKGNvcGll
ZERhdGEsIHNpemUsIGNvcGllZERhdGEsIGZhc3RGcmVlKSk7CiB9CiAKLURhdGE6OkRhdGEoR1Jl
ZlB0cjxTb3VwQnVmZmVyPiYmIGJ1ZmZlciwgQmFja2luZyBiYWNraW5nKQorRGF0YTo6RGF0YShH
UmVmUHRyPFNvdXBCdWZmZXI+JiYgYnVmZmVyLCBpbnQgZmQpCiAgICAgOiBtX2J1ZmZlcihidWZm
ZXIpCisgICAgLCBtX2ZpbGVEZXNjcmlwdG9yKGZkKQogICAgICwgbV9zaXplKGJ1ZmZlciA/IGJ1
ZmZlci0+bGVuZ3RoIDogMCkKLSAgICAsIG1faXNNYXAobV9zaXplICYmIGJhY2tpbmcgPT0gQmFj
a2luZzo6TWFwKQorICAgICwgbV9pc01hcChtX3NpemUgJiYgZmQgIT0gLTEpCiB7CiB9CiAKQEAg
LTEwNCwxMCArMTA1LDEyIEBAIHN0cnVjdCBNYXBXcmFwcGVyIHsKICAgICB+TWFwV3JhcHBlcigp
CiAgICAgewogICAgICAgICBtdW5tYXAobWFwLCBzaXplKTsKKyAgICAgICAgY2xvc2UoZmlsZURl
c2NyaXB0b3IpOwogICAgIH0KIAogICAgIHZvaWQqIG1hcDsKICAgICBzaXplX3Qgc2l6ZTsKKyAg
ICBpbnQgZmlsZURlc2NyaXB0b3I7CiB9OwogCiBzdGF0aWMgdm9pZCBkZWxldGVNYXBXcmFwcGVy
KE1hcFdyYXBwZXIqIHdyYXBwZXIpCkBAIC0xMTUsNjMgKzExOCwxNiBAQCBzdGF0aWMgdm9pZCBk
ZWxldGVNYXBXcmFwcGVyKE1hcFdyYXBwZXIqCiAgICAgZGVsZXRlIHdyYXBwZXI7CiB9CiAKLURh
dGEgbWFwRmlsZShpbnQgZmQsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQotewotICAgIGlm
ICghc2l6ZSkKLSAgICAgICAgcmV0dXJuIERhdGE6OmVtcHR5KCk7Ci0KLSAgICB2b2lkKiBtYXAg
PSBtbWFwKG51bGxwdHIsIHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCBvZmZzZXQp
OwotICAgIGlmIChtYXAgPT0gTUFQX0ZBSUxFRCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBy
ZXR1cm4gRGF0YTo6YWRvcHRNYXAobWFwLCBzaXplKTsKLX0KLQotRGF0YSBEYXRhOjphZG9wdE1h
cCh2b2lkKiBtYXAsIHNpemVfdCBzaXplKQorRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAs
IHNpemVfdCBzaXplLCBpbnQgZmQpCiB7CiAgICAgQVNTRVJUKG1hcCk7CiAgICAgQVNTRVJUKG1h
cCAhPSBNQVBfRkFJTEVEKTsKLSAgICBNYXBXcmFwcGVyKiB3cmFwcGVyID0gbmV3IE1hcFdyYXBw
ZXIgeyBtYXAsIHNpemUgfTsKKyAgICBNYXBXcmFwcGVyKiB3cmFwcGVyID0gbmV3IE1hcFdyYXBw
ZXIgeyBtYXAsIHNpemUsIGZkIH07CiAgICAgR1JlZlB0cjxTb3VwQnVmZmVyPiBidWZmZXIgPSBh
ZG9wdEdSZWYoc291cF9idWZmZXJfbmV3X3dpdGhfb3duZXIobWFwLCBzaXplLCB3cmFwcGVyLCBy
ZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PihkZWxldGVNYXBXcmFwcGVyKSkpOwotICAg
IHJldHVybiB7IFdURjo6bW92ZShidWZmZXIpLCBEYXRhOjpCYWNraW5nOjpNYXAgfTsKLX0KLQot
RGF0YSBtYXBGaWxlKGNvbnN0IGNoYXIqIHBhdGgpCi17Ci0gICAgaW50IGZkID0gb3BlbihwYXRo
LCBPX1JET05MWSwgMCk7Ci0gICAgaWYgKGZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICBzdHJ1Y3Qgc3RhdCBzdGF0OwotICAgIGlmIChmc3RhdChmZCwgJnN0YXQpIDwgMCkgewotICAg
ICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotICAgIHNpemVfdCBz
aXplID0gc3RhdC5zdF9zaXplOwotICAgIGF1dG8gZGF0YSA9IG1hcEZpbGUoZmQsIDAsIHNpemUp
OwotICAgIGNsb3NlKGZkKTsKLQotICAgIHJldHVybiBkYXRhOworICAgIHJldHVybiB7IFdURjo6
bW92ZShidWZmZXIpLCBmZCB9OwogfQogCi1TSEExOjpEaWdlc3QgY29tcHV0ZVNIQTEoY29uc3Qg
RGF0YSYgZGF0YSkKLXsKLSAgICBTSEExIHNoYTE7Ci0gICAgZGF0YS5hcHBseShbJnNoYTFdKGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMo
ZGF0YSwgc2l6ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0pOwotICAgIFNIQTE6OkRp
Z2VzdCBkaWdlc3Q7Ci0gICAgc2hhMS5jb21wdXRlSGFzaChkaWdlc3QpOwotICAgIHJldHVybiBk
aWdlc3Q7Ci19CiAKLWJvb2wgYnl0ZXNFcXVhbChjb25zdCBEYXRhJiBhLCBjb25zdCBEYXRhJiBi
KQotewotICAgIGlmIChhLmlzTnVsbCgpIHx8IGIuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoYS5zaXplKCkgIT0gYi5zaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICByZXR1cm4gIW1lbWNtcChhLmRhdGEoKSwgYi5kYXRhKCksIGEuc2l6ZSgpKTsKLX0K
IAogfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhY2hlCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcAkocmV2aXNpb24gMTg0MzM1KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM0LDE5ICsxMzQsNyBAQCBzdGF0aWMgYm9vbCBkZWNvZGVDb250
ZW50RXh0ZW5zaW9uTWV0YURhCiAKIHN0YXRpYyBib29sIG9wZW5BbmRNYXBDb250ZW50RXh0ZW5z
aW9uKGNvbnN0IFN0cmluZyYgcGF0aCwgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtZXRhRGF0
YSwgRGF0YSYgZmlsZURhdGEpCiB7Ci0gICAgYXV0byBmZCA9IFdlYkNvcmU6Om9wZW5GaWxlKHBh
dGgsIFdlYkNvcmU6Ok9wZW5Gb3JSZWFkKTsKLSAgICBpZiAoZmQgPT0gV2ViQ29yZTo6aW52YWxp
ZFBsYXRmb3JtRmlsZUhhbmRsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbG9uZyBs
b25nIGZpbGVTaXplID0gMDsKLSAgICBpZiAoIVdlYkNvcmU6OmdldEZpbGVTaXplKGZkLCBmaWxl
U2l6ZSkpIHsKLSAgICAgICAgV2ViQ29yZTo6Y2xvc2VGaWxlKGZkKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIGZpbGVEYXRhID0gbWFwRmlsZShmZCwgMCwgc3RhdGljX2Nh
c3Q8c2l6ZV90PihmaWxlU2l6ZSkpOwotICAgIFdlYkNvcmU6OmNsb3NlRmlsZShmZCk7Ci0KKyAg
ICBmaWxlRGF0YSA9IG1hcEZpbGUoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBh
dGgpLmRhdGEoKSk7CiAgICAgaWYgKGZpbGVEYXRhLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKQEAgLTI3MCw5ICsyNTgsNyBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGNvbXBp
bGVkVG9GaWxlKFN0CiAgICAgaWYgKGNvbXBpbGF0aW9uQ2xpZW50LmhhZEVycm9yV2hpbGVXcml0
aW5nVG9GaWxlKCkpCiAgICAgICAgIHJldHVybiBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpF
cnJvcjo6Q29tcGlsZUZhaWxlZDsKICAgICAKLSAgICBtYXBwZWREYXRhID0gbWFwRmlsZSh0ZW1w
b3JhcnlGaWxlSGFuZGxlLCAwLCBtZXRhRGF0YS5maWxlU2l6ZSgpKTsKLSAgICBXZWJDb3JlOjpj
bG9zZUZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSk7Ci0KKyAgICBtYXBwZWREYXRhID0gYWRvcHRB
bmRNYXBGaWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUsIDAsIG1ldGFEYXRhLmZpbGVTaXplKCkpOwog
ICAgIGlmIChtYXBwZWREYXRhLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4
NDMzNSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMTc5MCw2ICsxNzkwLDcgQEAKIAkJRTQ0MzZFQ0UxQTBEMDQw
QjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZUtleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0MzZFQzExQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdvcmtD
YWNoZUtleS5oICovOyB9OwogCQlFNDQzNkVDRjFBMEQwNDBCMDBFQUQyMDQgLyogTmV0d29ya0Nh
Y2hlU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTQ0MzZFQzIxQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0b3JhZ2UuaCAqLzsg
fTsKIAkJRTQ0MzZFRDAxQTBEMDQwQjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0b3JhZ2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0MzZFQzMx
QTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwICovOyB9OworCQlFNDdE
MUU5NzFCMDYyQjY2MDAyNjc2QTggLyogTmV0d29ya0NhY2hlRGF0YS5jcHAgaW4gQ29weSBGaWxl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdEMUU5NjFCMDYyQjY2MDAy
Njc2QTggLyogTmV0d29ya0NhY2hlRGF0YS5jcHAgKi87IH07CiAJCUU0ODlEMjhBMUEwQTJEQjgw
MDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4OUQyODMxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtD
YWNoZUNvZGVyLmggKi87IH07CiAJCUU0ODlEMjhCMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3Jr
Q2FjaGVDb2RlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTQ4OUQyODQxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVycy5jcHAg
Ki87IH07CiAJCUU0ODlEMjhDMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2RlcnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODlEMjg1
MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2RlcnMuaCAqLzsgfTsKQEAgLTIwODUs
NiArMjA4Niw3IEBACiAJCQlkc3RQYXRoID0gIldlYktpdC5mcmFtZXdvcmsvJChGUkFNRVdPUktf
Q09OVEVOVF9ESVJFQ1RPUlkpIjsKIAkJCWRzdFN1YmZvbGRlclNwZWMgPSAxOwogCQkJZmlsZXMg
PSAoCisJCQkJRTQ3RDFFOTcxQjA2MkI2NjAwMjY3NkE4IC8qIE5ldHdvcmtDYWNoZURhdGEuY3Bw
IGluIENvcHkgRmlsZXMgKi8sCiAJCQkJNTFBNjBCMkExODBDQ0VCNTAwRjNCRjUwIC8qIERhdGFi
YXNlUHJvY2Vzcy5hcHAgaW4gQ29weSBGaWxlcyAqLywKIAkJCQk1MTBDQzg0OTE2MTNDODVDMDBE
MDNFRDMgLyogTmV0d29ya1Byb2Nlc3MuYXBwIGluIENvcHkgRmlsZXMgKi8sCiAJCQkJQkNERTBB
QkYxMzI3MjcwODAwMTI1OUZCIC8qIFBsdWdpblByb2Nlc3MuYXBwIGluIENvcHkgRmlsZXMgKi8s
CkBAIC00MDU2LDYgKzQwNTgsNyBAQAogCQlFNDQzNkVDMTFBMENGREIyMDBFQUQyMDQgLyogTmV0
d29ya0NhY2hlS2V5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtD
YWNoZUtleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDQzNkVDMjFBMENGREIy
MDBFQUQyMDQgLyogTmV0d29ya0NhY2hlU3RvcmFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVTdG9yYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUU0NDM2RUMzMUEwQ0ZEQjIwMEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGVTdG9yYWdlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtDYWNoZVN0b3Jh
Z2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDdEMUU5NjFCMDYyQjY2MDAy
Njc2QTggLyogTmV0d29ya0NhY2hlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBOZXR3b3JrQ2FjaGVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTQ4OUQyODMxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNoZUNvZGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0ODlEMjg0MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3
b3JrQ2FjaGVDb2RlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TmV0d29ya0NhY2hlQ29kZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ4
OUQyODUxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVycy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVDb2RlcnMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTc1MjQsNiArNzUyNyw3IEBACiAJCQkJRTQ4OUQyODMxQTBBMkRC
ODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVyLmggKi8sCiAJCQkJRTQ4OUQyODQxQTBBMkRC
ODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVycy5jcHAgKi8sCiAJCQkJRTQ4OUQyODUxQTBB
MkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVycy5oICovLAorCQkJCUU0N0QxRTk2MUIw
NjJCNjYwMDI2NzZBOCAvKiBOZXR3b3JrQ2FjaGVEYXRhLmNwcCAqLywKIAkJCQlFNDJFMDYxMTFB
QTc1QUJEMDBCMTE2OTkgLyogTmV0d29ya0NhY2hlRGF0YS5oICovLAogCQkJCUU0MkUwNjEzMUFB
NzVCNzAwMEIxMTY5OSAvKiBOZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0gKi8sCiAJCQkJRTQ4OUQy
ODYxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZURlY29kZXIuY3BwICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253198</attachid>
            <date>2015-05-15 08:43:20 -0700</date>
            <delta_ts>2015-05-15 08:43:20 -0700</delta_ts>
            <desc>again with xcode project file changes</desc>
            <filename>networkcachedata-cpp-3.patch</filename>
            <type>text/plain</type>
            <size>19563</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NDMzNSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDE1LTA1LTE1ICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBOZXR3b3JrIENh
Y2hlOiBNYWtlIERhdGE6OmFkb3B0TWFwIHRha2UgdGhlIG93bmVyc2hpcCBvZiB0aGUgZmlsZSBk
ZXNjcmlwdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDQ5NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJdCB3aWxsIGJlIHJlcXVpcmVkIHRvIGltcGxlbWVudCBTaGFyZWFibGVSZXNvdXJjZSBmb3Ig
c291cAorICAgICAgICBuZXR3b3JrIGJhY2tlbmQuIEFsc28gbW92ZSB0aGUgY29tbW9uIGNvZGUg
b2YgRGF0YSB0byBhIGNvbW1vbgorICAgICAgICBmaWxlIGFuZCBhZGQgbWFwVG9GaWxlKCkuIFRo
ZSBtYXBGaWxlIHZlcnNpb24gdGhhdCByZWNlaXZlcyBhIGZpbGUKKyAgICAgICAgZGVzY3JpcHRv
ciBoYXMgYmVlbiByZW5hbWVkIHRvIGFkb3B0QW5kTWFwRmlsZSgpLgorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6IEFkZCBuZXcgZmlsZSB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVCbG9iU3RvcmFnZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6QmxvYlN0b3JhZ2U6OmFkZCk6IFVzZSBtYXBUb0ZpbGUoKS4K
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6bWFwVG9GaWxlKTogV3Jp
dGUgdGhlIGRhdGEgdG8gdGhlCisgICAgICAgIGdpdmVuIGZpbGUgYW5kIG1hcCBpdC4KKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjptYXBGaWxlKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhY2hlOjphZG9wdEFuZE1hcEZpbGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OmNvbXB1dGVTSEExKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpieXRlc0Vx
dWFsKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmg6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1t
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OmFkb3B0TWFwKTogQ2xvc2Ug
dGhlIGZpbGUgZGVzY3JpcHRvci4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVEYXRhU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0
YTo6RGF0YSk6IFVzZSBhIGNvbnN0cnVjdG9yIHRoYXQKKyAgICAgICAgcmVjZWl2ZXMgYSBmaWxl
IGRlc2NyaXB0b3IgaW5zdGVhZCBvZiB0aGUgb25lIHJlY2VpdmluZworICAgICAgICBCYWNraW5n
LiBJZiB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIG5vdCAtMSB0aGVuIHRoZSBEYXRhIGlzIGEgbWFw
LgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6Ok1hcFdyYXBwZXI6On5NYXBXcmFwcGVy
KTogQWxzbyBjbG9zZSB0aGUKKyAgICAgICAgZmlsZSBkZXNjcmlwdG9yLgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OmFkb3B0TWFwKTogUGFzcyB0aGUgZmlsZSBkZXNjcmlw
dG9yCisgICAgICAgIHRvIHRoZSBNYXBXcmFwcGVyIGFuZCBjcmVhdGUgdGhlIERhdGEgcGFzc2lu
ZyB0aGUgZmlsZSBkZXNjcmlwdG9yLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5jcHA6CisgICAgICAgIChBUEk6Om9wZW5BbmRNYXBDb250ZW50
RXh0ZW5zaW9uKTogVXNlIG1hcEZpbGUgdGhhdCByZWNlaXZlcyBhCisgICAgICAgIGZpbGUgcGF0
aC4KKyAgICAgICAgKEFQSTo6Y29tcGlsZWRUb0ZpbGUpOiBVc2UgYWRvcHRBbmRNYXBGaWxlKCkg
YW5kIGRvbid0IGNsb3NlIHRoZQorICAgICAgICBkZXNjcmlwdG9yLgorCiAyMDE1LTA1LTE0ICBa
YW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBBZGQg
bWlzc2luZyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkgYnVpbGQgZ3VhcmRzCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTg0MzM1KQorKysgU291cmNlL1dlYktpdDIvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw2ICsxNjUsNyBAQCBzZXQoTmV0d29y
a1Byb2Nlc3NfQ09NTU9OX1NPVVJDRVMKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGUuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQmxvYlN0b3Jh
Z2UuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmNwcAor
ICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCiAgICAgTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGVjb2Rlci5jcHAKICAgICBOZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVFbmNvZGVyLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUVudHJ5LmNwcApJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmNw
cAkocmV2aXNpb24gMTg0MzM1KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMzcg
KzEwMSwxMyBAQCBCbG9iU3RvcmFnZTo6QmxvYiBCbG9iU3RvcmFnZTo6YWRkKGNvbnN0CiAgICAg
ICAgIHVubGluayhibG9iUGF0aC5kYXRhKCkpOwogICAgIH0KIAotICAgIGludCBmZCA9IG9wZW4o
YmxvYlBhdGguZGF0YSgpLCBPX0NSRUFUIHwgT19FWENMIHwgT19SRFdSICwgU19JUlVTUiB8IFNf
SVdVU1IpOwotICAgIGlmIChmZCA8IDApCisgICAgYXV0byBtYXBwZWREYXRhID0gZGF0YS5tYXBU
b0ZpbGUoYmxvYlBhdGguZGF0YSgpKTsKKyAgICBpZiAobWFwcGVkRGF0YS5pc051bGwoKSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHNpemVfdCBzaXplID0gZGF0YS5zaXplKCk7Ci0gICAg
aWYgKGZ0cnVuY2F0ZShmZCwgc2l6ZSkgPCAwKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICB2b2lkKiBtYXAgPSBtbWFwKG51bGxwdHIsIHNp
emUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkLCAwKTsKLSAgICBjbG9z
ZShmZCk7Ci0KLSAgICBpZiAobWFwID09IE1BUF9GQUlMRUQpCi0gICAgICAgIHJldHVybiB7IH07
Ci0KLSAgICB1aW50OF90KiBtYXBEYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1hcCk7Ci0g
ICAgZGF0YS5hcHBseShbJm1hcERhdGFdKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgYnl0
ZXNTaXplKSB7Ci0gICAgICAgIG1lbWNweShtYXBEYXRhLCBieXRlcywgYnl0ZXNTaXplKTsKLSAg
ICAgICAgbWFwRGF0YSArPSBieXRlc1NpemU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0p
OwotCi0gICAgLy8gRHJvcCB0aGUgd3JpdGUgcGVybWlzc2lvbi4KLSAgICBtcHJvdGVjdChtYXAs
IHNpemUsIFBST1RfUkVBRCk7Ci0KLSAgICBhdXRvIG1hcHBlZERhdGEgPSBEYXRhOjphZG9wdE1h
cChtYXAsIHNpemUpOwotCiAgICAgbGluayhibG9iUGF0aC5kYXRhKCksIGxpbmtQYXRoLmRhdGEo
KSk7CiAKLSAgICBtX2FwcHJveGltYXRlU2l6ZSArPSBzaXplOworICAgIG1fYXBwcm94aW1hdGVT
aXplICs9IG1hcHBlZERhdGEuc2l6ZSgpOwogCiAgICAgcmV0dXJuIHsgbWFwcGVkRGF0YSwgaGFz
aCB9OwogfQpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVEYXRhLmgiCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNI
RSkKKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRl
IDxzeXMvc3RhdC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2Fj
aGUgeworCitEYXRhIERhdGE6Om1hcFRvRmlsZShjb25zdCBjaGFyKiBwYXRoKSBjb25zdAorewor
ICAgIGludCBmZCA9IG9wZW4ocGF0aCwgT19DUkVBVCB8IE9fRVhDTCB8IE9fUkRXUiAsIFNfSVJV
U1IgfCBTX0lXVVNSKTsKKyAgICBpZiAoZmQgPCAwKQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgaWYgKGZ0cnVuY2F0ZShmZCwgbV9zaXplKSA8IDApIHsKKyAgICAgICAgY2xvc2UoZmQpOwor
ICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHZvaWQqIG1hcCA9IG1tYXAobnVsbHB0
ciwgbV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCwgMCk7Cisg
ICAgaWYgKG1hcCA9PSBNQVBfRkFJTEVEKSB7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICB1aW50OF90KiBtYXBEYXRhID0gc3RhdGljX2Nhc3Q8
dWludDhfdCo+KG1hcCk7CisgICAgYXBwbHkoWyZtYXBEYXRhXShjb25zdCB1aW50OF90KiBieXRl
cywgc2l6ZV90IGJ5dGVzU2l6ZSkgeworICAgICAgICBtZW1jcHkobWFwRGF0YSwgYnl0ZXMsIGJ5
dGVzU2l6ZSk7CisgICAgICAgIG1hcERhdGEgKz0gYnl0ZXNTaXplOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9KTsKKworICAgIC8vIERyb3AgdGhlIHdyaXRlIHBlcm1pc3Npb24uCisgICAg
bXByb3RlY3QobWFwLCBtX3NpemUsIFBST1RfUkVBRCk7CisKKyAgICByZXR1cm4gRGF0YTo6YWRv
cHRNYXAobWFwLCBtX3NpemUsIGZkKTsKK30KKworRGF0YSBtYXBGaWxlKGNvbnN0IGNoYXIqIHBh
dGgpCit7CisgICAgaW50IGZkID0gb3BlbihwYXRoLCBPX1JET05MWSwgMCk7CisgICAgaWYgKGZk
IDwgMCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBzdHJ1Y3Qgc3RhdCBzdGF0OworICAgIGlm
IChmc3RhdChmZCwgJnN0YXQpIDwgMCkgeworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJl
dHVybiB7IH07CisgICAgfQorICAgIHNpemVfdCBzaXplID0gc3RhdC5zdF9zaXplOworICAgIGlm
ICghc2l6ZSkgeworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybiBEYXRhOjplbXB0
eSgpOworICAgIH0KKworICAgIHJldHVybiBhZG9wdEFuZE1hcEZpbGUoZmQsIDAsIHNpemUpOwor
fQorCitEYXRhIGFkb3B0QW5kTWFwRmlsZShpbnQgZmQsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBz
aXplKQoreworICAgIGlmICghc2l6ZSkKKyAgICAgICAgcmV0dXJuIERhdGE6OmVtcHR5KCk7CisK
KyAgICB2b2lkKiBtYXAgPSBtbWFwKG51bGxwdHIsIHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZB
VEUsIGZkLCBvZmZzZXQpOworICAgIGlmIChtYXAgPT0gTUFQX0ZBSUxFRCkgeworICAgICAgICBj
bG9zZShmZCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIERhdGE6
OmFkb3B0TWFwKG1hcCwgc2l6ZSwgZmQpOworfQorCitTSEExOjpEaWdlc3QgY29tcHV0ZVNIQTEo
Y29uc3QgRGF0YSYgZGF0YSkKK3sKKyAgICBTSEExIHNoYTE7CisgICAgZGF0YS5hcHBseShbJnNo
YTFdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7CisgICAgICAgIHNoYTEuYWRk
Qnl0ZXMoZGF0YSwgc2l6ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0pOworICAgIFNI
QTE6OkRpZ2VzdCBkaWdlc3Q7CisgICAgc2hhMS5jb21wdXRlSGFzaChkaWdlc3QpOworICAgIHJl
dHVybiBkaWdlc3Q7Cit9CisKK2Jvb2wgYnl0ZXNFcXVhbChjb25zdCBEYXRhJiBhLCBjb25zdCBE
YXRhJiBiKQoreworICAgIGlmIChhLmlzTnVsbCgpIHx8IGIuaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoYS5zaXplKCkgIT0gYi5zaXplKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gIW1lbWNtcChhLmRhdGEoKSwgYi5kYXRhKCksIGEuc2l6ZSgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhY2hlCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
LmgJKHJldmlzaW9uIDE4NDMzNSkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDE0ICsxMDQsMTQg
QEAgcHVibGljOgogICAgIERhdGEoY29uc3QgdWludDhfdCosIHNpemVfdCk7CiAKICAgICBzdGF0
aWMgRGF0YSBlbXB0eSgpOwotICAgIHN0YXRpYyBEYXRhIGFkb3B0TWFwKHZvaWQqIG1hcCwgc2l6
ZV90KTsKKyAgICBzdGF0aWMgRGF0YSBhZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCwgaW50IGZk
KTsKIAotICAgIGVudW0gY2xhc3MgQmFja2luZyB7IEJ1ZmZlciwgTWFwIH07CiAjaWYgUExBVEZP
Uk0oQ09DT0EpCisgICAgZW51bSBjbGFzcyBCYWNraW5nIHsgQnVmZmVyLCBNYXAgfTsKICAgICBE
YXRhKERpc3BhdGNoUHRyPGRpc3BhdGNoX2RhdGFfdD4sIEJhY2tpbmcgPSBCYWNraW5nOjpCdWZm
ZXIpOwogI2VuZGlmCiAjaWYgVVNFKFNPVVApCi0gICAgRGF0YShHUmVmUHRyPFNvdXBCdWZmZXI+
JiYsIEJhY2tpbmcgPSBCYWNraW5nOjpCdWZmZXIpOworICAgIERhdGEoR1JlZlB0cjxTb3VwQnVm
ZmVyPiYmLCBpbnQgZmQgPSAtMSk7CiAjZW5kaWYKICAgICBib29sIGlzTnVsbCgpIGNvbnN0Owog
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX3NpemU7IH0KQEAgLTEyNCw2ICsx
MjQsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGFwcGx5KGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9v
bCAoY29uc3QgdWludDhfdCosIHNpemVfdCk+JiYpIGNvbnN0OwogCisgICAgRGF0YSBtYXBUb0Zp
bGUoY29uc3QgY2hhciogcGF0aCkgY29uc3Q7CisKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBk
aXNwYXRjaF9kYXRhX3QgZGlzcGF0Y2hEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwYXRjaERh
dGEuZ2V0KCk7IH0KICNlbmRpZgpAQCAtMTM3LDYgKzEzOSw3IEBAIHByaXZhdGU6CiAjZW5kaWYK
ICNpZiBVU0UoU09VUCkKICAgICBtdXRhYmxlIEdSZWZQdHI8U291cEJ1ZmZlcj4gbV9idWZmZXI7
CisgICAgaW50IG1fZmlsZURlc2NyaXB0b3IgeyAtMSB9OwogI2VuZGlmCiAgICAgbXV0YWJsZSBj
b25zdCB1aW50OF90KiBtX2RhdGEgeyBudWxscHRyIH07CiAgICAgc2l6ZV90IG1fc2l6ZSB7IDAg
fTsKQEAgLTE0NSw3ICsxNDgsNyBAQCBwcml2YXRlOgogCiBEYXRhIGNvbmNhdGVuYXRlKGNvbnN0
IERhdGEmLCBjb25zdCBEYXRhJik7CiBib29sIGJ5dGVzRXF1YWwoY29uc3QgRGF0YSYsIGNvbnN0
IERhdGEmKTsKLURhdGEgbWFwRmlsZShpbnQgZmQsIHNpemVfdCBvZmZzZXQsIHNpemVfdCk7CitE
YXRhIGFkb3B0QW5kTWFwRmlsZShpbnQgZmQsIHNpemVfdCBvZmZzZXQsIHNpemVfdCk7CiBEYXRh
IG1hcEZpbGUoY29uc3QgY2hhciogcGF0aCk7CiBTSEExOjpEaWdlc3QgY29tcHV0ZVNIQTEoY29u
c3QgRGF0YSYpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tCShyZXZpc2lvbiAxODQz
MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVE
YXRhQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTkzLDYzICs5MywxNyBAQCBEYXRhIGNvbmNh
dGVuYXRlKGNvbnN0IERhdGEmIGEsIGNvbnN0IERhCiAgICAgcmV0dXJuIHsgYWRvcHREaXNwYXRj
aChkaXNwYXRjaF9kYXRhX2NyZWF0ZV9jb25jYXQoYS5kaXNwYXRjaERhdGEoKSwgYi5kaXNwYXRj
aERhdGEoKSkpIH07CiB9CiAKLURhdGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3Qg
c2l6ZSkKK0RhdGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3Qgc2l6ZSwgaW50IGZk
KQogewogICAgIEFTU0VSVChtYXAgJiYgbWFwICE9IE1BUF9GQUlMRUQpOworICAgIGNsb3NlKGZk
KTsKICAgICBhdXRvIGJvZHlNYXAgPSBhZG9wdERpc3BhdGNoKGRpc3BhdGNoX2RhdGFfY3JlYXRl
KG1hcCwgc2l6ZSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW21hcCwgc2l6ZV0gewogICAg
ICAgICBtdW5tYXAobWFwLCBzaXplKTsKICAgICB9KSk7CiAgICAgcmV0dXJuIHsgYm9keU1hcCwg
RGF0YTo6QmFja2luZzo6TWFwIH07CiB9CiAKLURhdGEgbWFwRmlsZShpbnQgZmQsIHNpemVfdCBv
ZmZzZXQsIHNpemVfdCBzaXplKQotewotICAgIGlmICghc2l6ZSkKLSAgICAgICAgcmV0dXJuIERh
dGE6OmVtcHR5KCk7Ci0KLSAgICB2b2lkKiBtYXAgPSBtbWFwKG51bGxwdHIsIHNpemUsIFBST1Rf
UkVBRCwgTUFQX1BSSVZBVEUsIGZkLCBvZmZzZXQpOwotICAgIGlmIChtYXAgPT0gTUFQX0ZBSUxF
RCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gRGF0YTo6YWRvcHRNYXAobWFwLCBz
aXplKTsKLX0KLQotRGF0YSBtYXBGaWxlKGNvbnN0IGNoYXIqIHBhdGgpCi17Ci0gICAgaW50IGZk
ID0gb3BlbihwYXRoLCBPX1JET05MWSwgMCk7Ci0gICAgaWYgKGZkIDwgMCkKLSAgICAgICAgcmV0
dXJuIHsgfTsKLSAgICBzdHJ1Y3Qgc3RhdCBzdGF0OwotICAgIGlmIChmc3RhdChmZCwgJnN0YXQp
IDwgMCkgewotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQot
ICAgIHNpemVfdCBzaXplID0gc3RhdC5zdF9zaXplOwotICAgIGF1dG8gZGF0YSA9IG1hcEZpbGUo
ZmQsIDAsIHNpemUpOwotICAgIGNsb3NlKGZkKTsKLQotICAgIHJldHVybiBkYXRhOwotfQotCi1T
SEExOjpEaWdlc3QgY29tcHV0ZVNIQTEoY29uc3QgRGF0YSYgZGF0YSkKLXsKLSAgICBTSEExIHNo
YTE7Ci0gICAgZGF0YS5hcHBseShbJnNoYTFdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBz
aXplKSB7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0pOwotICAgIFNIQTE6OkRpZ2VzdCBkaWdlc3Q7Ci0gICAgc2hhMS5jb21w
dXRlSGFzaChkaWdlc3QpOwotICAgIHJldHVybiBkaWdlc3Q7Ci19CiAKLWJvb2wgYnl0ZXNFcXVh
bChjb25zdCBEYXRhJiBhLCBjb25zdCBEYXRhJiBiKQotewotICAgIGlmIChhLmlzTnVsbCgpIHx8
IGIuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoYS5zaXplKCkgIT0g
Yi5zaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gIW1lbWNtcChhLmRh
dGEoKSwgYi5kYXRhKCksIGEuc2l6ZSgpKTsKLX0KIAogfQogfQpJbmRleDogU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURh
dGFTb3VwLmNwcAkocmV2aXNpb24gMTg0MzM1KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NSwxMCArNDUsMTEgQEAgRGF0YTo6RGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgcwog
ICAgIG1fYnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25ld193aXRoX293bmVyKGNvcGll
ZERhdGEsIHNpemUsIGNvcGllZERhdGEsIGZhc3RGcmVlKSk7CiB9CiAKLURhdGE6OkRhdGEoR1Jl
ZlB0cjxTb3VwQnVmZmVyPiYmIGJ1ZmZlciwgQmFja2luZyBiYWNraW5nKQorRGF0YTo6RGF0YShH
UmVmUHRyPFNvdXBCdWZmZXI+JiYgYnVmZmVyLCBpbnQgZmQpCiAgICAgOiBtX2J1ZmZlcihidWZm
ZXIpCisgICAgLCBtX2ZpbGVEZXNjcmlwdG9yKGZkKQogICAgICwgbV9zaXplKGJ1ZmZlciA/IGJ1
ZmZlci0+bGVuZ3RoIDogMCkKLSAgICAsIG1faXNNYXAobV9zaXplICYmIGJhY2tpbmcgPT0gQmFj
a2luZzo6TWFwKQorICAgICwgbV9pc01hcChtX3NpemUgJiYgZmQgIT0gLTEpCiB7CiB9CiAKQEAg
LTEwNCwxMCArMTA1LDEyIEBAIHN0cnVjdCBNYXBXcmFwcGVyIHsKICAgICB+TWFwV3JhcHBlcigp
CiAgICAgewogICAgICAgICBtdW5tYXAobWFwLCBzaXplKTsKKyAgICAgICAgY2xvc2UoZmlsZURl
c2NyaXB0b3IpOwogICAgIH0KIAogICAgIHZvaWQqIG1hcDsKICAgICBzaXplX3Qgc2l6ZTsKKyAg
ICBpbnQgZmlsZURlc2NyaXB0b3I7CiB9OwogCiBzdGF0aWMgdm9pZCBkZWxldGVNYXBXcmFwcGVy
KE1hcFdyYXBwZXIqIHdyYXBwZXIpCkBAIC0xMTUsNjMgKzExOCwxNiBAQCBzdGF0aWMgdm9pZCBk
ZWxldGVNYXBXcmFwcGVyKE1hcFdyYXBwZXIqCiAgICAgZGVsZXRlIHdyYXBwZXI7CiB9CiAKLURh
dGEgbWFwRmlsZShpbnQgZmQsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQotewotICAgIGlm
ICghc2l6ZSkKLSAgICAgICAgcmV0dXJuIERhdGE6OmVtcHR5KCk7Ci0KLSAgICB2b2lkKiBtYXAg
PSBtbWFwKG51bGxwdHIsIHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCBvZmZzZXQp
OwotICAgIGlmIChtYXAgPT0gTUFQX0ZBSUxFRCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBy
ZXR1cm4gRGF0YTo6YWRvcHRNYXAobWFwLCBzaXplKTsKLX0KLQotRGF0YSBEYXRhOjphZG9wdE1h
cCh2b2lkKiBtYXAsIHNpemVfdCBzaXplKQorRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAs
IHNpemVfdCBzaXplLCBpbnQgZmQpCiB7CiAgICAgQVNTRVJUKG1hcCk7CiAgICAgQVNTRVJUKG1h
cCAhPSBNQVBfRkFJTEVEKTsKLSAgICBNYXBXcmFwcGVyKiB3cmFwcGVyID0gbmV3IE1hcFdyYXBw
ZXIgeyBtYXAsIHNpemUgfTsKKyAgICBNYXBXcmFwcGVyKiB3cmFwcGVyID0gbmV3IE1hcFdyYXBw
ZXIgeyBtYXAsIHNpemUsIGZkIH07CiAgICAgR1JlZlB0cjxTb3VwQnVmZmVyPiBidWZmZXIgPSBh
ZG9wdEdSZWYoc291cF9idWZmZXJfbmV3X3dpdGhfb3duZXIobWFwLCBzaXplLCB3cmFwcGVyLCBy
ZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PihkZWxldGVNYXBXcmFwcGVyKSkpOwotICAg
IHJldHVybiB7IFdURjo6bW92ZShidWZmZXIpLCBEYXRhOjpCYWNraW5nOjpNYXAgfTsKLX0KLQot
RGF0YSBtYXBGaWxlKGNvbnN0IGNoYXIqIHBhdGgpCi17Ci0gICAgaW50IGZkID0gb3BlbihwYXRo
LCBPX1JET05MWSwgMCk7Ci0gICAgaWYgKGZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICBzdHJ1Y3Qgc3RhdCBzdGF0OwotICAgIGlmIChmc3RhdChmZCwgJnN0YXQpIDwgMCkgewotICAg
ICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotICAgIHNpemVfdCBz
aXplID0gc3RhdC5zdF9zaXplOwotICAgIGF1dG8gZGF0YSA9IG1hcEZpbGUoZmQsIDAsIHNpemUp
OwotICAgIGNsb3NlKGZkKTsKLQotICAgIHJldHVybiBkYXRhOworICAgIHJldHVybiB7IFdURjo6
bW92ZShidWZmZXIpLCBmZCB9OwogfQogCi1TSEExOjpEaWdlc3QgY29tcHV0ZVNIQTEoY29uc3Qg
RGF0YSYgZGF0YSkKLXsKLSAgICBTSEExIHNoYTE7Ci0gICAgZGF0YS5hcHBseShbJnNoYTFdKGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMo
ZGF0YSwgc2l6ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0pOwotICAgIFNIQTE6OkRp
Z2VzdCBkaWdlc3Q7Ci0gICAgc2hhMS5jb21wdXRlSGFzaChkaWdlc3QpOwotICAgIHJldHVybiBk
aWdlc3Q7Ci19CiAKLWJvb2wgYnl0ZXNFcXVhbChjb25zdCBEYXRhJiBhLCBjb25zdCBEYXRhJiBi
KQotewotICAgIGlmIChhLmlzTnVsbCgpIHx8IGIuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoYS5zaXplKCkgIT0gYi5zaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICByZXR1cm4gIW1lbWNtcChhLmRhdGEoKSwgYi5kYXRhKCksIGEuc2l6ZSgpKTsKLX0K
IAogfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhY2hlCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcAkocmV2aXNpb24gMTg0MzM1KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM0LDE5ICsxMzQsNyBAQCBzdGF0aWMgYm9vbCBkZWNvZGVDb250
ZW50RXh0ZW5zaW9uTWV0YURhCiAKIHN0YXRpYyBib29sIG9wZW5BbmRNYXBDb250ZW50RXh0ZW5z
aW9uKGNvbnN0IFN0cmluZyYgcGF0aCwgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtZXRhRGF0
YSwgRGF0YSYgZmlsZURhdGEpCiB7Ci0gICAgYXV0byBmZCA9IFdlYkNvcmU6Om9wZW5GaWxlKHBh
dGgsIFdlYkNvcmU6Ok9wZW5Gb3JSZWFkKTsKLSAgICBpZiAoZmQgPT0gV2ViQ29yZTo6aW52YWxp
ZFBsYXRmb3JtRmlsZUhhbmRsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbG9uZyBs
b25nIGZpbGVTaXplID0gMDsKLSAgICBpZiAoIVdlYkNvcmU6OmdldEZpbGVTaXplKGZkLCBmaWxl
U2l6ZSkpIHsKLSAgICAgICAgV2ViQ29yZTo6Y2xvc2VGaWxlKGZkKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIGZpbGVEYXRhID0gbWFwRmlsZShmZCwgMCwgc3RhdGljX2Nh
c3Q8c2l6ZV90PihmaWxlU2l6ZSkpOwotICAgIFdlYkNvcmU6OmNsb3NlRmlsZShmZCk7Ci0KKyAg
ICBmaWxlRGF0YSA9IG1hcEZpbGUoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBh
dGgpLmRhdGEoKSk7CiAgICAgaWYgKGZpbGVEYXRhLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKQEAgLTI3MCw5ICsyNTgsNyBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGNvbXBp
bGVkVG9GaWxlKFN0CiAgICAgaWYgKGNvbXBpbGF0aW9uQ2xpZW50LmhhZEVycm9yV2hpbGVXcml0
aW5nVG9GaWxlKCkpCiAgICAgICAgIHJldHVybiBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpF
cnJvcjo6Q29tcGlsZUZhaWxlZDsKICAgICAKLSAgICBtYXBwZWREYXRhID0gbWFwRmlsZSh0ZW1w
b3JhcnlGaWxlSGFuZGxlLCAwLCBtZXRhRGF0YS5maWxlU2l6ZSgpKTsKLSAgICBXZWJDb3JlOjpj
bG9zZUZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSk7Ci0KKyAgICBtYXBwZWREYXRhID0gYWRvcHRB
bmRNYXBGaWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUsIDAsIG1ldGFEYXRhLmZpbGVTaXplKCkpOwog
ICAgIGlmIChtYXBwZWREYXRhLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4
NDMzNSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMTc5MCw2ICsxNzkwLDcgQEAKIAkJRTQ0MzZFQ0UxQTBEMDQw
QjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZUtleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0MzZFQzExQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdvcmtD
YWNoZUtleS5oICovOyB9OwogCQlFNDQzNkVDRjFBMEQwNDBCMDBFQUQyMDQgLyogTmV0d29ya0Nh
Y2hlU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTQ0MzZFQzIxQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0b3JhZ2UuaCAqLzsg
fTsKIAkJRTQ0MzZFRDAxQTBEMDQwQjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0b3JhZ2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0MzZFQzMx
QTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwICovOyB9OworCQlFNDdE
MUU5ODFCMDY0OUZCMDAyNjc2QTggLyogTmV0d29ya0NhY2hlRGF0YS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdEMUU5NjFCMDYyQjY2MDAyNjc2
QTggLyogTmV0d29ya0NhY2hlRGF0YS5jcHAgKi87IH07CiAJCUU0ODlEMjhBMUEwQTJEQjgwMDc4
QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTQ4OUQyODMxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNo
ZUNvZGVyLmggKi87IH07CiAJCUU0ODlEMjhCMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2Fj
aGVDb2RlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTQ4OUQyODQxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVycy5jcHAgKi87
IH07CiAJCUU0ODlEMjhDMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2RlcnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODlEMjg1MUEw
QTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2RlcnMuaCAqLzsgfTsKQEAgLTQwNTYsNiAr
NDA1Nyw3IEBACiAJCUU0NDM2RUMxMUEwQ0ZEQjIwMEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGVLZXku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hlS2V5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NDM2RUMyMUEwQ0ZEQjIwMEVBRDIwNCAvKiBO
ZXR3b3JrQ2FjaGVTdG9yYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5l
dHdvcmtDYWNoZVN0b3JhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ0MzZF
QzMxQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0NhY2hlU3RvcmFnZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0N0QxRTk2MUIwNjJCNjYwMDI2NzZBOCAvKiBOZXR3
b3JrQ2FjaGVEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5l
dHdvcmtDYWNoZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDg5RDI4
MzFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlQ29kZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hlQ29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTQ4OUQyODQxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVy
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ2FjaGVD
b2RlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDg5RDI4NTFBMEEyREI4
MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlQ29kZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE5ldHdvcmtDYWNoZUNvZGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNzUyNCw2ICs3NTI2LDcgQEAKIAkJCQlFNDg5RDI4MzFBMEEyREI4MDA3OEMwNkEgLyog
TmV0d29ya0NhY2hlQ29kZXIuaCAqLywKIAkJCQlFNDg5RDI4NDFBMEEyREI4MDA3OEMwNkEgLyog
TmV0d29ya0NhY2hlQ29kZXJzLmNwcCAqLywKIAkJCQlFNDg5RDI4NTFBMEEyREI4MDA3OEMwNkEg
LyogTmV0d29ya0NhY2hlQ29kZXJzLmggKi8sCisJCQkJRTQ3RDFFOTYxQjA2MkI2NjAwMjY3NkE4
IC8qIE5ldHdvcmtDYWNoZURhdGEuY3BwICovLAogCQkJCUU0MkUwNjExMUFBNzVBQkQwMEIxMTY5
OSAvKiBOZXR3b3JrQ2FjaGVEYXRhLmggKi8sCiAJCQkJRTQyRTA2MTMxQUE3NUI3MDAwQjExNjk5
IC8qIE5ldHdvcmtDYWNoZURhdGFDb2NvYS5tbSAqLywKIAkJCQlFNDg5RDI4NjFBMEEyREI4MDA3
OEMwNkEgLyogTmV0d29ya0NhY2hlRGVjb2Rlci5jcHAgKi8sCkBAIC0xMDE3Myw2ICsxMDE3Niw3
IEBACiAJCQkJMkRDNkQ5QzQxOEM0NEE2MTAwNDNCQUQ0IC8qIFdLV2ViVmlld0NvbnRlbnRQcm92
aWRlclJlZ2lzdHJ5Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFENjBGNUQxOEUyMEY0QzAwMjBD
MDM0IC8qIFdLV2luZG93RmVhdHVyZXMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0JFQ0RFNzE2
QjY0MTY4MDAwNDdBMUEgLyogWFBDU2VydmljZUVudHJ5UG9pbnQubW0gaW4gU291cmNlcyAqLywK
KwkJCQlFNDdEMUU5ODFCMDY0OUZCMDAyNjc2QTggLyogTmV0d29ya0NhY2hlRGF0YS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>