<?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>66507</bug_id>
          
          <creation_ts>2011-08-18 16:07:44 -0700</creation_ts>
          <short_desc>Switch RenderLayer to to new layout types</short_desc>
          <delta_ts>2011-08-19 12:26:24 -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>Layout and Rendering</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>63567</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Emil A Eklund">eae</reporter>
          <assigned_to name="Emil A Eklund">eae</assigned_to>
          <cc>eric</cc>
    
    <cc>leviw</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>453467</commentid>
    <comment_count>0</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-08-18 16:07:44 -0700</bug_when>
    <thetext>Convert RenderLayer to new layout abstraction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453487</commentid>
    <comment_count>1</comment_count>
      <attachid>104423</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-08-18 16:39:51 -0700</bug_when>
    <thetext>Created attachment 104423
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453983</commentid>
    <comment_count>2</comment_count>
      <attachid>104423</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-19 12:26:20 -0700</bug_when>
    <thetext>Comment on attachment 104423
Patch

Clearing flags on attachment: 104423

Committed r93429: &lt;http://trac.webkit.org/changeset/93429&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453984</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-19 12:26:24 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104423</attachid>
            <date>2011-08-18 16:39:51 -0700</date>
            <delta_ts>2011-08-19 12:26:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66507-20110818163950.patch</filename>
            <type>text/plain</type>
            <size>128784</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzMzY5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDgtMTggIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN3aXRjaCBSZW5kZXJMYXllciB0
byB0byBuZXcgbGF5b3V0IHR5cGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02NjUwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIENvbnZlcnQgUmVuZGVyTGF5ZXIgdG8gbmV3IGxheW91dCBhYnN0cmFjdGlv
bi4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgbm8gbmV3IGZ1bmN0aW9uYWxpdHkuCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvTGF5b3V0VHlwZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmZsb29y
ZWRMYXlvdXRTaXplKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6CisKIDIwMTEtMDgtMTgg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgcG9zaXRpb25Gb3JQ
b2ludCByZXR1cm5zIHdyb25nIFZpc2libGVQb3NpdGlvbiBhdCBiaWRpIGJvdW5kYXJpZXMKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oCShyZXZpc2lvbiA5MzM0MykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC03MSw2ICs3MSwxMSBAQCBpbmxpbmUgTGF5b3V0UG9pbnQgZmxvb3JlZExheW91dFBvaW50
KGNvCiAgICAgcmV0dXJuIGZsb29yZWRJbnRQb2ludChzKTsKIH0KIAoraW5saW5lIExheW91dFNp
emUgZmxvb3JlZExheW91dFNpemUoY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICByZXR1cm4g
TGF5b3V0U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHAueCgpKSwgc3RhdGljX2Nhc3Q8aW50PihwLnko
KSkpOworfQorCiBpbmxpbmUgTGF5b3V0VW5pdCByb3VuZGVkTGF5b3V0VW5pdChmbG9hdCB2YWx1
ZSkKIHsKICAgICByZXR1cm4gbHJvdW5kZih2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDkzMzQzKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDEyICsy
NTMsMTIgQEAgYm9vbCBSZW5kZXJMYXllcjo6Y2FuUmVuZGVyM0RUcmFuc2Zvcm1zKAogI2VuZGlm
CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFVwZGF0ZUxheWVy
UG9zaXRpb25zRmxhZ3MgZmxhZ3MsIEludFBvaW50KiBjYWNoZWRPZmZzZXQpCit2b2lkIFJlbmRl
ckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWdzIGZs
YWdzLCBMYXlvdXRQb2ludCogY2FjaGVkT2Zmc2V0KQogewogICAgIHVwZGF0ZUxheWVyUG9zaXRp
b24oKTsgLy8gRm9yIHJlbHBvc2l0aW9uZWQgbGF5ZXJzIG9yIG5vbi1wb3NpdGlvbmVkIGxheWVy
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8ga2VlcCBpbiBzeW5j
LCBzaW5jZSB3ZSBtYXkgaGF2ZSBzaGlmdGVkIHJlbGF0aXZlCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB0byBvdXIgcGFyZW50IGxheWVyLgotICAgIEludFBvaW50IG9sZENhY2hlZE9m
ZnNldDsKKyAgICBMYXlvdXRQb2ludCBvbGRDYWNoZWRPZmZzZXQ7CiAgICAgaWYgKGNhY2hlZE9m
ZnNldCkgewogICAgICAgICAvLyBXZSBjYW4ndCBjYWNoZSBvdXIgb2Zmc2V0IHRvIHRoZSByZXBh
aW50IGNvbnRhaW5lciBpZiB0aGUgbWFwcGluZyBpcyBhbnl0aGluZyBtb3JlIGNvbXBsZXggdGhh
biBhIHNpbXBsZSB0cmFuc2xhdGlvbgogICAgICAgICBib29sIGRpc2FibGVPZmZzZXRDYWNoZSA9
IHJlbmRlcmVyKCktPmhhc0NvbHVtbnMoKSB8fCByZW5kZXJlcigpLT5oYXNUcmFuc2Zvcm0oKSB8
fCBpc0NvbXBvc2l0ZWQoKTsKQEAgLTI3NSwxOCArMjc1LDE4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OnVwZGF0ZUxheWVyUG9zaXRpb25zKFUKICAgICAgICAgICAgIGlmICghbV9wYXJlbnQgfHwgbV9w
YXJlbnQtPnJlbmRlcmVyKCkgPT0gcmVuZGVyZXIoKS0+Y29udGFpbmluZ0Jsb2NrKCkpCiAgICAg
ICAgICAgICAgICAgY2FjaGVkT2Zmc2V0LT5tb3ZlKG1fdG9wTGVmdC54KCksIG1fdG9wTGVmdC55
KCkpOyAvLyBGYXN0IGNhc2UKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIElu
dFBvaW50IG9mZnNldDsKKyAgICAgICAgICAgICAgICBMYXlvdXRQb2ludCBvZmZzZXQ7CiAgICAg
ICAgICAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMocm9vdCgpLCBvZmZzZXQpOwogICAgICAg
ICAgICAgICAgICpjYWNoZWRPZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBJbnRQb2ludCBvZmZzZXQ7CisgICAgTGF5b3V0UG9pbnQgb2Zmc2V0
OwogICAgIGlmIChjYWNoZWRPZmZzZXQpIHsKICAgICAgICAgb2Zmc2V0ID0gKmNhY2hlZE9mZnNl
dDsKICNpZm5kZWYgTkRFQlVHCi0gICAgICAgIEludFBvaW50IG5vbkNhY2hlZE9mZnNldDsKKyAg
ICAgICAgTGF5b3V0UG9pbnQgbm9uQ2FjaGVkT2Zmc2V0OwogICAgICAgICBjb252ZXJ0VG9MYXll
ckNvb3Jkcyhyb290KCksIG5vbkNhY2hlZE9mZnNldCk7CiAgICAgICAgIEFTU0VSVChvZmZzZXQg
PT0gbm9uQ2FjaGVkT2Zmc2V0KTsKICNlbmRpZgpAQCAtMzA5LDggKzMwOSw4IEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFUKICAgICAgICAgQVNTRVJUKCF2aWV3LT5s
YXlvdXRTdGF0ZUVuYWJsZWQoKSk7CiAKICAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJl
cGFpbnRDb250YWluZXIgPSByZW5kZXJlcigpLT5jb250YWluZXJGb3JSZXBhaW50KCk7Ci0gICAg
ICAgIEludFJlY3QgbmV3UmVjdCA9IHJlbmRlcmVyKCktPmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JS
ZXBhaW50KHJlcGFpbnRDb250YWluZXIpOwotICAgICAgICBJbnRSZWN0IG5ld091dGxpbmVCb3gg
PSByZW5kZXJlcigpLT5vdXRsaW5lQm91bmRzRm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyLCBj
YWNoZWRPZmZzZXQpOworICAgICAgICBMYXlvdXRSZWN0IG5ld1JlY3QgPSByZW5kZXJlcigpLT5j
bGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyKTsKKyAgICAgICAg
TGF5b3V0UmVjdCBuZXdPdXRsaW5lQm94ID0gcmVuZGVyZXIoKS0+b3V0bGluZUJvdW5kc0ZvclJl
cGFpbnQocmVwYWludENvbnRhaW5lciwgY2FjaGVkT2Zmc2V0KTsKICAgICAgICAgLy8gRklYTUU6
IFNob3VsZCBBU1NFUlQgdGhhdCB2YWx1ZSBjYWxjdWxhdGVkIGZvciBuZXdPdXRsaW5lQm94IHVz
aW5nIHRoZSBjYWNoZWQgb2Zmc2V0IGlzIHRoZSBzYW1lCiAgICAgICAgIC8vIGFzIHRoZSB2YWx1
ZSBub3QgdXNpbmcgdGhlIGNhY2hlZCBvZmZzZXQsIGJ1dCB3ZSBjYW4ndCBkdWUgdG8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3MDQ4CiAgICAgICAgIGlmIChmbGFn
cyAmIENoZWNrRm9yUmVwYWludCkgewpAQCAtMzI2LDggKzMyNiw4IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFUKICAgICAgICAgbV9yZXBhaW50UmVjdCA9IG5ld1Jl
Y3Q7CiAgICAgICAgIG1fb3V0bGluZUJveCA9IG5ld091dGxpbmVCb3g7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgbV9yZXBhaW50UmVjdCA9IEludFJlY3QoKTsKLSAgICAgICAgbV9vdXRsaW5lQm94
ID0gSW50UmVjdCgpOworICAgICAgICBtX3JlcGFpbnRSZWN0ID0gTGF5b3V0UmVjdCgpOworICAg
ICAgICBtX291dGxpbmVCb3ggPSBMYXlvdXRSZWN0KCk7CiAgICAgfQogCiAgICAgbV9uZWVkc0Z1
bGxSZXBhaW50ID0gZmFsc2U7CkBAIC0zNjIsOSArMzYyLDkgQEAgdm9pZCBSZW5kZXJMYXllcjo6
dXBkYXRlTGF5ZXJQb3NpdGlvbnMoVQogICAgICAgICAqY2FjaGVkT2Zmc2V0ID0gb2xkQ2FjaGVk
T2Zmc2V0OwogfQogCi1JbnRSZWN0IFJlbmRlckxheWVyOjpyZXBhaW50UmVjdEluY2x1ZGluZ0Rl
c2NlbmRhbnRzKCkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyTGF5ZXI6OnJlcGFpbnRSZWN0SW5j
bHVkaW5nRGVzY2VuZGFudHMoKSBjb25zdAogewotICAgIEludFJlY3QgcmVwYWludFJlY3QgPSBt
X3JlcGFpbnRSZWN0OworICAgIExheW91dFJlY3QgcmVwYWludFJlY3QgPSBtX3JlcGFpbnRSZWN0
OwogICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgcmVwYWludFJlY3QudW5pdGUoY2hp
bGQtPnJlcGFpbnRSZWN0SW5jbHVkaW5nRGVzY2VuZGFudHMoKSk7CiAgICAgcmV0dXJuIHJlcGFp
bnRSZWN0OwpAQCAtNjQxLDExICs2NDEsMTEgQEAgYm9vbCBSZW5kZXJMYXllcjo6dXBkYXRlM0RU
cmFuc2Zvcm1lZERlcwogCiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKCkK
IHsKLSAgICBJbnRQb2ludCBsb2NhbFBvaW50OwotICAgIEludFNpemUgaW5saW5lQm91bmRpbmdC
b3hPZmZzZXQ7IC8vIFdlIGRvbid0IHB1dCB0aGlzIGludG8gdGhlIFJlbmRlckxheWVyIHgveSBm
b3IgaW5saW5lcywgc28gd2UgbmVlZCB0byBzdWJ0cmFjdCBpdCBvdXQgd2hlbiBkb25lLgorICAg
IExheW91dFBvaW50IGxvY2FsUG9pbnQ7CisgICAgTGF5b3V0U2l6ZSBpbmxpbmVCb3VuZGluZ0Jv
eE9mZnNldDsgLy8gV2UgZG9uJ3QgcHV0IHRoaXMgaW50byB0aGUgUmVuZGVyTGF5ZXIgeC95IGZv
ciBpbmxpbmVzLCBzbyB3ZSBuZWVkIHRvIHN1YnRyYWN0IGl0IG91dCB3aGVuIGRvbmUuCiAgICAg
aWYgKHJlbmRlcmVyKCktPmlzUmVuZGVySW5saW5lKCkpIHsKICAgICAgICAgUmVuZGVySW5saW5l
KiBpbmxpbmVGbG93ID0gdG9SZW5kZXJJbmxpbmUocmVuZGVyZXIoKSk7Ci0gICAgICAgIEludFJl
Y3QgbGluZUJveCA9IGlubGluZUZsb3ctPmxpbmVzQm91bmRpbmdCb3goKTsKKyAgICAgICAgTGF5
b3V0UmVjdCBsaW5lQm94ID0gaW5saW5lRmxvdy0+bGluZXNCb3VuZGluZ0JveCgpOwogICAgICAg
ICBzZXRTaXplKGxpbmVCb3guc2l6ZSgpKTsKICAgICAgICAgaW5saW5lQm91bmRpbmdCb3hPZmZz
ZXQgPSB0b1NpemUobGluZUJveC5sb2NhdGlvbigpKTsKICAgICAgICAgbG9jYWxQb2ludCArPSBp
bmxpbmVCb3VuZGluZ0JveE9mZnNldDsKQEAgLTY4MCwyMyArNjgwLDIzIEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb24oKQogICAgICAgICBSZW5kZXJMYXllciogcG9zaXRp
b25lZFBhcmVudCA9IGVuY2xvc2luZ1Bvc2l0aW9uZWRBbmNlc3RvcigpOwogCiAgICAgICAgIC8v
IEZvciBwb3NpdGlvbmVkIGxheWVycywgd2Ugc3VidHJhY3Qgb3V0IHRoZSBlbmNsb3NpbmcgcG9z
aXRpb25lZCBsYXllcidzIHNjcm9sbCBvZmZzZXQuCi0gICAgICAgIEludFNpemUgb2Zmc2V0ID0g
cG9zaXRpb25lZFBhcmVudC0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CisgICAgICAgIExheW91
dFNpemUgb2Zmc2V0ID0gcG9zaXRpb25lZFBhcmVudC0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7
CiAgICAgICAgIGxvY2FsUG9pbnQgLT0gb2Zmc2V0OwogICAgICAgICAKICAgICAgICAgaWYgKHJl
bmRlcmVyKCktPmlzUG9zaXRpb25lZCgpICYmIHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkt
PmlzUmVsUG9zaXRpb25lZCgpICYmIHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCktPmlzUmVu
ZGVySW5saW5lKCkpIHsKLSAgICAgICAgICAgIEludFNpemUgb2Zmc2V0ID0gdG9SZW5kZXJJbmxp
bmUocG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIoKSktPnJlbGF0aXZlUG9zaXRpb25lZElubGlu
ZU9mZnNldCh0b1JlbmRlckJveChyZW5kZXJlcigpKSk7CisgICAgICAgICAgICBMYXlvdXRTaXpl
IG9mZnNldCA9IHRvUmVuZGVySW5saW5lKHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkpLT5y
ZWxhdGl2ZVBvc2l0aW9uZWRJbmxpbmVPZmZzZXQodG9SZW5kZXJCb3gocmVuZGVyZXIoKSkpOwog
ICAgICAgICAgICAgbG9jYWxQb2ludCArPSBvZmZzZXQ7CiAgICAgICAgIH0KICAgICB9IGVsc2Ug
aWYgKHBhcmVudCgpKSB7CiAgICAgICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkgewogICAgICAgICAg
ICAgLy8gRklYTUU6IENvbXBvc2l0ZWQgbGF5ZXJzIGlnbm9yZSBwYWdpbmF0aW9uLCBzbyBhYm91
dCB0aGUgYmVzdCB3ZSBjYW4gZG8gaXMgbWFrZSBzdXJlIHRoZXkncmUgb2Zmc2V0IGludG8gdGhl
IGFwcHJvcHJpYXRlIGNvbHVtbi4KICAgICAgICAgICAgIC8vIFRoZXkgd29uJ3Qgc3BsaXQgYWNy
b3NzIGNvbHVtbnMgcHJvcGVybHkuCi0gICAgICAgICAgICBJbnRTaXplIGNvbHVtbk9mZnNldDsK
KyAgICAgICAgICAgIExheW91dFNpemUgY29sdW1uT2Zmc2V0OwogICAgICAgICAgICAgcGFyZW50
KCktPnJlbmRlcmVyKCktPmFkanVzdEZvckNvbHVtbnMoY29sdW1uT2Zmc2V0LCBsb2NhbFBvaW50
KTsKICAgICAgICAgICAgIGxvY2FsUG9pbnQgKz0gY29sdW1uT2Zmc2V0OwogICAgICAgICB9CiAK
LSAgICAgICAgSW50U2l6ZSBzY3JvbGxPZmZzZXQgPSBwYXJlbnQoKS0+c2Nyb2xsZWRDb250ZW50
T2Zmc2V0KCk7CisgICAgICAgIExheW91dFNpemUgc2Nyb2xsT2Zmc2V0ID0gcGFyZW50KCktPnNj
cm9sbGVkQ29udGVudE9mZnNldCgpOwogICAgICAgICBsb2NhbFBvaW50IC09IHNjcm9sbE9mZnNl
dDsKICAgICB9CiAgICAgICAgIApAQCAtNzA0LDcgKzcwNCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OnVwZGF0ZUxheWVyUG9zaXRpb24oKQogICAgICAgICBtX3JlbGF0aXZlT2Zmc2V0ID0gcmVuZGVy
ZXIoKS0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpOwogICAgICAgICBsb2NhbFBvaW50Lm1vdmUo
bV9yZWxhdGl2ZU9mZnNldCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9yZWxhdGl2ZU9mZnNl
dCA9IEludFNpemUoKTsKKyAgICAgICAgbV9yZWxhdGl2ZU9mZnNldCA9IExheW91dFNpemUoKTsK
ICAgICB9CiAKICAgICAvLyBGSVhNRTogV2UnZCByZWFsbHkgbGlrZSB0byBqdXN0IGdldCByaWQg
b2YgdGhlIGNvbmNlcHQgb2YgYSBsYXllciByZWN0YW5nbGUgYW5kIHJlbHkgb24gdGhlIHJlbmRl
cmVycy4KQEAgLTcyMiw3ICs3MjIsNyBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJMYXll
cjo6cGVyc3BlCiAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOwogCiAgICAg
Ly8gTWF5YmUgZmV0Y2ggdGhlIHBlcnNwZWN0aXZlIGZyb20gdGhlIGJhY2tpbmc/Ci0gICAgY29u
c3QgSW50UmVjdCBib3JkZXJCb3ggPSB0b1JlbmRlckJveChyZW5kZXJlcigpKS0+Ym9yZGVyQm94
UmVjdCgpOworICAgIGNvbnN0IExheW91dFJlY3QgYm9yZGVyQm94ID0gdG9SZW5kZXJCb3gocmVu
ZGVyZXIoKSktPmJvcmRlckJveFJlY3QoKTsKICAgICBjb25zdCBmbG9hdCBib3hXaWR0aCA9IGJv
cmRlckJveC53aWR0aCgpOwogICAgIGNvbnN0IGZsb2F0IGJveEhlaWdodCA9IGJvcmRlckJveC5o
ZWlnaHQoKTsKIApAQCAtNzQ3LDcgKzc0Nyw3IEBAIEZsb2F0UG9pbnQgUmVuZGVyTGF5ZXI6OnBl
cnNwZWN0aXZlT3JpZ2kKICAgICBpZiAoIXJlbmRlcmVyKCktPmhhc1RyYW5zZm9ybSgpKQogICAg
ICAgICByZXR1cm4gRmxvYXRQb2ludCgpOwogCi0gICAgY29uc3QgSW50UmVjdCBib3JkZXJCb3gg
PSB0b1JlbmRlckJveChyZW5kZXJlcigpKS0+Ym9yZGVyQm94UmVjdCgpOworICAgIGNvbnN0IExh
eW91dFJlY3QgYm9yZGVyQm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPmJvcmRlckJveFJl
Y3QoKTsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlcigpLT5zdHlsZSgpOwogCiAg
ICAgcmV0dXJuIEZsb2F0UG9pbnQoc3R5bGUtPnBlcnNwZWN0aXZlT3JpZ2luWCgpLmNhbGNGbG9h
dFZhbHVlKGJvcmRlckJveC53aWR0aCgpKSwKQEAgLTg0OCwxMCArODQ4LDEwIEBAIFJlbmRlckxh
eWVyKiBSZW5kZXJMYXllcjo6Y2xpcHBpbmdSb290KCkKICAgICByZXR1cm4gMDsKIH0KIAotSW50
UG9pbnQgUmVuZGVyTGF5ZXI6OmFic29sdXRlVG9Db250ZW50cyhjb25zdCBJbnRQb2ludCYgYWJz
b2x1dGVQb2ludCkgY29uc3QKK0xheW91dFBvaW50IFJlbmRlckxheWVyOjphYnNvbHV0ZVRvQ29u
dGVudHMoY29uc3QgTGF5b3V0UG9pbnQmIGFic29sdXRlUG9pbnQpIGNvbnN0CiB7CiAgICAgLy8g
V2UgZG9uJ3QgdXNlIGNvbnZlcnRUb0xheWVyQ29vcmRzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93
IGFib3V0IHRyYW5zZm9ybXMKLSAgICByZXR1cm4gcm91bmRlZEludFBvaW50KHJlbmRlcmVyKCkt
PmFic29sdXRlVG9Mb2NhbChhYnNvbHV0ZVBvaW50LCBmYWxzZSwgdHJ1ZSkpOworICAgIHJldHVy
biByb3VuZGVkTGF5b3V0UG9pbnQocmVuZGVyZXIoKS0+YWJzb2x1dGVUb0xvY2FsKGFic29sdXRl
UG9pbnQsIGZhbHNlLCB0cnVlKSk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXI6OmNhbm5vdEJsaXRU
b1dpbmRvdygpIGNvbnN0CkBAIC04ODYsMTcgKzg4NiwxNyBAQCBSZW5kZXJMYXllciogUmVuZGVy
TGF5ZXI6OnRyYW5zcGFyZW50UGFpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBJbnRSZWN0
IHRyYW5zcGFyZW5jeUNsaXBCb3goY29uc3QgUmVuZGVyTGF5ZXIqIGwsIGNvbnN0IFJlbmRlckxh
eWVyKiByb290TGF5ZXIsIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvcik7CitzdGF0aWMgTGF5
b3V0UmVjdCB0cmFuc3BhcmVuY3lDbGlwQm94KGNvbnN0IFJlbmRlckxheWVyKiwgY29uc3QgUmVu
ZGVyTGF5ZXIqIHJvb3RMYXllciwgUGFpbnRCZWhhdmlvcik7CiAKLXN0YXRpYyB2b2lkIGV4cGFu
ZENsaXBSZWN0Rm9yRGVzY2VuZGFudHNBbmRSZWZsZWN0aW9uKEludFJlY3QmIGNsaXBSZWN0LCBj
b25zdCBSZW5kZXJMYXllciogbCwgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUGFpbnRC
ZWhhdmlvciBwYWludEJlaGF2aW9yKQorc3RhdGljIHZvaWQgZXhwYW5kQ2xpcFJlY3RGb3JEZXNj
ZW5kYW50c0FuZFJlZmxlY3Rpb24oTGF5b3V0UmVjdCYgY2xpcFJlY3QsIGNvbnN0IFJlbmRlckxh
eWVyKiBsYXllciwgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUGFpbnRCZWhhdmlvciBw
YWludEJlaGF2aW9yKQogewogICAgIC8vIElmIHdlIGhhdmUgYSBtYXNrLCB0aGVuIHRoZSBjbGlw
IGlzIGxpbWl0ZWQgdG8gdGhlIGJvcmRlciBib3ggYXJlYSAoYW5kIHRoZXJlIGlzCiAgICAgLy8g
bm8gbmVlZCB0byBleGFtaW5lIGNoaWxkIGxheWVycykuCi0gICAgaWYgKCFsLT5yZW5kZXJlcigp
LT5oYXNNYXNrKCkpIHsKKyAgICBpZiAoIWxheWVyLT5yZW5kZXJlcigpLT5oYXNNYXNrKCkpIHsK
ICAgICAgICAgLy8gTm90ZTogd2UgZG9uJ3QgaGF2ZSB0byB3YWxrIHotb3JkZXIgbGlzdHMgc2lu
Y2UgdHJhbnNwYXJlbnQgZWxlbWVudHMgYWx3YXlzIGVzdGFibGlzaAogICAgICAgICAvLyBhIHN0
YWNraW5nIGNvbnRleHQuICBUaGlzIG1lYW5zIHdlIGNhbiBqdXN0IHdhbGsgdGhlIGxheWVyIHRy
ZWUgZGlyZWN0bHkuCi0gICAgICAgIGZvciAoUmVuZGVyTGF5ZXIqIGN1cnIgPSBsLT5maXJzdENo
aWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgICAgICBp
ZiAoIWwtPnJlZmxlY3Rpb24oKSB8fCBsLT5yZWZsZWN0aW9uTGF5ZXIoKSAhPSBjdXJyKQorICAg
ICAgICBmb3IgKFJlbmRlckxheWVyKiBjdXJyID0gbGF5ZXItPmZpcnN0Q2hpbGQoKTsgY3Vycjsg
Y3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgIGlmICghbGF5ZXItPnJl
ZmxlY3Rpb24oKSB8fCBsYXllci0+cmVmbGVjdGlvbkxheWVyKCkgIT0gY3VycikKICAgICAgICAg
ICAgICAgICBjbGlwUmVjdC51bml0ZSh0cmFuc3BhcmVuY3lDbGlwQm94KGN1cnIsIHJvb3RMYXll
ciwgcGFpbnRCZWhhdmlvcikpOwogICAgICAgICB9CiAgICAgfQpAQCAtOTA1LDM4ICs5MDUsMzgg
QEAgc3RhdGljIHZvaWQgZXhwYW5kQ2xpcFJlY3RGb3JEZXNjZW5kYW50cwogICAgIC8vIGN1cnJl
bnQgdHJhbnNwYXJlbmN5Q2xpcEJveCB0byBjYXRjaCBhbGwgY2hpbGQgbGF5ZXJzLgogICAgIC8v
IEZJWE1FOiBBY2NlbGVyYXRlZCBjb21wb3NpdGluZyB3aWxsIGV2ZW50dWFsbHkgd2FudCB0byBk
byBzb21ldGhpbmcgc21hcnQgaGVyZSB0byBhdm9pZCBpbmNvcnBvcmF0aW5nIHRoaXMKICAgICAv
LyBzaXplIGludG8gdGhlIHBhcmVudCBsYXllci4KLSAgICBpZiAobC0+cmVuZGVyZXIoKS0+aGFz
UmVmbGVjdGlvbigpKSB7Ci0gICAgICAgIEludFBvaW50IGRlbHRhOwotICAgICAgICBsLT5jb252
ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIGRlbHRhKTsKKyAgICBpZiAobGF5ZXItPnJlbmRl
cmVyKCktPmhhc1JlZmxlY3Rpb24oKSkgeworICAgICAgICBMYXlvdXRQb2ludCBkZWx0YTsKKyAg
ICAgICAgbGF5ZXItPmNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwgZGVsdGEpOwogICAg
ICAgICBjbGlwUmVjdC5tb3ZlKC1kZWx0YS54KCksIC1kZWx0YS55KCkpOwotICAgICAgICBjbGlw
UmVjdC51bml0ZShsLT5yZW5kZXJCb3goKS0+cmVmbGVjdGVkUmVjdChjbGlwUmVjdCkpOworICAg
ICAgICBjbGlwUmVjdC51bml0ZShsYXllci0+cmVuZGVyQm94KCktPnJlZmxlY3RlZFJlY3QoY2xp
cFJlY3QpKTsKICAgICAgICAgY2xpcFJlY3QubW92ZUJ5KGRlbHRhKTsKICAgICB9CiB9CiAKLXN0
YXRpYyBJbnRSZWN0IHRyYW5zcGFyZW5jeUNsaXBCb3goY29uc3QgUmVuZGVyTGF5ZXIqIGwsIGNv
bnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvcikK
K3N0YXRpYyBMYXlvdXRSZWN0IHRyYW5zcGFyZW5jeUNsaXBCb3goY29uc3QgUmVuZGVyTGF5ZXIq
IGxheWVyLCBjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBQYWludEJlaGF2aW9yIHBhaW50
QmVoYXZpb3IpCiB7CiAgICAgLy8gRklYTUU6IEFsdGhvdWdoIHRoaXMgZnVuY3Rpb24gY29tcGxl
dGVseSBpZ25vcmVzIENTUy1pbXBvc2VkIGNsaXBwaW5nLCB3ZSBkaWQgYWxyZWFkeSBpbnRlcnNl
Y3Qgd2l0aCB0aGUKICAgICAvLyBwYWludERpcnR5UmVjdCwgYW5kIHRoYXQgc2hvdWxkIGN1dCBk
b3duIG9uIHRoZSBhbW91bnQgd2UgaGF2ZSB0byBwYWludC4gIFN0aWxsIGl0CiAgICAgLy8gd291
bGQgYmUgYmV0dGVyIHRvIHJlc3BlY3QgY2xpcHMuCiAgICAgCi0gICAgaWYgKHJvb3RMYXllciAh
PSBsICYmIGwtPnBhaW50c1dpdGhUcmFuc2Zvcm0ocGFpbnRCZWhhdmlvcikpIHsKKyAgICBpZiAo
cm9vdExheWVyICE9IGxheWVyICYmIGxheWVyLT5wYWludHNXaXRoVHJhbnNmb3JtKHBhaW50QmVo
YXZpb3IpKSB7CiAgICAgICAgIC8vIFRoZSBiZXN0IHdlIGNhbiBkbyBoZXJlIGlzIHRvIHVzZSBl
bmNsb3NlZCBib3VuZGluZyBib3hlcyB0byBlc3RhYmxpc2ggYSAiZnV6enkiIGVub3VnaCBjbGlw
IHRvIGVuY29tcGFzcwogICAgICAgICAvLyB0aGUgdHJhbnNmb3JtZWQgbGF5ZXIgYW5kIGFsbCBv
ZiBpdHMgY2hpbGRyZW4uCi0gICAgICAgIEludFBvaW50IGRlbHRhOwotICAgICAgICBsLT5jb252
ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIGRlbHRhKTsKKyAgICAgICAgTGF5b3V0UG9pbnQg
ZGVsdGE7CisgICAgICAgIGxheWVyLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIGRl
bHRhKTsKIAogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CiAgICAgICAg
IHRyYW5zZm9ybS50cmFuc2xhdGUoZGVsdGEueCgpLCBkZWx0YS55KCkpOwotICAgICAgICB0cmFu
c2Zvcm0gPSB0cmFuc2Zvcm0gKiAqbC0+dHJhbnNmb3JtKCk7CisgICAgICAgIHRyYW5zZm9ybSA9
IHRyYW5zZm9ybSAqICpsYXllci0+dHJhbnNmb3JtKCk7CiAKLSAgICAgICAgSW50UmVjdCBjbGlw
UmVjdCA9IGwtPmJvdW5kaW5nQm94KGwpOwotICAgICAgICBleHBhbmRDbGlwUmVjdEZvckRlc2Nl
bmRhbnRzQW5kUmVmbGVjdGlvbihjbGlwUmVjdCwgbCwgbCwgcGFpbnRCZWhhdmlvcik7CisgICAg
ICAgIExheW91dFJlY3QgY2xpcFJlY3QgPSBsYXllci0+Ym91bmRpbmdCb3gobGF5ZXIpOworICAg
ICAgICBleHBhbmRDbGlwUmVjdEZvckRlc2NlbmRhbnRzQW5kUmVmbGVjdGlvbihjbGlwUmVjdCwg
bGF5ZXIsIGxheWVyLCBwYWludEJlaGF2aW9yKTsKICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybS5t
YXBSZWN0KGNsaXBSZWN0KTsKICAgICB9CiAgICAgCi0gICAgSW50UmVjdCBjbGlwUmVjdCA9IGwt
PmJvdW5kaW5nQm94KHJvb3RMYXllcik7Ci0gICAgZXhwYW5kQ2xpcFJlY3RGb3JEZXNjZW5kYW50
c0FuZFJlZmxlY3Rpb24oY2xpcFJlY3QsIGwsIHJvb3RMYXllciwgcGFpbnRCZWhhdmlvcik7Cisg
ICAgTGF5b3V0UmVjdCBjbGlwUmVjdCA9IGxheWVyLT5ib3VuZGluZ0JveChyb290TGF5ZXIpOwor
ICAgIGV4cGFuZENsaXBSZWN0Rm9yRGVzY2VuZGFudHNBbmRSZWZsZWN0aW9uKGNsaXBSZWN0LCBs
YXllciwgcm9vdExheWVyLCBwYWludEJlaGF2aW9yKTsKICAgICByZXR1cm4gY2xpcFJlY3Q7CiB9
CiAKQEAgLTk1Miw3ICs5NTIsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpiZWdpblRyYW5zcGFyZW5j
eUxheWVyCiAgICAgaWYgKHBhaW50c1dpdGhUcmFuc3BhcmVuY3kocGFpbnRCZWhhdmlvcikpIHsK
ICAgICAgICAgbV91c2VkVHJhbnNwYXJlbmN5ID0gdHJ1ZTsKICAgICAgICAgcC0+c2F2ZSgpOwot
ICAgICAgICBJbnRSZWN0IGNsaXBSZWN0ID0gdHJhbnNwYXJlbmN5Q2xpcEJveCh0aGlzLCByb290
TGF5ZXIsIHBhaW50QmVoYXZpb3IpOworICAgICAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gdHJh
bnNwYXJlbmN5Q2xpcEJveCh0aGlzLCByb290TGF5ZXIsIHBhaW50QmVoYXZpb3IpOwogICAgICAg
ICBwLT5jbGlwKGNsaXBSZWN0KTsKICAgICAgICAgcC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihy
ZW5kZXJlcigpLT5vcGFjaXR5KCkpOwogI2lmZGVmIFJFVkVBTF9UUkFOU1BBUkVOQ1lfTEFZRVJT
CkBAIC0xMTE1LDcgKzExMTUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjppbnNlcnRPbmx5VGhpc0xh
eWVyKCkKIH0KIAogdm9pZCAKLVJlbmRlckxheWVyOjpjb252ZXJ0VG9MYXllckNvb3Jkcyhjb25z
dCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgSW50UG9pbnQmIGxvY2F0aW9uKSBjb25zdAor
UmVuZGVyTGF5ZXI6OmNvbnZlcnRUb0xheWVyQ29vcmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNl
c3RvckxheWVyLCBMYXlvdXRQb2ludCYgbG9jYXRpb24pIGNvbnN0CiB7CiAgICAgaWYgKGFuY2Vz
dG9yTGF5ZXIgPT0gdGhpcykKICAgICAgICAgcmV0dXJuOwpAQCAtMTEyNSw3ICsxMTI1LDcgQEAg
UmVuZGVyTGF5ZXI6OmNvbnZlcnRUb0xheWVyQ29vcmRzKGNvbnN0IAogICAgICAgICAvLyBJZiB0
aGUgZml4ZWQgbGF5ZXIncyBjb250YWluZXIgaXMgdGhlIHJvb3QsIGp1c3QgYWRkIGluIHRoZSBv
ZmZzZXQgb2YgdGhlIHZpZXcuIFdlIGNhbiBvYnRhaW4gdGhpcyBieSBjYWxsaW5nCiAgICAgICAg
IC8vIGxvY2FsVG9BYnNvbHV0ZSgpIG9uIHRoZSBSZW5kZXJWaWV3LgogICAgICAgICBGbG9hdFBv
aW50IGFic1BvcyA9IHJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCksIHRy
dWUpOwotICAgICAgICBsb2NhdGlvbiArPSBmbG9vcmVkSW50U2l6ZShhYnNQb3MpOworICAgICAg
ICBsb2NhdGlvbiArPSBmbG9vcmVkTGF5b3V0U2l6ZShhYnNQb3MpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogIApAQCAtMTE0OSwxMCArMTE0OSwxMCBAQCBSZW5kZXJMYXllcjo6Y29udmVydFRv
TGF5ZXJDb29yZHMoY29uc3QgCiAgICAgICAgIEFTU0VSVChmaXhlZFBvc2l0aW9uQ29udGFpbmVy
TGF5ZXIpOyAvLyBXZSBzaG91bGQgaGF2ZSBoaXQgdGhlIFJlbmRlclZpZXcncyBsYXllciBhdCBs
ZWFzdC4KIAogICAgICAgICBpZiAoZml4ZWRQb3NpdGlvbkNvbnRhaW5lckxheWVyICE9IGFuY2Vz
dG9yTGF5ZXIpIHsKLSAgICAgICAgICAgIEludFBvaW50IGZpeGVkQ29udGFpbmVyQ29vcmRzOwor
ICAgICAgICAgICAgTGF5b3V0UG9pbnQgZml4ZWRDb250YWluZXJDb29yZHM7CiAgICAgICAgICAg
ICBjb252ZXJ0VG9MYXllckNvb3JkcyhmaXhlZFBvc2l0aW9uQ29udGFpbmVyTGF5ZXIsIGZpeGVk
Q29udGFpbmVyQ29vcmRzKTsKIAotICAgICAgICAgICAgSW50UG9pbnQgYW5jZXN0b3JDb29yZHM7
CisgICAgICAgICAgICBMYXlvdXRQb2ludCBhbmNlc3RvckNvb3JkczsKICAgICAgICAgICAgIGFu
Y2VzdG9yTGF5ZXItPmNvbnZlcnRUb0xheWVyQ29vcmRzKGZpeGVkUG9zaXRpb25Db250YWluZXJM
YXllciwgYW5jZXN0b3JDb29yZHMpOwogCiAgICAgICAgICAgICBsb2NhdGlvbiArPSAoZml4ZWRD
b250YWluZXJDb29yZHMgLSBhbmNlc3RvckNvb3Jkcyk7CkBAIC0xMTgyLDEwICsxMTgyLDEwIEBA
IFJlbmRlckxheWVyOjpjb252ZXJ0VG9MYXllckNvb3Jkcyhjb25zdCAKICAgICAgICAgICAgIC8v
IHRvIGVuY2xvc2luZ1Bvc2l0aW9uZWRBbmNlc3RvciBhbmQgc3VidHJhY3QuCiAgICAgICAgICAg
ICBSZW5kZXJMYXllciogcG9zaXRpb25lZEFuY2VzdG9yID0gcGFyZW50TGF5ZXItPmVuY2xvc2lu
Z1Bvc2l0aW9uZWRBbmNlc3RvcigpOwogCi0gICAgICAgICAgICBJbnRQb2ludCB0aGlzQ29vcmRz
OworICAgICAgICAgICAgTGF5b3V0UG9pbnQgdGhpc0Nvb3JkczsKICAgICAgICAgICAgIGNvbnZl
cnRUb0xheWVyQ29vcmRzKHBvc2l0aW9uZWRBbmNlc3RvciwgdGhpc0Nvb3Jkcyk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIEludFBvaW50IGFuY2VzdG9yQ29vcmRzOworICAgICAgICAgICAg
TGF5b3V0UG9pbnQgYW5jZXN0b3JDb29yZHM7CiAgICAgICAgICAgICBhbmNlc3RvckxheWVyLT5j
b252ZXJ0VG9MYXllckNvb3Jkcyhwb3NpdGlvbmVkQW5jZXN0b3IsIGFuY2VzdG9yQ29vcmRzKTsK
IAogICAgICAgICAgICAgbG9jYXRpb24gKz0gKHRoaXNDb29yZHMgLSBhbmNlc3RvckNvb3Jkcyk7
CkBAIC0xMjAzLDkgKzEyMDMsOSBAQCBSZW5kZXJMYXllcjo6Y29udmVydFRvTGF5ZXJDb29yZHMo
Y29uc3QgCiB9CiAKIHZvaWQKLVJlbmRlckxheWVyOjpjb252ZXJ0VG9MYXllckNvb3Jkcyhjb25z
dCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgSW50UmVjdCYgcmVjdCkgY29uc3QKK1JlbmRl
ckxheWVyOjpjb252ZXJ0VG9MYXllckNvb3Jkcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JM
YXllciwgTGF5b3V0UmVjdCYgcmVjdCkgY29uc3QKIHsKLSAgICBJbnRQb2ludCBkZWx0YTsKKyAg
ICBMYXlvdXRQb2ludCBkZWx0YTsKICAgICBjb252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3Rvckxh
eWVyLCBkZWx0YSk7CiAgICAgcmVjdC5tb3ZlKC1kZWx0YS54KCksIC1kZWx0YS55KCkpOwogfQpA
QCAtMTIyNCwyMyArMTIyNCwyMyBAQCBzdGF0aWMgaW5saW5lIGludCBhZGp1c3RlZFNjcm9sbERl
bHRhKGluCiAgICAgcmV0dXJuIGFkanVzdGVkRGVsdGE7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6
OnBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYgc291cmNlUG9pbnQpIAordm9pZCBS
ZW5kZXJMYXllcjo6cGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IExheW91dFBvaW50JiBzb3VyY2VQ
b2ludCkgCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gcmVuZGVyZXIoKS0+ZnJhbWUoKTsKICAgICBp
ZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgSW50UG9pbnQgY3VycmVudE1v
dXNlUG9zaXRpb24gPSBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmN1cnJlbnRNb3VzZVBvc2l0aW9u
KCk7CisgICAgTGF5b3V0UG9pbnQgY3VycmVudE1vdXNlUG9zaXRpb24gPSBmcmFtZS0+ZXZlbnRI
YW5kbGVyKCktPmN1cnJlbnRNb3VzZVBvc2l0aW9uKCk7CiAgICAgCiAgICAgLy8gV2UgbmVlZCB0
byBjaGVjayBpZiB0aGUgY3VycmVudCBtb3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRv
dy4gV2hlbiB0aGUgbW91c2UgaXMgb3V0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBp
bmNvaGVyZW50Ci0gICAgc3RhdGljIEludFBvaW50IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKKyAg
ICBzdGF0aWMgTGF5b3V0UG9pbnQgcHJldmlvdXNNb3VzZVBvc2l0aW9uOwogICAgIGlmIChjdXJy
ZW50TW91c2VQb3NpdGlvbi54KCkgPCAwIHx8IGN1cnJlbnRNb3VzZVBvc2l0aW9uLnkoKSA8IDAp
CiAgICAgICAgIGN1cnJlbnRNb3VzZVBvc2l0aW9uID0gcHJldmlvdXNNb3VzZVBvc2l0aW9uOwog
ICAgIGVsc2UKICAgICAgICAgcHJldmlvdXNNb3VzZVBvc2l0aW9uID0gY3VycmVudE1vdXNlUG9z
aXRpb247CiAKLSAgICBpbnQgeERlbHRhID0gY3VycmVudE1vdXNlUG9zaXRpb24ueCgpIC0gc291
cmNlUG9pbnQueCgpOwotICAgIGludCB5RGVsdGEgPSBjdXJyZW50TW91c2VQb3NpdGlvbi55KCkg
LSBzb3VyY2VQb2ludC55KCk7CisgICAgTGF5b3V0VW5pdCB4RGVsdGEgPSBjdXJyZW50TW91c2VQ
b3NpdGlvbi54KCkgLSBzb3VyY2VQb2ludC54KCk7CisgICAgTGF5b3V0VW5pdCB5RGVsdGEgPSBj
dXJyZW50TW91c2VQb3NpdGlvbi55KCkgLSBzb3VyY2VQb2ludC55KCk7CiAKICAgICBpZiAoYWJz
KHhEZWx0YSkgPD0gU2Nyb2xsVmlldzo6bm9QYW5TY3JvbGxSYWRpdXMpIC8vIGF0IHRoZSBjZW50
ZXIgd2UgbGV0IHRoZSBzcGFjZSBmb3IgdGhlIGljb24KICAgICAgICAgeERlbHRhID0gMDsKQEAg
LTEyNTAsNyArMTI1MCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhblNjcm9sbEZyb21Qb2ludChj
b24KICAgICBzY3JvbGxCeVJlY3Vyc2l2ZWx5KGFkanVzdGVkU2Nyb2xsRGVsdGEoeERlbHRhKSwg
YWRqdXN0ZWRTY3JvbGxEZWx0YSh5RGVsdGEpKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6c2Ny
b2xsQnlSZWN1cnNpdmVseShpbnQgeERlbHRhLCBpbnQgeURlbHRhKQordm9pZCBSZW5kZXJMYXll
cjo6c2Nyb2xsQnlSZWN1cnNpdmVseShMYXlvdXRVbml0IHhEZWx0YSwgTGF5b3V0VW5pdCB5RGVs
dGEpCiB7CiAgICAgaWYgKCF4RGVsdGEgJiYgIXlEZWx0YSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTI2MCwxMyArMTI2MCwxMyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxCeVJlY3Vyc2l2ZWx5
KGluCiAgICAgICAgIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9ICFyZW5kZXJlcigpLT5wYXJlbnQo
KS0+c3R5bGUoKS0+bGluZUNsYW1wKCkuaXNOb25lKCk7CiAKICAgICBpZiAocmVuZGVyZXIoKS0+
aGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJlc3RyaWN0ZWRCeUxpbmVDbGFtcCkgewotICAgICAgICBp
bnQgbmV3T2Zmc2V0WCA9IHNjcm9sbFhPZmZzZXQoKSArIHhEZWx0YTsKLSAgICAgICAgaW50IG5l
d09mZnNldFkgPSBzY3JvbGxZT2Zmc2V0KCkgKyB5RGVsdGE7CisgICAgICAgIExheW91dFVuaXQg
bmV3T2Zmc2V0WCA9IHNjcm9sbFhPZmZzZXQoKSArIHhEZWx0YTsKKyAgICAgICAgTGF5b3V0VW5p
dCBuZXdPZmZzZXRZID0gc2Nyb2xsWU9mZnNldCgpICsgeURlbHRhOwogICAgICAgICBzY3JvbGxU
b09mZnNldChuZXdPZmZzZXRYLCBuZXdPZmZzZXRZKTsKIAogICAgICAgICAvLyBJZiB0aGlzIGxh
eWVyIGNhbid0IGRvIHRoZSBzY3JvbGwgd2UgYXNrIHRoZSBuZXh0IGxheWVyIHVwIHRoYXQgY2Fu
IHNjcm9sbCB0byB0cnkKLSAgICAgICAgaW50IGxlZnRUb1Njcm9sbFggPSBuZXdPZmZzZXRYIC0g
c2Nyb2xsWE9mZnNldCgpOwotICAgICAgICBpbnQgbGVmdFRvU2Nyb2xsWSA9IG5ld09mZnNldFkg
LSBzY3JvbGxZT2Zmc2V0KCk7CisgICAgICAgIExheW91dFVuaXQgbGVmdFRvU2Nyb2xsWCA9IG5l
d09mZnNldFggLSBzY3JvbGxYT2Zmc2V0KCk7CisgICAgICAgIExheW91dFVuaXQgbGVmdFRvU2Ny
b2xsWSA9IG5ld09mZnNldFkgLSBzY3JvbGxZT2Zmc2V0KCk7CiAgICAgICAgIGlmICgobGVmdFRv
U2Nyb2xsWCB8fCBsZWZ0VG9TY3JvbGxZKSAmJiByZW5kZXJlcigpLT5wYXJlbnQoKSkgewogICAg
ICAgICAgICAgaWYgKFJlbmRlckxheWVyKiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdTY3Jv
bGxhYmxlTGF5ZXIoKSkKICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEJ5
UmVjdXJzaXZlbHkobGVmdFRvU2Nyb2xsWCwgbGVmdFRvU2Nyb2xsWSk7CkBAIC0xMjc4LDMwICsx
Mjc4LDMwIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbEJ5UmVjdXJzaXZlbHkoaW4KICAgICB9
IGVsc2UgaWYgKHJlbmRlcmVyKCktPnZpZXcoKS0+ZnJhbWVWaWV3KCkpIHsKICAgICAgICAgLy8g
SWYgd2UgYXJlIGhlcmUsIHdlIHdlcmUgY2FsbGVkIG9uIGEgcmVuZGVyZXIgdGhhdCBjYW4gYmUg
cHJvZ3JhbW1hdGljYWxseSBzY3JvbGxlZCwgYnV0IGRvZXNuJ3QKICAgICAgICAgLy8gaGF2ZSBh
biBvdmVyZmxvdyBjbGlwLiBXaGljaCBtZWFucyB0aGF0IGl0IGlzIGEgZG9jdW1lbnQgbm9kZSB0
aGF0IGNhbiBiZSBzY3JvbGxlZC4KLSAgICAgICAgcmVuZGVyZXIoKS0+dmlldygpLT5mcmFtZVZp
ZXcoKS0+c2Nyb2xsQnkoSW50U2l6ZSh4RGVsdGEsIHlEZWx0YSkpOworICAgICAgICByZW5kZXJl
cigpLT52aWV3KCktPmZyYW1lVmlldygpLT5zY3JvbGxCeShMYXlvdXRTaXplKHhEZWx0YSwgeURl
bHRhKSk7CiAgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBkaWRuJ3Qgc2Nyb2xsIHRoZSB3aG9sZSB3
YXksIGRvIHdlIHdhbnQgdG8gdHJ5IGxvb2tpbmcgYXQgdGhlIGZyYW1lcyBvd25lckVsZW1lbnQ/
IAogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjgy
MzcKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KGludCB4LCBp
bnQgeSwgU2Nyb2xsT2Zmc2V0Q2xhbXBpbmcgY2xhbXApCit2b2lkIFJlbmRlckxheWVyOjpzY3Jv
bGxUb09mZnNldChMYXlvdXRVbml0IHgsIExheW91dFVuaXQgeSwgU2Nyb2xsT2Zmc2V0Q2xhbXBp
bmcgY2xhbXApCiB7CiAgICAgaWYgKGNsYW1wID09IFNjcm9sbE9mZnNldENsYW1wZWQpIHsKICAg
ICAgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKICAgICAgICAgaWYgKCFib3gpCiAg
ICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaW50IG1heFggPSBzY3JvbGxXaWR0aCgpIC0g
Ym94LT5jbGllbnRXaWR0aCgpOwotICAgICAgICBpbnQgbWF4WSA9IHNjcm9sbEhlaWdodCgpIC0g
Ym94LT5jbGllbnRIZWlnaHQoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBtYXhYID0gc2Nyb2xsV2lk
dGgoKSAtIGJveC0+Y2xpZW50V2lkdGgoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBtYXhZID0gc2Ny
b2xsSGVpZ2h0KCkgLSBib3gtPmNsaWVudEhlaWdodCgpOwogCi0gICAgICAgIHggPSBtaW4obWF4
KHgsIDApLCBtYXhYKTsKLSAgICAgICAgeSA9IG1pbihtYXgoeSwgMCksIG1heFkpOworICAgICAg
ICB4ID0gbWluKG1heDxMYXlvdXRVbml0Pih4LCAwKSwgbWF4WCk7CisgICAgICAgIHkgPSBtaW4o
bWF4PExheW91dFVuaXQ+KHksIDApLCBtYXhZKTsKICAgICB9CiAgICAgCi0gICAgU2Nyb2xsYWJs
ZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihJbnRQb2ludCh4LCB5KSk7Cisg
ICAgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihMYXlvdXRQ
b2ludCh4LCB5KSk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvKGludCB4LCBpbnQg
eSkKK3ZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvKExheW91dFVuaXQgeCwgTGF5b3V0VW5pdCB5
KQogewogICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CiAgICAgaWYgKCFib3gpCkBA
IC0xMzE4LDcgKzEzMTgsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUbyhpbnQgeCwgaW50
IHkpCiAgICAgLy8gY29tcGxpY2F0ZWQgKHNpbmNlIGl0IHdpbGwgaW52b2x2ZSB0ZXN0aW5nIHdo
ZXRoZXIgb3VyIGxheWVyCiAgICAgLy8gaXMgZWl0aGVyIG9jY2x1ZGVkIGJ5IGFub3RoZXIgbGF5
ZXIgb3IgY2xpcHBlZCBieSBhbiBlbmNsb3NpbmcKICAgICAvLyBsYXllciBvciBjb250YWlucyBm
aXhlZCBiYWNrZ3JvdW5kcywgZXRjLikuCi0gICAgSW50U2l6ZSBuZXdTY3JvbGxPZmZzZXQgPSBJ
bnRTaXplKHggLSBtX3Njcm9sbE9yaWdpbi54KCksIHkgLSBtX3Njcm9sbE9yaWdpbi55KCkpOwor
ICAgIExheW91dFNpemUgbmV3U2Nyb2xsT2Zmc2V0ID0gTGF5b3V0U2l6ZSh4IC0gbV9zY3JvbGxP
cmlnaW4ueCgpLCB5IC0gbV9zY3JvbGxPcmlnaW4ueSgpKTsKICAgICBpZiAobV9zY3JvbGxPZmZz
ZXQgPT0gbmV3U2Nyb2xsT2Zmc2V0KQogICAgICAgICByZXR1cm47CiAgICAgbV9zY3JvbGxPZmZz
ZXQgPSBuZXdTY3JvbGxPZmZzZXQ7CkBAIC0xMzU4LDcgKzEzNTgsNyBAQCB2b2lkIFJlbmRlckxh
eWVyOjpzY3JvbGxUbyhpbnQgeCwgaW50IHkpCiAjZW5kaWYKIAogICAgIFJlbmRlckJveE1vZGVs
T2JqZWN0KiByZXBhaW50Q29udGFpbmVyID0gcmVuZGVyZXIoKS0+Y29udGFpbmVyRm9yUmVwYWlu
dCgpOwotICAgIEludFJlY3QgcmVjdEZvclJlcGFpbnQgPSByZW5kZXJlcigpLT5jbGlwcGVkT3Zl
cmZsb3dSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyKTsKKyAgICBMYXlvdXRSZWN0IHJl
Y3RGb3JSZXBhaW50ID0gcmVuZGVyZXIoKS0+Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQo
cmVwYWludENvbnRhaW5lcik7CiAKICAgICBGcmFtZSogZnJhbWUgPSByZW5kZXJlcigpLT5mcmFt
ZSgpOwogICAgIGlmIChmcmFtZSkgewpAQCAtMTM4MCwxMCArMTM4MCwxMCBAQCB2b2lkIFJlbmRl
ckxheWVyOjpzY3JvbGxUbyhpbnQgeCwgaW50IHkpCiAgICAgICAgIHJlbmRlcmVyKCktPm5vZGUo
KS0+ZG9jdW1lbnQoKS0+ZXZlbnRRdWV1ZSgpLT5lbnF1ZXVlT3JEaXNwYXRjaFNjcm9sbEV2ZW50
KHJlbmRlcmVyKCktPm5vZGUoKSwgRXZlbnRRdWV1ZTo6U2Nyb2xsRXZlbnRFbGVtZW50VGFyZ2V0
KTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBJbnRS
ZWN0JiByZWN0LCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWCwgY29uc3QgU2Nyb2xsQWxp
Z25tZW50JiBhbGlnblkpCit2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNv
bnN0IExheW91dFJlY3QmIHJlY3QsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25YLCBjb25z
dCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWSkKIHsKICAgICBSZW5kZXJMYXllciogcGFyZW50TGF5
ZXIgPSAwOwotICAgIEludFJlY3QgbmV3UmVjdCA9IHJlY3Q7CisgICAgTGF5b3V0UmVjdCBuZXdS
ZWN0ID0gcmVjdDsKIAogICAgIC8vIFdlIG1heSBlbmQgdXAgcHJvcGFnYXRpbmcgYSBzY3JvbGwg
ZXZlbnQuIEl0IGlzIGltcG9ydGFudCB0aGF0IHdlIHN1c3BlbmQgZXZlbnRzIHVudGlsIAogICAg
IC8vIHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uIHNpbmNlIHRoZXkgY291bGQgZGVsZXRlIHRoZSBs
YXllciBvciB0aGUgbGF5ZXIncyByZW5kZXJlcigpLgpAQCAtMTQwNSwxOSArMTQwNSwxOSBAQCB2
b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvCiAgICAgICAgIEZsb2F0UG9p
bnQgYWJzUG9zID0gYm94LT5sb2NhbFRvQWJzb2x1dGUoKTsKICAgICAgICAgYWJzUG9zLm1vdmUo
Ym94LT5ib3JkZXJMZWZ0KCksIGJveC0+Ym9yZGVyVG9wKCkpOwogCi0gICAgICAgIEludFJlY3Qg
bGF5ZXJCb3VuZHMgPSBJbnRSZWN0KGFic1Bvcy54KCkgKyBzY3JvbGxYT2Zmc2V0KCksIGFic1Bv
cy55KCkgKyBzY3JvbGxZT2Zmc2V0KCksIGJveC0+Y2xpZW50V2lkdGgoKSwgYm94LT5jbGllbnRI
ZWlnaHQoKSk7Ci0gICAgICAgIEludFJlY3QgZXhwb3NlUmVjdCA9IEludFJlY3QocmVjdC54KCkg
KyBzY3JvbGxYT2Zmc2V0KCksIHJlY3QueSgpICsgc2Nyb2xsWU9mZnNldCgpLCByZWN0LndpZHRo
KCksIHJlY3QuaGVpZ2h0KCkpOwotICAgICAgICBJbnRSZWN0IHIgPSBnZXRSZWN0VG9FeHBvc2Uo
bGF5ZXJCb3VuZHMsIGV4cG9zZVJlY3QsIGFsaWduWCwgYWxpZ25ZKTsKKyAgICAgICAgTGF5b3V0
UmVjdCBsYXllckJvdW5kcyA9IExheW91dFJlY3QoYWJzUG9zLngoKSArIHNjcm9sbFhPZmZzZXQo
KSwgYWJzUG9zLnkoKSArIHNjcm9sbFlPZmZzZXQoKSwgYm94LT5jbGllbnRXaWR0aCgpLCBib3gt
PmNsaWVudEhlaWdodCgpKTsKKyAgICAgICAgTGF5b3V0UmVjdCBleHBvc2VSZWN0ID0gTGF5b3V0
UmVjdChyZWN0LngoKSArIHNjcm9sbFhPZmZzZXQoKSwgcmVjdC55KCkgKyBzY3JvbGxZT2Zmc2V0
KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgICAgIExheW91dFJlY3QgciA9
IGdldFJlY3RUb0V4cG9zZShsYXllckJvdW5kcywgZXhwb3NlUmVjdCwgYWxpZ25YLCBhbGlnblkp
OwogICAgICAgICAKLSAgICAgICAgaW50IHhPZmZzZXQgPSByLngoKSAtIGFic1Bvcy54KCk7Ci0g
ICAgICAgIGludCB5T2Zmc2V0ID0gci55KCkgLSBhYnNQb3MueSgpOworICAgICAgICBMYXlvdXRV
bml0IHhPZmZzZXQgPSByLngoKSAtIGFic1Bvcy54KCk7CisgICAgICAgIExheW91dFVuaXQgeU9m
ZnNldCA9IHIueSgpIC0gYWJzUG9zLnkoKTsKICAgICAgICAgLy8gQWRqdXN0IG9mZnNldHMgaWYg
dGhleSdyZSBvdXRzaWRlIG9mIHRoZSBhbGxvd2FibGUgcmFuZ2UuCi0gICAgICAgIHhPZmZzZXQg
PSBtYXgoMCwgbWluKHNjcm9sbFdpZHRoKCkgLSBsYXllckJvdW5kcy53aWR0aCgpLCB4T2Zmc2V0
KSk7Ci0gICAgICAgIHlPZmZzZXQgPSBtYXgoMCwgbWluKHNjcm9sbEhlaWdodCgpIC0gbGF5ZXJC
b3VuZHMuaGVpZ2h0KCksIHlPZmZzZXQpKTsKKyAgICAgICAgeE9mZnNldCA9IG1heDxMYXlvdXRV
bml0PigwLCBtaW4oc2Nyb2xsV2lkdGgoKSAtIGxheWVyQm91bmRzLndpZHRoKCksIHhPZmZzZXQp
KTsKKyAgICAgICAgeU9mZnNldCA9IG1heDxMYXlvdXRVbml0PigwLCBtaW4oc2Nyb2xsSGVpZ2h0
KCkgLSBsYXllckJvdW5kcy5oZWlnaHQoKSwgeU9mZnNldCkpOwogICAgICAgICAKICAgICAgICAg
aWYgKHhPZmZzZXQgIT0gc2Nyb2xsWE9mZnNldCgpIHx8IHlPZmZzZXQgIT0gc2Nyb2xsWU9mZnNl
dCgpKSB7Ci0gICAgICAgICAgICBpbnQgZGlmZlggPSBzY3JvbGxYT2Zmc2V0KCk7Ci0gICAgICAg
ICAgICBpbnQgZGlmZlkgPSBzY3JvbGxZT2Zmc2V0KCk7CisgICAgICAgICAgICBMYXlvdXRVbml0
IGRpZmZYID0gc2Nyb2xsWE9mZnNldCgpOworICAgICAgICAgICAgTGF5b3V0VW5pdCBkaWZmWSA9
IHNjcm9sbFlPZmZzZXQoKTsKICAgICAgICAgICAgIHNjcm9sbFRvT2Zmc2V0KHhPZmZzZXQsIHlP
ZmZzZXQpOwogICAgICAgICAgICAgZGlmZlggPSBzY3JvbGxYT2Zmc2V0KCkgLSBkaWZmWDsKICAg
ICAgICAgICAgIGRpZmZZID0gc2Nyb2xsWU9mZnNldCgpIC0gZGlmZlk7CkBAIC0xNDI3LDIyICsx
NDI3LDIyIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY28KICAgICB9
IGVsc2UgaWYgKCFwYXJlbnRMYXllciAmJiByZW5kZXJlcigpLT5pc0JveCgpICYmIHJlbmRlckJv
eCgpLT5jYW5CZVByb2dyYW1hdGljYWxseVNjcm9sbGVkKCkpIHsKICAgICAgICAgaWYgKGZyYW1l
VmlldykgewogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCktPmRvY3VtZW50KCkgJiYgcmVuZGVy
ZXIoKS0+ZG9jdW1lbnQoKS0+b3duZXJFbGVtZW50KCkgJiYgcmVuZGVyZXIoKS0+ZG9jdW1lbnQo
KS0+b3duZXJFbGVtZW50KCktPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgICAgICAgICBJbnRSZWN0
IHZpZXdSZWN0ID0gZnJhbWVWaWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKLSAgICAgICAgICAg
ICAgICBJbnRSZWN0IHIgPSBnZXRSZWN0VG9FeHBvc2Uodmlld1JlY3QsIHJlY3QsIGFsaWduWCwg
YWxpZ25ZKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IHZpZXdSZWN0ID0gZnJhbWVWaWV3
LT52aXNpYmxlQ29udGVudFJlY3QoKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IHIgPSBn
ZXRSZWN0VG9FeHBvc2Uodmlld1JlY3QsIHJlY3QsIGFsaWduWCwgYWxpZ25ZKTsKICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBpbnQgeE9mZnNldCA9IHIueCgpOwotICAgICAgICAg
ICAgICAgIGludCB5T2Zmc2V0ID0gci55KCk7CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCB4
T2Zmc2V0ID0gci54KCk7CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCB5T2Zmc2V0ID0gci55
KCk7CiAgICAgICAgICAgICAgICAgLy8gQWRqdXN0IG9mZnNldHMgaWYgdGhleSdyZSBvdXRzaWRl
IG9mIHRoZSBhbGxvd2FibGUgcmFuZ2UuCi0gICAgICAgICAgICAgICAgeE9mZnNldCA9IG1heCgw
LCBtaW4oZnJhbWVWaWV3LT5jb250ZW50c1dpZHRoKCksIHhPZmZzZXQpKTsKLSAgICAgICAgICAg
ICAgICB5T2Zmc2V0ID0gbWF4KDAsIG1pbihmcmFtZVZpZXctPmNvbnRlbnRzSGVpZ2h0KCksIHlP
ZmZzZXQpKTsKKyAgICAgICAgICAgICAgICB4T2Zmc2V0ID0gbWF4PExheW91dFVuaXQ+KDAsIG1p
bihmcmFtZVZpZXctPmNvbnRlbnRzV2lkdGgoKSwgeE9mZnNldCkpOworICAgICAgICAgICAgICAg
IHlPZmZzZXQgPSBtYXg8TGF5b3V0VW5pdD4oMCwgbWluKGZyYW1lVmlldy0+Y29udGVudHNIZWln
aHQoKSwgeU9mZnNldCkpOwogCi0gICAgICAgICAgICAgICAgZnJhbWVWaWV3LT5zZXRTY3JvbGxQ
b3NpdGlvbihJbnRQb2ludCh4T2Zmc2V0LCB5T2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgZnJh
bWVWaWV3LT5zZXRTY3JvbGxQb3NpdGlvbihMYXlvdXRQb2ludCh4T2Zmc2V0LCB5T2Zmc2V0KSk7
CiAgICAgICAgICAgICAgICAgcGFyZW50TGF5ZXIgPSByZW5kZXJlcigpLT5kb2N1bWVudCgpLT5v
d25lckVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKICAgICAgICAgICAg
ICAgICBuZXdSZWN0LnNldFgocmVjdC54KCkgLSBmcmFtZVZpZXctPnNjcm9sbFgoKSArIGZyYW1l
Vmlldy0+eCgpKTsKICAgICAgICAgICAgICAgICBuZXdSZWN0LnNldFkocmVjdC55KCkgLSBmcmFt
ZVZpZXctPnNjcm9sbFkoKSArIGZyYW1lVmlldy0+eSgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgSW50UmVjdCB2aWV3UmVjdCA9IGZyYW1lVmlldy0+dmlzaWJsZUNv
bnRlbnRSZWN0KCk7Ci0gICAgICAgICAgICAgICAgSW50UmVjdCByID0gZ2V0UmVjdFRvRXhwb3Nl
KHZpZXdSZWN0LCByZWN0LCBhbGlnblgsIGFsaWduWSk7CisgICAgICAgICAgICAgICAgTGF5b3V0
UmVjdCB2aWV3UmVjdCA9IGZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgICAg
ICAgICAgICAgTGF5b3V0UmVjdCByID0gZ2V0UmVjdFRvRXhwb3NlKHZpZXdSZWN0LCByZWN0LCBh
bGlnblgsIGFsaWduWSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZnJhbWVW
aWV3LT5zZXRTY3JvbGxQb3NpdGlvbihyLmxvY2F0aW9uKCkpOwogCkBAIC0xNDY2LDEyICsxNDY2
LDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY28KICAgICAgICAg
ZnJhbWVWaWV3LT5yZXN1bWVTY2hlZHVsZWRFdmVudHMoKTsKIH0KIAotSW50UmVjdCBSZW5kZXJM
YXllcjo6Z2V0UmVjdFRvRXhwb3NlKGNvbnN0IEludFJlY3QgJnZpc2libGVSZWN0LCBjb25zdCBJ
bnRSZWN0ICZleHBvc2VSZWN0LCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWCwgY29uc3Qg
U2Nyb2xsQWxpZ25tZW50JiBhbGlnblkpCitMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpnZXRSZWN0
VG9FeHBvc2UoY29uc3QgTGF5b3V0UmVjdCAmdmlzaWJsZVJlY3QsIGNvbnN0IExheW91dFJlY3Qg
JmV4cG9zZVJlY3QsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25YLCBjb25zdCBTY3JvbGxB
bGlnbm1lbnQmIGFsaWduWSkKIHsKICAgICAvLyBEZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIFgg
YmVoYXZpb3IuCiAgICAgU2Nyb2xsQmVoYXZpb3Igc2Nyb2xsWDsKLSAgICBJbnRSZWN0IGV4cG9z
ZVJlY3RYKGV4cG9zZVJlY3QueCgpLCB2aXNpYmxlUmVjdC55KCksIGV4cG9zZVJlY3Qud2lkdGgo
KSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkpOwotICAgIGludCBpbnRlcnNlY3RXaWR0aCA9IGludGVy
c2VjdGlvbih2aXNpYmxlUmVjdCwgZXhwb3NlUmVjdFgpLndpZHRoKCk7CisgICAgTGF5b3V0UmVj
dCBleHBvc2VSZWN0WChleHBvc2VSZWN0LngoKSwgdmlzaWJsZVJlY3QueSgpLCBleHBvc2VSZWN0
LndpZHRoKCksIHZpc2libGVSZWN0LmhlaWdodCgpKTsKKyAgICBMYXlvdXRVbml0IGludGVyc2Vj
dFdpZHRoID0gaW50ZXJzZWN0aW9uKHZpc2libGVSZWN0LCBleHBvc2VSZWN0WCkud2lkdGgoKTsK
ICAgICBpZiAoaW50ZXJzZWN0V2lkdGggPT0gZXhwb3NlUmVjdC53aWR0aCgpIHx8IGludGVyc2Vj
dFdpZHRoID49IE1JTl9JTlRFUlNFQ1RfRk9SX1JFVkVBTCkKICAgICAgICAgLy8gSWYgdGhlIHJl
Y3RhbmdsZSBpcyBmdWxseSB2aXNpYmxlLCB1c2UgdGhlIHNwZWNpZmllZCB2aXNpYmxlIGJlaGF2
aW9yLgogICAgICAgICAvLyBJZiB0aGUgcmVjdGFuZ2xlIGlzIHBhcnRpYWxseSB2aXNpYmxlLCBi
dXQgb3ZlciBhIGNlcnRhaW4gdGhyZXNob2xkLApAQCAtMTQ5Myw3ICsxNDkzLDcgQEAgSW50UmVj
dCBSZW5kZXJMYXllcjo6Z2V0UmVjdFRvRXhwb3NlKGNvbgogICAgICAgICBzY3JvbGxYID0gYWxp
Z25SaWdodDsKIAogICAgIC8vIEdpdmVuIHRoZSBYIGJlaGF2aW9yLCBjb21wdXRlIHRoZSBYIGNv
b3JkaW5hdGUuCi0gICAgaW50IHg7CisgICAgTGF5b3V0VW5pdCB4OwogICAgIGlmIChzY3JvbGxY
ID09IG5vU2Nyb2xsKSAKICAgICAgICAgeCA9IHZpc2libGVSZWN0LngoKTsKICAgICBlbHNlIGlm
IChzY3JvbGxYID09IGFsaWduUmlnaHQpCkBAIC0xNTA1LDggKzE1MDUsOCBAQCBJbnRSZWN0IFJl
bmRlckxheWVyOjpnZXRSZWN0VG9FeHBvc2UoY29uCiAKICAgICAvLyBEZXRlcm1pbmUgdGhlIGFw
cHJvcHJpYXRlIFkgYmVoYXZpb3IuCiAgICAgU2Nyb2xsQmVoYXZpb3Igc2Nyb2xsWTsKLSAgICBJ
bnRSZWN0IGV4cG9zZVJlY3RZKHZpc2libGVSZWN0LngoKSwgZXhwb3NlUmVjdC55KCksIHZpc2li
bGVSZWN0LndpZHRoKCksIGV4cG9zZVJlY3QuaGVpZ2h0KCkpOwotICAgIGludCBpbnRlcnNlY3RI
ZWlnaHQgPSBpbnRlcnNlY3Rpb24odmlzaWJsZVJlY3QsIGV4cG9zZVJlY3RZKS5oZWlnaHQoKTsK
KyAgICBMYXlvdXRSZWN0IGV4cG9zZVJlY3RZKHZpc2libGVSZWN0LngoKSwgZXhwb3NlUmVjdC55
KCksIHZpc2libGVSZWN0LndpZHRoKCksIGV4cG9zZVJlY3QuaGVpZ2h0KCkpOworICAgIExheW91
dFVuaXQgaW50ZXJzZWN0SGVpZ2h0ID0gaW50ZXJzZWN0aW9uKHZpc2libGVSZWN0LCBleHBvc2VS
ZWN0WSkuaGVpZ2h0KCk7CiAgICAgaWYgKGludGVyc2VjdEhlaWdodCA9PSBleHBvc2VSZWN0Lmhl
aWdodCgpKQogICAgICAgICAvLyBJZiB0aGUgcmVjdGFuZ2xlIGlzIGZ1bGx5IHZpc2libGUsIHVz
ZSB0aGUgc3BlY2lmaWVkIHZpc2libGUgYmVoYXZpb3IuCiAgICAgICAgIHNjcm9sbFkgPSBTY3Jv
bGxBbGlnbm1lbnQ6OmdldFZpc2libGVCZWhhdmlvcihhbGlnblkpOwpAQCAtMTUyNiw3ICsxNTI2
LDcgQEAgSW50UmVjdCBSZW5kZXJMYXllcjo6Z2V0UmVjdFRvRXhwb3NlKGNvbgogICAgICAgICBz
Y3JvbGxZID0gYWxpZ25Cb3R0b207CiAKICAgICAvLyBHaXZlbiB0aGUgWSBiZWhhdmlvciwgY29t
cHV0ZSB0aGUgWSBjb29yZGluYXRlLgotICAgIGludCB5OworICAgIExheW91dFVuaXQgeTsKICAg
ICBpZiAoc2Nyb2xsWSA9PSBub1Njcm9sbCkgCiAgICAgICAgIHkgPSB2aXNpYmxlUmVjdC55KCk7
CiAgICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBhbGlnbkJvdHRvbSkKQEAgLTE1MzYsNyArMTUzNiw3
IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OmdldFJlY3RUb0V4cG9zZShjb24KICAgICBlbHNlCiAg
ICAgICAgIHkgPSBleHBvc2VSZWN0LnkoKTsKIAotICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50
KHgsIHkpLCB2aXNpYmxlUmVjdC5zaXplKCkpOworICAgIHJldHVybiBMYXlvdXRSZWN0KExheW91
dFBvaW50KHgsIHkpLCB2aXNpYmxlUmVjdC5zaXplKCkpOwogfQogCiB2b2lkIFJlbmRlckxheWVy
OjphdXRvc2Nyb2xsKCkKQEAgLTE1NTMsOCArMTU1Myw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmF1
dG9zY3JvbGwoKQogICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+dXBkYXRlU2VsZWN0aW9uRm9y
TW91c2VEcmFnKCk7CiAjZW5kaWYKIAotICAgIEludFBvaW50IGN1cnJlbnREb2N1bWVudFBvc2l0
aW9uID0gZnJhbWVWaWV3LT53aW5kb3dUb0NvbnRlbnRzKGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
Y3VycmVudE1vdXNlUG9zaXRpb24oKSk7Ci0gICAgc2Nyb2xsUmVjdFRvVmlzaWJsZShJbnRSZWN0
KGN1cnJlbnREb2N1bWVudFBvc2l0aW9uLCBJbnRTaXplKDEsIDEpKSwgU2Nyb2xsQWxpZ25tZW50
OjphbGlnblRvRWRnZUlmTmVlZGVkLCBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVk
ZWQpOworICAgIExheW91dFBvaW50IGN1cnJlbnREb2N1bWVudFBvc2l0aW9uID0gZnJhbWVWaWV3
LT53aW5kb3dUb0NvbnRlbnRzKGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+Y3VycmVudE1vdXNlUG9z
aXRpb24oKSk7CisgICAgc2Nyb2xsUmVjdFRvVmlzaWJsZShMYXlvdXRSZWN0KGN1cnJlbnREb2N1
bWVudFBvc2l0aW9uLCBMYXlvdXRTaXplKDEsIDEpKSwgU2Nyb2xsQWxpZ25tZW50OjphbGlnblRv
RWRnZUlmTmVlZGVkLCBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQpOwogfQog
CiB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQs
IGNvbnN0IExheW91dFNpemUmIG9sZE9mZnNldCkKQEAgLTE2MjIsMTggKzE2MjIsMTggQEAgdm9p
ZCBSZW5kZXJMYXllcjo6cmVzaXplKGNvbnN0IFBsYXRmb3JtTQogICAgIC8vIEZJWE1FIChSYWRh
ciA0MTE4NTY0KTogV2Ugc2hvdWxkIGFsc28gYXV0b3Njcm9sbCB0aGUgd2luZG93IGFzIG5lY2Vz
c2FyeSB0byBrZWVwIHRoZSBwb2ludCB1bmRlciB0aGUgY3Vyc29yIGluIHZpZXcuCiB9CiAKLWlu
dCBSZW5kZXJMYXllcjo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlv
bikgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyTGF5ZXI6OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0CiB7CiAgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIg
PSAoKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpID8gbV9oQmFyIDogbV92QmFy
KS5nZXQoKTsKICAgICByZXR1cm4gc2Nyb2xsYmFyID8gKHNjcm9sbGJhci0+dG90YWxTaXplKCkg
LSBzY3JvbGxiYXItPnZpc2libGVTaXplKCkpIDogMDsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6
c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit2b2lkIFJlbmRlckxheWVy
OjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgTGF5b3V0UG9pbnQmIG9mZnNldCkKIHsKICAgICBzY3Jv
bGxUbyhvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsKIH0KIAotaW50IFJlbmRlckxheWVyOjpzY3Jv
bGxQb3NpdGlvbihTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKK0xheW91dFVuaXQgUmVuZGVy
TGF5ZXI6OnNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogewogICAg
IGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKICAg
ICAgICAgcmV0dXJuIHNjcm9sbFhPZmZzZXQoKTsKQEAgLTE2NDIsNDIgKzE2NDIsNDIgQEAgaW50
IFJlbmRlckxheWVyOjpzY3JvbGxQb3NpdGlvbihTY3JvbGxiYQogICAgIHJldHVybiAwOwogfQog
Ci1JbnRQb2ludCBSZW5kZXJMYXllcjo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAorTGF5b3V0UG9p
bnQgUmVuZGVyTGF5ZXI6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9z
Y3JvbGxPcmlnaW4gKyBtX3Njcm9sbE9mZnNldDsKIH0KIAotSW50UG9pbnQgUmVuZGVyTGF5ZXI6
Om1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0CitMYXlvdXRQb2ludCBSZW5kZXJMYXllcjo6
bWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zY3JvbGxPcmln
aW47CiB9CiAKLUludFBvaW50IFJlbmRlckxheWVyOjptYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBj
b25zdAorTGF5b3V0UG9pbnQgUmVuZGVyTGF5ZXI6Om1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNv
bnN0CiB7CiAgICAgLy8gRklYTUU6IG1fc2Nyb2xsU2l6ZSBtYXkgbm90IGJlIHVwLXRvLWRhdGUg
aWYgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgaXMgdHJ1ZS4KICAgICByZXR1cm4gbV9zY3JvbGxP
cmlnaW4gKyBtX3Njcm9sbFNpemUgLSB2aXNpYmxlQ29udGVudFJlY3QodHJ1ZSkuc2l6ZSgpOwog
fQogCi1JbnRSZWN0IFJlbmRlckxheWVyOjp2aXNpYmxlQ29udGVudFJlY3QoYm9vbCBpbmNsdWRl
U2Nyb2xsYmFycykgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyTGF5ZXI6OnZpc2libGVDb250ZW50
UmVjdChib29sIGluY2x1ZGVTY3JvbGxiYXJzKSBjb25zdAogewotICAgIGludCB2ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoID0gMDsKLSAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IDA7
CisgICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gMDsKKyAgICBMYXlvdXRV
bml0IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSAwOwogICAgIGlmIChpbmNsdWRlU2Nyb2xs
YmFycykgewogICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gKHZlcnRpY2FsU2Nyb2xs
YmFyKCkgJiYgIXZlcnRpY2FsU2Nyb2xsYmFyKCktPmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/IHZl
cnRpY2FsU2Nyb2xsYmFyKCktPndpZHRoKCkgOiAwOwogICAgICAgICBob3Jpem9udGFsU2Nyb2xs
YmFySGVpZ2h0ID0gKGhvcml6b250YWxTY3JvbGxiYXIoKSAmJiAhaG9yaXpvbnRhbFNjcm9sbGJh
cigpLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBob3Jpem9udGFsU2Nyb2xsYmFyKCktPmhlaWdo
dCgpIDogMDsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoc2Nyb2xs
WE9mZnNldCgpLCBzY3JvbGxZT2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgICAgIEludFNpemUo
bWF4KDAsIG1fbGF5ZXJTaXplLndpZHRoKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKSwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXgoMCwgbV9sYXllclNpemUuaGVpZ2h0KCkgLSBo
b3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KSkpOworICAgIHJldHVybiBMYXlvdXRSZWN0KExheW91
dFBvaW50KHNjcm9sbFhPZmZzZXQoKSwgc2Nyb2xsWU9mZnNldCgpKSwKKyAgICAgICAgICAgICAg
ICAgICAgICBMYXlvdXRTaXplKG1heDxMYXlvdXRVbml0PigwLCBtX2xheWVyU2l6ZS53aWR0aCgp
IC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWF4PExheW91dFVuaXQ+KDAsIG1fbGF5ZXJTaXplLmhlaWdodCgpIC0gaG9yaXpvbnRh
bFNjcm9sbGJhckhlaWdodCkpKTsKIH0KIAotSW50U2l6ZSBSZW5kZXJMYXllcjo6b3ZlcmhhbmdB
bW91bnQoKSBjb25zdAorTGF5b3V0U2l6ZSBSZW5kZXJMYXllcjo6b3ZlcmhhbmdBbW91bnQoKSBj
b25zdAogewotICAgIHJldHVybiBJbnRTaXplKCk7CisgICAgcmV0dXJuIExheW91dFNpemUoKTsK
IH0KIAotdm9pZCBSZW5kZXJMYXllcjo6ZGlkQ29tcGxldGVSdWJiZXJCYW5kKGNvbnN0IEludFNp
emUmKSBjb25zdAordm9pZCBSZW5kZXJMYXllcjo6ZGlkQ29tcGxldGVSdWJiZXJCYW5kKGNvbnN0
IExheW91dFNpemUmKSBjb25zdAogewogfQogCkBAIC0xNjg3LDcgKzE2ODcsNyBAQCBib29sIFJl
bmRlckxheWVyOjppc0FjdGl2ZSgpIGNvbnN0CiAgICAgcmV0dXJuIHBhZ2UgJiYgcGFnZS0+Zm9j
dXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCk7CiB9CiAKLXN0YXRpYyBJbnRSZWN0IGNvcm5lclJl
Y3QoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyLCBjb25zdCBJbnRSZWN0JiBib3VuZHMpCitzdGF0
aWMgTGF5b3V0UmVjdCBjb3JuZXJSZWN0KGNvbnN0IFJlbmRlckxheWVyKiBsYXllciwgY29uc3Qg
TGF5b3V0UmVjdCYgYm91bmRzKQogewogICAgIGludCBob3Jpem9udGFsVGhpY2tuZXNzOwogICAg
IGludCB2ZXJ0aWNhbFRoaWNrbmVzczsKQEAgLTE3MDYsMTIgKzE3MDYsMTIgQEAgc3RhdGljIElu
dFJlY3QgY29ybmVyUmVjdChjb25zdCBSZW5kZXJMYQogICAgICAgICBob3Jpem9udGFsVGhpY2tu
ZXNzID0gbGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCktPndpZHRoKCk7CiAgICAgICAgIHZlcnRp
Y2FsVGhpY2tuZXNzID0gbGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXIoKS0+aGVpZ2h0KCk7CiAg
ICAgfQotICAgIHJldHVybiBJbnRSZWN0KGJvdW5kcy5tYXhYKCkgLSBob3Jpem9udGFsVGhpY2tu
ZXNzIC0gbGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPmJvcmRlclJpZ2h0V2lkdGgoKSwgCi0g
ICAgICAgICAgICAgICAgICAgYm91bmRzLm1heFkoKSAtIHZlcnRpY2FsVGhpY2tuZXNzIC0gbGF5
ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPmJvcmRlckJvdHRvbVdpZHRoKCksCi0gICAgICAgICAg
ICAgICAgICAgaG9yaXpvbnRhbFRoaWNrbmVzcywgdmVydGljYWxUaGlja25lc3MpOworICAgIHJl
dHVybiBMYXlvdXRSZWN0KGJvdW5kcy5tYXhYKCkgLSBob3Jpem9udGFsVGhpY2tuZXNzIC0gbGF5
ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPmJvcmRlclJpZ2h0V2lkdGgoKSwgCisgICAgICAgICAg
ICAgICAgICAgICAgYm91bmRzLm1heFkoKSAtIHZlcnRpY2FsVGhpY2tuZXNzIC0gbGF5ZXItPnJl
bmRlcmVyKCktPnN0eWxlKCktPmJvcmRlckJvdHRvbVdpZHRoKCksCisgICAgICAgICAgICAgICAg
ICAgICAgaG9yaXpvbnRhbFRoaWNrbmVzcywgdmVydGljYWxUaGlja25lc3MpOwogfQogCi1JbnRS
ZWN0IFJlbmRlckxheWVyOjpzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QKK0xheW91dFJlY3QgUmVu
ZGVyTGF5ZXI6OnNjcm9sbENvcm5lclJlY3QoKSBjb25zdAogewogICAgIC8vIFdlIGhhdmUgYSBz
Y3JvbGxiYXIgY29ybmVyIHdoZW4gYSBzY3JvbGxiYXIgaXMgdmlzaWJsZSBhbmQgbm90IGZpbGxp
bmcgdGhlIGVudGlyZSBsZW5ndGggb2YgdGhlIGJveC4KICAgICAvLyBUaGlzIGhhcHBlbnMgd2hl
bjoKQEAgLTE3MjIsMjMgKzE3MjIsMjMgQEAgSW50UmVjdCBSZW5kZXJMYXllcjo6c2Nyb2xsQ29y
bmVyUmVjdCgpIAogICAgIGJvb2wgaGFzUmVzaXplciA9IHJlbmRlcmVyKCktPnN0eWxlKCktPnJl
c2l6ZSgpICE9IFJFU0laRV9OT05FOwogICAgIGlmICgoaGFzSG9yaXpvbnRhbEJhciAmJiBoYXNW
ZXJ0aWNhbEJhcikgfHwgKGhhc1Jlc2l6ZXIgJiYgKGhhc0hvcml6b250YWxCYXIgfHwgaGFzVmVy
dGljYWxCYXIpKSkKICAgICAgICAgcmV0dXJuIGNvcm5lclJlY3QodGhpcywgcmVuZGVyQm94KCkt
PmJvcmRlckJveFJlY3QoKSk7Ci0gICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICByZXR1cm4gTGF5
b3V0UmVjdCgpOwogfQogCi1zdGF0aWMgSW50UmVjdCByZXNpemVyQ29ybmVyUmVjdChjb25zdCBS
ZW5kZXJMYXllciogbGF5ZXIsIGNvbnN0IEludFJlY3QmIGJvdW5kcykKK3N0YXRpYyBMYXlvdXRS
ZWN0IHJlc2l6ZXJDb3JuZXJSZWN0KGNvbnN0IFJlbmRlckxheWVyKiBsYXllciwgY29uc3QgTGF5
b3V0UmVjdCYgYm91bmRzKQogewogICAgIEFTU0VSVChsYXllci0+cmVuZGVyZXIoKS0+aXNCb3go
KSk7CiAgICAgaWYgKGxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5yZXNpemUoKSA9PSBSRVNJ
WkVfTk9ORSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIExheW91
dFJlY3QoKTsKICAgICByZXR1cm4gY29ybmVyUmVjdChsYXllciwgYm91bmRzKTsKIH0KIAotSW50
UmVjdCBSZW5kZXJMYXllcjo6c2Nyb2xsQ29ybmVyQW5kUmVzaXplclJlY3QoKSBjb25zdAorTGF5
b3V0UmVjdCBSZW5kZXJMYXllcjo6c2Nyb2xsQ29ybmVyQW5kUmVzaXplclJlY3QoKSBjb25zdAog
ewogICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CiAgICAgaWYgKCFib3gpCi0gICAg
ICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgSW50UmVjdCBzY3JvbGxDb3JuZXJBbmRSZXNpemVy
ID0gc2Nyb2xsQ29ybmVyUmVjdCgpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOworICAg
IExheW91dFJlY3Qgc2Nyb2xsQ29ybmVyQW5kUmVzaXplciA9IHNjcm9sbENvcm5lclJlY3QoKTsK
ICAgICBpZiAoc2Nyb2xsQ29ybmVyQW5kUmVzaXplci5pc0VtcHR5KCkpCiAgICAgICAgIHNjcm9s
bENvcm5lckFuZFJlc2l6ZXIgPSByZXNpemVyQ29ybmVyUmVjdCh0aGlzLCBib3gtPmJvcmRlckJv
eFJlY3QoKSk7CiAgICAgcmV0dXJuIHNjcm9sbENvcm5lckFuZFJlc2l6ZXI7CkBAIC0xNzUwLDU1
ICsxNzUwLDU1IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgKICAg
ICByZXR1cm4gIXNjcm9sbENvcm5lclJlY3QoKS5pc0VtcHR5KCk7CiB9CiAKLUludFJlY3QgUmVu
ZGVyTGF5ZXI6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3Jv
bGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QKK0xh
eW91dFJlY3QgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmll
dyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgTGF5b3V0UmVjdCYgc2Nyb2xsYmFy
UmVjdCkgY29uc3QKIHsKICAgICBSZW5kZXJWaWV3KiB2aWV3ID0gcmVuZGVyZXIoKS0+dmlldygp
OwogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIHNjcm9sbGJhclJlY3Q7CiAKLSAgICBJ
bnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OworICAgIExheW91dFJlY3QgcmVjdCA9IHNjcm9s
bGJhclJlY3Q7CiAgICAgcmVjdC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKIAog
ICAgIHJldHVybiB2aWV3LT5mcmFtZVZpZXcoKS0+Y29udmVydEZyb21SZW5kZXJlcihyZW5kZXJl
cigpLCByZWN0KTsKIH0KIAotSW50UmVjdCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21Db250YWlu
aW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRS
ZWN0JiBwYXJlbnRSZWN0KSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Y29udmVydEZy
b21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBj
b25zdCBMYXlvdXRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAogewogICAgIFJlbmRlclZpZXcqIHZp
ZXcgPSByZW5kZXJlcigpLT52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4g
cGFyZW50UmVjdDsKIAotICAgIEludFJlY3QgcmVjdCA9IHZpZXctPmZyYW1lVmlldygpLT5jb252
ZXJ0VG9SZW5kZXJlcihyZW5kZXJlcigpLCBwYXJlbnRSZWN0KTsKKyAgICBMYXlvdXRSZWN0IHJl
Y3QgPSB2aWV3LT5mcmFtZVZpZXcoKS0+Y29udmVydFRvUmVuZGVyZXIocmVuZGVyZXIoKSwgcGFy
ZW50UmVjdCk7CiAgICAgcmVjdC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7CiAg
ICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUludFBvaW50IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbVNj
cm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0
IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKK0xheW91dFBvaW50IFJlbmRlckxheWVy
Ojpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIsIGNvbnN0IExheW91dFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKIHsKICAg
ICBSZW5kZXJWaWV3KiB2aWV3ID0gcmVuZGVyZXIoKS0+dmlldygpOwogICAgIGlmICghdmlldykK
ICAgICAgICAgcmV0dXJuIHNjcm9sbGJhclBvaW50OwogCi0gICAgSW50UG9pbnQgcG9pbnQgPSBz
Y3JvbGxiYXJQb2ludDsKKyAgICBMYXlvdXRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50Owog
ICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwogICAgIHJldHVybiB2
aWV3LT5mcmFtZVZpZXcoKS0+Y29udmVydEZyb21SZW5kZXJlcihyZW5kZXJlcigpLCBwb2ludCk7
CiB9CiAKLUludFBvaW50IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9T
Y3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBwYXJl
bnRQb2ludCkgY29uc3QKK0xheW91dFBvaW50IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IExh
eW91dFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3QKIHsKICAgICBSZW5kZXJWaWV3KiB2aWV3ID0g
cmVuZGVyZXIoKS0+dmlldygpOwogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIHBhcmVu
dFBvaW50OwogCi0gICAgSW50UG9pbnQgcG9pbnQgPSB2aWV3LT5mcmFtZVZpZXcoKS0+Y29udmVy
dFRvUmVuZGVyZXIocmVuZGVyZXIoKSwgcGFyZW50UG9pbnQpOworICAgIExheW91dFBvaW50IHBv
aW50ID0gdmlldy0+ZnJhbWVWaWV3KCktPmNvbnZlcnRUb1JlbmRlcmVyKHJlbmRlcmVyKCksIHBh
cmVudFBvaW50KTsKIAogICAgIHBvaW50Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIp
KTsKICAgICByZXR1cm4gcG9pbnQ7CiB9CiAKLUludFNpemUgUmVuZGVyTGF5ZXI6OmNvbnRlbnRz
U2l6ZSgpIGNvbnN0CitMYXlvdXRTaXplIFJlbmRlckxheWVyOjpjb250ZW50c1NpemUoKSBjb25z
dAogewotICAgIHJldHVybiBJbnRTaXplKGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0aGlzKS0+
c2Nyb2xsV2lkdGgoKSwgY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KHRoaXMpLT5zY3JvbGxIZWln
aHQoKSk7CisgICAgcmV0dXJuIExheW91dFNpemUoY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KHRo
aXMpLT5zY3JvbGxXaWR0aCgpLCBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4odGhpcyktPnNjcm9s
bEhlaWdodCgpKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6dmlzaWJsZUhlaWdodCgp
IGNvbnN0CkBAIC0xODI0LDI2ICsxODI0LDI2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmlzT25BY3Rp
dmVQYWdlKCkgY29uc3QKICAgICByZXR1cm4gIW1fcmVuZGVyZXItPmRvY3VtZW50KCktPmluUGFn
ZUNhY2hlKCk7CiB9CiAKLUludFBvaW50IFJlbmRlckxheWVyOjpjdXJyZW50TW91c2VQb3NpdGlv
bigpIGNvbnN0CitMYXlvdXRQb2ludCBSZW5kZXJMYXllcjo6Y3VycmVudE1vdXNlUG9zaXRpb24o
KSBjb25zdAogewotICAgIHJldHVybiByZW5kZXJlcigpLT5mcmFtZSgpID8gcmVuZGVyZXIoKS0+
ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmN1cnJlbnRNb3VzZVBvc2l0aW9uKCkgOiBJbnRQb2lu
dCgpOworICAgIHJldHVybiByZW5kZXJlcigpLT5mcmFtZSgpID8gcmVuZGVyZXIoKS0+ZnJhbWUo
KS0+ZXZlbnRIYW5kbGVyKCktPmN1cnJlbnRNb3VzZVBvc2l0aW9uKCkgOiBMYXlvdXRQb2ludCgp
OwogfQogCi1JbnRTaXplIFJlbmRlckxheWVyOjpzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xs
YmFyKiBzY3JvbGxiYXIpIGNvbnN0CitMYXlvdXRTaXplIFJlbmRlckxheWVyOjpzY3JvbGxiYXJP
ZmZzZXQoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0CiB7CiAgICAgUmVuZGVyQm94
KiBib3ggPSByZW5kZXJCb3goKTsKIAogICAgIGlmIChzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgp
KQotICAgICAgICByZXR1cm4gSW50U2l6ZShib3gtPndpZHRoKCkgLSBib3gtPmJvcmRlclJpZ2h0
KCkgLSBzY3JvbGxiYXItPndpZHRoKCksIGJveC0+Ym9yZGVyVG9wKCkpOworICAgICAgICByZXR1
cm4gTGF5b3V0U2l6ZShib3gtPndpZHRoKCkgLSBib3gtPmJvcmRlclJpZ2h0KCkgLSBzY3JvbGxi
YXItPndpZHRoKCksIGJveC0+Ym9yZGVyVG9wKCkpOwogCiAgICAgaWYgKHNjcm9sbGJhciA9PSBt
X2hCYXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBJbnRTaXplKGJveC0+Ym9yZGVyTGVmdCgpLCBi
b3gtPmhlaWdodCgpIC0gYm94LT5ib3JkZXJCb3R0b20oKSAtIHNjcm9sbGJhci0+aGVpZ2h0KCkp
OworICAgICAgICByZXR1cm4gTGF5b3V0U2l6ZShib3gtPmJvcmRlckxlZnQoKSwgYm94LT5oZWln
aHQoKSAtIGJveC0+Ym9yZGVyQm90dG9tKCkgLSBzY3JvbGxiYXItPmhlaWdodCgpKTsKICAgICAK
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gSW50U2l6ZSgpOworICAgIHJl
dHVybiBMYXlvdXRTaXplKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3Jv
bGxiYXJSZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQordm9p
ZCBSZW5kZXJMYXllcjo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxi
YXIsIGNvbnN0IExheW91dFJlY3QmIHJlY3QpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogICAgIGlmIChzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKSB7CkBAIC0xODU4LDcg
KzE4NTgsNyBAQCB2b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjCiAgICAg
ICAgIH0KICAgICB9CiAjZW5kaWYKLSAgICBJbnRSZWN0IHNjcm9sbFJlY3QgPSByZWN0OworICAg
IExheW91dFJlY3Qgc2Nyb2xsUmVjdCA9IHJlY3Q7CiAgICAgUmVuZGVyQm94KiBib3ggPSByZW5k
ZXJCb3goKTsKICAgICBBU1NFUlQoYm94KTsKICAgICBpZiAoc2Nyb2xsYmFyID09IG1fdkJhci5n
ZXQoKSkKQEAgLTE4NjgsNyArMTg2OCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmludmFsaWRhdGVT
Y3JvbGxiYXJSZWMKICAgICByZW5kZXJlcigpLT5yZXBhaW50UmVjdGFuZ2xlKHNjcm9sbFJlY3Qp
OwogfQogCi12b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25z
dCBJbnRSZWN0JiByZWN0KQordm9pZCBSZW5kZXJMYXllcjo6aW52YWxpZGF0ZVNjcm9sbENvcm5l
clJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JTY3JvbGxD
b3JuZXIoKSkgewpAQCAtMjAyOSw3ICsyMDI5LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGFzT3Zl
cmZsb3dDb250cm9scygpIAogICAgIHJldHVybiBtX2hCYXIgfHwgbV92QmFyIHx8IG1fc2Nyb2xs
Q29ybmVyIHx8IHJlbmRlcmVyKCktPnN0eWxlKCktPnJlc2l6ZSgpICE9IFJFU0laRV9OT05FOwog
fQogCi12b2lkIFJlbmRlckxheWVyOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50
U2l6ZSYgb2Zmc2V0RnJvbUxheWVyKQordm9pZCBSZW5kZXJMYXllcjo6cG9zaXRpb25PdmVyZmxv
d0NvbnRyb2xzKGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21MYXllcikKIHsKICAgICBpZiAo
IW1faEJhciAmJiAhbV92QmFyICYmICghcmVuZGVyZXIoKS0+aGFzT3ZlcmZsb3dDbGlwKCkgfHwg
cmVuZGVyZXIoKS0+c3R5bGUoKS0+cmVzaXplKCkgPT0gUkVTSVpFX05PTkUpKQogICAgICAgICBy
ZXR1cm47CkBAIC0yMDM4LDIwICsyMDM4LDIwIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBvc2l0aW9u
T3ZlcmZsb3dDb250cm8KICAgICBpZiAoIWJveCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29u
c3QgSW50UmVjdCYgYm9yZGVyQm94ID0gYm94LT5ib3JkZXJCb3hSZWN0KCk7Ci0gICAgY29uc3Qg
SW50UmVjdCYgc2Nyb2xsQ29ybmVyID0gc2Nyb2xsQ29ybmVyUmVjdCgpOwotICAgIEludFJlY3Qg
YWJzQm91bmRzKGJvcmRlckJveC5sb2NhdGlvbigpICsgb2Zmc2V0RnJvbUxheWVyLCBib3JkZXJC
b3guc2l6ZSgpKTsKKyAgICBjb25zdCBMYXlvdXRSZWN0JiBib3JkZXJCb3ggPSBib3gtPmJvcmRl
ckJveFJlY3QoKTsKKyAgICBjb25zdCBMYXlvdXRSZWN0JiBzY3JvbGxDb3JuZXIgPSBzY3JvbGxD
b3JuZXJSZWN0KCk7CisgICAgTGF5b3V0UmVjdCBhYnNCb3VuZHMoYm9yZGVyQm94LmxvY2F0aW9u
KCkgKyBvZmZzZXRGcm9tTGF5ZXIsIGJvcmRlckJveC5zaXplKCkpOwogICAgIGlmIChtX3ZCYXIp
Ci0gICAgICAgIG1fdkJhci0+c2V0RnJhbWVSZWN0KEludFJlY3QoYWJzQm91bmRzLm1heFgoKSAt
IGJveC0+Ym9yZGVyUmlnaHQoKSAtIG1fdkJhci0+d2lkdGgoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhYnNCb3VuZHMueSgpICsgYm94LT5ib3JkZXJUb3AoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZCYXItPndpZHRoKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzQm91bmRzLmhlaWdodCgpIC0gKGJv
eC0+Ym9yZGVyVG9wKCkgKyBib3gtPmJvcmRlckJvdHRvbSgpKSAtIHNjcm9sbENvcm5lci5oZWln
aHQoKSkpOworICAgICAgICBtX3ZCYXItPnNldEZyYW1lUmVjdChMYXlvdXRSZWN0KGFic0JvdW5k
cy5tYXhYKCkgLSBib3gtPmJvcmRlclJpZ2h0KCkgLSBtX3ZCYXItPndpZHRoKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzQm91bmRzLnkoKSArIGJveC0+Ym9y
ZGVyVG9wKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92QmFy
LT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic0Jv
dW5kcy5oZWlnaHQoKSAtIChib3gtPmJvcmRlclRvcCgpICsgYm94LT5ib3JkZXJCb3R0b20oKSkg
LSBzY3JvbGxDb3JuZXIuaGVpZ2h0KCkpKTsKIAogICAgIGlmIChtX2hCYXIpCi0gICAgICAgIG1f
aEJhci0+c2V0RnJhbWVSZWN0KEludFJlY3QoYWJzQm91bmRzLngoKSArIGJveC0+Ym9yZGVyTGVm
dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic0JvdW5kcy5tYXhZ
KCkgLSBib3gtPmJvcmRlckJvdHRvbSgpIC0gbV9oQmFyLT5oZWlnaHQoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNCb3VuZHMud2lkdGgoKSAtIChib3gtPmJvcmRl
ckxlZnQoKSArIGJveC0+Ym9yZGVyUmlnaHQoKSkgLSBzY3JvbGxDb3JuZXIud2lkdGgoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hCYXItPmhlaWdodCgpKSk7Cisg
ICAgICAgIG1faEJhci0+c2V0RnJhbWVSZWN0KExheW91dFJlY3QoYWJzQm91bmRzLngoKSArIGJv
eC0+Ym9yZGVyTGVmdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFic0JvdW5kcy5tYXhZKCkgLSBib3gtPmJvcmRlckJvdHRvbSgpIC0gbV9oQmFyLT5oZWlnaHQo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNCb3VuZHMud2lk
dGgoKSAtIChib3gtPmJvcmRlckxlZnQoKSArIGJveC0+Ym9yZGVyUmlnaHQoKSkgLSBzY3JvbGxD
b3JuZXIud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2hCYXItPmhlaWdodCgpKSk7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAg
ICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFy
KCkpIHsKQEAgLTIwNzAsNyArMjA3MCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBvc2l0aW9uT3Zl
cmZsb3dDb250cm8KICAgICB9CiAKICAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXll
ckZvclNjcm9sbENvcm5lcigpKSB7Ci0gICAgICAgIGNvbnN0IEludFJlY3QmIHNjcm9sbENvcm5l
ckFuZFJlc2l6ZXIgPSBzY3JvbGxDb3JuZXJBbmRSZXNpemVyUmVjdCgpOworICAgICAgICBjb25z
dCBMYXlvdXRSZWN0JiBzY3JvbGxDb3JuZXJBbmRSZXNpemVyID0gc2Nyb2xsQ29ybmVyQW5kUmVz
aXplclJlY3QoKTsKICAgICAgICAgbGF5ZXItPnNldFBvc2l0aW9uKHNjcm9sbENvcm5lckFuZFJl
c2l6ZXIubG9jYXRpb24oKSk7CiAgICAgICAgIGxheWVyLT5zZXRTaXplKHNjcm9sbENvcm5lckFu
ZFJlc2l6ZXIuc2l6ZSgpKTsKICAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudCghc2Nyb2xs
Q29ybmVyQW5kUmVzaXplci5pc0VtcHR5KCkpOwpAQCAtMjA4Myw0OCArMjA4Myw0OCBAQCB2b2lk
IFJlbmRlckxheWVyOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvCiAgICAgICAgIG1fcmVzaXplci0+
c2V0RnJhbWVSZWN0KHJlc2l6ZXJDb3JuZXJSZWN0KHRoaXMsIGJvcmRlckJveCkpOwogfQogCi1p
bnQgUmVuZGVyTGF5ZXI6OnNjcm9sbFdpZHRoKCkKK0xheW91dFVuaXQgUmVuZGVyTGF5ZXI6OnNj
cm9sbFdpZHRoKCkKIHsKICAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCiAgICAgICAg
IGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CiAgICAgcmV0dXJuIG1fc2Nyb2xsU2l6ZS53aWR0
aCgpOwogfQogCi1pbnQgUmVuZGVyTGF5ZXI6OnNjcm9sbEhlaWdodCgpCitMYXlvdXRVbml0IFJl
bmRlckxheWVyOjpzY3JvbGxIZWlnaHQoKQogewogICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNE
aXJ0eSkKICAgICAgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKICAgICByZXR1cm4gbV9z
Y3JvbGxTaXplLmhlaWdodCgpOwogfQogCi1pbnQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93VG9wKCkg
Y29uc3QKK0xheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93VG9wKCkgY29uc3QKIHsKICAg
ICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIEludFJlY3Qgb3ZlcmZsb3dSZWN0
KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0
KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwogICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2Rl
KG92ZXJmbG93UmVjdCk7CiAgICAgcmV0dXJuIG92ZXJmbG93UmVjdC55KCk7CiB9CiAKLWludCBS
ZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20oKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJMYXll
cjo6b3ZlcmZsb3dCb3R0b20oKSBjb25zdAogewogICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVy
Qm94KCk7Ci0gICAgSW50UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3Qo
KSk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3Qo
KSk7CiAgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKICAgICByZXR1
cm4gb3ZlcmZsb3dSZWN0Lm1heFkoKTsKIH0KIAotaW50IFJlbmRlckxheWVyOjpvdmVyZmxvd0xl
ZnQoKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dMZWZ0KCkgY29uc3QK
IHsKICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIEludFJlY3Qgb3ZlcmZs
b3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIExheW91dFJlY3Qgb3ZlcmZs
b3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwogICAgIGJveC0+ZmxpcEZvcldyaXRp
bmdNb2RlKG92ZXJmbG93UmVjdCk7CiAgICAgcmV0dXJuIG92ZXJmbG93UmVjdC54KCk7CiB9CiAK
LWludCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dSaWdodCgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRl
ckxheWVyOjpvdmVyZmxvd1JpZ2h0KCkgY29uc3QKIHsKICAgICBSZW5kZXJCb3gqIGJveCA9IHJl
bmRlckJveCgpOwotICAgIEludFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dS
ZWN0KCkpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dS
ZWN0KCkpOwogICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7CiAgICAg
cmV0dXJuIG92ZXJmbG93UmVjdC5tYXhYKCk7CiB9CkBAIC0yMTQyLDcgKzIxNDIsNyBAQCB2b2lk
IFJlbmRlckxheWVyOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9uCiAgICAgbV9zY3JvbGxTaXplLnNl
dFdpZHRoKG92ZXJmbG93UmlnaHQoKSAtIG92ZXJmbG93TGVmdCgpKTsKICAgICBtX3Njcm9sbFNp
emUuc2V0SGVpZ2h0KG92ZXJmbG93Qm90dG9tKCkgLSBvdmVyZmxvd1RvcCgpKTsKICAgICAKLSAg
ICBtX3Njcm9sbE9yaWdpbiA9IEludFBvaW50KC1tX3Njcm9sbE92ZXJmbG93LndpZHRoKCksIC1t
X3Njcm9sbE92ZXJmbG93LmhlaWdodCgpKTsKKyAgICBtX3Njcm9sbE9yaWdpbiA9IExheW91dFBv
aW50KC1tX3Njcm9sbE92ZXJmbG93LndpZHRoKCksIC1tX3Njcm9sbE92ZXJmbG93LmhlaWdodCgp
KTsKIAogICAgIGlmIChuZWVkSEJhcikKICAgICAgICAgKm5lZWRIQmFyID0gbV9zY3JvbGxTaXpl
LndpZHRoKCkgPiBib3gtPmNsaWVudFdpZHRoKCk7CkBAIC0yMTg3LDggKzIxODcsOCBAQCB2b2lk
IFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMCiAgICAgaWYgKGJveC0+c3R5bGUo
KS0+b3ZlcmZsb3dYKCkgIT0gT01BUlFVRUUpIHsKICAgICAgICAgLy8gTGF5b3V0IG1heSBjYXVz
ZSB1cyB0byBiZSBpbiBhbiBpbnZhbGlkIHNjcm9sbCBwb3NpdGlvbi4gIEluIHRoaXMgY2FzZSB3
ZSBuZWVkCiAgICAgICAgIC8vIHRvIHB1bGwgb3VyIHNjcm9sbCBvZmZzZXRzIGJhY2sgdG8gdGhl
IG1heCAob3IgcHVzaCB0aGVtIHVwIHRvIHRoZSBtaW4pLgotICAgICAgICBpbnQgbmV3WCA9IG1h
eCgwLCBtaW4oc2Nyb2xsWE9mZnNldCgpLCBzY3JvbGxXaWR0aCgpIC0gYm94LT5jbGllbnRXaWR0
aCgpKSk7Ci0gICAgICAgIGludCBuZXdZID0gbWF4KDAsIG1pbihzY3JvbGxZT2Zmc2V0KCksIHNj
cm9sbEhlaWdodCgpIC0gYm94LT5jbGllbnRIZWlnaHQoKSkpOworICAgICAgICBMYXlvdXRVbml0
IG5ld1ggPSBtYXg8TGF5b3V0VW5pdD4oMCwgbWluKHNjcm9sbFhPZmZzZXQoKSwgc2Nyb2xsV2lk
dGgoKSAtIGJveC0+Y2xpZW50V2lkdGgoKSkpOworICAgICAgICBMYXlvdXRVbml0IG5ld1kgPSBt
YXg8TGF5b3V0VW5pdD4oMCwgbWluKHNjcm9sbFlPZmZzZXQoKSwgc2Nyb2xsSGVpZ2h0KCkgLSBi
b3gtPmNsaWVudEhlaWdodCgpKSk7CiAgICAgICAgIGlmIChuZXdYICE9IHNjcm9sbFhPZmZzZXQo
KSB8fCBuZXdZICE9IHNjcm9sbFlPZmZzZXQoKSkgewogICAgICAgICAgICAgUmVuZGVyVmlldyog
dmlldyA9IHJlbmRlcmVyKCktPnZpZXcoKTsKICAgICAgICAgICAgIEFTU0VSVCh2aWV3KTsKQEAg
LTIyNTgsMTQgKzIyNTgsMTQgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0Fm
dGVyTAogCiAgICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5kIHBhZ2Ugc3RlcC9saW5lIHN0ZXAp
LgogICAgIGlmIChtX2hCYXIpIHsKLSAgICAgICAgaW50IGNsaWVudFdpZHRoID0gYm94LT5jbGll
bnRXaWR0aCgpOwotICAgICAgICBpbnQgcGFnZVN0ZXAgPSBtYXgobWF4PGludD4oY2xpZW50V2lk
dGggKiBTY3JvbGxiYXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpLCBjbGllbnRXaWR0
aCAtIFNjcm9sbGJhcjo6bWF4T3ZlcmxhcEJldHdlZW5QYWdlcygpKSwgMSk7CisgICAgICAgIExh
eW91dFVuaXQgY2xpZW50V2lkdGggPSBib3gtPmNsaWVudFdpZHRoKCk7CisgICAgICAgIExheW91
dFVuaXQgcGFnZVN0ZXAgPSBtYXg8TGF5b3V0VW5pdD4obWF4PExheW91dFVuaXQ+KGNsaWVudFdp
ZHRoICogU2Nyb2xsYmFyOjptaW5GcmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSwgY2xpZW50V2lk
dGggLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKSksIDEpOwogICAgICAgICBt
X2hCYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXAp
OwogICAgICAgICBtX2hCYXItPnNldFByb3BvcnRpb24oY2xpZW50V2lkdGgsIG1fc2Nyb2xsU2l6
ZS53aWR0aCgpKTsKICAgICB9CiAgICAgaWYgKG1fdkJhcikgewotICAgICAgICBpbnQgY2xpZW50
SGVpZ2h0ID0gYm94LT5jbGllbnRIZWlnaHQoKTsKLSAgICAgICAgaW50IHBhZ2VTdGVwID0gbWF4
KG1heDxpbnQ+KGNsaWVudEhlaWdodCAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVu
UGFnaW5nKCksIGNsaWVudEhlaWdodCAtIFNjcm9sbGJhcjo6bWF4T3ZlcmxhcEJldHdlZW5QYWdl
cygpKSwgMSk7CisgICAgICAgIExheW91dFVuaXQgY2xpZW50SGVpZ2h0ID0gYm94LT5jbGllbnRI
ZWlnaHQoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBwYWdlU3RlcCA9IG1heDxMYXlvdXRVbml0Piht
YXg8TGF5b3V0VW5pdD4oY2xpZW50SGVpZ2h0ICogU2Nyb2xsYmFyOjptaW5GcmFjdGlvblRvU3Rl
cFdoZW5QYWdpbmcoKSwgY2xpZW50SGVpZ2h0IC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2Vl
blBhZ2VzKCkpLCAxKTsKICAgICAgICAgbV92QmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVs
c1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKICAgICAgICAgbV92QmFyLT5zZXRQcm9wb3J0aW9u
KGNsaWVudEhlaWdodCwgbV9zY3JvbGxTaXplLmhlaWdodCgpKTsKICAgICB9CkBAIC0yMjgwLDcg
KzIyODAsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMCiAgICAg
ICAgIHVwZGF0ZU92ZXJmbG93U3RhdHVzKGhvcml6b250YWxPdmVyZmxvdywgdmVydGljYWxPdmVy
Zmxvdyk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29u
c3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scykKK3Zv
aWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgTGF5b3V0UmVjdCYg
ZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scykKIHsKICAgICAvLyBEb24n
dCBkbyBhbnl0aGluZyBpZiB3ZSBoYXZlIG5vIG92ZXJmbG93LgogICAgIGlmICghcmVuZGVyZXIo
KS0+aGFzT3ZlcmZsb3dDbGlwKCkpCkBAIC0yNDA4LDcgKzI0MDgsNyBAQCB2b2lkIFJlbmRlckxh
eWVyOjpwYWludFJlc2l6ZXIoR3JhcGhpY3NDCiAgICAgfQogfQogCi1ib29sIFJlbmRlckxheWVy
Ojppc1BvaW50SW5SZXNpemVDb250cm9sKGNvbnN0IEludFBvaW50JiBhYnNvbHV0ZVBvaW50KSBj
b25zdAorYm9vbCBSZW5kZXJMYXllcjo6aXNQb2ludEluUmVzaXplQ29udHJvbChjb25zdCBMYXlv
dXRQb2ludCYgYWJzb2x1dGVQb2ludCkgY29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyKCktPmhh
c092ZXJmbG93Q2xpcCgpIHx8IHJlbmRlcmVyKCktPnN0eWxlKCktPnJlc2l6ZSgpID09IFJFU0la
RV9OT05FKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNDE2LDEzICsyNDE2LDEzIEBAIGJv
b2wgUmVuZGVyTGF5ZXI6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2wKICAgICBSZW5kZXJCb3gqIGJv
eCA9IHJlbmRlckJveCgpOwogICAgIEFTU0VSVChib3gpOwogCi0gICAgSW50UG9pbnQgbG9jYWxQ
b2ludCA9IGFic29sdXRlVG9Db250ZW50cyhhYnNvbHV0ZVBvaW50KTsKKyAgICBMYXlvdXRQb2lu
dCBsb2NhbFBvaW50ID0gYWJzb2x1dGVUb0NvbnRlbnRzKGFic29sdXRlUG9pbnQpOwogCi0gICAg
SW50UmVjdCBsb2NhbEJvdW5kcygwLCAwLCBib3gtPndpZHRoKCksIGJveC0+aGVpZ2h0KCkpOwor
ICAgIExheW91dFJlY3QgbG9jYWxCb3VuZHMoMCwgMCwgYm94LT53aWR0aCgpLCBib3gtPmhlaWdo
dCgpKTsKICAgICByZXR1cm4gcmVzaXplckNvcm5lclJlY3QodGhpcywgbG9jYWxCb3VuZHMpLmNv
bnRhaW5zKGxvY2FsUG9pbnQpOwogfQogICAgIAotYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdE92
ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgbG9j
YWxQb2ludCkKK2Jvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG9pbnQmIGxvY2FsUG9pbnQpCiB7CiAgICAg
aWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAoIXJlbmRlcmVyKCktPmhhc092ZXJmbG93Q2xpcCgp
IHx8IHJlbmRlcmVyKCktPnN0eWxlKCktPnJlc2l6ZSgpID09IFJFU0laRV9OT05FKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMjQzMCwzMiArMjQzMCwzMiBAQCBib29sIFJlbmRlckxheWVy
OjpoaXRUZXN0T3ZlcmZsb3dDb250cm9sCiAgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3go
KTsKICAgICBBU1NFUlQoYm94KTsKICAgICAKLSAgICBJbnRSZWN0IHJlc2l6ZUNvbnRyb2xSZWN0
OworICAgIExheW91dFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7CiAgICAgaWYgKHJlbmRlcmVyKCkt
PnN0eWxlKCktPnJlc2l6ZSgpICE9IFJFU0laRV9OT05FKSB7CiAgICAgICAgIHJlc2l6ZUNvbnRy
b2xSZWN0ID0gcmVzaXplckNvcm5lclJlY3QodGhpcywgYm94LT5ib3JkZXJCb3hSZWN0KCkpOwog
ICAgICAgICBpZiAocmVzaXplQ29udHJvbFJlY3QuY29udGFpbnMobG9jYWxQb2ludCkpCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpbnQgcmVzaXplQ29udHJvbFNpemUg
PSBtYXgocmVzaXplQ29udHJvbFJlY3QuaGVpZ2h0KCksIDApOworICAgIExheW91dFVuaXQgcmVz
aXplQ29udHJvbFNpemUgPSBtYXg8TGF5b3V0VW5pdD4ocmVzaXplQ29udHJvbFJlY3QuaGVpZ2h0
KCksIDApOwogCiAgICAgaWYgKG1fdkJhcikgewotICAgICAgICBJbnRSZWN0IHZCYXJSZWN0KGJv
eC0+d2lkdGgoKSAtIGJveC0+Ym9yZGVyUmlnaHQoKSAtIG1fdkJhci0+d2lkdGgoKSwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgYm94LT5ib3JkZXJUb3AoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3ZCYXItPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYm94LT5o
ZWlnaHQoKSAtIChib3gtPmJvcmRlclRvcCgpICsgYm94LT5ib3JkZXJCb3R0b20oKSkgLSAobV9o
QmFyID8gbV9oQmFyLT5oZWlnaHQoKSA6IHJlc2l6ZUNvbnRyb2xTaXplKSk7CisgICAgICAgIExh
eW91dFJlY3QgdkJhclJlY3QoYm94LT53aWR0aCgpIC0gYm94LT5ib3JkZXJSaWdodCgpIC0gbV92
QmFyLT53aWR0aCgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3gtPmJvcmRlclRv
cCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdkJhci0+d2lkdGgoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib3gtPmhlaWdodCgpIC0gKGJveC0+Ym9yZGVyVG9wKCkg
KyBib3gtPmJvcmRlckJvdHRvbSgpKSAtIChtX2hCYXIgPyBtX2hCYXItPmhlaWdodCgpIDogcmVz
aXplQ29udHJvbFNpemUpKTsKICAgICAgICAgaWYgKHZCYXJSZWN0LmNvbnRhaW5zKGxvY2FsUG9p
bnQpKSB7CiAgICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHJlc2l6ZUNv
bnRyb2xTaXplID0gbWF4KHJlc2l6ZUNvbnRyb2xSZWN0LndpZHRoKCksIDApOworICAgIHJlc2l6
ZUNvbnRyb2xTaXplID0gbWF4PExheW91dFVuaXQ+KHJlc2l6ZUNvbnRyb2xSZWN0LndpZHRoKCks
IDApOwogICAgIGlmIChtX2hCYXIpIHsKLSAgICAgICAgSW50UmVjdCBoQmFyUmVjdChib3gtPmJv
cmRlckxlZnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBib3gtPmhlaWdodCgpIC0gYm94
LT5ib3JkZXJCb3R0b20oKSAtIG1faEJhci0+aGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgYm94LT53aWR0aCgpIC0gKGJveC0+Ym9yZGVyTGVmdCgpICsgYm94LT5ib3JkZXJSaWdo
dCgpKSAtIChtX3ZCYXIgPyBtX3ZCYXItPndpZHRoKCkgOiByZXNpemVDb250cm9sU2l6ZSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgbV9oQmFyLT5oZWlnaHQoKSk7CisgICAgICAgIExheW91
dFJlY3QgaEJhclJlY3QoYm94LT5ib3JkZXJMZWZ0KCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm94LT5oZWlnaHQoKSAtIGJveC0+Ym9yZGVyQm90dG9tKCkgLSBtX2hCYXItPmhlaWdo
dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveC0+d2lkdGgoKSAtIChib3gtPmJv
cmRlckxlZnQoKSArIGJveC0+Ym9yZGVyUmlnaHQoKSkgLSAobV92QmFyID8gbV92QmFyLT53aWR0
aCgpIDogcmVzaXplQ29udHJvbFNpemUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
aEJhci0+aGVpZ2h0KCkpOwogICAgICAgICBpZiAoaEJhclJlY3QuY29udGFpbnMobG9jYWxQb2lu
dCkpIHsKICAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjQ3MCw3ICsyNDcwLDcgQEAgYm9vbCBSZW5kZXJM
YXllcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbgogICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6
c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOwogfQogCi12b2lkIFJl
bmRlckxheWVyOjpwYWludChHcmFwaGljc0NvbnRleHQqIHAsIGNvbnN0IEludFJlY3QmIGRhbWFn
ZVJlY3QsIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0ICpwYWludGlu
Z1Jvb3QpCit2b2lkIFJlbmRlckxheWVyOjpwYWludChHcmFwaGljc0NvbnRleHQqIHAsIGNvbnN0
IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciwgUmVu
ZGVyT2JqZWN0ICpwYWludGluZ1Jvb3QpCiB7CiAgICAgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwIG92
ZXJsYXBUZXN0UmVxdWVzdHM7CiAgICAgcGFpbnRMYXllcih0aGlzLCBwLCBkYW1hZ2VSZWN0LCBw
YWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3QsICZvdmVybGFwVGVzdFJlcXVlc3RzKTsKQEAgLTI0
NzksNyArMjQ3OSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCoK
ICAgICAgICAgaXQtPmZpcnN0LT5zZXRPdmVybGFwVGVzdFJlc3VsdChmYWxzZSk7CiB9CiAKLXZv
aWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0KiBw
LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZpb3Is
IFJlbmRlck9iamVjdCAqcGFpbnRpbmdSb290KQordm9pZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVy
bGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQqIHAsIGNvbnN0IExheW91dFJlY3QmIGRhbWFn
ZVJlY3QsIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0ICpwYWludGlu
Z1Jvb3QpCiB7CiAgICAgaWYgKCFtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycykKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjQ4OCw3ICsyNDg4LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFp
bnRPdmVybGF5U2Nyb2xsYmFycwogICAgIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJz
ID0gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkIHNldENsaXAoR3JhcGhpY3NDb250ZXh0KiBwLCBj
b25zdCBJbnRSZWN0JiBwYWludERpcnR5UmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCitz
dGF0aWMgdm9pZCBzZXRDbGlwKEdyYXBoaWNzQ29udGV4dCogcCwgY29uc3QgTGF5b3V0UmVjdCYg
cGFpbnREaXJ0eVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGNsaXBSZWN0KQogewogICAgIGlmIChw
YWludERpcnR5UmVjdCA9PSBjbGlwUmVjdCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjQ5Niw3ICsy
NDk2LDcgQEAgc3RhdGljIHZvaWQgc2V0Q2xpcChHcmFwaGljc0NvbnRleHQqIHAsIAogICAgIHAt
PmNsaXAoY2xpcFJlY3QpOwogfQogCi1zdGF0aWMgdm9pZCByZXN0b3JlQ2xpcChHcmFwaGljc0Nv
bnRleHQqIHAsIGNvbnN0IEludFJlY3QmIHBhaW50RGlydHlSZWN0LCBjb25zdCBJbnRSZWN0JiBj
bGlwUmVjdCkKK3N0YXRpYyB2b2lkIHJlc3RvcmVDbGlwKEdyYXBoaWNzQ29udGV4dCogcCwgY29u
c3QgTGF5b3V0UmVjdCYgcGFpbnREaXJ0eVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGNsaXBSZWN0
KQogewogICAgIGlmIChwYWludERpcnR5UmVjdCA9PSBjbGlwUmVjdCkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjUwNyw3ICsyNTA3LDcgQEAgc3RhdGljIHZvaWQgcGVyZm9ybU92ZXJsYXBUZXN0cyhP
dmVybGFwVAogewogICAgIFZlY3RvcjxPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQqPiBvdmVybGFw
cGVkUmVxdWVzdENsaWVudHM7CiAgICAgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwOjppdGVyYXRvciBl
bmQgPSBvdmVybGFwVGVzdFJlcXVlc3RzLmVuZCgpOwotICAgIEludFJlY3QgYm91bmRpbmdCb3gg
PSBsYXllci0+Ym91bmRpbmdCb3gocm9vdExheWVyKTsKKyAgICBMYXlvdXRSZWN0IGJvdW5kaW5n
Qm94ID0gbGF5ZXItPmJvdW5kaW5nQm94KHJvb3RMYXllcik7CiAgICAgZm9yIChPdmVybGFwVGVz
dFJlcXVlc3RNYXA6Oml0ZXJhdG9yIGl0ID0gb3ZlcmxhcFRlc3RSZXF1ZXN0cy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pbnRlcnNlY3RzKGl0
LT5zZWNvbmQpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0yNTI3LDcgKzI1MjcsNyBAQCBz
dGF0aWMgYm9vbCBzaG91bGREb1NvZnR3YXJlUGFpbnQoY29uc3QgCiAjZW5kaWYKIAogdm9pZCBS
ZW5kZXJMYXllcjo6cGFpbnRMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBHcmFwaGljc0Nv
bnRleHQqIHAsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBwYWludERp
cnR5UmVjdCwgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLAorICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgTGF5b3V0UmVjdCYgcGFpbnREaXJ0eVJlY3QsIFBhaW50QmVoYXZpb3IgcGFp
bnRCZWhhdmlvciwKICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogcGFpbnRp
bmdSb290LCBPdmVybGFwVGVzdFJlcXVlc3RNYXAqIG92ZXJsYXBUZXN0UmVxdWVzdHMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBQYWludExheWVyRmxhZ3MgcGFpbnRGbGFncykKIHsKQEAgLTI1
NzQsNyArMjU3NCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXIoUmVuZGVyTGF5ZXIK
ICAgICAgICAgfQogCiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgcGFyZW50J3MgY2xpcCByZWN0
cyBoYXZlIGJlZW4gY2FsY3VsYXRlZC4KLSAgICAgICAgSW50UmVjdCBjbGlwUmVjdCA9IHBhaW50
RGlydHlSZWN0OworICAgICAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gcGFpbnREaXJ0eVJlY3Q7
CiAgICAgICAgIGlmIChwYXJlbnQoKSkgewogICAgICAgICAgICAgY2xpcFJlY3QgPSBiYWNrZ3Jv
dW5kQ2xpcFJlY3Qocm9vdExheWVyLCBwYWludEZsYWdzICYgUGFpbnRMYXllclRlbXBvcmFyeUNs
aXBSZWN0cyk7CiAgICAgICAgICAgICBjbGlwUmVjdC5pbnRlcnNlY3QocGFpbnREaXJ0eVJlY3Qp
OwpAQCAtMjU4NSw3ICsyNTg1LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllcihSZW5k
ZXJMYXllcgogCiAgICAgICAgIC8vIEFkanVzdCB0aGUgdHJhbnNmb3JtIHN1Y2ggdGhhdCB0aGUg
cmVuZGVyZXIncyB1cHBlciBsZWZ0IGNvcm5lciB3aWxsIHBhaW50IGF0ICgwLDApIGluIHVzZXIg
c3BhY2UuCiAgICAgICAgIC8vIFRoaXMgaW52b2x2ZXMgc3VidHJhY3Rpbmcgb3V0IHRoZSBwb3Np
dGlvbiBvZiB0aGUgbGF5ZXIgaW4gb3VyIGN1cnJlbnQgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICAg
ICAgSW50UG9pbnQgZGVsdGE7CisgICAgICAgIExheW91dFBvaW50IGRlbHRhOwogICAgICAgICBj
b252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIGRlbHRhKTsKICAgICAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggdHJhbnNmb3JtKGxheWVyVHJhbnNmb3JtKTsKICAgICAgICAgdHJhbnNmb3Jt
LnRyYW5zbGF0ZVJpZ2h0KGRlbHRhLngoKSwgZGVsdGEueSgpKTsKQEAgLTI2MTcsOSArMjYxNyw5
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXIoUmVuZGVyTGF5ZXIKICAgICB9CiAKICAg
ICAvLyBDYWxjdWxhdGUgdGhlIGNsaXAgcmVjdHMgd2Ugc2hvdWxkIHVzZS4KLSAgICBJbnRSZWN0
IGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LCBjbGlwUmVjdFRvQXBwbHksIG91dGxpbmVSZWN0Owor
ICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHMsIGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwg
b3V0bGluZVJlY3Q7CiAgICAgY2FsY3VsYXRlUmVjdHMocm9vdExheWVyLCBwYWludERpcnR5UmVj
dCwgbGF5ZXJCb3VuZHMsIGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGluZVJlY3Qs
IGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJUZW1wb3JhcnlDbGlwUmVjdHMpOwotICAgIElu
dFBvaW50IHBhaW50T2Zmc2V0ID0gdG9Qb2ludChsYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVu
ZGVyQm94TG9jYXRpb24oKSk7CisgICAgTGF5b3V0UG9pbnQgcGFpbnRPZmZzZXQgPSB0b1BvaW50
KGxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgLy8gRW5zdXJlIG91ciBsaXN0cyBhcmUgdXAtdG8t
ZGF0ZS4KICAgICB1cGRhdGVDb21wb3NpdGluZ0FuZExheWVyTGlzdHNJZk5lZWRlZCgpOwpAQCAt
MjcyOCw3ICsyNzI4LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllcihSZW5kZXJMYXll
cgogfQogCiB2b2lkIFJlbmRlckxheWVyOjpwYWludExpc3QoVmVjdG9yPFJlbmRlckxheWVyKj4q
IGxpc3QsIFJlbmRlckxheWVyKiByb290TGF5ZXIsIEdyYXBoaWNzQ29udGV4dCogcCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBwYWludERpcnR5UmVjdCwgUGFp
bnRCZWhhdmlvciBwYWludEJlaGF2aW9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IExheW91dFJlY3QmIHBhaW50RGlydHlSZWN0LCBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZp
b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jv
b3QsIE92ZXJsYXBUZXN0UmVxdWVzdE1hcCogb3ZlcmxhcFRlc3RSZXF1ZXN0cywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQYWludExheWVyRmxhZ3MgcGFpbnRGbGFncykKIHsKQEAgLTI3
NDUsNyArMjc0NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGlzdChWZWN0b3I8UmVuZGUK
IH0KIAogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRQYWdpbmF0ZWRDaGlsZExheWVyKFJlbmRlckxh
eWVyKiBjaGlsZExheWVyLCBSZW5kZXJMYXllciogcm9vdExheWVyLCBHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgSW50UmVjdCYgcGFpbnREaXJ0eVJlY3QsIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRS
ZWN0JiBwYWludERpcnR5UmVjdCwgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogcGFpbnRp
bmdSb290LCBPdmVybGFwVGVzdFJlcXVlc3RNYXAqIG92ZXJsYXBUZXN0UmVxdWVzdHMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFpbnRMYXllckZsYWdzIHBh
aW50RmxhZ3MpCiB7CkBAIC0yNzY1LDcgKzI3NjUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWlu
dFBhZ2luYXRlZENoaWxkTGF5CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50Q2hpbGRMYXll
ckludG9Db2x1bW5zKFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBSZW5kZXJMYXllciogcm9vdExh
eWVyLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBwYWludERpcnR5UmVjdCwgUGFpbnRC
ZWhhdmlvciBwYWludEJlaGF2aW9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgcGFpbnREaXJ0eVJlY3QsIFBhaW50QmVoYXZp
b3IgcGFpbnRCZWhhdmlvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290LCBPdmVybGFwVGVzdFJlcXVlc3RNYXAq
IG92ZXJsYXBUZXN0UmVxdWVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQYWludExheWVyRmxhZ3MgcGFpbnRGbGFncywgY29uc3QgVmVjdG9yPFJlbmRl
ckxheWVyKj4mIGNvbHVtbkxheWVycywgc2l6ZV90IGNvbEluZGV4KQogewpAQCAtMjc3NSw3ICsy
Nzc1LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRDaGlsZExheWVySW50b0NvbAogICAgIGlm
ICghY29sdW1uQmxvY2sgfHwgIWNvbHVtbkJsb2NrLT5oYXNDb2x1bW5zKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICBJbnRQb2ludCBsYXllck9mZnNldDsKKyAgICBMYXlvdXRQb2ludCBs
YXllck9mZnNldDsKICAgICBjb2x1bW5CbG9jay0+bGF5ZXIoKS0+Y29udmVydFRvTGF5ZXJDb29y
ZHMocm9vdExheWVyLCBsYXllck9mZnNldCk7CiAgICAgCiAgICAgYm9vbCBpc0hvcml6b250YWwg
PSBjb2x1bW5CbG9jay0+c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKQEAgLTI3
ODUsMTQgKzI3ODUsMTQgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRDaGlsZExheWVySW50b0Nv
bAogICAgIGludCBjdXJyTG9naWNhbFRvcE9mZnNldCA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHsKICAgICAgICAgLy8gRm9yIGVhY2ggcmVjdCwgd2Ug
Y2xpcCB0byB0aGUgcmVjdCwgYW5kIHRoZW4gd2UgYWRqdXN0IG91ciBjb29yZHMuCi0gICAgICAg
IEludFJlY3QgY29sUmVjdCA9IGNvbHVtbkJsb2NrLT5jb2x1bW5SZWN0QXQoY29sSW5mbywgaSk7
CisgICAgICAgIExheW91dFJlY3QgY29sUmVjdCA9IGNvbHVtbkJsb2NrLT5jb2x1bW5SZWN0QXQo
Y29sSW5mbywgaSk7CiAgICAgICAgIGNvbHVtbkJsb2NrLT5mbGlwRm9yV3JpdGluZ01vZGUoY29s
UmVjdCk7CiAgICAgICAgIGludCBsb2dpY2FsTGVmdE9mZnNldCA9IChpc0hvcml6b250YWwgPyBj
b2xSZWN0LngoKSA6IGNvbFJlY3QueSgpKSAtIGNvbHVtbkJsb2NrLT5sb2dpY2FsTGVmdE9mZnNl
dEZvckNvbnRlbnQoKTsKLSAgICAgICAgSW50U2l6ZSBvZmZzZXQgPSBpc0hvcml6b250YWwgPyBJ
bnRTaXplKGxvZ2ljYWxMZWZ0T2Zmc2V0LCBjdXJyTG9naWNhbFRvcE9mZnNldCkgOiBJbnRTaXpl
KGN1cnJMb2dpY2FsVG9wT2Zmc2V0LCBsb2dpY2FsTGVmdE9mZnNldCk7CisgICAgICAgIExheW91
dFNpemUgb2Zmc2V0ID0gaXNIb3Jpem9udGFsID8gTGF5b3V0U2l6ZShsb2dpY2FsTGVmdE9mZnNl
dCwgY3VyckxvZ2ljYWxUb3BPZmZzZXQpIDogTGF5b3V0U2l6ZShjdXJyTG9naWNhbFRvcE9mZnNl
dCwgbG9naWNhbExlZnRPZmZzZXQpOwogCiAgICAgICAgIGNvbFJlY3QubW92ZUJ5KGxheWVyT2Zm
c2V0KTsKIAotICAgICAgICBJbnRSZWN0IGxvY2FsRGlydHlSZWN0KHBhaW50RGlydHlSZWN0KTsK
KyAgICAgICAgTGF5b3V0UmVjdCBsb2NhbERpcnR5UmVjdChwYWludERpcnR5UmVjdCk7CiAgICAg
ICAgIGxvY2FsRGlydHlSZWN0LmludGVyc2VjdChjb2xSZWN0KTsKICAgICAgICAgCiAgICAgICAg
IGlmICghbG9jYWxEaXJ0eVJlY3QuaXNFbXB0eSgpKSB7CkBAIC0yODIwLDcgKzI4MjAsNyBAQCB2
b2lkIFJlbmRlckxheWVyOjpwYWludENoaWxkTGF5ZXJJbnRvQ29sCiAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgIC8vIEFkanVzdCB0aGUgdHJhbnNmb3JtIHN1Y2ggdGhhdCB0
aGUgcmVuZGVyZXIncyB1cHBlciBsZWZ0IGNvcm5lciB3aWxsIHBhaW50IGF0ICgwLDApIGluIHVz
ZXIgc3BhY2UuCiAgICAgICAgICAgICAgICAgLy8gVGhpcyBpbnZvbHZlcyBzdWJ0cmFjdGluZyBv
dXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXllciBpbiBvdXIgY3VycmVudCBjb29yZGluYXRlIHNw
YWNlLgotICAgICAgICAgICAgICAgIEludFBvaW50IGNoaWxkT2Zmc2V0OworICAgICAgICAgICAg
ICAgIExheW91dFBvaW50IGNoaWxkT2Zmc2V0OwogICAgICAgICAgICAgICAgIGNvbHVtbkxheWVy
c1tjb2xJbmRleCAtIDFdLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIGNoaWxkT2Zm
c2V0KTsKICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CiAg
ICAgICAgICAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZVJpZ2h0KGNoaWxkT2Zmc2V0LngoKSAr
IG9mZnNldC53aWR0aCgpLCBjaGlsZE9mZnNldC55KCkgKyBvZmZzZXQuaGVpZ2h0KCkpOwpAQCAt
Mjg0NCwxMSArMjg0NCwxMSBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludENoaWxkTGF5ZXJJbnRv
Q29sCiAgICAgfQogfQogCi1zdGF0aWMgaW5saW5lIEludFJlY3QgZnJhbWVWaXNpYmxlUmVjdChS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyKQorc3RhdGljIGlubGluZSBMYXlvdXRSZWN0IGZyYW1lVmlz
aWJsZVJlY3QoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBGcmFtZVZpZXcqIGZyYW1l
VmlldyA9IHJlbmRlcmVyLT5kb2N1bWVudCgpLT52aWV3KCk7CiAgICAgaWYgKCFmcmFtZVZpZXcp
Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7
CiAKICAgICByZXR1cm4gZnJhbWVWaWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKIH0KQEAgLTI4
NTcsNyArMjg1Nyw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3QoY29uc3QgSGl0VGVzdFIK
IHsKICAgICByZW5kZXJlcigpLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKICAgICAKLSAg
ICBJbnRSZWN0IGhpdFRlc3RBcmVhID0gcmVuZGVyZXIoKS0+dmlldygpLT5kb2N1bWVudFJlY3Qo
KTsKKyAgICBMYXlvdXRSZWN0IGhpdFRlc3RBcmVhID0gcmVuZGVyZXIoKS0+dmlldygpLT5kb2N1
bWVudFJlY3QoKTsKICAgICBpZiAoIXJlcXVlc3QuaWdub3JlQ2xpcHBpbmcoKSkKICAgICAgICAg
aGl0VGVzdEFyZWEuaW50ZXJzZWN0KGZyYW1lVmlzaWJsZVJlY3QocmVuZGVyZXIoKSkpOwogCkBA
IC0yOTkyLDcgKzI5OTIsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXll
cihSCiAgICAgaWYgKHRyYW5zZm9ybSgpICYmICFhcHBsaWVkVHJhbnNmb3JtKSB7CiAgICAgICAg
IC8vIE1ha2Ugc3VyZSB0aGUgcGFyZW50J3MgY2xpcCByZWN0cyBoYXZlIGJlZW4gY2FsY3VsYXRl
ZC4KICAgICAgICAgaWYgKHBhcmVudCgpKSB7Ci0gICAgICAgICAgICBJbnRSZWN0IGNsaXBSZWN0
ID0gYmFja2dyb3VuZENsaXBSZWN0KHJvb3RMYXllciwgdXNlVGVtcG9yYXJ5Q2xpcFJlY3RzLCBJ
bmNsdWRlT3ZlcmxheVNjcm9sbGJhclNpemUpOworICAgICAgICAgICAgTGF5b3V0UmVjdCBjbGlw
UmVjdCA9IGJhY2tncm91bmRDbGlwUmVjdChyb290TGF5ZXIsIHVzZVRlbXBvcmFyeUNsaXBSZWN0
cywgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKICAgICAgICAgICAgIC8vIEdvIGFoZWFk
IGFuZCB0ZXN0IHRoZSBlbmNsb3NpbmcgY2xpcCBub3cuCiAgICAgICAgICAgICBpZiAoIWNsaXBS
ZWN0LmludGVyc2VjdHMoaGl0VGVzdEFyZWEpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwpA
QCAtMzM4Miw3ICszMzgyLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3Rz
KGNvbgogICAgIC8vIFVwZGF0ZSB0aGUgY2xpcCByZWN0cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRv
IGNoaWxkIGxheWVycy4KICAgICBpZiAocmVuZGVyZXIoKS0+aGFzT3ZlcmZsb3dDbGlwKCkgfHwg
cmVuZGVyZXIoKS0+aGFzQ2xpcCgpKSB7CiAgICAgICAgIC8vIFRoaXMgbGF5ZXIgZXN0YWJsaXNo
ZXMgYSBjbGlwIG9mIHNvbWUga2luZC4KLSAgICAgICAgSW50UG9pbnQgb2Zmc2V0OworICAgICAg
ICBMYXlvdXRQb2ludCBvZmZzZXQ7CiAgICAgICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RM
YXllciwgb2Zmc2V0KTsKICAgICAgICAgUmVuZGVyVmlldyogdmlldyA9IHJlbmRlcmVyKCktPnZp
ZXcoKTsKICAgICAgICAgQVNTRVJUKHZpZXcpOwpAQCAtMzM5MSwxMyArMzM5MSwxMyBAQCB2b2lk
IFJlbmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMoY29uCiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIGlmIChyZW5kZXJlcigpLT5oYXNPdmVyZmxvd0NsaXAoKSkgewotICAgICAgICAg
ICAgSW50UmVjdCBuZXdPdmVyZmxvd0NsaXAgPSB0b1JlbmRlckJveChyZW5kZXJlcigpKS0+b3Zl
cmZsb3dDbGlwUmVjdChvZmZzZXQsIHJlbGV2YW5jeSk7CisgICAgICAgICAgICBMYXlvdXRSZWN0
IG5ld092ZXJmbG93Q2xpcCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5vdmVyZmxvd0NsaXBS
ZWN0KG9mZnNldCwgcmVsZXZhbmN5KTsKICAgICAgICAgICAgIGNsaXBSZWN0cy5zZXRPdmVyZmxv
d0NsaXBSZWN0KGludGVyc2VjdGlvbihuZXdPdmVyZmxvd0NsaXAsIGNsaXBSZWN0cy5vdmVyZmxv
d0NsaXBSZWN0KCkpKTsKICAgICAgICAgICAgIGlmIChyZW5kZXJlcigpLT5pc1Bvc2l0aW9uZWQo
KSB8fCByZW5kZXJlcigpLT5pc1JlbFBvc2l0aW9uZWQoKSkKICAgICAgICAgICAgICAgICBjbGlw
UmVjdHMuc2V0UG9zQ2xpcFJlY3QoaW50ZXJzZWN0aW9uKG5ld092ZXJmbG93Q2xpcCwgY2xpcFJl
Y3RzLnBvc0NsaXBSZWN0KCkpKTsKICAgICAgICAgfQogICAgICAgICBpZiAocmVuZGVyZXIoKS0+
aGFzQ2xpcCgpKSB7Ci0gICAgICAgICAgICBJbnRSZWN0IG5ld1Bvc0NsaXAgPSB0b1JlbmRlckJv
eChyZW5kZXJlcigpKS0+Y2xpcFJlY3Qob2Zmc2V0KTsKKyAgICAgICAgICAgIExheW91dFJlY3Qg
bmV3UG9zQ2xpcCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5jbGlwUmVjdChvZmZzZXQpOwog
ICAgICAgICAgICAgY2xpcFJlY3RzLnNldFBvc0NsaXBSZWN0KGludGVyc2VjdGlvbihuZXdQb3ND
bGlwLCBjbGlwUmVjdHMucG9zQ2xpcFJlY3QoKSkpOwogICAgICAgICAgICAgY2xpcFJlY3RzLnNl
dE92ZXJmbG93Q2xpcFJlY3QoaW50ZXJzZWN0aW9uKG5ld1Bvc0NsaXAsIGNsaXBSZWN0cy5vdmVy
Zmxvd0NsaXBSZWN0KCkpKTsKICAgICAgICAgICAgIGNsaXBSZWN0cy5zZXRGaXhlZENsaXBSZWN0
KGludGVyc2VjdGlvbihuZXdQb3NDbGlwLCBjbGlwUmVjdHMuZml4ZWRDbGlwUmVjdCgpKSk7CkBA
IC0zNDE3LDkgKzM0MTcsOSBAQCB2b2lkIFJlbmRlckxheWVyOjpwYXJlbnRDbGlwUmVjdHMoY29u
c3QgCiAgICAgY2xpcFJlY3RzID0gKnBhcmVudCgpLT5jbGlwUmVjdHMoKTsKIH0KIAotSW50UmVj
dCBSZW5kZXJMYXllcjo6YmFja2dyb3VuZENsaXBSZWN0KGNvbnN0IFJlbmRlckxheWVyKiByb290
TGF5ZXIsIGJvb2wgdGVtcG9yYXJ5Q2xpcFJlY3RzLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2
YW5jeSByZWxldmFuY3kpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpiYWNrZ3JvdW5k
Q2xpcFJlY3QoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgYm9vbCB0ZW1wb3JhcnlDbGlw
UmVjdHMsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKIHsK
LSAgICBJbnRSZWN0IGJhY2tncm91bmRSZWN0OworICAgIExheW91dFJlY3QgYmFja2dyb3VuZFJl
Y3Q7CiAgICAgaWYgKHBhcmVudCgpKSB7CiAgICAgICAgIENsaXBSZWN0cyBwYXJlbnRSZWN0czsK
ICAgICAgICAgcGFyZW50Q2xpcFJlY3RzKHJvb3RMYXllciwgcGFyZW50UmVjdHMsIHRlbXBvcmFy
eUNsaXBSZWN0cywgcmVsZXZhbmN5KTsKQEAgLTM0NzIsNyArMzQ3Miw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IFIKICAgICAgICAgICAgIExheW91dFJlY3Qgb3Zl
cmZsb3cgPSBsYXllckJvdW5kczsKICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICBp
ZiAoYm94U2hhZG93LT5zdHlsZSgpID09IE5vcm1hbCkgewotICAgICAgICAgICAgICAgICAgICBJ
bnRSZWN0IHNoYWRvd1JlY3QgPSBsYXllckJvdW5kczsKKyAgICAgICAgICAgICAgICAgICAgTGF5
b3V0UmVjdCBzaGFkb3dSZWN0ID0gbGF5ZXJCb3VuZHM7CiAgICAgICAgICAgICAgICAgICAgIHNo
YWRvd1JlY3QubW92ZShib3hTaGFkb3ctPngoKSwgYm94U2hhZG93LT55KCkpOwogICAgICAgICAg
ICAgICAgICAgICBzaGFkb3dSZWN0LmluZmxhdGUoYm94U2hhZG93LT5ibHVyKCkgKyBib3hTaGFk
b3ctPnNwcmVhZCgpKTsKICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3cudW5pdGUoc2hhZG93
UmVjdCk7CkBAIC0zNDg2LDMyICszNDg2LDMyIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0
ZVJlY3RzKGNvbnN0IFIKICAgICB9CiB9CiAKLUludFJlY3QgUmVuZGVyTGF5ZXI6OmNoaWxkcmVu
Q2xpcFJlY3QoKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Y2hpbGRyZW5DbGlwUmVj
dCgpIGNvbnN0CiB7CiAgICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IHJlbmRlcmVyKCktPnZp
ZXcoKTsKICAgICBSZW5kZXJMYXllciogY2xpcHBpbmdSb290TGF5ZXIgPSBjbGlwcGluZ1Jvb3Qo
KTsKLSAgICBJbnRSZWN0IGxheWVyQm91bmRzLCBiYWNrZ3JvdW5kUmVjdCwgZm9yZWdyb3VuZFJl
Y3QsIG91dGxpbmVSZWN0OworICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHMsIGJhY2tncm91bmRS
ZWN0LCBmb3JlZ3JvdW5kUmVjdCwgb3V0bGluZVJlY3Q7CiAgICAgY2FsY3VsYXRlUmVjdHMoY2xp
cHBpbmdSb290TGF5ZXIsIHJlbmRlclZpZXctPnVuc2NhbGVkRG9jdW1lbnRSZWN0KCksIGxheWVy
Qm91bmRzLCBiYWNrZ3JvdW5kUmVjdCwgZm9yZWdyb3VuZFJlY3QsIG91dGxpbmVSZWN0KTsKICAg
ICByZXR1cm4gY2xpcHBpbmdSb290TGF5ZXItPnJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZVF1
YWQoRmxvYXRRdWFkKGZvcmVncm91bmRSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKIH0K
IAotSW50UmVjdCBSZW5kZXJMYXllcjo6c2VsZkNsaXBSZWN0KCkgY29uc3QKK0xheW91dFJlY3Qg
UmVuZGVyTGF5ZXI6OnNlbGZDbGlwUmVjdCgpIGNvbnN0CiB7CiAgICAgUmVuZGVyVmlldyogcmVu
ZGVyVmlldyA9IHJlbmRlcmVyKCktPnZpZXcoKTsKICAgICBSZW5kZXJMYXllciogY2xpcHBpbmdS
b290TGF5ZXIgPSBjbGlwcGluZ1Jvb3QoKTsKLSAgICBJbnRSZWN0IGxheWVyQm91bmRzLCBiYWNr
Z3JvdW5kUmVjdCwgZm9yZWdyb3VuZFJlY3QsIG91dGxpbmVSZWN0OworICAgIExheW91dFJlY3Qg
bGF5ZXJCb3VuZHMsIGJhY2tncm91bmRSZWN0LCBmb3JlZ3JvdW5kUmVjdCwgb3V0bGluZVJlY3Q7
CiAgICAgY2FsY3VsYXRlUmVjdHMoY2xpcHBpbmdSb290TGF5ZXIsIHJlbmRlclZpZXctPmRvY3Vt
ZW50UmVjdCgpLCBsYXllckJvdW5kcywgYmFja2dyb3VuZFJlY3QsIGZvcmVncm91bmRSZWN0LCBv
dXRsaW5lUmVjdCk7CiAgICAgcmV0dXJuIGNsaXBwaW5nUm9vdExheWVyLT5yZW5kZXJlcigpLT5s
b2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChiYWNrZ3JvdW5kUmVjdCkpLmVuY2xvc2luZ0Jv
dW5kaW5nQm94KCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OmFkZEJsb2NrU2VsZWN0aW9uR2Fw
c0JvdW5kcyhjb25zdCBJbnRSZWN0JiBib3VuZHMpCit2b2lkIFJlbmRlckxheWVyOjphZGRCbG9j
a1NlbGVjdGlvbkdhcHNCb3VuZHMoY29uc3QgTGF5b3V0UmVjdCYgYm91bmRzKQogewogICAgIG1f
YmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzLnVuaXRlKGJvdW5kcyk7CiB9CiAKIHZvaWQgUmVuZGVy
TGF5ZXI6OmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCkKIHsKLSAgICBtX2Jsb2NrU2Vs
ZWN0aW9uR2Fwc0JvdW5kcyA9IEludFJlY3QoKTsKKyAgICBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0Jv
dW5kcyA9IExheW91dFJlY3QoKTsKICAgICBmb3IgKFJlbmRlckxheWVyKiBjaGlsZCA9IGZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGNo
aWxkLT5jbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcygpOwogfQpAQCAtMzUyNCwxNyArMzUy
NCwxNyBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXBhaW50QmxvY2tTZWxlY3Rpb25HCiAgICAgaWYg
KG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgSW50UmVjdCByZWN0ID0gbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHM7CisgICAgTGF5
b3V0UmVjdCByZWN0ID0gbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHM7CiAgICAgcmVjdC5tb3Zl
KC1zY3JvbGxlZENvbnRlbnRPZmZzZXQoKSk7CiAgICAgaWYgKHJlbmRlcmVyKCktPmhhc092ZXJm
bG93Q2xpcCgpKQotICAgICAgICByZWN0LmludGVyc2VjdCh0b1JlbmRlckJveChyZW5kZXJlcigp
KS0+b3ZlcmZsb3dDbGlwUmVjdChJbnRQb2ludCgpKSk7CisgICAgICAgIHJlY3QuaW50ZXJzZWN0
KHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5vdmVyZmxvd0NsaXBSZWN0KExheW91dFBvaW50KCkp
KTsKICAgICBpZiAocmVuZGVyZXIoKS0+aGFzQ2xpcCgpKQotICAgICAgICByZWN0LmludGVyc2Vj
dCh0b1JlbmRlckJveChyZW5kZXJlcigpKS0+Y2xpcFJlY3QoSW50UG9pbnQoKSkpOworICAgICAg
ICByZWN0LmludGVyc2VjdCh0b1JlbmRlckJveChyZW5kZXJlcigpKS0+Y2xpcFJlY3QoTGF5b3V0
UG9pbnQoKSkpOwogICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJlbmRlcmVyKCkt
PnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmludGVyc2Vj
dHNEYW1hZ2VSZWN0KGNvbnN0IEludFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBJbnRSZWN0JiBk
YW1hZ2VSZWN0LCBjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyKSBjb25zdAorYm9vbCBSZW5k
ZXJMYXllcjo6aW50ZXJzZWN0c0RhbWFnZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3Vu
ZHMsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIGNvbnN0IFJlbmRlckxheWVyKiByb290
TGF5ZXIpIGNvbnN0CiB7CiAgICAgLy8gQWx3YXlzIGV4YW1pbmUgdGhlIGNhbnZhcyBhbmQgdGhl
IHJvb3QuCiAgICAgLy8gRklYTUU6IENvdWxkIGVsaW1pbmF0ZSB0aGUgaXNSb290KCkgY2hlY2sg
aWYgd2UgZml4IGJhY2tncm91bmQgcGFpbnRpbmcgc28gdGhhdCB0aGUgUmVuZGVyVmlldwpAQCAt
MzU0Nyw3ICszNTQ3LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aW50ZXJzZWN0c0RhbWFnZVJlY3Qo
YwogICAgIFJlbmRlclZpZXcqIHZpZXcgPSByZW5kZXJlcigpLT52aWV3KCk7CiAgICAgQVNTRVJU
KHZpZXcpOwogICAgIGlmICh2aWV3ICYmICFyZW5kZXJlcigpLT5pc1JlbmRlcklubGluZSgpKSB7
Ci0gICAgICAgIEludFJlY3QgYiA9IGxheWVyQm91bmRzOworICAgICAgICBMYXlvdXRSZWN0IGIg
PSBsYXllckJvdW5kczsKICAgICAgICAgYi5pbmZsYXRlKHZpZXctPm1heGltYWxPdXRsaW5lU2l6
ZSgpKTsKICAgICAgICAgaWYgKGIuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtMzU1OCw3ICszNTU4LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aW50
ZXJzZWN0c0RhbWFnZVJlY3QoYwogICAgIHJldHVybiBib3VuZGluZ0JveChyb290TGF5ZXIpLmlu
dGVyc2VjdHMoZGFtYWdlUmVjdCk7CiB9CiAKLUludFJlY3QgUmVuZGVyTGF5ZXI6OmxvY2FsQm91
bmRpbmdCb3goKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6bG9jYWxCb3VuZGluZ0Jv
eCgpIGNvbnN0CiB7CiAgICAgLy8gVGhlcmUgYXJlIHRocmVlIHNwZWNpYWwgY2FzZXMgd2UgbmVl
ZCB0byBjb25zaWRlci4KICAgICAvLyAoMSkgSW5saW5lIEZsb3dzLiAgRm9yIGlubGluZSBmbG93
cyB3ZSB3aWxsIGNyZWF0ZSBhIGJvdW5kaW5nIGJveCB0aGF0IGZ1bGx5IGVuY29tcGFzc2VzIGFs
bCBvZiB0aGUgbGluZXMgb2NjdXBpZWQgYnkgdGhlCkBAIC0zNTY5LDE2ICszNTY5LDE2IEBAIElu
dFJlY3QgUmVuZGVyTGF5ZXI6OmxvY2FsQm91bmRpbmdCb3goKSAKICAgICAvLyAoMykgRmxvYXRz
LiAgV2hlbiBhIGxheWVyIGhhcyBvdmVyaGFuZ2luZyBmbG9hdHMgdGhhdCBpdCBwYWludHMsIHdl
IG5lZWQgdG8gbWFrZSBzdXJlIHRvIGluY2x1ZGUgdGhlc2Ugb3ZlcmhhbmdpbmcgZmxvYXRzCiAg
ICAgLy8gYXMgcGFydCBvZiBvdXIgYm91bmRpbmcgYm94LiAgV2UgZG8gdGhpcyBiZWNhdXNlIHdl
IGFyZSB0aGUgcmVzcG9uc2libGUgbGF5ZXIgZm9yIGJvdGggaGl0IHRlc3RpbmcgYW5kIHBhaW50
aW5nIHRob3NlCiAgICAgLy8gZmxvYXRzLgotICAgIEludFJlY3QgcmVzdWx0OworICAgIExheW91
dFJlY3QgcmVzdWx0OwogICAgIGlmIChyZW5kZXJlcigpLT5pc1JlbmRlcklubGluZSgpKQogICAg
ICAgICByZXN1bHQgPSB0b1JlbmRlcklubGluZShyZW5kZXJlcigpKS0+bGluZXNWaXN1YWxPdmVy
Zmxvd0JvdW5kaW5nQm94KCk7CiAgICAgZWxzZSBpZiAocmVuZGVyZXIoKS0+aXNUYWJsZVJvdygp
KSB7CiAgICAgICAgIC8vIE91ciBib3VuZGluZyBib3ggaXMganVzdCB0aGUgdW5pb24gb2YgYWxs
IG9mIG91ciBjZWxscycgYm9yZGVyL292ZXJmbG93IHJlY3RzLgogICAgICAgICBmb3IgKFJlbmRl
ck9iamVjdCogY2hpbGQgPSByZW5kZXJlcigpLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzVGFibGVD
ZWxsKCkpIHsKLSAgICAgICAgICAgICAgICBJbnRSZWN0IGJib3ggPSB0b1JlbmRlckJveChjaGls
ZCktPmJvcmRlckJveFJlY3QoKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IGJib3ggPSB0
b1JlbmRlckJveChjaGlsZCktPmJvcmRlckJveFJlY3QoKTsKICAgICAgICAgICAgICAgICByZXN1
bHQudW5pdGUoYmJveCk7Ci0gICAgICAgICAgICAgICAgSW50UmVjdCBvdmVyZmxvd1JlY3QgPSBy
ZW5kZXJCb3goKS0+dmlzdWFsT3ZlcmZsb3dSZWN0KCk7CisgICAgICAgICAgICAgICAgTGF5b3V0
UmVjdCBvdmVyZmxvd1JlY3QgPSByZW5kZXJCb3goKS0+dmlzdWFsT3ZlcmZsb3dSZWN0KCk7CiAg
ICAgICAgICAgICAgICAgaWYgKGJib3ggIT0gb3ZlcmZsb3dSZWN0KQogICAgICAgICAgICAgICAg
ICAgICByZXN1bHQudW5pdGUob3ZlcmZsb3dSZWN0KTsKICAgICAgICAgICAgIH0KQEAgLTM1ODks
OSArMzU4OSw5IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OmxvY2FsQm91bmRpbmdCb3goKSAKICAg
ICAgICAgaWYgKGJveC0+aGFzTWFzaygpKQogICAgICAgICAgICAgcmVzdWx0ID0gYm94LT5tYXNr
Q2xpcFJlY3QoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBJbnRSZWN0IGJib3ggPSBi
b3gtPmJvcmRlckJveFJlY3QoKTsKKyAgICAgICAgICAgIExheW91dFJlY3QgYmJveCA9IGJveC0+
Ym9yZGVyQm94UmVjdCgpOwogICAgICAgICAgICAgcmVzdWx0ID0gYmJveDsKLSAgICAgICAgICAg
IEludFJlY3Qgb3ZlcmZsb3dSZWN0ID0gYm94LT52aXN1YWxPdmVyZmxvd1JlY3QoKTsKKyAgICAg
ICAgICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0ID0gYm94LT52aXN1YWxPdmVyZmxvd1JlY3Qo
KTsKICAgICAgICAgICAgIGlmIChiYm94ICE9IG92ZXJmbG93UmVjdCkKICAgICAgICAgICAgICAg
ICByZXN1bHQudW5pdGUob3ZlcmZsb3dSZWN0KTsKICAgICAgICAgfQpAQCAtMzYwNSwyMCArMzYw
NSwyMCBAQCBJbnRSZWN0IFJlbmRlckxheWVyOjpsb2NhbEJvdW5kaW5nQm94KCkgCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotSW50UmVjdCBSZW5kZXJMYXllcjo6Ym91bmRpbmdCb3goY29uc3Qg
UmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckxheWVy
Ojpib3VuZGluZ0JveChjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllcikgY29uc3QKIHsg
ICAgCi0gICAgSW50UmVjdCByZXN1bHQgPSBsb2NhbEJvdW5kaW5nQm94KCk7CisgICAgTGF5b3V0
UmVjdCByZXN1bHQgPSBsb2NhbEJvdW5kaW5nQm94KCk7CiAgICAgaWYgKHJlbmRlcmVyKCktPmlz
Qm94KCkpCiAgICAgICAgIHJlbmRlckJveCgpLT5mbGlwRm9yV3JpdGluZ01vZGUocmVzdWx0KTsK
ICAgICBlbHNlCiAgICAgICAgIHJlbmRlcmVyKCktPmNvbnRhaW5pbmdCbG9jaygpLT5mbGlwRm9y
V3JpdGluZ01vZGUocmVzdWx0KTsKLSAgICBJbnRQb2ludCBkZWx0YTsKKyAgICBMYXlvdXRQb2lu
dCBkZWx0YTsKICAgICBjb252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3RvckxheWVyLCBkZWx0YSk7
CiAgICAgcmVzdWx0Lm1vdmVCeShkZWx0YSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSW50
UmVjdCBSZW5kZXJMYXllcjo6YWJzb2x1dGVCb3VuZGluZ0JveCgpIGNvbnN0CitMYXlvdXRSZWN0
IFJlbmRlckxheWVyOjphYnNvbHV0ZUJvdW5kaW5nQm94KCkgY29uc3QKIHsKICAgICByZXR1cm4g
Ym91bmRpbmdCb3gocm9vdCgpKTsKIH0KQEAgLTM5NDIsNyArMzk0Miw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OnNldEJhY2tpbmdOZWVkc1JlcGFpbnQKICAgICAgICAgYmFja2luZygpLT5zZXRDb250
ZW50c05lZWREaXNwbGF5KCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnNldEJhY2tpbmdOZWVk
c1JlcGFpbnRJblJlY3QoY29uc3QgSW50UmVjdCYgcikKK3ZvaWQgUmVuZGVyTGF5ZXI6OnNldEJh
Y2tpbmdOZWVkc1JlcGFpbnRJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcikKIHsKICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjExNTkgZGVzY3JpYmVzIGFu
IHVucmVwcm9kdWNpYmxlIGNyYXNoIGhlcmUsCiAgICAgLy8gc28gYXNzZXJ0IGJ1dCBjaGVjayB0
aGF0IHRoZSBsYXllciBpcyBjb21wb3NpdGVkLgpAQCAtMzk1MCw4ICszOTUwLDggQEAgdm9pZCBS
ZW5kZXJMYXllcjo6c2V0QmFja2luZ05lZWRzUmVwYWludAogICAgIGlmICghaXNDb21wb3NpdGVk
KCkgfHwgYmFja2luZygpLT5wYWludGluZ0dvZXNUb1dpbmRvdygpKSB7CiAgICAgICAgIC8vIElm
IHdlJ3JlIHRyeWluZyB0byByZXBhaW50IHRoZSBwbGFjZWhvbGRlciBkb2N1bWVudCBsYXllciwg
cHJvcGFnYXRlIHRoZQogICAgICAgICAvLyByZXBhaW50IHRvIHRoZSBuYXRpdmUgdmlldyBzeXN0
ZW0uCi0gICAgICAgIEludFJlY3QgYWJzUmVjdChyKTsKLSAgICAgICAgSW50UG9pbnQgZGVsdGE7
CisgICAgICAgIExheW91dFJlY3QgYWJzUmVjdChyKTsKKyAgICAgICAgTGF5b3V0UG9pbnQgZGVs
dGE7CiAgICAgICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3QoKSwgZGVsdGEpOwogICAgICAg
ICBhYnNSZWN0Lm1vdmVCeShkZWx0YSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5oCShyZXZpc2lvbiA5MzM0MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogCi0gICAgQ2xpcFJlY3RzKGNvbnN0IEludFJlY3QmIHIpCisgICAgQ2xp
cFJlY3RzKGNvbnN0IExheW91dFJlY3QmIHIpCiAgICAgICAgIDogbV9vdmVyZmxvd0NsaXBSZWN0
KHIpCiAgICAgICAgICwgbV9maXhlZENsaXBSZWN0KHIpCiAgICAgICAgICwgbV9wb3NDbGlwUmVj
dChyKQpAQCAtOTQsNyArOTQsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQg
cmVzZXQoY29uc3QgSW50UmVjdCYgcikKKyAgICB2b2lkIHJlc2V0KGNvbnN0IExheW91dFJlY3Qm
IHIpCiAgICAgewogICAgICAgICBtX292ZXJmbG93Q2xpcFJlY3QgPSByOwogICAgICAgICBtX2Zp
eGVkQ2xpcFJlY3QgPSByOwpAQCAtMTAyLDE0ICsxMDIsMTQgQEAgcHVibGljOgogICAgICAgICBt
X2ZpeGVkID0gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGNvbnN0IEludFJlY3QmIG92ZXJmbG93
Q2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93Q2xpcFJlY3Q7IH0KLSAgICB2b2lk
IHNldE92ZXJmbG93Q2xpcFJlY3QoY29uc3QgSW50UmVjdCYgcikgeyBtX292ZXJmbG93Q2xpcFJl
Y3QgPSByOyB9CisgICAgY29uc3QgTGF5b3V0UmVjdCYgb3ZlcmZsb3dDbGlwUmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fb3ZlcmZsb3dDbGlwUmVjdDsgfQorICAgIHZvaWQgc2V0T3ZlcmZsb3dDbGlw
UmVjdChjb25zdCBMYXlvdXRSZWN0JiByKSB7IG1fb3ZlcmZsb3dDbGlwUmVjdCA9IHI7IH0KIAot
ICAgIGNvbnN0IEludFJlY3QmIGZpeGVkQ2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2ZpeGVk
Q2xpcFJlY3Q7IH0KLSAgICB2b2lkIHNldEZpeGVkQ2xpcFJlY3QoY29uc3QgSW50UmVjdCZyKSB7
IG1fZml4ZWRDbGlwUmVjdCA9IHI7IH0KKyAgICBjb25zdCBMYXlvdXRSZWN0JiBmaXhlZENsaXBS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9maXhlZENsaXBSZWN0OyB9CisgICAgdm9pZCBzZXRGaXhl
ZENsaXBSZWN0KGNvbnN0IExheW91dFJlY3QmcikgeyBtX2ZpeGVkQ2xpcFJlY3QgPSByOyB9CiAK
LSAgICBjb25zdCBJbnRSZWN0JiBwb3NDbGlwUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zQ2xp
cFJlY3Q7IH0KLSAgICB2b2lkIHNldFBvc0NsaXBSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsgbV9w
b3NDbGlwUmVjdCA9IHI7IH0KKyAgICBjb25zdCBMYXlvdXRSZWN0JiBwb3NDbGlwUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fcG9zQ2xpcFJlY3Q7IH0KKyAgICB2b2lkIHNldFBvc0NsaXBSZWN0KGNv
bnN0IExheW91dFJlY3QmIHIpIHsgbV9wb3NDbGlwUmVjdCA9IHI7IH0KIAogICAgIGJvb2wgZml4
ZWQoKSBjb25zdCB7IHJldHVybiBtX2ZpeGVkOyB9CiAgICAgdm9pZCBzZXRGaXhlZChib29sIGZp
eGVkKSB7IG1fZml4ZWQgPSBmaXhlZDsgfQpAQCAtMTQ3LDkgKzE0Nyw5IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCkgdGhyb3coKTsKIAogcHJpdmF0ZToKLSAgICBJ
bnRSZWN0IG1fb3ZlcmZsb3dDbGlwUmVjdDsKLSAgICBJbnRSZWN0IG1fZml4ZWRDbGlwUmVjdDsK
LSAgICBJbnRSZWN0IG1fcG9zQ2xpcFJlY3Q7CisgICAgTGF5b3V0UmVjdCBtX292ZXJmbG93Q2xp
cFJlY3Q7CisgICAgTGF5b3V0UmVjdCBtX2ZpeGVkQ2xpcFJlY3Q7CisgICAgTGF5b3V0UmVjdCBt
X3Bvc0NsaXBSZWN0OwogICAgIHVuc2lnbmVkIG1fcmVmQ250IDogMzE7CiAgICAgYm9vbCBtX2Zp
eGVkIDogMTsKIH07CkBAIC0xODEsNyArMTgxLDcgQEAgcHVibGljOgogICAgIC8vIEluZGljYXRl
IHRoYXQgdGhlIGxheWVyIGNvbnRlbnRzIG5lZWQgdG8gYmUgcmVwYWludGVkLiBPbmx5IGhhcyBh
biBlZmZlY3QKICAgICAvLyBpZiBsYXllciBjb21wb3NpdGluZyBpcyBiZWluZyB1c2VkLAogICAg
IHZvaWQgc2V0QmFja2luZ05lZWRzUmVwYWludCgpOwotICAgIHZvaWQgc2V0QmFja2luZ05lZWRz
UmVwYWludEluUmVjdChjb25zdCBJbnRSZWN0JiByKTsgLy8gciBpcyBpbiB0aGUgY29vcmRpbmF0
ZSBzcGFjZSBvZiB0aGUgbGF5ZXIncyByZW5kZXIgb2JqZWN0CisgICAgdm9pZCBzZXRCYWNraW5n
TmVlZHNSZXBhaW50SW5SZWN0KGNvbnN0IExheW91dFJlY3QmKTsgLy8gciBpcyBpbiB0aGUgY29v
cmRpbmF0ZSBzcGFjZSBvZiB0aGUgbGF5ZXIncyByZW5kZXIgb2JqZWN0CiAgICAgdm9pZCByZXBh
aW50SW5jbHVkaW5nTm9uQ29tcG9zaXRpbmdEZXNjZW5kYW50cyhSZW5kZXJCb3hNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lcik7CiAjZW5kaWYKIApAQCAtMjE5LDMxICsyMTksMzEgQEAgcHVi
bGljOgogCiAgICAgTGF5b3V0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gTGF5b3V0UmVjdChs
b2NhdGlvbigpLCBzaXplKCkpOyB9CiAKLSAgICBpbnQgc2Nyb2xsV2lkdGgoKTsKLSAgICBpbnQg
c2Nyb2xsSGVpZ2h0KCk7CisgICAgTGF5b3V0VW5pdCBzY3JvbGxXaWR0aCgpOworICAgIExheW91
dFVuaXQgc2Nyb2xsSGVpZ2h0KCk7CiAKLSAgICB2b2lkIHBhblNjcm9sbEZyb21Qb2ludChjb25z
dCBJbnRQb2ludCYpOworICAgIHZvaWQgcGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IExheW91dFBv
aW50Jik7CiAKICAgICAvLyBTY3JvbGxpbmcgbWV0aG9kcyBmb3IgbGF5ZXJzIHRoYXQgY2FuIHNj
cm9sbCB0aGVpciBvdmVyZmxvdy4KLSAgICB2b2lkIHNjcm9sbEJ5UmVjdXJzaXZlbHkoaW50IHhE
ZWx0YSwgaW50IHlEZWx0YSk7CisgICAgdm9pZCBzY3JvbGxCeVJlY3Vyc2l2ZWx5KExheW91dFVu
aXQgeERlbHRhLCBMYXlvdXRVbml0IHlEZWx0YSk7CiAKLSAgICBJbnRTaXplIHNjcm9sbGVkQ29u
dGVudE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIHNjcm9sbE9mZnNldCgpICsgbV9zY3JvbGxPdmVy
ZmxvdzsgfQorICAgIExheW91dFNpemUgc2Nyb2xsZWRDb250ZW50T2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gc2Nyb2xsT2Zmc2V0KCkgKyBtX3Njcm9sbE92ZXJmbG93OyB9CiAKLSAgICBpbnQgc2Ny
b2xsWE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCkgKyBtX3Nj
cm9sbE9yaWdpbi54KCk7IH0KLSAgICBpbnQgc2Nyb2xsWU9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpICsgbV9zY3JvbGxPcmlnaW4ueSgpOyB9Ci0gICAgSW50
U2l6ZSBzY3JvbGxPZmZzZXQoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKHNjcm9sbFhPZmZzZXQo
KSwgc2Nyb2xsWU9mZnNldCgpKTsgfQorICAgIExheW91dFVuaXQgc2Nyb2xsWE9mZnNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCkgKyBtX3Njcm9sbE9yaWdpbi54KCk7
IH0KKyAgICBMYXlvdXRVbml0IHNjcm9sbFlPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3Njcm9s
bE9mZnNldC5oZWlnaHQoKSArIG1fc2Nyb2xsT3JpZ2luLnkoKTsgfQorICAgIExheW91dFNpemUg
c2Nyb2xsT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gTGF5b3V0U2l6ZShzY3JvbGxYT2Zmc2V0KCks
IHNjcm9sbFlPZmZzZXQoKSk7IH0KIAogICAgIGVudW0gU2Nyb2xsT2Zmc2V0Q2xhbXBpbmcgewog
ICAgICAgICBTY3JvbGxPZmZzZXRVbmNsYW1wZWQsCiAgICAgICAgIFNjcm9sbE9mZnNldENsYW1w
ZWQKICAgICB9OwotICAgIHZvaWQgc2Nyb2xsVG9PZmZzZXQoaW50IHgsIGludCB5LCBTY3JvbGxP
ZmZzZXRDbGFtcGluZyA9IFNjcm9sbE9mZnNldFVuY2xhbXBlZCk7Ci0gICAgdm9pZCBzY3JvbGxU
b1hPZmZzZXQoaW50IHgsIFNjcm9sbE9mZnNldENsYW1waW5nIGNsYW1wID0gU2Nyb2xsT2Zmc2V0
VW5jbGFtcGVkKSB7IHNjcm9sbFRvT2Zmc2V0KHgsIHNjcm9sbFlPZmZzZXQoKSwgY2xhbXApOyB9
Ci0gICAgdm9pZCBzY3JvbGxUb1lPZmZzZXQoaW50IHksIFNjcm9sbE9mZnNldENsYW1waW5nIGNs
YW1wID0gU2Nyb2xsT2Zmc2V0VW5jbGFtcGVkKSB7IHNjcm9sbFRvT2Zmc2V0KHNjcm9sbFhPZmZz
ZXQoKSwgeSwgY2xhbXApOyB9CisgICAgdm9pZCBzY3JvbGxUb09mZnNldChMYXlvdXRVbml0LCBM
YXlvdXRVbml0LCBTY3JvbGxPZmZzZXRDbGFtcGluZyA9IFNjcm9sbE9mZnNldFVuY2xhbXBlZCk7
CisgICAgdm9pZCBzY3JvbGxUb1hPZmZzZXQoTGF5b3V0VW5pdCB4LCBTY3JvbGxPZmZzZXRDbGFt
cGluZyBjbGFtcCA9IFNjcm9sbE9mZnNldFVuY2xhbXBlZCkgeyBzY3JvbGxUb09mZnNldCh4LCBz
Y3JvbGxZT2Zmc2V0KCksIGNsYW1wKTsgfQorICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0KExheW91
dFVuaXQgeSwgU2Nyb2xsT2Zmc2V0Q2xhbXBpbmcgY2xhbXAgPSBTY3JvbGxPZmZzZXRVbmNsYW1w
ZWQpIHsgc2Nyb2xsVG9PZmZzZXQoc2Nyb2xsWE9mZnNldCgpLCB5LCBjbGFtcCk7IH0KIAotICAg
IHZvaWQgc2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBJbnRSZWN0JiwgY29uc3QgU2Nyb2xsQWxp
Z25tZW50JiBhbGlnblggPSBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVySWZOZWVkZWQsIGNv
bnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25ZID0gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRl
cklmTmVlZGVkKTsKKyAgICB2b2lkIHNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVj
dCYsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25YID0gU2Nyb2xsQWxpZ25tZW50OjphbGln
bkNlbnRlcklmTmVlZGVkLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWSA9IFNjcm9sbEFs
aWdubWVudDo6YWxpZ25DZW50ZXJJZk5lZWRlZCk7CiAKLSAgICBJbnRSZWN0IGdldFJlY3RUb0V4
cG9zZShjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgZXhwb3NlUmVj
dCwgY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnblgsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYg
YWxpZ25ZKTsKKyAgICBMYXlvdXRSZWN0IGdldFJlY3RUb0V4cG9zZShjb25zdCBMYXlvdXRSZWN0
JiB2aXNpYmxlUmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZXhwb3NlUmVjdCwgY29uc3QgU2Nyb2xs
QWxpZ25tZW50JiBhbGlnblgsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25ZKTsKIAogICAg
IGJvb2wgc2Nyb2xsc092ZXJmbG93KCkgY29uc3Q7CiAgICAgYm9vbCBhbGxvd3NTY3JvbGxpbmco
KSBjb25zdDsgLy8gUmV0dXJucyB0cnVlIGlmIGF0IGxlYXN0IG9uZSBzY3JvbGxiYXIgaXMgdmlz
aWJsZSBhbmQgZW5hYmxlZC4KQEAgLTI2NSw4ICsyNjUsOCBAQCBwdWJsaWM6CiAgICAgaW50IGhv
cml6b250YWxTY3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJ
Z25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CiAKICAgICBib29sIGhhc092ZXJmbG93
Q29udHJvbHMoKSBjb25zdDsKLSAgICBib29sIGlzUG9pbnRJblJlc2l6ZUNvbnRyb2woY29uc3Qg
SW50UG9pbnQmIGFic29sdXRlUG9pbnQpIGNvbnN0OwotICAgIGJvb2wgaGl0VGVzdE92ZXJmbG93
Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KTsKKyAg
ICBib29sIGlzUG9pbnRJblJlc2l6ZUNvbnRyb2woY29uc3QgTGF5b3V0UG9pbnQmIGFic29sdXRl
UG9pbnQpIGNvbnN0OworICAgIGJvb2wgaGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBsb2NhbFBvaW50KTsKICAgICBMYXlvdXRTaXplIG9m
ZnNldEZyb21SZXNpemVDb3JuZXIoY29uc3QgTGF5b3V0UG9pbnQmIGFic29sdXRlUG9pbnQpIGNv
bnN0OwogCiAgICAgdm9pZCBwYWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBh
aW50aW5nT3ZlcmxheUNvbnRyb2xzID0gZmFsc2UpOwpAQCAtMzA3LDE3ICszMDcsMTcgQEAgcHVi
bGljOgogICAgICAgICBVcGRhdGVQYWdpbmF0aW9uID0gMSA8PCAzCiAgICAgfTsKICAgICB0eXBl
ZGVmIHVuc2lnbmVkIFVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZ3M7Ci0gICAgdm9pZCB1cGRhdGVM
YXllclBvc2l0aW9ucyhVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWdzID0gQ2hlY2tGb3JSZXBhaW50
IHwgSXNDb21wb3NpdGluZ1VwZGF0ZVJvb3QgfCBVcGRhdGVDb21wb3NpdGluZ0xheWVycywgSW50
UG9pbnQqIGNhY2hlZE9mZnNldCA9IDApOworICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnMo
VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFncyA9IENoZWNrRm9yUmVwYWludCB8IElzQ29tcG9zaXRp
bmdVcGRhdGVSb290IHwgVXBkYXRlQ29tcG9zaXRpbmdMYXllcnMsIExheW91dFBvaW50KiBjYWNo
ZWRPZmZzZXQgPSAwKTsKIAogICAgIHZvaWQgdXBkYXRlVHJhbnNmb3JtKCk7CiAKLSAgICB2b2lk
IHJlbGF0aXZlUG9zaXRpb25PZmZzZXQoaW50JiByZWxYLCBpbnQmIHJlbFkpIGNvbnN0IHsgcmVs
WCArPSBtX3JlbGF0aXZlT2Zmc2V0LndpZHRoKCk7IHJlbFkgKz0gbV9yZWxhdGl2ZU9mZnNldC5o
ZWlnaHQoKTsgfQotICAgIGNvbnN0IEludFNpemUmIHJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKSBj
b25zdCB7IHJldHVybiBtX3JlbGF0aXZlT2Zmc2V0OyB9CisgICAgdm9pZCByZWxhdGl2ZVBvc2l0
aW9uT2Zmc2V0KExheW91dFVuaXQmIHJlbFgsIExheW91dFVuaXQmIHJlbFkpIGNvbnN0IHsgcmVs
WCArPSBtX3JlbGF0aXZlT2Zmc2V0LndpZHRoKCk7IHJlbFkgKz0gbV9yZWxhdGl2ZU9mZnNldC5o
ZWlnaHQoKTsgfQorICAgIGNvbnN0IExheW91dFNpemUmIHJlbGF0aXZlUG9zaXRpb25PZmZzZXQo
KSBjb25zdCB7IHJldHVybiBtX3JlbGF0aXZlT2Zmc2V0OyB9CiAKICAgICB2b2lkIGNsZWFyQ2xp
cFJlY3RzSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKICAgICB2b2lkIGNsZWFyQ2xpcFJlY3RzKCk7
CiAKLSAgICB2b2lkIGFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhjb25zdCBJbnRSZWN0Jik7
CisgICAgdm9pZCBhZGRCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoY29uc3QgTGF5b3V0UmVjdCYp
OwogICAgIHZvaWQgY2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsKICAgICB2b2lkIHJl
cGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKTsKIApAQCAtMzU4LDggKzM1OCw4IEBAIHB1YmxpYzoK
ICAgICBSZW5kZXJMYXllciogYW5jZXN0b3JDb21wb3NpdGluZ0xheWVyKCkgY29uc3QgeyByZXR1
cm4gZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcihmYWxzZSk7IH0KICNlbmRpZgogCi0gICAgdm9p
ZCBjb252ZXJ0VG9MYXllckNvb3Jkcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwg
SW50UG9pbnQmIGxvY2F0aW9uKSBjb25zdDsKLSAgICB2b2lkIGNvbnZlcnRUb0xheWVyQ29vcmRz
KGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBJbnRSZWN0JiByZWN0KSBjb25zdDsK
KyAgICB2b2lkIGNvbnZlcnRUb0xheWVyQ29vcmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3Rv
ckxheWVyLCBMYXlvdXRQb2ludCYgbG9jYXRpb24pIGNvbnN0OworICAgIHZvaWQgY29udmVydFRv
TGF5ZXJDb29yZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIExheW91dFJlY3Qm
KSBjb25zdDsKIAogICAgIGJvb2wgaGFzQXV0b1pJbmRleCgpIGNvbnN0IHsgcmV0dXJuIHJlbmRl
cmVyKCktPnN0eWxlKCktPmhhc0F1dG9aSW5kZXgoKTsgfQogICAgIGludCB6SW5kZXgoKSBjb25z
dCB7IHJldHVybiByZW5kZXJlcigpLT5zdHlsZSgpLT56SW5kZXgoKTsgfQpAQCAtMzY4LDkgKzM2
OCw5IEBAIHB1YmxpYzoKICAgICAvLyBwYWludHMgdGhlIGxheWVycyB0aGF0IGludGVyc2VjdCB0
aGUgZGFtYWdlIHJlY3QgZnJvbSBiYWNrIHRvCiAgICAgLy8gZnJvbnQuICBUaGUgaGl0VGVzdCBt
ZXRob2QgbG9va3MgZm9yIG1vdXNlIGV2ZW50cyBieSB3YWxraW5nCiAgICAgLy8gbGF5ZXJzIHRo
YXQgaW50ZXJzZWN0IHRoZSBwb2ludCBmcm9tIGZyb250IHRvIGJhY2suCi0gICAgdm9pZCBwYWlu
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBQYWludEJlaGF2
aW9yID0gUGFpbnRCZWhhdmlvck5vcm1hbCwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3QgPSAw
KTsKKyAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheW91dFJlY3QmIGRh
bWFnZVJlY3QsIFBhaW50QmVoYXZpb3IgPSBQYWludEJlaGF2aW9yTm9ybWFsLCBSZW5kZXJPYmpl
Y3QqIHBhaW50aW5nUm9vdCA9IDApOwogICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmKTsKLSAgICB2b2lkIHBhaW50T3ZlcmxheVNjcm9sbGJhcnMo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgUGFpbnRCZWhhdmlv
ciwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3QpOworICAgIHZvaWQgcGFpbnRPdmVybGF5U2Ny
b2xsYmFycyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBQ
YWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdCk7CiAKICAgICAvLyBUaGlz
IG1ldGhvZCBmaWd1cmVzIG91dCBvdXIgbGF5ZXJCb3VuZHMgaW4gY29vcmRpbmF0ZXMgcmVsYXRp
dmUgdG8KICAgICAvLyB8cm9vdExheWVyfS4gIEl0IGFsc28gY29tcHV0ZXMgb3VyIGJhY2tncm91
bmQgYW5kIGZvcmVncm91bmQgY2xpcCByZWN0cwpAQCAtMzg2LDIzICszODYsMjMgQEAgcHVibGlj
OgogICAgIHZvaWQgY2FsY3VsYXRlQ2xpcFJlY3RzKGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5
ZXIsIENsaXBSZWN0cyYsIGJvb2wgdXNlQ2FjaGVkID0gZmFsc2UsIE92ZXJsYXlTY3JvbGxiYXJT
aXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OwogICAgIENs
aXBSZWN0cyogY2xpcFJlY3RzKCkgY29uc3QgeyByZXR1cm4gbV9jbGlwUmVjdHM7IH0KIAotICAg
IEludFJlY3QgY2hpbGRyZW5DbGlwUmVjdCgpIGNvbnN0OyAvLyBSZXR1cm5zIHRoZSBmb3JlZ3Jv
dW5kIGNsaXAgcmVjdCBvZiB0aGUgbGF5ZXIgaW4gdGhlIGRvY3VtZW50J3MgY29vcmRpbmF0ZSBz
cGFjZS4KLSAgICBJbnRSZWN0IHNlbGZDbGlwUmVjdCgpIGNvbnN0OyAvLyBSZXR1cm5zIHRoZSBi
YWNrZ3JvdW5kIGNsaXAgcmVjdCBvZiB0aGUgbGF5ZXIgaW4gdGhlIGRvY3VtZW50J3MgY29vcmRp
bmF0ZSBzcGFjZS4KKyAgICBMYXlvdXRSZWN0IGNoaWxkcmVuQ2xpcFJlY3QoKSBjb25zdDsgLy8g
UmV0dXJucyB0aGUgZm9yZWdyb3VuZCBjbGlwIHJlY3Qgb2YgdGhlIGxheWVyIGluIHRoZSBkb2N1
bWVudCdzIGNvb3JkaW5hdGUgc3BhY2UuCisgICAgTGF5b3V0UmVjdCBzZWxmQ2xpcFJlY3QoKSBj
b25zdDsgLy8gUmV0dXJucyB0aGUgYmFja2dyb3VuZCBjbGlwIHJlY3Qgb2YgdGhlIGxheWVyIGlu
IHRoZSBkb2N1bWVudCdzIGNvb3JkaW5hdGUgc3BhY2UuCiAKLSAgICBib29sIGludGVyc2VjdHNE
YW1hZ2VSZWN0KGNvbnN0IEludFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBJbnRSZWN0JiBkYW1h
Z2VSZWN0LCBjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyKSBjb25zdDsKKyAgICBib29sIGlu
dGVyc2VjdHNEYW1hZ2VSZWN0KGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBM
YXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyKSBjb25z
dDsKIAogICAgIC8vIEJvdW5kaW5nIGJveCByZWxhdGl2ZSB0byBzb21lIGFuY2VzdG9yIGxheWVy
LgotICAgIEludFJlY3QgYm91bmRpbmdCb3goY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllcikg
Y29uc3Q7CisgICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveChjb25zdCBSZW5kZXJMYXllciogcm9v
dExheWVyKSBjb25zdDsKICAgICAvLyBCb3VuZGluZyBib3ggaW4gdGhlIGNvb3JkaW5hdGVzIG9m
IHRoaXMgbGF5ZXIuCi0gICAgSW50UmVjdCBsb2NhbEJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAg
TGF5b3V0UmVjdCBsb2NhbEJvdW5kaW5nQm94KCkgY29uc3Q7CiAgICAgLy8gQm91bmRpbmcgYm94
IHJlbGF0aXZlIHRvIHRoZSByb290LgotICAgIEludFJlY3QgYWJzb2x1dGVCb3VuZGluZ0JveCgp
IGNvbnN0OworICAgIExheW91dFJlY3QgYWJzb2x1dGVCb3VuZGluZ0JveCgpIGNvbnN0OwogCiAg
ICAgdm9pZCB1cGRhdGVIb3ZlckFjdGl2ZVN0YXRlKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYpOwogCiAgICAgLy8gUmV0dXJuIGEgY2FjaGVkIHJlcGFpbnQgcmVjdCwgY29t
cHV0ZWQgcmVsYXRpdmUgdG8gdGhlIGxheWVyIHJlbmRlcmVyJ3MgY29udGFpbmVyRm9yUmVwYWlu
dC4KLSAgICBJbnRSZWN0IHJlcGFpbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50UmVj
dDsgfQotICAgIEludFJlY3QgcmVwYWludFJlY3RJbmNsdWRpbmdEZXNjZW5kYW50cygpIGNvbnN0
OworICAgIExheW91dFJlY3QgcmVwYWludFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRS
ZWN0OyB9CisgICAgTGF5b3V0UmVjdCByZXBhaW50UmVjdEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCkg
Y29uc3Q7CiAgICAgdm9pZCBjb21wdXRlUmVwYWludFJlY3RzKCk7CiAgICAgdm9pZCB1cGRhdGVS
ZXBhaW50UmVjdHNBZnRlclNjcm9sbChib29sIGZpeGVkID0gZmFsc2UpOwogICAgIHZvaWQgc2V0
TmVlZHNGdWxsUmVwYWludChib29sIGYgPSB0cnVlKSB7IG1fbmVlZHNGdWxsUmVwYWludCA9IGY7
IH0KQEAgLTQ4OSwxOSArNDg5LDE5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdHlwZWRlZiB1bnNp
Z25lZCBQYWludExheWVyRmxhZ3M7CiAKLSAgICB2b2lkIHBhaW50TGF5ZXIoUmVuZGVyTGF5ZXIq
IHJvb3RMYXllciwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgcGFpbnREaXJ0eVJl
Y3QsCisgICAgdm9pZCBwYWludExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IExheW91dFJlY3QmIHBhaW50RGlydHlSZWN0LAogICAgICAgICAgICAg
ICAgICAgICBQYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdCwgT3Zlcmxh
cFRlc3RSZXF1ZXN0TWFwKiA9IDAsCiAgICAgICAgICAgICAgICAgICAgIFBhaW50TGF5ZXJGbGFn
cyA9IDApOwogICAgIHZvaWQgcGFpbnRMaXN0KFZlY3RvcjxSZW5kZXJMYXllcio+KiwgUmVuZGVy
TGF5ZXIqIHJvb3RMYXllciwgR3JhcGhpY3NDb250ZXh0KiBwLAotICAgICAgICAgICAgICAgICAg
IGNvbnN0IEludFJlY3QmIHBhaW50RGlydHlSZWN0LCBQYWludEJlaGF2aW9yLAorICAgICAgICAg
ICAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIHBhaW50RGlydHlSZWN0LCBQYWludEJlaGF2aW9y
LAogICAgICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290LCBPdmVybGFw
VGVzdFJlcXVlc3RNYXAqLAogICAgICAgICAgICAgICAgICAgIFBhaW50TGF5ZXJGbGFncyk7CiAg
ICAgdm9pZCBwYWludFBhZ2luYXRlZENoaWxkTGF5ZXIoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIs
IFJlbmRlckxheWVyKiByb290TGF5ZXIsIEdyYXBoaWNzQ29udGV4dCosCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcGFpbnREaXJ0eVJlY3QsIFBhaW50
QmVoYXZpb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0
UmVjdCYgcGFpbnREaXJ0eVJlY3QsIFBhaW50QmVoYXZpb3IsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3QsIE92ZXJsYXBUZXN0UmVx
dWVzdE1hcCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFpbnRMYXllckZs
YWdzKTsKICAgICB2b2lkIHBhaW50Q2hpbGRMYXllckludG9Db2x1bW5zKFJlbmRlckxheWVyKiBj
aGlsZExheWVyLCBSZW5kZXJMYXllciogcm9vdExheWVyLCBHcmFwaGljc0NvbnRleHQqLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcGFpbnREaXJ0
eVJlY3QsIFBhaW50QmVoYXZpb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBMYXlvdXRSZWN0JiBwYWludERpcnR5UmVjdCwgUGFpbnRCZWhhdmlvciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290
LCBPdmVybGFwVGVzdFJlcXVlc3RNYXAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUGFpbnRMYXllckZsYWdzLCBjb25zdCBWZWN0b3I8UmVuZGVyTGF5ZXIqPiYgY29sdW1u
TGF5ZXJzLCBzaXplX3QgY29sdW1uSW5kZXgpOwogCkBAIC01MzAsNDIgKzUzMCw0MiBAQCBwcml2
YXRlOgogCiAgICAgYm9vbCBzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCkgY29uc3Q7IAogCi0gICAg
aW50IHNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciopIGNvbnN0OworICAgIExheW91dFVuaXQgc2Ny
b2xsUG9zaXRpb24oU2Nyb2xsYmFyKikgY29uc3Q7CiAgICAgCiAgICAgLy8gU2Nyb2xsYWJsZUFy
ZWEgaW50ZXJmYWNlCi0gICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNj
cm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNj
cm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlk
YXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBMYXlvdXRSZWN0Jik7CisgICAgdmly
dHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IExheW91dFJlY3QmKTsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNT
Y3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBJbnRSZWN0IHNjcm9sbENv
cm5lclJlY3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZyb21TY3JvbGxi
YXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSBjb25z
dDsKLSAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xs
YmFyKGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICB2aXJ0dWFs
IEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3Jv
bGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OwotICAgIHZpcnR1YWwgSW50UG9pbnQgY29u
dmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciosIGNvbnN0
IEludFBvaW50JikgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJP
cmllbnRhdGlvbikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldChjb25z
dCBJbnRQb2ludCYpOwotICAgIHZpcnR1YWwgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24oKSBjb25z
dDsKLSAgICB2aXJ0dWFsIEludFBvaW50IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0Owot
ICAgIHZpcnR1YWwgSW50UG9pbnQgbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBJbnRSZWN0IHZpc2libGVDb250ZW50UmVjdChib29sIGluY2x1ZGVTY3JvbGxiYXJz
KSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0
OworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmlu
Z1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OworICAgIHZp
cnR1YWwgTGF5b3V0UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29u
c3QgU2Nyb2xsYmFyKiwgY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5
b3V0UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9s
bGJhciosIGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRQb2lu
dCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiwg
Y29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgc2Nyb2xs
U2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNj
cm9sbE9mZnNldChjb25zdCBMYXlvdXRQb2ludCYpOworICAgIHZpcnR1YWwgTGF5b3V0UG9pbnQg
c2Nyb2xsUG9zaXRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFBvaW50IG1pbmltdW1T
Y3JvbGxQb3NpdGlvbigpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0UG9pbnQgbWF4aW11bVNj
cm9sbFBvc2l0aW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IHZpc2libGVDb250
ZW50UmVjdChib29sIGluY2x1ZGVTY3JvbGxiYXJzKSBjb25zdDsKICAgICB2aXJ0dWFsIExheW91
dFVuaXQgdmlzaWJsZUhlaWdodCgpIGNvbnN0OwogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCB2aXNp
YmxlV2lkdGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFNpemUgY29udGVudHNTaXplKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBJbnRTaXplIG92ZXJoYW5nQW1vdW50KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBJbnRQb2ludCBjdXJyZW50TW91c2VQb3NpdGlvbigpIGNvbnN0OwotICAgIHZpcnR1YWwg
dm9pZCBkaWRDb21wbGV0ZVJ1YmJlckJhbmQoY29uc3QgSW50U2l6ZSYpIGNvbnN0OworICAgIHZp
cnR1YWwgTGF5b3V0U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91
dFNpemUgb3ZlcmhhbmdBbW91bnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFBvaW50IGN1
cnJlbnRNb3VzZVBvc2l0aW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRl
UnViYmVyQmFuZChjb25zdCBMYXlvdXRTaXplJikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNo
b3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlz
T25BY3RpdmVQYWdlKCkgY29uc3Q7CiAKICAgICAvLyBSZWN0YW5nbGUgZW5jb21wYXNzaW5nIHRo
ZSBzY3JvbGwgY29ybmVyIGFuZCByZXNpemVyIHJlY3QuCi0gICAgSW50UmVjdCBzY3JvbGxDb3Ju
ZXJBbmRSZXNpemVyUmVjdCgpIGNvbnN0OworICAgIExheW91dFJlY3Qgc2Nyb2xsQ29ybmVyQW5k
UmVzaXplclJlY3QoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0RnJvbVBh
Z2UoKSB7IG1fc2Nyb2xsYWJsZUFyZWFQYWdlID0gMDsgfQogCiAgICAgLy8gTk9URTogVGhpcyBz
aG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRlbiBzZXRTY3JvbGxPZmZzZXQgZnJv
bSBTY3JvbGxhYmxlQXJlYS4KLSAgICB2b2lkIHNjcm9sbFRvKGludCB4LCBpbnQgeSk7CisgICAg
dm9pZCBzY3JvbGxUbyhMYXlvdXRVbml0LCBMYXlvdXRVbml0KTsKIAotICAgIEludFNpemUgc2Ny
b2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciopIGNvbnN0OworICAgIExheW91dFNpemUgc2Ny
b2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciopIGNvbnN0OwogICAgIAogICAgIHZvaWQgdXBk
YXRlT3ZlcmZsb3dTdGF0dXMoYm9vbCBob3Jpem9udGFsT3ZlcmZsb3csIGJvb2wgdmVydGljYWxP
dmVyZmxvdyk7CiAKQEAgLTU5MSwxNCArNTkxLDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRQ
YWludGluZ0luc2lkZVJlZmxlY3Rpb24oYm9vbCBiKSB7IG1fcGFpbnRpbmdJbnNpZGVSZWZsZWN0
aW9uID0gYjsgfQogICAgIAogICAgIHZvaWQgcGFyZW50Q2xpcFJlY3RzKGNvbnN0IFJlbmRlckxh
eWVyKiByb290TGF5ZXIsIENsaXBSZWN0cyYsIGJvb2wgdGVtcG9yYXJ5Q2xpcFJlY3RzID0gZmFs
c2UsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJh
clNpemUpIGNvbnN0OwotICAgIEludFJlY3QgYmFja2dyb3VuZENsaXBSZWN0KGNvbnN0IFJlbmRl
ckxheWVyKiByb290TGF5ZXIsIGJvb2wgdGVtcG9yYXJ5Q2xpcFJlY3RzLCBPdmVybGF5U2Nyb2xs
YmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKKyAg
ICBMYXlvdXRSZWN0IGJhY2tncm91bmRDbGlwUmVjdChjb25zdCBSZW5kZXJMYXllciogcm9vdExh
eWVyLCBib29sIHRlbXBvcmFyeUNsaXBSZWN0cywgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFu
Y3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CiAKICAgICBSZW5kZXJMYXll
ciogZW5jbG9zaW5nVHJhbnNmb3JtZWRBbmNlc3RvcigpIGNvbnN0OwogCiAgICAgLy8gQ29udmVy
dCBhIHBvaW50IGluIGFic29sdXRlIGNvb3JkcyBpbnRvIGxheWVyIGNvb3JkcywgdGFraW5nIHRy
YW5zZm9ybXMgaW50byBhY2NvdW50Ci0gICAgSW50UG9pbnQgYWJzb2x1dGVUb0NvbnRlbnRzKGNv
bnN0IEludFBvaW50JikgY29uc3Q7CisgICAgTGF5b3V0UG9pbnQgYWJzb2x1dGVUb0NvbnRlbnRz
KGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7CiAKLSAgICB2b2lkIHBvc2l0aW9uT3ZlcmZsb3dD
b250cm9scyhjb25zdCBJbnRTaXplJik7CisgICAgdm9pZCBwb3NpdGlvbk92ZXJmbG93Q29udHJv
bHMoY29uc3QgTGF5b3V0U2l6ZSYpOwogICAgIHZvaWQgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUo
KTsKICAgICB2b2lkIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOwogCkBAIC02MjAsMTAgKzYyMCwxMCBA
QCBwcml2YXRlOgogICAgIC8vIE9ubHkgc2FmZSB0byBjYWxsIGZyb20gUmVuZGVyQm94TW9kZWxP
YmplY3Q6OmRlc3Ryb3lMYXllcihSZW5kZXJBcmVuYSopCiAgICAgdm9pZCBkZXN0cm95KFJlbmRl
ckFyZW5hKik7CiAKLSAgICBpbnQgb3ZlcmZsb3dUb3AoKSBjb25zdDsKLSAgICBpbnQgb3ZlcmZs
b3dCb3R0b20oKSBjb25zdDsKLSAgICBpbnQgb3ZlcmZsb3dMZWZ0KCkgY29uc3Q7Ci0gICAgaW50
IG92ZXJmbG93UmlnaHQoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IG92ZXJmbG93VG9wKCkgY29u
c3Q7CisgICAgTGF5b3V0VW5pdCBvdmVyZmxvd0JvdHRvbSgpIGNvbnN0OworICAgIExheW91dFVu
aXQgb3ZlcmZsb3dMZWZ0KCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBvdmVyZmxvd1JpZ2h0KCkg
Y29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogbV9yZW5kZXJl
cjsKQEAgLTYzNCwxMSArNjM0LDExIEBAIHByb3RlY3RlZDoKICAgICBSZW5kZXJMYXllciogbV9m
aXJzdDsKICAgICBSZW5kZXJMYXllciogbV9sYXN0OwogCi0gICAgSW50UmVjdCBtX3JlcGFpbnRS
ZWN0OyAvLyBDYWNoZWQgcmVwYWludCByZWN0cy4gVXNlZCBieSBsYXlvdXQuCi0gICAgSW50UmVj
dCBtX291dGxpbmVCb3g7CisgICAgTGF5b3V0UmVjdCBtX3JlcGFpbnRSZWN0OyAvLyBDYWNoZWQg
cmVwYWludCByZWN0cy4gVXNlZCBieSBsYXlvdXQuCisgICAgTGF5b3V0UmVjdCBtX291dGxpbmVC
b3g7CiAKICAgICAvLyBPdXIgY3VycmVudCByZWxhdGl2ZSBwb3NpdGlvbiBvZmZzZXQuCi0gICAg
SW50U2l6ZSBtX3JlbGF0aXZlT2Zmc2V0OworICAgIExheW91dFNpemUgbV9yZWxhdGl2ZU9mZnNl
dDsKIAogICAgIC8vIE91ciAoeCx5KSBjb29yZGluYXRlcyBhcmUgaW4gb3VyIHBhcmVudCBsYXll
cidzIGNvb3JkaW5hdGUgc3BhY2UuCiAgICAgTGF5b3V0UG9pbnQgbV90b3BMZWZ0OwpAQCAtNjQ3
LDEyICs2NDcsMTIgQEAgcHJvdGVjdGVkOgogICAgIExheW91dFNpemUgbV9sYXllclNpemU7CiAK
ICAgICAvLyBPdXIgc2Nyb2xsIG9mZnNldHMgaWYgdGhlIHZpZXcgaXMgc2Nyb2xsZWQuCi0gICAg
SW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKKyAgICBMYXlvdXRTaXplIG1fc2Nyb2xsT2Zmc2V0Owog
Ci0gICAgSW50U2l6ZSBtX3Njcm9sbE92ZXJmbG93OworICAgIExheW91dFNpemUgbV9zY3JvbGxP
dmVyZmxvdzsKICAgICAKICAgICAvLyBUaGUgd2lkdGgvaGVpZ2h0IG9mIG91ciBzY3JvbGxlZCBh
cmVhLgotICAgIEludFNpemUgbV9zY3JvbGxTaXplOworICAgIExheW91dFNpemUgbV9zY3JvbGxT
aXplOwogCiAgICAgLy8gRm9yIGxheWVycyB3aXRoIG92ZXJmbG93LCB3ZSBoYXZlIGEgcGFpciBv
ZiBzY3JvbGxiYXJzLgogICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1faEJhcjsKQEAgLTcwOSw3ICs3
MDksNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBib29sIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3Jv
bGxiYXJzIDogMTsKIAotICAgIEludFBvaW50IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNl
dDsKKyAgICBMYXlvdXRQb2ludCBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7CiAKICAg
ICBSZW5kZXJNYXJxdWVlKiBtX21hcnF1ZWU7IC8vIFVzZWQgYnkgbGF5ZXJzIHdpdGggb3ZlcmZs
b3c6bWFycXVlZQogICAgIApAQCAtNzI3LDcgKzcyNyw3IEBAIHByb3RlY3RlZDoKICAgICBSZW5k
ZXJTY3JvbGxiYXJQYXJ0KiBtX3Jlc2l6ZXI7CiAKIHByaXZhdGU6Ci0gICAgSW50UmVjdCBtX2Js
b2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsKKyAgICBMYXlvdXRSZWN0IG1fYmxvY2tTZWxlY3Rpb25H
YXBzQm91bmRzOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIE93blB0
cjxSZW5kZXJMYXllckJhY2tpbmc+IG1fYmFja2luZzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCShyZXZpc2lvbiA5MzM0MykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBzdGF0
aWMgYm9vbCBoYXNCb3JkZXJPdXRsaW5lT3JTaGFkb3coY29uc3QgUmVuZGVyU3R5bGUqKTsKIHN0
YXRpYyBib29sIGhhc0JveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKGNvbnN0IFJlbmRlck9iamVj
dCopOwogc3RhdGljIGJvb2wgaGFzQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmRJbWFnZShjb25z
dCBSZW5kZXJTdHlsZSopOwotc3RhdGljIEludFJlY3QgY2xpcEJveChSZW5kZXJCb3gqIHJlbmRl
cmVyKTsKK3N0YXRpYyBMYXlvdXRSZWN0IGNsaXBCb3goUmVuZGVyQm94KiByZW5kZXJlcik7CiAK
IHN0YXRpYyBpbmxpbmUgYm9vbCBpc0FjY2VsZXJhdGVkQ2FudmFzKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIpCiB7CkBAIC0xOTEsNyArMTkxLDcgQEAgc3RhdGljIGJvb2wgbGF5ZXJPckFuY2VzdG9y
SXNGdWxsU2NyZWVuKAogCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ29tcG9zaXRl
ZEJvdW5kcygpCiB7Ci0gICAgSW50UmVjdCBsYXllckJvdW5kcyA9IGNvbXBvc2l0b3IoKS0+Y2Fs
Y3VsYXRlQ29tcG9zaXRlZEJvdW5kcyhtX293bmluZ0xheWVyLCBtX293bmluZ0xheWVyKTsKKyAg
ICBMYXlvdXRSZWN0IGxheWVyQm91bmRzID0gY29tcG9zaXRvcigpLT5jYWxjdWxhdGVDb21wb3Np
dGVkQm91bmRzKG1fb3duaW5nTGF5ZXIsIG1fb3duaW5nTGF5ZXIpOwogCiAgICAgLy8gQ2xpcCB0
byB0aGUgc2l6ZSBvZiB0aGUgZG9jdW1lbnQgb3IgZW5jbG9zaW5nIG92ZXJmbG93LXNjcm9sbCBs
YXllci4KICAgICAvLyBJZiB0aGlzIG9yIGFuIGFuY2VzdG9yIGlzIHRyYW5zZm9ybWVkLCB3ZSBj
YW4ndCBjdXJyZW50bHkgY29tcHV0ZSB0aGUgY29ycmVjdCByZWN0IHRvIGludGVyc2VjdCB3aXRo
LgpAQCAtMjA3LDEyICsyMDcsMTIgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNv
bXBvc2l0ZQogICAgICAgICBSZW5kZXJMYXllciogcm9vdExheWVyID0gdmlldy0+bGF5ZXIoKTsK
IAogICAgICAgICAvLyBTdGFydCBieSBjbGlwcGluZyB0byB0aGUgdmlldydzIGJvdW5kcy4KLSAg
ICAgICAgSW50UmVjdCBjbGlwcGluZ0JvdW5kcyA9IHZpZXctPmxheW91dE92ZXJmbG93UmVjdCgp
OworICAgICAgICBMYXlvdXRSZWN0IGNsaXBwaW5nQm91bmRzID0gdmlldy0+bGF5b3V0T3ZlcmZs
b3dSZWN0KCk7CiAKICAgICAgICAgaWYgKG1fb3duaW5nTGF5ZXIgIT0gcm9vdExheWVyKQogICAg
ICAgICAgICAgY2xpcHBpbmdCb3VuZHMuaW50ZXJzZWN0KG1fb3duaW5nTGF5ZXItPmJhY2tncm91
bmRDbGlwUmVjdChyb290TGF5ZXIsIHRydWUpKTsKIAotICAgICAgICBJbnRQb2ludCBkZWx0YTsK
KyAgICAgICAgTGF5b3V0UG9pbnQgZGVsdGE7CiAgICAgICAgIG1fb3duaW5nTGF5ZXItPmNvbnZl
cnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwgZGVsdGEpOwogICAgICAgICBjbGlwcGluZ0JvdW5k
cy5tb3ZlKC1kZWx0YS54KCksIC1kZWx0YS55KCkpOwogCkBAIC0zMzMsMTQgKzMzMywxNCBAQCBi
b29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMCiAgICAgcmV0dXJuIGxheWVy
Q29uZmlnQ2hhbmdlZDsKIH0KIAotc3RhdGljIEludFJlY3QgY2xpcEJveChSZW5kZXJCb3gqIHJl
bmRlcmVyKQorc3RhdGljIExheW91dFJlY3QgY2xpcEJveChSZW5kZXJCb3gqIHJlbmRlcmVyKQog
ewotICAgIEludFJlY3QgcmVzdWx0ID0gUGFpbnRJbmZvOjppbmZpbml0ZVJlY3QoKTsKKyAgICBM
YXlvdXRSZWN0IHJlc3VsdCA9IFBhaW50SW5mbzo6aW5maW5pdGVSZWN0KCk7CiAgICAgaWYgKHJl
bmRlcmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgcmVzdWx0ID0gcmVuZGVyZXItPm92
ZXJmbG93Q2xpcFJlY3QoSW50UG9pbnQoKSk7CisgICAgICAgIHJlc3VsdCA9IHJlbmRlcmVyLT5v
dmVyZmxvd0NsaXBSZWN0KExheW91dFBvaW50KCkpOwogCiAgICAgaWYgKHJlbmRlcmVyLT5oYXND
bGlwKCkpCi0gICAgICAgIHJlc3VsdC5pbnRlcnNlY3QocmVuZGVyZXItPmNsaXBSZWN0KEludFBv
aW50KCkpKTsKKyAgICAgICAgcmVzdWx0LmludGVyc2VjdChyZW5kZXJlci0+Y2xpcFJlY3QoTGF5
b3V0UG9pbnQoKSkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTM2NywyNCArMzY3LDI0
IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0wKICAgICBSZW5kZXJM
YXllciogY29tcEFuY2VzdG9yID0gbV9vd25pbmdMYXllci0+YW5jZXN0b3JDb21wb3NpdGluZ0xh
eWVyKCk7CiAgICAgCiAgICAgLy8gV2UgY29tcHV0ZSBldmVyeXRoaW5nIHJlbGF0aXZlIHRvIHRo
ZSBlbmNsb3NpbmcgY29tcG9zaXRpbmcgbGF5ZXIuCi0gICAgSW50UmVjdCBhbmNlc3RvckNvbXBv
c2l0aW5nQm91bmRzOworICAgIExheW91dFJlY3QgYW5jZXN0b3JDb21wb3NpdGluZ0JvdW5kczsK
ICAgICBpZiAoY29tcEFuY2VzdG9yKSB7CiAgICAgICAgIEFTU0VSVChjb21wQW5jZXN0b3ItPmJh
Y2tpbmcoKSk7CiAgICAgICAgIGFuY2VzdG9yQ29tcG9zaXRpbmdCb3VuZHMgPSBjb21wQW5jZXN0
b3ItPmJhY2tpbmcoKS0+Y29tcG9zaXRlZEJvdW5kcygpOwogICAgIH0KIAotICAgIEludFJlY3Qg
bG9jYWxDb21wb3NpdGluZ0JvdW5kcyA9IGNvbXBvc2l0ZWRCb3VuZHMoKTsKKyAgICBMYXlvdXRS
ZWN0IGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMgPSBjb21wb3NpdGVkQm91bmRzKCk7CiAKLSAgICBJ
bnRSZWN0IHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMobG9jYWxDb21wb3NpdGluZ0JvdW5kcyk7
Ci0gICAgSW50UG9pbnQgZGVsdGE7CisgICAgTGF5b3V0UmVjdCByZWxhdGl2ZUNvbXBvc2l0aW5n
Qm91bmRzKGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMpOworICAgIExheW91dFBvaW50IGRlbHRhOwog
ICAgIG1fb3duaW5nTGF5ZXItPmNvbnZlcnRUb0xheWVyQ29vcmRzKGNvbXBBbmNlc3RvciwgZGVs
dGEpOwogICAgIHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMubW92ZUJ5KGRlbHRhKTsKIAotICAg
IEludFBvaW50IGdyYXBoaWNzTGF5ZXJQYXJlbnRMb2NhdGlvbjsKKyAgICBMYXlvdXRQb2ludCBn
cmFwaGljc0xheWVyUGFyZW50TG9jYXRpb247CiAgICAgaWYgKGNvbXBBbmNlc3RvciAmJiBjb21w
QW5jZXN0b3ItPmJhY2tpbmcoKS0+aGFzQ2xpcHBpbmdMYXllcigpKSB7CiAgICAgICAgIC8vIElm
IHRoZSBjb21wb3NpdGluZyBhbmNlc3RvciBoYXMgYSBsYXllciB0byBjbGlwIGNoaWxkcmVuLCB3
ZSBwYXJlbnQgaW4gdGhhdCwgYW5kIHRoZXJlZm9yZQogICAgICAgICAvLyBwb3NpdGlvbiByZWxh
dGl2ZSB0byBpdC4KLSAgICAgICAgSW50UmVjdCBjbGlwcGluZ0JveCA9IGNsaXBCb3godG9SZW5k
ZXJCb3goY29tcEFuY2VzdG9yLT5yZW5kZXJlcigpKSk7CisgICAgICAgIExheW91dFJlY3QgY2xp
cHBpbmdCb3ggPSBjbGlwQm94KHRvUmVuZGVyQm94KGNvbXBBbmNlc3Rvci0+cmVuZGVyZXIoKSkp
OwogICAgICAgICBncmFwaGljc0xheWVyUGFyZW50TG9jYXRpb24gPSBjbGlwcGluZ0JveC5sb2Nh
dGlvbigpOwogICAgIH0gZWxzZSBpZiAoY29tcEFuY2VzdG9yKQogICAgICAgICBncmFwaGljc0xh
eWVyUGFyZW50TG9jYXRpb24gPSBhbmNlc3RvckNvbXBvc2l0aW5nQm91bmRzLmxvY2F0aW9uKCk7
CkBAIC0zOTUsNyArMzk1LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBo
aWNzTAogICAgICAgICAvLyBDYWxsIGNhbGN1bGF0ZVJlY3RzIHRvIGdldCB0aGUgYmFja2dyb3Vu
ZFJlY3Qgd2hpY2ggaXMgd2hhdCBpcyB1c2VkIHRvIGNsaXAgdGhlIGNvbnRlbnRzIG9mIHRoaXMK
ICAgICAgICAgLy8gbGF5ZXIuIE5vdGUgdGhhdCB3ZSBjYWxsIGl0IHdpdGggdGVtcG9yYXJ5Q2xp
cFJlY3RzID0gdHJ1ZSBiZWNhdXNlIG5vcm1hbGx5IHdoZW4gY29tcHV0aW5nIGNsaXAgcmVjdHMK
ICAgICAgICAgLy8gZm9yIGEgY29tcG9zaXRpbmcgbGF5ZXIsIHJvb3RMYXllciBpcyB0aGUgbGF5
ZXIgaXRzZWxmLgotICAgICAgICBJbnRSZWN0IHBhcmVudENsaXBSZWN0ID0gbV9vd25pbmdMYXll
ci0+YmFja2dyb3VuZENsaXBSZWN0KGNvbXBBbmNlc3RvciwgdHJ1ZSk7CisgICAgICAgIExheW91
dFJlY3QgcGFyZW50Q2xpcFJlY3QgPSBtX293bmluZ0xheWVyLT5iYWNrZ3JvdW5kQ2xpcFJlY3Qo
Y29tcEFuY2VzdG9yLCB0cnVlKTsKICAgICAgICAgQVNTRVJUKHBhcmVudENsaXBSZWN0ICE9IFBh
aW50SW5mbzo6aW5maW5pdGVSZWN0KCkpOwogICAgICAgICBtX2FuY2VzdG9yQ2xpcHBpbmdMYXll
ci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgpICsgKHBhcmVudENsaXBSZWN0LmxvY2F0aW9uKCkg
LSBncmFwaGljc0xheWVyUGFyZW50TG9jYXRpb24pKTsKICAgICAgICAgbV9hbmNlc3RvckNsaXBw
aW5nTGF5ZXItPnNldFNpemUocGFyZW50Q2xpcFJlY3Quc2l6ZSgpKTsKQEAgLTQwOSw4ICs0MDks
OCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMCiAKICAgICBtX2dy
YXBoaWNzTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoKSArIChyZWxhdGl2ZUNvbXBvc2l0
aW5nQm91bmRzLmxvY2F0aW9uKCkgLSBncmFwaGljc0xheWVyUGFyZW50TG9jYXRpb24pKTsKICAg
ICAKLSAgICBJbnRTaXplIG9sZE9mZnNldEZyb21SZW5kZXJlciA9IG1fZ3JhcGhpY3NMYXllci0+
b2Zmc2V0RnJvbVJlbmRlcmVyKCk7Ci0gICAgbV9ncmFwaGljc0xheWVyLT5zZXRPZmZzZXRGcm9t
UmVuZGVyZXIobG9jYWxDb21wb3NpdGluZ0JvdW5kcy5sb2NhdGlvbigpIC0gSW50UG9pbnQoKSk7
CisgICAgTGF5b3V0U2l6ZSBvbGRPZmZzZXRGcm9tUmVuZGVyZXIgPSBtX2dyYXBoaWNzTGF5ZXIt
Pm9mZnNldEZyb21SZW5kZXJlcigpOworICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0T2Zmc2V0RnJv
bVJlbmRlcmVyKGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMubG9jYXRpb24oKSAtIExheW91dFBvaW50
KCkpOwogICAgIAogICAgIC8vIElmIHRoZSBjb21wb3NpdGluZyBsYXllciBvZmZzZXQgY2hhbmdl
cywgd2UgbmVlZCB0byByZXBhaW50LgogICAgIGlmIChvbGRPZmZzZXRGcm9tUmVuZGVyZXIgIT0g
bV9ncmFwaGljc0xheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKSkKQEAgLTQyNywxMiArNDI3LDEy
IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0wKICAgICB9CiAKICAg
ICAvLyBJZiB3ZSBoYXZlIGEgbGF5ZXIgdGhhdCBjbGlwcyBjaGlsZHJlbiwgcG9zaXRpb24gaXQu
Ci0gICAgSW50UmVjdCBjbGlwcGluZ0JveDsKKyAgICBMYXlvdXRSZWN0IGNsaXBwaW5nQm94Owog
ICAgIGlmIChtX2NsaXBwaW5nTGF5ZXIpIHsKICAgICAgICAgY2xpcHBpbmdCb3ggPSBjbGlwQm94
KHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpKTsKICAgICAgICAgbV9jbGlwcGluZ0xheWVyLT5zZXRQ
b3NpdGlvbihGbG9hdFBvaW50KCkgKyAoY2xpcHBpbmdCb3gubG9jYXRpb24oKSAtIGxvY2FsQ29t
cG9zaXRpbmdCb3VuZHMubG9jYXRpb24oKSkpOwogICAgICAgICBtX2NsaXBwaW5nTGF5ZXItPnNl
dFNpemUoY2xpcHBpbmdCb3guc2l6ZSgpKTsKLSAgICAgICAgbV9jbGlwcGluZ0xheWVyLT5zZXRP
ZmZzZXRGcm9tUmVuZGVyZXIoY2xpcHBpbmdCb3gubG9jYXRpb24oKSAtIEludFBvaW50KCkpOwor
ICAgICAgICBtX2NsaXBwaW5nTGF5ZXItPnNldE9mZnNldEZyb21SZW5kZXJlcihjbGlwcGluZ0Jv
eC5sb2NhdGlvbigpIC0gTGF5b3V0UG9pbnQoKSk7CiAgICAgfQogICAgIAogICAgIGlmIChtX21h
c2tMYXllcikgewpAQCAtNDQ1LDEwICs0NDUsMTAgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6
OnVwZGF0ZUdyYXBoaWNzTAogICAgIH0KICAgICAKICAgICBpZiAobV9vd25pbmdMYXllci0+aGFz
VHJhbnNmb3JtKCkpIHsKLSAgICAgICAgY29uc3QgSW50UmVjdCBib3JkZXJCb3ggPSB0b1JlbmRl
ckJveChyZW5kZXJlcigpKS0+Ym9yZGVyQm94UmVjdCgpOworICAgICAgICBjb25zdCBMYXlvdXRS
ZWN0IGJvcmRlckJveCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5ib3JkZXJCb3hSZWN0KCk7
CiAKICAgICAgICAgLy8gR2V0IGxheW91dCBib3VuZHMgaW4gdGhlIGNvb3JkcyBvZiBjb21wQW5j
ZXN0b3IgdG8gbWF0Y2ggcmVsYXRpdmVDb21wb3NpdGluZ0JvdW5kcy4KLSAgICAgICAgSW50UmVj
dCBsYXllckJvdW5kcyA9IEludFJlY3QoZGVsdGEsIGJvcmRlckJveC5zaXplKCkpOworICAgICAg
ICBMYXlvdXRSZWN0IGxheWVyQm91bmRzID0gTGF5b3V0UmVjdChkZWx0YSwgYm9yZGVyQm94LnNp
emUoKSk7CiAKICAgICAgICAgLy8gVXBkYXRlIHByb3BlcnRpZXMgdGhhdCBkZXBlbmQgb24gbGF5
ZXIgZGltZW5zaW9ucwogICAgICAgICBGbG9hdFBvaW50M0QgdHJhbnNmb3JtT3JpZ2luID0gY29t
cHV0ZVRyYW5zZm9ybU9yaWdpbihib3JkZXJCb3gpOwpAQCAtNDgxLDEyICs0ODEsMTIgQEAgdm9p
ZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTAogICAgIGlmIChtX2ZvcmVncm91
bmRMYXllcikgewogICAgICAgICBGbG9hdFBvaW50IGZvcmVncm91bmRQb3NpdGlvbjsKICAgICAg
ICAgRmxvYXRTaXplIGZvcmVncm91bmRTaXplID0gbmV3U2l6ZTsKLSAgICAgICAgSW50U2l6ZSBm
b3JlZ3JvdW5kT2Zmc2V0ID0gbV9ncmFwaGljc0xheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsK
KyAgICAgICAgTGF5b3V0U2l6ZSBmb3JlZ3JvdW5kT2Zmc2V0ID0gbV9ncmFwaGljc0xheWVyLT5v
ZmZzZXRGcm9tUmVuZGVyZXIoKTsKICAgICAgICAgaWYgKG1fY2xpcHBpbmdMYXllcikgewogICAg
ICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIGNsaXBwaW5nIGxheWVyICh3aGljaCBjbGlwcyBkZXNj
ZW5kYW50cyksIHRoZW4gdGhlIGZvcmVncm91bmQgbGF5ZXIgaXMgYSBjaGlsZCBvZiBpdCwKICAg
ICAgICAgICAgIC8vIHNvIHRoYXQgaXQgZ2V0cyBjb3JyZWN0bHkgc29ydGVkIHdpdGggY2hpbGRy
ZW4uIEluIHRoYXQgY2FzZSwgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIGNsaXBwaW5nIGxheWVy
LgogICAgICAgICAgICAgZm9yZWdyb3VuZFNpemUgPSBGbG9hdFNpemUoY2xpcHBpbmdCb3guc2l6
ZSgpKTsKLSAgICAgICAgICAgIGZvcmVncm91bmRPZmZzZXQgPSBjbGlwcGluZ0JveC5sb2NhdGlv
bigpIC0gSW50UG9pbnQoKTsKKyAgICAgICAgICAgIGZvcmVncm91bmRPZmZzZXQgPSBjbGlwcGlu
Z0JveC5sb2NhdGlvbigpIC0gTGF5b3V0UG9pbnQoKTsKICAgICAgICAgfQogCiAgICAgICAgIG1f
Zm9yZWdyb3VuZExheWVyLT5zZXRQb3NpdGlvbihmb3JlZ3JvdW5kUG9zaXRpb24pOwpAQCAtOTg1
LDcgKzk4NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVJbWFnZUNvbnQKICAg
ICBpbWFnZS0+c3RhcnRBbmltYXRpb24oKTsKIH0KIAotRmxvYXRQb2ludDNEIFJlbmRlckxheWVy
QmFja2luZzo6Y29tcHV0ZVRyYW5zZm9ybU9yaWdpbihjb25zdCBJbnRSZWN0JiBib3JkZXJCb3gp
IGNvbnN0CitGbG9hdFBvaW50M0QgUmVuZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRlVHJhbnNmb3Jt
T3JpZ2luKGNvbnN0IExheW91dFJlY3QmIGJvcmRlckJveCkgY29uc3QKIHsKICAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSByZW5kZXJlcigpLT5zdHlsZSgpOwogCkBAIC05OTcsNyArOTk3LDcgQEAg
RmxvYXRQb2ludDNEIFJlbmRlckxheWVyQmFja2luZzo6Y29tcHV0ZQogICAgIHJldHVybiBvcmln
aW47CiB9CiAKLUZsb2F0UG9pbnQgUmVuZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRlUGVyc3BlY3Rp
dmVPcmlnaW4oY29uc3QgSW50UmVjdCYgYm9yZGVyQm94KSBjb25zdAorRmxvYXRQb2ludCBSZW5k
ZXJMYXllckJhY2tpbmc6OmNvbXB1dGVQZXJzcGVjdGl2ZU9yaWdpbihjb25zdCBMYXlvdXRSZWN0
JiBib3JkZXJCb3gpIGNvbnN0CiB7CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXIo
KS0+c3R5bGUoKTsKIApAQCAtMTAxMiwxNyArMTAxMiwxNyBAQCBGbG9hdFBvaW50IFJlbmRlckxh
eWVyQmFja2luZzo6Y29tcHV0ZVBlCiB9CiAKIC8vIFJldHVybiB0aGUgb2Zmc2V0IGZyb20gdGhl
IHRvcC1sZWZ0IG9mIHRoaXMgY29tcG9zaXRpbmcgbGF5ZXIgYXQgd2hpY2ggdGhlIHJlbmRlcmVy
J3MgY29udGVudHMgYXJlIHBhaW50ZWQuCi1JbnRTaXplIFJlbmRlckxheWVyQmFja2luZzo6Y29u
dGVudE9mZnNldEluQ29tcG9zdGluZ0xheWVyKCkgY29uc3QKK0xheW91dFNpemUgUmVuZGVyTGF5
ZXJCYWNraW5nOjpjb250ZW50T2Zmc2V0SW5Db21wb3N0aW5nTGF5ZXIoKSBjb25zdAogewotICAg
IHJldHVybiBJbnRTaXplKC1tX2NvbXBvc2l0ZWRCb3VuZHMueCgpLCAtbV9jb21wb3NpdGVkQm91
bmRzLnkoKSk7CisgICAgcmV0dXJuIExheW91dFNpemUoLW1fY29tcG9zaXRlZEJvdW5kcy54KCks
IC1tX2NvbXBvc2l0ZWRCb3VuZHMueSgpKTsKIH0KIAotSW50UmVjdCBSZW5kZXJMYXllckJhY2tp
bmc6OmNvbnRlbnRzQm94KCkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyTGF5ZXJCYWNraW5nOjpj
b250ZW50c0JveCgpIGNvbnN0CiB7CiAgICAgaWYgKCFyZW5kZXJlcigpLT5pc0JveCgpKQotICAg
ICAgICByZXR1cm4gSW50UmVjdCgpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCi0g
ICAgSW50UmVjdCBjb250ZW50c1JlY3Q7CisgICAgTGF5b3V0UmVjdCBjb250ZW50c1JlY3Q7CiAj
aWYgRU5BQkxFKFZJREVPKQogICAgIGlmIChyZW5kZXJlcigpLT5pc1ZpZGVvKCkpIHsKICAgICAg
ICAgUmVuZGVyVmlkZW8qIHZpZGVvUmVuZGVyZXIgPSB0b1JlbmRlclZpZGVvKHJlbmRlcmVyKCkp
OwpAQCAtMTAzMSw3ICsxMDMxLDcgQEAgSW50UmVjdCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbnRl
bnRzQm94KAogI2VuZGlmCiAgICAgICAgIGNvbnRlbnRzUmVjdCA9IHRvUmVuZGVyQm94KHJlbmRl
cmVyKCkpLT5jb250ZW50Qm94UmVjdCgpOwogCi0gICAgSW50U2l6ZSBjb250ZW50T2Zmc2V0ID0g
Y29udGVudE9mZnNldEluQ29tcG9zdGluZ0xheWVyKCk7CisgICAgTGF5b3V0U2l6ZSBjb250ZW50
T2Zmc2V0ID0gY29udGVudE9mZnNldEluQ29tcG9zdGluZ0xheWVyKCk7CiAgICAgY29udGVudHNS
ZWN0Lm1vdmUoY29udGVudE9mZnNldCk7CiAgICAgcmV0dXJuIGNvbnRlbnRzUmVjdDsKIH0KQEAg
LTEwNTcsMjggKzEwNTcsMjggQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbnRlbnRz
TmVlZAogfQogCiAvLyByIGlzIGluIHRoZSBjb29yZGluYXRlIHNwYWNlIG9mIHRoZSBsYXllcidz
IHJlbmRlciBvYmplY3QKLXZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRDb250ZW50c05lZWRE
aXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIHIpCit2b2lkIFJlbmRlckxheWVyQmFja2luZzo6
c2V0Q29udGVudHNOZWVkRGlzcGxheUluUmVjdChjb25zdCBMYXlvdXRSZWN0JiByKQogewogICAg
IGlmIChtX2dyYXBoaWNzTGF5ZXIgJiYgbV9ncmFwaGljc0xheWVyLT5kcmF3c0NvbnRlbnQoKSkg
ewotICAgICAgICBJbnRSZWN0IGxheWVyRGlydHlSZWN0ID0gcjsKKyAgICAgICAgTGF5b3V0UmVj
dCBsYXllckRpcnR5UmVjdCA9IHI7CiAgICAgICAgIGxheWVyRGlydHlSZWN0Lm1vdmUoLW1fZ3Jh
cGhpY3NMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkpOwogICAgICAgICBtX2dyYXBoaWNzTGF5
ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChsYXllckRpcnR5UmVjdCk7CiAgICAgfQogCiAgICAg
aWYgKG1fZm9yZWdyb3VuZExheWVyICYmIG1fZm9yZWdyb3VuZExheWVyLT5kcmF3c0NvbnRlbnQo
KSkgewotICAgICAgICBJbnRSZWN0IGxheWVyRGlydHlSZWN0ID0gcjsKKyAgICAgICAgTGF5b3V0
UmVjdCBsYXllckRpcnR5UmVjdCA9IHI7CiAgICAgICAgIGxheWVyRGlydHlSZWN0Lm1vdmUoLW1f
Zm9yZWdyb3VuZExheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKSk7CiAgICAgICAgIG1fZm9yZWdy
b3VuZExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QobGF5ZXJEaXJ0eVJlY3QpOwogICAgIH0K
IAogICAgIGlmIChtX21hc2tMYXllciAmJiBtX21hc2tMYXllci0+ZHJhd3NDb250ZW50KCkpIHsK
LSAgICAgICAgSW50UmVjdCBsYXllckRpcnR5UmVjdCA9IHI7CisgICAgICAgIExheW91dFJlY3Qg
bGF5ZXJEaXJ0eVJlY3QgPSByOwogICAgICAgICBsYXllckRpcnR5UmVjdC5tb3ZlKC1tX21hc2tM
YXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkpOwogICAgICAgICBtX21hc2tMYXllci0+c2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KGxheWVyRGlydHlSZWN0KTsKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lk
IHNldENsaXAoR3JhcGhpY3NDb250ZXh0KiBwLCBjb25zdCBJbnRSZWN0JiBwYWludERpcnR5UmVj
dCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCitzdGF0aWMgdm9pZCBzZXRDbGlwKEdyYXBoaWNz
Q29udGV4dCogcCwgY29uc3QgTGF5b3V0UmVjdCYgcGFpbnREaXJ0eVJlY3QsIGNvbnN0IExheW91
dFJlY3QmIGNsaXBSZWN0KQogewogICAgIGlmIChwYWludERpcnR5UmVjdCA9PSBjbGlwUmVjdCkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTA4Niw3ICsxMDg2LDcgQEAgc3RhdGljIHZvaWQgc2V0Q2xp
cChHcmFwaGljc0NvbnRleHQqIHAsIAogICAgIHAtPmNsaXAoY2xpcFJlY3QpOwogfQogCi1zdGF0
aWMgdm9pZCByZXN0b3JlQ2xpcChHcmFwaGljc0NvbnRleHQqIHAsIGNvbnN0IEludFJlY3QmIHBh
aW50RGlydHlSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKK3N0YXRpYyB2b2lkIHJlc3Rv
cmVDbGlwKEdyYXBoaWNzQ29udGV4dCogcCwgY29uc3QgTGF5b3V0UmVjdCYgcGFpbnREaXJ0eVJl
Y3QsIGNvbnN0IExheW91dFJlY3QmIGNsaXBSZWN0KQogewogICAgIGlmIChwYWludERpcnR5UmVj
dCA9PSBjbGlwUmVjdCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTA5NSw3ICsxMDk1LDcgQEAgc3Rh
dGljIHZvaWQgcmVzdG9yZUNsaXAoR3JhcGhpY3NDb250ZXh0KgogCiAvLyBTaGFyZSB0aGlzIHdp
dGggUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXIsIHdoaWNoIHdvdWxkIGhhdmUgdG8gYmUgZWR1Y2F0
ZWQgYWJvdXQgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2U/CiB2b2lkIFJlbmRlckxheWVyQmFj
a2luZzo6cGFpbnRJbnRvTGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBwYWludERp
cnR5UmVjdCwgICAgICAvLyBpbiB0aGUgY29vcmRzIG9mIHJvb3RMYXllcgorICAgICAgICAgICAg
ICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBwYWludERpcnR5UmVjdCwgLy8gSW4gdGhlIGNvb3Jk
cyBvZiByb290TGF5ZXIuCiAgICAgICAgICAgICAgICAgICAgIFBhaW50QmVoYXZpb3IgcGFpbnRC
ZWhhdmlvciwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UgcGFpbnRpbmdQaGFzZSwKICAgICAg
ICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3QpCiB7CkBAIC0xMTA3LDEw
ICsxMTA3LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcigKICAg
ICBtX293bmluZ0xheWVyLT51cGRhdGVMYXllckxpc3RzSWZOZWVkZWQoKTsKICAgICAKICAgICAv
LyBDYWxjdWxhdGUgdGhlIGNsaXAgcmVjdHMgd2Ugc2hvdWxkIHVzZS4KLSAgICBJbnRSZWN0IGxh
eWVyQm91bmRzLCBkYW1hZ2VSZWN0LCBjbGlwUmVjdFRvQXBwbHksIG91dGxpbmVSZWN0OworICAg
IExheW91dFJlY3QgbGF5ZXJCb3VuZHMsIGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0
bGluZVJlY3Q7CiAgICAgbV9vd25pbmdMYXllci0+Y2FsY3VsYXRlUmVjdHMocm9vdExheWVyLCBw
YWludERpcnR5UmVjdCwgbGF5ZXJCb3VuZHMsIGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwg
b3V0bGluZVJlY3QpOwogCi0gICAgSW50UG9pbnQgcGFpbnRPZmZzZXQgPSB0b1BvaW50KGxheWVy
Qm91bmRzLmxvY2F0aW9uKCkgLSBtX293bmluZ0xheWVyLT5yZW5kZXJCb3hMb2NhdGlvbigpKTsK
KyAgICBMYXlvdXRQb2ludCBwYWludE9mZnNldCA9IHRvUG9pbnQobGF5ZXJCb3VuZHMubG9jYXRp
b24oKSAtIG1fb3duaW5nTGF5ZXItPnJlbmRlckJveExvY2F0aW9uKCkpOwogCiAgICAgLy8gSWYg
dGhpcyBsYXllcidzIHJlbmRlcmVyIGlzIGEgY2hpbGQgb2YgdGhlIHBhaW50aW5nUm9vdCwgd2Ug
cmVuZGVyIHVuY29uZGl0aW9uYWxseSwgd2hpY2gKICAgICAvLyBpcyBkb25lIGJ5IHBhc3Npbmcg
YSBuaWwgcGFpbnRpbmdSb290IGRvd24gdG8gb3VyIHJlbmRlcmVyIChhcyBpZiBubyBwYWludGlu
Z1Jvb3Qgd2FzIGV2ZXIgc2V0KS4KQEAgLTExOTgsMzQgKzExOTgsMzQgQEAgdm9pZCBSZW5kZXJM
YXllckJhY2tpbmc6OnBhaW50SW50b0xheWVyKAogICAgIEFTU0VSVCghbV9vd25pbmdMYXllci0+
bV91c2VkVHJhbnNwYXJlbmN5KTsKIH0KIAotc3RhdGljIHZvaWQgcGFpbnRTY3JvbGxiYXIoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVj
dCYgY2xpcCkKK3N0YXRpYyB2b2lkIHBhaW50U2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFy
LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGNsaXApCiB7CiAg
ICAgaWYgKCFzY3JvbGxiYXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnRleHQuc2F2ZSgp
OwotICAgIGNvbnN0IEludFJlY3QmIHNjcm9sbGJhclJlY3QgPSBzY3JvbGxiYXItPmZyYW1lUmVj
dCgpOworICAgIGNvbnN0IExheW91dFJlY3QmIHNjcm9sbGJhclJlY3QgPSBzY3JvbGxiYXItPmZy
YW1lUmVjdCgpOwogICAgIGNvbnRleHQudHJhbnNsYXRlKC1zY3JvbGxiYXJSZWN0LngoKSwgLXNj
cm9sbGJhclJlY3QueSgpKTsKLSAgICBJbnRSZWN0IHRyYW5zZm9ybWVkQ2xpcCA9IGNsaXA7Cisg
ICAgTGF5b3V0UmVjdCB0cmFuc2Zvcm1lZENsaXAgPSBjbGlwOwogICAgIHRyYW5zZm9ybWVkQ2xp
cC5tb3ZlQnkoc2Nyb2xsYmFyUmVjdC5sb2NhdGlvbigpKTsKICAgICBzY3JvbGxiYXItPnBhaW50
KCZjb250ZXh0LCB0cmFuc2Zvcm1lZENsaXApOwogICAgIGNvbnRleHQucmVzdG9yZSgpOwogfQog
CiAvLyBVcC1jYWxsIGZyb20gY29tcG9zaXRpbmcgbGF5ZXIgZHJhd2luZyBjYWxsYmFjay4KLXZv
aWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIq
IGdyYXBoaWNzTGF5ZXIsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgR3JhcGhpY3NMYXllclBh
aW50aW5nUGhhc2UgcGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVjdCYgY2xpcCkKK3ZvaWQgUmVu
ZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBo
aWNzTGF5ZXIsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgR3JhcGhpY3NMYXllclBhaW50aW5n
UGhhc2UgcGFpbnRpbmdQaGFzZSwgY29uc3QgTGF5b3V0UmVjdCYgY2xpcCkKIHsKICAgICBpZiAo
Z3JhcGhpY3NMYXllciA9PSBtX2dyYXBoaWNzTGF5ZXIuZ2V0KCkgfHwgZ3JhcGhpY3NMYXllciA9
PSBtX2ZvcmVncm91bmRMYXllci5nZXQoKSB8fCBncmFwaGljc0xheWVyID09IG1fbWFza0xheWVy
LmdldCgpKSB7CiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUg
PSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxQYWludChtX293bmluZ0xheWVyLT5yZW5k
ZXJlcigpLT5mcmFtZSgpLCBjbGlwKTsKIAotICAgICAgICBJbnRTaXplIG9mZnNldCA9IGdyYXBo
aWNzTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpOworICAgICAgICBMYXlvdXRTaXplIG9mZnNl
dCA9IGdyYXBoaWNzTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpOwogICAgICAgICBjb250ZXh0
LnRyYW5zbGF0ZSgtb2Zmc2V0KTsKIAotICAgICAgICBJbnRSZWN0IGNsaXBSZWN0KGNsaXApOwor
ICAgICAgICBMYXlvdXRSZWN0IGNsaXBSZWN0KGNsaXApOwogICAgICAgICBjbGlwUmVjdC5tb3Zl
KG9mZnNldCk7CiAKICAgICAgICAgLy8gVGhlIGRpcnR5UmVjdCBpcyBpbiB0aGUgY29vcmRzIG9m
IHRoZSBwYWludGluZyByb290LgotICAgICAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IGNvbXBvc2l0
ZWRCb3VuZHMoKTsKKyAgICAgICAgTGF5b3V0UmVjdCBkaXJ0eVJlY3QgPSBjb21wb3NpdGVkQm91
bmRzKCk7CiAgICAgICAgIGRpcnR5UmVjdC5pbnRlcnNlY3QoY2xpcFJlY3QpOwogCiAgICAgICAg
IC8vIFdlIGhhdmUgdG8gdXNlIHRoZSBzYW1lIHJvb3QgYXMgZm9yIGhpdCB0ZXN0aW5nLCBiZWNh
dXNlIGJvdGggbWV0aG9kcyBjYW4gY29tcHV0ZSBhbmQgY2FjaGUgY2xpcFJlY3RzLgpAQCAtMTIz
NywxMyArMTIzNywxMyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRDb250ZW50cyhj
CiAgICAgfSBlbHNlIGlmIChncmFwaGljc0xheWVyID09IGxheWVyRm9yVmVydGljYWxTY3JvbGxi
YXIoKSkgewogICAgICAgICBwYWludFNjcm9sbGJhcihtX293bmluZ0xheWVyLT52ZXJ0aWNhbFNj
cm9sbGJhcigpLCBjb250ZXh0LCBjbGlwKTsKICAgICB9IGVsc2UgaWYgKGdyYXBoaWNzTGF5ZXIg
PT0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewotICAgICAgICBjb25zdCBJbnRSZWN0JiBzY3Jv
bGxDb3JuZXJBbmRSZXNpemVyID0gbV9vd25pbmdMYXllci0+c2Nyb2xsQ29ybmVyQW5kUmVzaXpl
clJlY3QoKTsKKyAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgc2Nyb2xsQ29ybmVyQW5kUmVzaXpl
ciA9IG1fb3duaW5nTGF5ZXItPnNjcm9sbENvcm5lckFuZFJlc2l6ZXJSZWN0KCk7CiAgICAgICAg
IGNvbnRleHQuc2F2ZSgpOwogICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtc2Nyb2xsQ29ybmVy
QW5kUmVzaXplci54KCksIC1zY3JvbGxDb3JuZXJBbmRSZXNpemVyLnkoKSk7Ci0gICAgICAgIElu
dFJlY3QgdHJhbnNmb3JtZWRDbGlwID0gY2xpcDsKKyAgICAgICAgTGF5b3V0UmVjdCB0cmFuc2Zv
cm1lZENsaXAgPSBjbGlwOwogICAgICAgICB0cmFuc2Zvcm1lZENsaXAubW92ZUJ5KHNjcm9sbENv
cm5lckFuZFJlc2l6ZXIubG9jYXRpb24oKSk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXItPnBhaW50
U2Nyb2xsQ29ybmVyKCZjb250ZXh0LCBJbnRQb2ludCgpLCB0cmFuc2Zvcm1lZENsaXApOwotICAg
ICAgICBtX293bmluZ0xheWVyLT5wYWludFJlc2l6ZXIoJmNvbnRleHQsIEludFBvaW50KCksIHRy
YW5zZm9ybWVkQ2xpcCk7CisgICAgICAgIG1fb3duaW5nTGF5ZXItPnBhaW50U2Nyb2xsQ29ybmVy
KCZjb250ZXh0LCBMYXlvdXRQb2ludCgpLCB0cmFuc2Zvcm1lZENsaXApOworICAgICAgICBtX293
bmluZ0xheWVyLT5wYWludFJlc2l6ZXIoJmNvbnRleHQsIExheW91dFBvaW50KCksIHRyYW5zZm9y
bWVkQ2xpcCk7CiAgICAgICAgIGNvbnRleHQucmVzdG9yZSgpOwogICAgIH0KIH0KQEAgLTEzMTIs
NyArMTMxMiw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpzdGFydEFuaW1hdGlvbigKICAg
ICAgICAgY29tcG9zaXRvcigpLT5kaWRTdGFydEFjY2VsZXJhdGVkQW5pbWF0aW9uKENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNmb3JtKTsKICAgICB9CiAKLSAgICBpZiAoaGFzT3BhY2l0eSAmJiBtX2dy
YXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbihvcGFjaXR5VmVjdG9yLCBJbnRTaXplKCksIGFuaW0s
IGtleWZyYW1lcy5hbmltYXRpb25OYW1lKCksIHRpbWVPZmZzZXQpKSB7CisgICAgaWYgKGhhc09w
YWNpdHkgJiYgbV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24ob3BhY2l0eVZlY3RvciwgTGF5
b3V0U2l6ZSgpLCBhbmltLCBrZXlmcmFtZXMuYW5pbWF0aW9uTmFtZSgpLCB0aW1lT2Zmc2V0KSkg
ewogICAgICAgICBkaWRBbmltYXRlT3BhY2l0eSA9IHRydWU7CiAgICAgICAgIGNvbXBvc2l0b3Io
KS0+ZGlkU3RhcnRBY2NlbGVyYXRlZEFuaW1hdGlvbihDU1NQcm9wZXJ0eU9wYWNpdHkpOwogICAg
IH0KQEAgLTEzNDMsNyArMTM0Myw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpzdGFydFRy
YW5zaXRpb24KICAgICAgICAgICAgIG9wYWNpdHlWZWN0b3IuaW5zZXJ0KG5ldyBGbG9hdEFuaW1h
dGlvblZhbHVlKDAsIGNvbXBvc2l0aW5nT3BhY2l0eShmcm9tU3R5bGUtPm9wYWNpdHkoKSkpKTsK
ICAgICAgICAgICAgIG9wYWNpdHlWZWN0b3IuaW5zZXJ0KG5ldyBGbG9hdEFuaW1hdGlvblZhbHVl
KDEsIGNvbXBvc2l0aW5nT3BhY2l0eSh0b1N0eWxlLT5vcGFjaXR5KCkpKSk7CiAgICAgICAgICAg
ICAvLyBUaGUgYm94U2l6ZSBwYXJhbSBpcyBvbmx5IHVzZWQgZm9yIHRyYW5zZm9ybSBhbmltYXRp
b25zICh3aGljaCBjYW4gb25seSBydW4gb24gUmVuZGVyQm94ZXMpLCBzbyB3ZSBwYXNzIGFuIGVt
cHR5IHNpemUgaGVyZS4KLSAgICAgICAgICAgIGlmIChtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1h
dGlvbihvcGFjaXR5VmVjdG9yLCBJbnRTaXplKCksIG9wYWNpdHlBbmltLCBHcmFwaGljc0xheWVy
OjphbmltYXRpb25OYW1lRm9yVHJhbnNpdGlvbihBbmltYXRlZFByb3BlcnR5T3BhY2l0eSksIHRp
bWVPZmZzZXQpKSB7CisgICAgICAgICAgICBpZiAobV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRp
b24ob3BhY2l0eVZlY3RvciwgTGF5b3V0U2l6ZSgpLCBvcGFjaXR5QW5pbSwgR3JhcGhpY3NMYXll
cjo6YW5pbWF0aW9uTmFtZUZvclRyYW5zaXRpb24oQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpLCB0
aW1lT2Zmc2V0KSkgewogICAgICAgICAgICAgICAgIC8vIFRvIGVuc3VyZSB0aGF0IHRoZSBjb3Jy
ZWN0IG9wYWNpdHkgaXMgdmlzaWJsZSB3aGVuIHRoZSBhbmltYXRpb24gZW5kcywgYWxzbyBzZXQg
dGhlIGZpbmFsIG9wYWNpdHkuCiAgICAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJPcGFjaXR5KHRv
U3R5bGUpOwogICAgICAgICAgICAgICAgIGRpZEFuaW1hdGVPcGFjaXR5ID0gdHJ1ZTsKQEAgLTE0
MTAsMTIgKzE0MTAsMTIgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnJlc3VtZUFuaW1hdGlv
bgogICAgIG1fZ3JhcGhpY3NMYXllci0+cmVzdW1lQW5pbWF0aW9ucygpOwogfQogCi1JbnRSZWN0
IFJlbmRlckxheWVyQmFja2luZzo6Y29tcG9zaXRlZEJvdW5kcygpIGNvbnN0CitMYXlvdXRSZWN0
IFJlbmRlckxheWVyQmFja2luZzo6Y29tcG9zaXRlZEJvdW5kcygpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fY29tcG9zaXRlZEJvdW5kczsKIH0KIAotdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnNl
dENvbXBvc2l0ZWRCb3VuZHMoY29uc3QgSW50UmVjdCYgYm91bmRzKQordm9pZCBSZW5kZXJMYXll
ckJhY2tpbmc6OnNldENvbXBvc2l0ZWRCb3VuZHMoY29uc3QgTGF5b3V0UmVjdCYgYm91bmRzKQog
ewogICAgIG1fY29tcG9zaXRlZEJvdW5kcyA9IGJvdW5kczsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAkocmV2aXNpb24gOTMzNDMpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk5LDcgKzk5LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRDb250ZW50c05l
ZWREaXNwbGF5KCk7CiAgICAgLy8gciBpcyBpbiB0aGUgY29vcmRpbmF0ZSBzcGFjZSBvZiB0aGUg
bGF5ZXIncyByZW5kZXIgb2JqZWN0Ci0gICAgdm9pZCBzZXRDb250ZW50c05lZWREaXNwbGF5SW5S
ZWN0KGNvbnN0IEludFJlY3QmIHIpOworICAgIHZvaWQgc2V0Q29udGVudHNOZWVkRGlzcGxheUlu
UmVjdChjb25zdCBMYXlvdXRSZWN0Jik7CiAKICAgICAvLyBOb3RpZmljYXRpb24gZnJvbSB0aGUg
cmVuZGVyZXIgdGhhdCBpdHMgY29udGVudCBjaGFuZ2VkLgogICAgIHZvaWQgY29udGVudENoYW5n
ZWQoUmVuZGVyTGF5ZXI6OkNvbnRlbnRDaGFuZ2VUeXBlKTsKQEAgLTExNiw4ICsxMTYsOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSA9IDApOwogICAg
IHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOwogCi0gICAgSW50UmVjdCBjb21wb3NpdGVkQm91bmRz
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb21wb3NpdGVkQm91bmRzKGNvbnN0IEludFJlY3QmKTsK
KyAgICBMYXlvdXRSZWN0IGNvbXBvc2l0ZWRCb3VuZHMoKSBjb25zdDsKKyAgICB2b2lkIHNldENv
bXBvc2l0ZWRCb3VuZHMoY29uc3QgTGF5b3V0UmVjdCYpOwogICAgIHZvaWQgdXBkYXRlQ29tcG9z
aXRlZEJvdW5kcygpOwogICAgIAogICAgIHZvaWQgdXBkYXRlQWZ0ZXJXaWRnZXRSZXNpemUoKTsK
QEAgLTEyNiw3ICsxMjYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1h
dGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRvdWJsZSBzdGFydFRpbWUpOwogICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopOwog
Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdy
YXBoaWNzQ29udGV4dCYsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBJbnRSZWN0
JiBjbGlwKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xh
eWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0
IExheW91dFJlY3QmIGNsaXApOwogCiAgICAgdmlydHVhbCBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rv
cigpIGNvbnN0OwogICAgIHZpcnR1YWwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yKCkgY29uc3Q7CkBA
IC0xMzUsNyArMTM1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBzaG93RGVidWdCb3Jk
ZXJzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRlcigpIGNvbnN0
OwogCi0gICAgSW50UmVjdCBjb250ZW50c0JveCgpIGNvbnN0OworICAgIExheW91dFJlY3QgY29u
dGVudHNCb3goKSBjb25zdDsKICAgICAKICAgICAvLyBGb3IgaW5mb3JtYXRpdmUgcHVycG9zZXMg
b25seS4KICAgICBDb21wb3NpdGluZ0xheWVyVHlwZSBjb21wb3NpdGluZ0xheWVyVHlwZSgpIGNv
bnN0OwpAQCAtMTY0LDExICsxNjQsMTEgQEAgcHJpdmF0ZToKIAogICAgIEdyYXBoaWNzTGF5ZXJQ
YWludGluZ1BoYXNlIHBhaW50aW5nUGhhc2VGb3JQcmltYXJ5TGF5ZXIoKSBjb25zdDsKICAgICAK
LSAgICBJbnRTaXplIGNvbnRlbnRPZmZzZXRJbkNvbXBvc3RpbmdMYXllcigpIGNvbnN0OworICAg
IExheW91dFNpemUgY29udGVudE9mZnNldEluQ29tcG9zdGluZ0xheWVyKCkgY29uc3Q7CiAgICAg
Ly8gUmVzdWx0IGlzIHRyYW5zZm9ybSBvcmlnaW4gaW4gcGl4ZWxzLgotICAgIEZsb2F0UG9pbnQz
RCBjb21wdXRlVHJhbnNmb3JtT3JpZ2luKGNvbnN0IEludFJlY3QmIGJvcmRlckJveCkgY29uc3Q7
CisgICAgRmxvYXRQb2ludDNEIGNvbXB1dGVUcmFuc2Zvcm1PcmlnaW4oY29uc3QgTGF5b3V0UmVj
dCYgYm9yZGVyQm94KSBjb25zdDsKICAgICAvLyBSZXN1bHQgaXMgcGVyc3BlY3RpdmUgb3JpZ2lu
IGluIHBpeGVscy4KLSAgICBGbG9hdFBvaW50IGNvbXB1dGVQZXJzcGVjdGl2ZU9yaWdpbihjb25z
dCBJbnRSZWN0JiBib3JkZXJCb3gpIGNvbnN0OworICAgIEZsb2F0UG9pbnQgY29tcHV0ZVBlcnNw
ZWN0aXZlT3JpZ2luKGNvbnN0IExheW91dFJlY3QmIGJvcmRlckJveCkgY29uc3Q7CiAKICAgICB2
b2lkIHVwZGF0ZUxheWVyT3BhY2l0eShjb25zdCBSZW5kZXJTdHlsZSopOwogICAgIHZvaWQgdXBk
YXRlTGF5ZXJUcmFuc2Zvcm0oY29uc3QgUmVuZGVyU3R5bGUqKTsKQEAgLTE5MCw3ICsxOTAsNyBA
QCBwcml2YXRlOgogCiAgICAgYm9vbCBoYXNOb25Db21wb3NpdGluZ0Rlc2NlbmRhbnRzKCkgY29u
c3Q7CiAgICAgCi0gICAgdm9pZCBwYWludEludG9MYXllcihSZW5kZXJMYXllciogcm9vdExheWVy
LCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBwYWludERpcnR5UmVjdCwgUGFpbnRC
ZWhhdmlvciwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIFJlbmRlck9iamVjdCogcGFpbnRp
bmdSb290KTsKKyAgICB2b2lkIHBhaW50SW50b0xheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIs
IEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheW91dFJlY3QmIHBhaW50RGlydHlSZWN0LCBQYWlu
dEJlaGF2aW9yLCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgUmVuZGVyT2JqZWN0KiBwYWlu
dGluZ1Jvb3QpOwogCiAgICAgc3RhdGljIGludCBncmFwaGljc0xheWVyVG9DU1NQcm9wZXJ0eShB
bmltYXRlZFByb3BlcnR5SUQpOwogICAgIHN0YXRpYyBBbmltYXRlZFByb3BlcnR5SUQgY3NzVG9H
cmFwaGljc0xheWVyUHJvcGVydHkoaW50KTsKQEAgLTIxMSw3ICsyMTEsNyBAQCBwcml2YXRlOgog
ICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBtX2xheWVyRm9yVmVydGljYWxTY3JvbGxiYXI7CiAg
ICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fbGF5ZXJGb3JTY3JvbGxDb3JuZXI7CiAKLSAgICBJ
bnRSZWN0IG1fY29tcG9zaXRlZEJvdW5kczsKKyAgICBMYXlvdXRSZWN0IG1fY29tcG9zaXRlZEJv
dW5kczsKIAogICAgIGJvb2wgbV9hcnRpZmljaWFsbHlJbmZsYXRlZEJvdW5kczsgICAgICAvLyBi
b3VuZHMgaGFkIHRvIGJlIG1hZGUgbm9uLXplcm8gdG8gbWFrZSB0cmFuc2Zvcm0tb3JpZ2luIHdv
cmsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmNwcAkocmV2aXNpb24gOTMzNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM5LDEy
ICs0MzksMTIgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcGFpbnRPbkNvbQogCiAv
LyBUaGUgYm91bmRzIG9mIHRoZSBHcmFwaGljc0xheWVyIGNyZWF0ZWQgZm9yIGEgY29tcG9zaXRp
bmcgbGF5ZXIgaXMgdGhlIHVuaW9uIG9mIHRoZSBib3VuZHMgb2YgYWxsIHRoZSBkZXNjZW5kYW50
CiAvLyBSZW5kZXJMYXllcnMgdGhhdCBhcmUgcmVuZGVyZWQgYnkgdGhlIGNvbXBvc2l0ZWQgUmVu
ZGVyTGF5ZXIuCi1JbnRSZWN0IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FsY3VsYXRlQ29tcG9z
aXRlZEJvdW5kcyhjb25zdCBSZW5kZXJMYXllciogbGF5ZXIsIGNvbnN0IFJlbmRlckxheWVyKiBh
bmNlc3RvckxheWVyKQorTGF5b3V0UmVjdCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhbGN1bGF0
ZUNvbXBvc2l0ZWRCb3VuZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyLCBjb25zdCBSZW5kZXJM
YXllciogYW5jZXN0b3JMYXllcikKIHsKICAgICBpZiAoIWNhbkJlQ29tcG9zaXRlZChsYXllcikp
Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7
CiAKLSAgICBJbnRSZWN0IGJvdW5kaW5nQm94UmVjdCA9IGxheWVyLT5sb2NhbEJvdW5kaW5nQm94
KCk7CisgICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveFJlY3QgPSBsYXllci0+bG9jYWxCb3VuZGlu
Z0JveCgpOwogICAgIGlmIChsYXllci0+cmVuZGVyZXIoKS0+aXNSb290KCkpIHsKICAgICAgICAg
Ly8gSWYgdGhlIHJvb3QgbGF5ZXIgYmVjb21lcyBjb21wb3NpdGVkIChlLmcuIGJlY2F1c2Ugc29t
ZSBkZXNjZW5kYW50IHdpdGggbmVnYXRpdmUgei1pbmRleCBpcyBjb21wb3NpdGVkKSwKICAgICAg
ICAgLy8gdGhlbiBpdCBoYXMgdG8gYmUgYmlnIGVub3VnaCB0byBjb3ZlciB0aGUgdmlld3BvcnQg
aW4gb3JkZXIgdG8gZGlzcGxheSB0aGUgYmFja2dyb3VuZC4gVGhpcyBpcyBha2luCkBAIC00NTgs
MTAgKzQ1OCwxMCBAQCBJbnRSZWN0IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FsY3VsYXRlCiAg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgSW50UmVjdCB1bmlvbkJvdW5kcyA9IGJvdW5kaW5n
Qm94UmVjdDsKKyAgICBMYXlvdXRSZWN0IHVuaW9uQm91bmRzID0gYm91bmRpbmdCb3hSZWN0Owog
ICAgIAogICAgIGlmIChsYXllci0+cmVuZGVyZXIoKS0+aGFzT3ZlcmZsb3dDbGlwKCkgfHwgbGF5
ZXItPnJlbmRlcmVyKCktPmhhc01hc2soKSkgewotICAgICAgICBJbnRQb2ludCBhbmNlc3RvclJl
bE9mZnNldDsKKyAgICAgICAgTGF5b3V0UG9pbnQgYW5jZXN0b3JSZWxPZmZzZXQ7CiAgICAgICAg
IGxheWVyLT5jb252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3RvckxheWVyLCBhbmNlc3RvclJlbE9m
ZnNldCk7CiAgICAgICAgIGJvdW5kaW5nQm94UmVjdC5tb3ZlQnkoYW5jZXN0b3JSZWxPZmZzZXQp
OwogICAgICAgICByZXR1cm4gYm91bmRpbmdCb3hSZWN0OwpAQCAtNDY5LDcgKzQ2OSw3IEBAIElu
dFJlY3QgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjYWxjdWxhdGUKIAogICAgIGlmIChSZW5kZXJM
YXllciogcmVmbGVjdGlvbiA9IGxheWVyLT5yZWZsZWN0aW9uTGF5ZXIoKSkgewogICAgICAgICBp
ZiAoIXJlZmxlY3Rpb24tPmlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAgICAgICBJbnRSZWN0IGNo
aWxkVW5pb25Cb3VuZHMgPSBjYWxjdWxhdGVDb21wb3NpdGVkQm91bmRzKHJlZmxlY3Rpb24sIGxh
eWVyKTsKKyAgICAgICAgICAgIExheW91dFJlY3QgY2hpbGRVbmlvbkJvdW5kcyA9IGNhbGN1bGF0
ZUNvbXBvc2l0ZWRCb3VuZHMocmVmbGVjdGlvbiwgbGF5ZXIpOwogICAgICAgICAgICAgdW5pb25C
b3VuZHMudW5pdGUoY2hpbGRVbmlvbkJvdW5kcyk7CiAgICAgICAgIH0KICAgICB9CkBAIC00ODEs
NyArNDgxLDcgQEAgSW50UmVjdCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhbGN1bGF0ZQogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKICAgICAgICAgICAg
IFJlbmRlckxheWVyKiBjdXJMYXllciA9IG5lZ1pPcmRlckxpc3QtPmF0KGkpOwogICAgICAgICAg
ICAgaWYgKCFjdXJMYXllci0+aXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgICAgICAgICBJbnRS
ZWN0IGNoaWxkVW5pb25Cb3VuZHMgPSBjYWxjdWxhdGVDb21wb3NpdGVkQm91bmRzKGN1ckxheWVy
LCBsYXllcik7CisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBjaGlsZFVuaW9uQm91bmRzID0g
Y2FsY3VsYXRlQ29tcG9zaXRlZEJvdW5kcyhjdXJMYXllciwgbGF5ZXIpOwogICAgICAgICAgICAg
ICAgIHVuaW9uQm91bmRzLnVuaXRlKGNoaWxkVW5pb25Cb3VuZHMpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkBAIC00OTIsNyArNDkyLDcgQEAgSW50UmVjdCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmNhbGN1bGF0ZQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyAr
K2kpIHsKICAgICAgICAgICAgIFJlbmRlckxheWVyKiBjdXJMYXllciA9IHBvc1pPcmRlckxpc3Qt
PmF0KGkpOwogICAgICAgICAgICAgaWYgKCFjdXJMYXllci0+aXNDb21wb3NpdGVkKCkpIHsKLSAg
ICAgICAgICAgICAgICBJbnRSZWN0IGNoaWxkVW5pb25Cb3VuZHMgPSBjYWxjdWxhdGVDb21wb3Np
dGVkQm91bmRzKGN1ckxheWVyLCBsYXllcik7CisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBj
aGlsZFVuaW9uQm91bmRzID0gY2FsY3VsYXRlQ29tcG9zaXRlZEJvdW5kcyhjdXJMYXllciwgbGF5
ZXIpOwogICAgICAgICAgICAgICAgIHVuaW9uQm91bmRzLnVuaXRlKGNoaWxkVW5pb25Cb3VuZHMp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01MDMsNyArNTAzLDcgQEAgSW50UmVjdCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhbGN1bGF0ZQogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxpc3RTaXplOyArK2kpIHsKICAgICAgICAgICAgIFJlbmRlckxheWVyKiBjdXJMYXll
ciA9IG5vcm1hbEZsb3dMaXN0LT5hdChpKTsKICAgICAgICAgICAgIGlmICghY3VyTGF5ZXItPmlz
Q29tcG9zaXRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgSW50UmVjdCBjdXJBYnNCb3VuZHMgPSBj
YWxjdWxhdGVDb21wb3NpdGVkQm91bmRzKGN1ckxheWVyLCBsYXllcik7CisgICAgICAgICAgICAg
ICAgTGF5b3V0UmVjdCBjdXJBYnNCb3VuZHMgPSBjYWxjdWxhdGVDb21wb3NpdGVkQm91bmRzKGN1
ckxheWVyLCBsYXllcik7CiAgICAgICAgICAgICAgICAgdW5pb25Cb3VuZHMudW5pdGUoY3VyQWJz
Qm91bmRzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTE1LDcgKzUxNSw3IEBAIElu
dFJlY3QgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjYWxjdWxhdGUKICAgICAgICAgdW5pb25Cb3Vu
ZHMgPSBhZmZpbmVUcmFucy0+bWFwUmVjdCh1bmlvbkJvdW5kcyk7CiAgICAgfQogCi0gICAgSW50
UG9pbnQgYW5jZXN0b3JSZWxPZmZzZXQ7CisgICAgTGF5b3V0UG9pbnQgYW5jZXN0b3JSZWxPZmZz
ZXQ7CiAgICAgbGF5ZXItPmNvbnZlcnRUb0xheWVyQ29vcmRzKGFuY2VzdG9yTGF5ZXIsIGFuY2Vz
dG9yUmVsT2Zmc2V0KTsKICAgICB1bmlvbkJvdW5kcy5tb3ZlQnkoYW5jZXN0b3JSZWxPZmZzZXQp
OwogCkBAIC01MzcsOSArNTM3LDkgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxheWVy
V2lsbEJlUgogICAgIFJlbmRlckxheWVyKiBjb21wTGF5ZXIgPSBwYXJlbnQtPmVuY2xvc2luZ0Nv
bXBvc2l0aW5nTGF5ZXIoKTsKICAgICBpZiAoY29tcExheWVyKSB7CiAgICAgICAgIEFTU0VSVChj
b21wTGF5ZXItPmJhY2tpbmcoKSk7Ci0gICAgICAgIEludFJlY3QgY29tcEJvdW5kcyA9IGNoaWxk
LT5iYWNraW5nKCktPmNvbXBvc2l0ZWRCb3VuZHMoKTsKKyAgICAgICAgTGF5b3V0UmVjdCBjb21w
Qm91bmRzID0gY2hpbGQtPmJhY2tpbmcoKS0+Y29tcG9zaXRlZEJvdW5kcygpOwogCi0gICAgICAg
IEludFBvaW50IG9mZnNldDsKKyAgICAgICAgTGF5b3V0UG9pbnQgb2Zmc2V0OwogICAgICAgICBj
aGlsZC0+Y29udmVydFRvTGF5ZXJDb29yZHMoY29tcExheWVyLCBvZmZzZXQpOwogICAgICAgICBj
b21wQm91bmRzLm1vdmVCeShvZmZzZXQpOwogCkBAIC01NjUsNyArNTY1LDcgQEAgUmVuZGVyTGF5
ZXIqIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZW5jbAogICAgIHJldHVybiAwOwogfQogCi12b2lk
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRkVG9PdmVybGFwTWFwKE92ZXJsYXBNYXAmIG92ZXJs
YXBNYXAsIFJlbmRlckxheWVyKiBsYXllciwgSW50UmVjdCYgbGF5ZXJCb3VuZHMsIGJvb2wmIGJv
dW5kc0NvbXB1dGVkKQordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkZFRvT3ZlcmxhcE1h
cChPdmVybGFwTWFwJiBvdmVybGFwTWFwLCBSZW5kZXJMYXllciogbGF5ZXIsIExheW91dFJlY3Qm
IGxheWVyQm91bmRzLCBib29sJiBib3VuZHNDb21wdXRlZCkKIHsKICAgICBpZiAobGF5ZXItPmlz
Um9vdExheWVyKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTU3NCwxMSArNTc0LDExIEBAIHZvaWQg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphZGRUb092ZXJsYXAKICAgICAgICAgbGF5ZXJCb3VuZHMg
PSBsYXllci0+cmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QobGF5ZXIt
PmxvY2FsQm91bmRpbmdCb3goKSkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiAgICAgICAgIC8v
IEVtcHR5IHJlY3RzIG5ldmVyIGludGVyc2VjdCwgYnV0IHdlIG5lZWQgdGhlbSB0byBmb3IgdGhl
IHB1cnBvc2VzIG9mIG92ZXJsYXAgdGVzdGluZy4KICAgICAgICAgaWYgKGxheWVyQm91bmRzLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIGxheWVyQm91bmRzLnNldFNpemUoSW50U2l6ZSgxLCAxKSk7
CisgICAgICAgICAgICBsYXllckJvdW5kcy5zZXRTaXplKExheW91dFNpemUoMSwgMSkpOwogICAg
ICAgICBib3VuZHNDb21wdXRlZCA9IHRydWU7CiAgICAgfQogCi0gICAgSW50UmVjdCBjbGlwUmVj
dCA9IGxheWVyLT5iYWNrZ3JvdW5kQ2xpcFJlY3Qocm9vdFJlbmRlckxheWVyKCksIHRydWUpOwor
ICAgIExheW91dFJlY3QgY2xpcFJlY3QgPSBsYXllci0+YmFja2dyb3VuZENsaXBSZWN0KHJvb3RS
ZW5kZXJMYXllcigpLCB0cnVlKTsKICAgICBjbGlwUmVjdC5pbnRlcnNlY3QobGF5ZXJCb3VuZHMp
OwogICAgIG92ZXJsYXBNYXAuYWRkKGxheWVyLCBjbGlwUmVjdCk7CiB9CkBAIC01ODgsNyArNTg4
LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkZFRvT3ZlcmxhcAogICAgIGlmICgh
Y2FuQmVDb21wb3NpdGVkKGxheWVyKSB8fCBvdmVybGFwTWFwLmNvbnRhaW5zKGxheWVyKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgSW50UmVjdCBib3VuZHM7CisgICAgTGF5b3V0UmVjdCBib3Vu
ZHM7CiAgICAgYm9vbCBoYXZlQ29tcHV0ZWRCb3VuZHMgPSBmYWxzZTsKICAgICBhZGRUb092ZXJs
YXBNYXAob3ZlcmxhcE1hcCwgbGF5ZXIsIGJvdW5kcywgaGF2ZUNvbXB1dGVkQm91bmRzKTsKIApA
QCAtNjIyLDExICs2MjIsMTEgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkZFRvT3Zl
cmxhcAogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6Om92ZXJsYXBzQ29t
cG9zaXRlZExheWVycyhPdmVybGFwTWFwJiBvdmVybGFwTWFwLCBjb25zdCBJbnRSZWN0JiBsYXll
ckJvdW5kcykKK2Jvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpvdmVybGFwc0NvbXBvc2l0ZWRM
YXllcnMoT3ZlcmxhcE1hcCYgb3ZlcmxhcE1hcCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3Vu
ZHMpCiB7CiAgICAgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpPdmVybGFwTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBvdmVybGFwTWFwLmVuZCgpOwogICAgIGZvciAoUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpPdmVybGFwTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG92ZXJsYXBNYXAuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IEludFJlY3QmIGJvdW5kcyA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGJvdW5kcyA9IGl0LT5zZWNvbmQ7CiAg
ICAgICAgIGlmIChsYXllckJvdW5kcy5pbnRlcnNlY3RzKGJvdW5kcykpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC02NTUsMTMgKzY1NSwxMyBAQCB2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6Y29tcHV0ZUNvbXBvCiAgICAgYm9vbCBtdXN0T3ZlcmxhcENvbXBvc2l0ZWRM
YXllcnMgPSBjb21wb3NpdGluZ1N0YXRlLm1fc3VidHJlZUlzQ29tcG9zaXRpbmc7CiAKICAgICBi
b29sIGhhdmVDb21wdXRlZEJvdW5kcyA9IGZhbHNlOwotICAgIEludFJlY3QgYWJzQm91bmRzOwor
ICAgIExheW91dFJlY3QgYWJzQm91bmRzOwogICAgIGlmIChvdmVybGFwTWFwICYmICFvdmVybGFw
TWFwLT5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gSWYgd2UncmUgdGVzdGluZyBmb3Igb3Zlcmxh
cCwgd2Ugb25seSBuZWVkIHRvIGNvbXBvc2l0ZSBpZiB3ZSBvdmVybGFwIHNvbWV0aGluZyB0aGF0
IGlzIGFscmVhZHkgY29tcG9zaXRlZC4KICAgICAgICAgYWJzQm91bmRzID0gbGF5ZXItPnJlbmRl
cmVyKCktPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGxheWVyLT5sb2NhbEJvdW5kaW5n
Qm94KCkpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogICAgICAgICAvLyBFbXB0eSByZWN0cyBu
ZXZlciBpbnRlcnNlY3QsIGJ1dCB3ZSBuZWVkIHRoZW0gdG8gZm9yIHRoZSBwdXJwb3NlcyBvZiBv
dmVybGFwIHRlc3RpbmcuCiAgICAgICAgIGlmIChhYnNCb3VuZHMuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgYWJzQm91bmRzLnNldFNpemUoSW50U2l6ZSgxLCAxKSk7CisgICAgICAgICAgICBhYnNC
b3VuZHMuc2V0U2l6ZShMYXlvdXRTaXplKDEsIDEpKTsKICAgICAgICAgaGF2ZUNvbXB1dGVkQm91
bmRzID0gdHJ1ZTsKICAgICAgICAgbXVzdE92ZXJsYXBDb21wb3NpdGVkTGF5ZXJzID0gb3Zlcmxh
cHNDb21wb3NpdGVkTGF5ZXJzKCpvdmVybGFwTWFwLCBhYnNCb3VuZHMpOwogICAgIH0KQEAgLTk0
Niw3ICs5NDYsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVidWlsZENvbXBvCiAg
ICAgfQogfQogCi12b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZnJhbWVWaWV3RGlkQ2hhbmdl
TG9jYXRpb24oY29uc3QgSW50UG9pbnQmIGNvbnRlbnRzT2Zmc2V0KQordm9pZCBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OmZyYW1lVmlld0RpZENoYW5nZUxvY2F0aW9uKGNvbnN0IExheW91dFBvaW50
JiBjb250ZW50c09mZnNldCkKIHsKICAgICBpZiAobV9vdmVyZmxvd0NvbnRyb2xzSG9zdExheWVy
KQogICAgICAgICBtX292ZXJmbG93Q29udHJvbHNIb3N0TGF5ZXItPnNldFBvc2l0aW9uKGNvbnRl
bnRzT2Zmc2V0KTsKQEAgLTk1OCwxMyArOTU4LDEzIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpmcmFtZVZpZXdEaWQKICAgICAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3JlbmRl
clZpZXctPmZyYW1lVmlldygpOwogICAgICAgICBtX2NsaXBMYXllci0+c2V0U2l6ZShmcmFtZVZp
ZXctPnZpc2libGVDb250ZW50UmVjdChmYWxzZSAvKiBleGNsdWRlIHNjcm9sbGJhcnMgKi8pLnNp
emUoKSk7CiAKLSAgICAgICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSBmcmFtZVZpZXctPnNj
cm9sbFBvc2l0aW9uKCk7CisgICAgICAgIExheW91dFBvaW50IHNjcm9sbFBvc2l0aW9uID0gZnJh
bWVWaWV3LT5zY3JvbGxQb3NpdGlvbigpOwogICAgICAgICBtX3Njcm9sbExheWVyLT5zZXRQb3Np
dGlvbihGbG9hdFBvaW50KC1zY3JvbGxQb3NpdGlvbi54KCksIC1zY3JvbGxQb3NpdGlvbi55KCkp
KTsKICAgICAgICAgdXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycygpOwogICAgIH0KIH0KIAot
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZyYW1lVmlld0RpZFNjcm9sbChjb25zdCBJbnRQ
b2ludCYgc2Nyb2xsUG9zaXRpb24pCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZnJhbWVW
aWV3RGlkU2Nyb2xsKGNvbnN0IExheW91dFBvaW50JiBzY3JvbGxQb3NpdGlvbikKIHsKICAgICBp
ZiAobV9zY3JvbGxMYXllcikKICAgICAgICAgbV9zY3JvbGxMYXllci0+c2V0UG9zaXRpb24oRmxv
YXRQb2ludCgtc2Nyb2xsUG9zaXRpb24ueCgpLCAtc2Nyb2xsUG9zaXRpb24ueSgpKSk7CkBAIC0x
MTEwLDEyICsxMTEwLDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21w
b3MKIH0KIAogCi12b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVwYWludENvbXBvc2l0ZWRM
YXllcnNBYnNvbHV0ZVJlY3QoY29uc3QgSW50UmVjdCYgYWJzUmVjdCkKK3ZvaWQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpyZXBhaW50Q29tcG9zaXRlZExheWVyc0Fic29sdXRlUmVjdChjb25zdCBM
YXlvdXRSZWN0JiBhYnNSZWN0KQogewogICAgIHJlY3Vyc2l2ZVJlcGFpbnRMYXllclJlY3Qocm9v
dFJlbmRlckxheWVyKCksIGFic1JlY3QpOwogfQogCi12b2lkIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6cmVjdXJzaXZlUmVwYWludExheWVyUmVjdChSZW5kZXJMYXllciogbGF5ZXIsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVjdXJzaXZlUmVwYWlu
dExheWVyUmVjdChSZW5kZXJMYXllciogbGF5ZXIsIGNvbnN0IExheW91dFJlY3QmIHJlY3QpCiB7
CiAgICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIGRvZXMgbm90IHdvcmsgY29ycmVjdGx5IHdpdGgg
dHJhbnNmb3Jtcy4KICAgICBpZiAobGF5ZXItPmlzQ29tcG9zaXRlZCgpKQpAQCAtMTEyNiw3ICsx
MTI2LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlY3Vyc2l2ZVJlcAogICAgICAg
ICAgICAgc2l6ZV90IGxpc3RTaXplID0gbmVnWk9yZGVyTGlzdC0+c2l6ZSgpOwogICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7CiAgICAgICAgICAgICAg
ICAgUmVuZGVyTGF5ZXIqIGN1ckxheWVyID0gbmVnWk9yZGVyTGlzdC0+YXQoaSk7Ci0gICAgICAg
ICAgICAgICAgSW50UmVjdCBjaGlsZFJlY3QocmVjdCk7CisgICAgICAgICAgICAgICAgTGF5b3V0
UmVjdCBjaGlsZFJlY3QocmVjdCk7CiAgICAgICAgICAgICAgICAgY3VyTGF5ZXItPmNvbnZlcnRU
b0xheWVyQ29vcmRzKGxheWVyLCBjaGlsZFJlY3QpOwogICAgICAgICAgICAgICAgIHJlY3Vyc2l2
ZVJlcGFpbnRMYXllclJlY3QoY3VyTGF5ZXIsIGNoaWxkUmVjdCk7CiAgICAgICAgICAgICB9CkBA
IC0xMTM2LDcgKzExMzYsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVjdXJzaXZl
UmVwCiAgICAgICAgICAgICBzaXplX3QgbGlzdFNpemUgPSBwb3NaT3JkZXJMaXN0LT5zaXplKCk7
CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKICAg
ICAgICAgICAgICAgICBSZW5kZXJMYXllciogY3VyTGF5ZXIgPSBwb3NaT3JkZXJMaXN0LT5hdChp
KTsKLSAgICAgICAgICAgICAgICBJbnRSZWN0IGNoaWxkUmVjdChyZWN0KTsKKyAgICAgICAgICAg
ICAgICBMYXlvdXRSZWN0IGNoaWxkUmVjdChyZWN0KTsKICAgICAgICAgICAgICAgICBjdXJMYXll
ci0+Y29udmVydFRvTGF5ZXJDb29yZHMobGF5ZXIsIGNoaWxkUmVjdCk7CiAgICAgICAgICAgICAg
ICAgcmVjdXJzaXZlUmVwYWludExheWVyUmVjdChjdXJMYXllciwgY2hpbGRSZWN0KTsKICAgICAg
ICAgICAgIH0KQEAgLTExNDYsNyArMTE0Niw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpyZWN1cnNpdmVSZXAKICAgICAgICAgc2l6ZV90IGxpc3RTaXplID0gbm9ybWFsRmxvd0xpc3Qt
PnNpemUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7
CiAgICAgICAgICAgICBSZW5kZXJMYXllciogY3VyTGF5ZXIgPSBub3JtYWxGbG93TGlzdC0+YXQo
aSk7Ci0gICAgICAgICAgICBJbnRSZWN0IGNoaWxkUmVjdChyZWN0KTsKKyAgICAgICAgICAgIExh
eW91dFJlY3QgY2hpbGRSZWN0KHJlY3QpOwogICAgICAgICAgICAgY3VyTGF5ZXItPmNvbnZlcnRU
b0xheWVyQ29vcmRzKGxheWVyLCBjaGlsZFJlY3QpOwogICAgICAgICAgICAgcmVjdXJzaXZlUmVw
YWludExheWVyUmVjdChjdXJMYXllciwgY2hpbGRSZWN0KTsKICAgICAgICAgfQpAQCAtMTIwMiw3
ICsxMjAyLDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNsZWFyQmFja2luZwogdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVJvb3RMYXllclBvc2l0aW9uKCkKIHsKICAg
ICBpZiAobV9yb290Q29udGVudExheWVyKSB7Ci0gICAgICAgIGNvbnN0IEludFJlY3QmIGRvY3Vt
ZW50UmVjdCA9IG1fcmVuZGVyVmlldy0+ZG9jdW1lbnRSZWN0KCk7CisgICAgICAgIGNvbnN0IExh
eW91dFJlY3QmIGRvY3VtZW50UmVjdCA9IG1fcmVuZGVyVmlldy0+ZG9jdW1lbnRSZWN0KCk7CiAg
ICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+c2V0U2l6ZShkb2N1bWVudFJlY3Quc2l6ZSgpKTsK
ICAgICAgICAgbV9yb290Q29udGVudExheWVyLT5zZXRQb3NpdGlvbihkb2N1bWVudFJlY3QubG9j
YXRpb24oKSk7CiAgICAgfQpAQCAtMTM0Niw3ICsxMzQ2LDcgQEAgYm9vbCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmNsaXBwZWRCeUFuYwogICAgIGlmICghY29tcHV0ZUNsaXBSb290IHx8IGNvbXB1
dGVDbGlwUm9vdCA9PSBsYXllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW50UmVj
dCBiYWNrZ3JvdW5kUmVjdCA9IGxheWVyLT5iYWNrZ3JvdW5kQ2xpcFJlY3QoY29tcHV0ZUNsaXBS
b290LCB0cnVlKTsKKyAgICBMYXlvdXRSZWN0IGJhY2tncm91bmRSZWN0ID0gbGF5ZXItPmJhY2tn
cm91bmRDbGlwUmVjdChjb21wdXRlQ2xpcFJvb3QsIHRydWUpOwogICAgIHJldHVybiBiYWNrZ3Jv
dW5kUmVjdCAhPSBQYWludEluZm86OmluZmluaXRlUmVjdCgpOwogfQogCkBAIC0xNDM3LDcgKzE0
MzcsNyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wCiAgICAgICAg
IHJldHVybiBwbHVnaW5SZW5kZXJlci0+aGFzTGF5ZXIoKSAmJiBwbHVnaW5SZW5kZXJlci0+bGF5
ZXIoKS0+aXNDb21wb3NpdGVkKCk7CiAKICAgICAvLyBEb24ndCBnbyBpbnRvIGNvbXBvc2l0aW5n
IG1vZGUgaWYgaGVpZ2h0IG9yIHdpZHRoIGFyZSB6ZXJvLCBvciBzaXplIGlzIDF4MS4KLSAgICBJ
bnRSZWN0IGNvbnRlbnRCb3ggPSBwbHVnaW5SZW5kZXJlci0+Y29udGVudEJveFJlY3QoKTsKKyAg
ICBMYXlvdXRSZWN0IGNvbnRlbnRCb3ggPSBwbHVnaW5SZW5kZXJlci0+Y29udGVudEJveFJlY3Qo
KTsKICAgICByZXR1cm4gY29udGVudEJveC5oZWlnaHQoKSAqIGNvbnRlbnRCb3gud2lkdGgoKSA+
IDE7CiB9CiAKQEAgLTE0NjIsNyArMTQ2Miw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpyZXF1aXJlc0NvbXAKICAgICAgICAgcmV0dXJuIGZyYW1lUmVuZGVyZXItPmhhc0xheWVyKCkg
JiYgZnJhbWVSZW5kZXJlci0+bGF5ZXIoKS0+aXNDb21wb3NpdGVkKCk7CiAgICAgCiAgICAgLy8g
RG9uJ3QgZ28gaW50byBjb21wb3NpdGluZyBtb2RlIGlmIGhlaWdodCBvciB3aWR0aCBhcmUgemVy
by4KLSAgICBJbnRSZWN0IGNvbnRlbnRCb3ggPSBmcmFtZVJlbmRlcmVyLT5jb250ZW50Qm94UmVj
dCgpOworICAgIExheW91dFJlY3QgY29udGVudEJveCA9IGZyYW1lUmVuZGVyZXItPmNvbnRlbnRC
b3hSZWN0KCk7CiAgICAgcmV0dXJuIGNvbnRlbnRCb3guaGVpZ2h0KCkgKiBjb250ZW50Qm94Lndp
ZHRoKCkgPiAwOwogfQogCkBAIC0xNTIyLDMxICsxNTIyLDMxIEBAIGJvb2wgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpyZXF1aXJlc1Njcm8KICAgICAgICAgfHwgYXR0YWNobWVudCA9PSBSb290TGF5
ZXJBdHRhY2hlZFZpYUVuY2xvc2luZ0ZyYW1lOyAvLyBhIGNvbXBvc2l0ZWQgZnJhbWUgb24gTWFj
CiB9CiAKLXN0YXRpYyB2b2lkIHBhaW50U2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNsaXApCitzdGF0aWMgdm9p
ZCBwYWludFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBjbGlwKQogewogICAgIGlmICghc2Nyb2xsYmFyKQog
ICAgICAgICByZXR1cm47CiAKICAgICBjb250ZXh0LnNhdmUoKTsKLSAgICBjb25zdCBJbnRSZWN0
JiBzY3JvbGxiYXJSZWN0ID0gc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKTsKKyAgICBjb25zdCBMYXlv
dXRSZWN0JiBzY3JvbGxiYXJSZWN0ID0gc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKTsKICAgICBjb250
ZXh0LnRyYW5zbGF0ZSgtc2Nyb2xsYmFyUmVjdC54KCksIC1zY3JvbGxiYXJSZWN0LnkoKSk7Ci0g
ICAgSW50UmVjdCB0cmFuc2Zvcm1lZENsaXAgPSBjbGlwOworICAgIExheW91dFJlY3QgdHJhbnNm
b3JtZWRDbGlwID0gY2xpcDsKICAgICB0cmFuc2Zvcm1lZENsaXAubW92ZUJ5KHNjcm9sbGJhclJl
Y3QubG9jYXRpb24oKSk7CiAgICAgc2Nyb2xsYmFyLT5wYWludCgmY29udGV4dCwgdHJhbnNmb3Jt
ZWRDbGlwKTsKICAgICBjb250ZXh0LnJlc3RvcmUoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXll
ciwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwg
Y29uc3QgSW50UmVjdCYgY2xpcCkKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpwYWludENv
bnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IExheW91dFJlY3Qm
IGNsaXApCiB7CiAgICAgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbGF5ZXJGb3JIb3Jpem9udGFsU2Ny
b2xsYmFyKCkpCiAgICAgICAgIHBhaW50U2Nyb2xsYmFyKG1fcmVuZGVyVmlldy0+ZnJhbWVWaWV3
KCktPmhvcml6b250YWxTY3JvbGxiYXIoKSwgY29udGV4dCwgY2xpcCk7CiAgICAgZWxzZSBpZiAo
Z3JhcGhpY3NMYXllciA9PSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpCiAgICAgICAgIHBh
aW50U2Nyb2xsYmFyKG1fcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCktPnZlcnRpY2FsU2Nyb2xsYmFy
KCksIGNvbnRleHQsIGNsaXApOwogICAgIGVsc2UgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbGF5ZXJG
b3JTY3JvbGxDb3JuZXIoKSkgewotICAgICAgICBjb25zdCBJbnRSZWN0JiBzY3JvbGxDb3JuZXIg
PSBtX3JlbmRlclZpZXctPmZyYW1lVmlldygpLT5zY3JvbGxDb3JuZXJSZWN0KCk7CisgICAgICAg
IGNvbnN0IExheW91dFJlY3QmIHNjcm9sbENvcm5lciA9IG1fcmVuZGVyVmlldy0+ZnJhbWVWaWV3
KCktPnNjcm9sbENvcm5lclJlY3QoKTsKICAgICAgICAgY29udGV4dC5zYXZlKCk7CiAgICAgICAg
IGNvbnRleHQudHJhbnNsYXRlKC1zY3JvbGxDb3JuZXIueCgpLCAtc2Nyb2xsQ29ybmVyLnkoKSk7
Ci0gICAgICAgIEludFJlY3QgdHJhbnNmb3JtZWRDbGlwID0gY2xpcDsKKyAgICAgICAgTGF5b3V0
UmVjdCB0cmFuc2Zvcm1lZENsaXAgPSBjbGlwOwogICAgICAgICB0cmFuc2Zvcm1lZENsaXAubW92
ZUJ5KHNjcm9sbENvcm5lci5sb2NhdGlvbigpKTsKICAgICAgICAgbV9yZW5kZXJWaWV3LT5mcmFt
ZVZpZXcoKS0+cGFpbnRTY3JvbGxDb3JuZXIoJmNvbnRleHQsIHRyYW5zZm9ybWVkQ2xpcCk7CiAg
ICAgICAgIGNvbnRleHQucmVzdG9yZSgpOwpAQCAtMTczNywxNCArMTczNywxNCBAQCB2b2lkIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6ZGVzdHJveVJvb3RMCiAgICAgICAgIG1fbGF5ZXJGb3JIb3Jp
em9udGFsU2Nyb2xsYmFyLT5yZW1vdmVGcm9tUGFyZW50KCk7CiAgICAgICAgIG1fbGF5ZXJGb3JI
b3Jpem9udGFsU2Nyb2xsYmFyID0gbnVsbHB0cjsKICAgICAgICAgaWYgKFNjcm9sbGJhciogaG9y
aXpvbnRhbFNjcm9sbGJhciA9IG1fcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCktPnZlcnRpY2FsU2Ny
b2xsYmFyKCkpCi0gICAgICAgICAgICBtX3JlbmRlclZpZXctPmZyYW1lVmlldygpLT5pbnZhbGlk
YXRlU2Nyb2xsYmFyKGhvcml6b250YWxTY3JvbGxiYXIsIEludFJlY3QoSW50UG9pbnQoMCwgMCks
IGhvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLnNpemUoKSkpOworICAgICAgICAgICAg
bV9yZW5kZXJWaWV3LT5mcmFtZVZpZXcoKS0+aW52YWxpZGF0ZVNjcm9sbGJhcihob3Jpem9udGFs
U2Nyb2xsYmFyLCBMYXlvdXRSZWN0KExheW91dFBvaW50KDAsIDApLCBob3Jpem9udGFsU2Nyb2xs
YmFyLT5mcmFtZVJlY3QoKS5zaXplKCkpKTsKICAgICB9CiAKICAgICBpZiAobV9sYXllckZvclZl
cnRpY2FsU2Nyb2xsYmFyKSB7CiAgICAgICAgIG1fbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhci0+
cmVtb3ZlRnJvbVBhcmVudCgpOwogICAgICAgICBtX2xheWVyRm9yVmVydGljYWxTY3JvbGxiYXIg
PSBudWxscHRyOwogICAgICAgICBpZiAoU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IG1f
cmVuZGVyVmlldy0+ZnJhbWVWaWV3KCktPnZlcnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAgICAg
ICBtX3JlbmRlclZpZXctPmZyYW1lVmlldygpLT5pbnZhbGlkYXRlU2Nyb2xsYmFyKHZlcnRpY2Fs
U2Nyb2xsYmFyLCBJbnRSZWN0KEludFBvaW50KDAsIDApLCB2ZXJ0aWNhbFNjcm9sbGJhci0+ZnJh
bWVSZWN0KCkuc2l6ZSgpKSk7CisgICAgICAgICAgICBtX3JlbmRlclZpZXctPmZyYW1lVmlldygp
LT5pbnZhbGlkYXRlU2Nyb2xsYmFyKHZlcnRpY2FsU2Nyb2xsYmFyLCBMYXlvdXRSZWN0KExheW91
dFBvaW50KDAsIDApLCB2ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkuc2l6ZSgpKSk7CiAg
ICAgfQogCiAgICAgaWYgKG1fbGF5ZXJGb3JTY3JvbGxDb3JuZXIpIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgJKHJldmlzaW9u
IDkzMzQzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDcgQEAgcHVibGljOgogICAgIGJvb2wg
bmVlZHNDb250ZW50c0NvbXBvc2l0aW5nTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXIqKSBjb25zdDsK
ICAgICAvLyBSZXR1cm4gdGhlIGJvdW5kaW5nIGJveCByZXF1aXJlZCBmb3IgY29tcG9zaXRpbmcg
bGF5ZXIgYW5kIGl0cyBjaGlsZGVybiwgcmVsYXRpdmUgdG8gYW5jZXN0b3JMYXllci4KICAgICAv
LyBJZiBsYXllckJvdW5kaW5nQm94IGlzIG5vdCAwLCBvbiByZXR1cm4gaXQgY29udGFpbnMgdGhl
IGJvdW5kaW5nIGJveCBvZiB0aGlzIGxheWVyIG9ubHkuCi0gICAgSW50UmVjdCBjYWxjdWxhdGVD
b21wb3NpdGVkQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiBsYXllciwgY29uc3QgUmVuZGVyTGF5
ZXIqIGFuY2VzdG9yTGF5ZXIpOworICAgIExheW91dFJlY3QgY2FsY3VsYXRlQ29tcG9zaXRlZEJv
dW5kcyhjb25zdCBSZW5kZXJMYXllciosIGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVy
KTsKIAogICAgIC8vIFJlcGFpbnQgdGhlIGFwcHJvcHJpYXRlIGxheWVycyB3aGVuIHRoZSBnaXZl
biBSZW5kZXJMYXllciBzdGFydHMgb3Igc3RvcHMgYmVpbmcgY29tcG9zaXRlZC4KICAgICB2b2lk
IHJlcGFpbnRPbkNvbXBvc2l0aW5nQ2hhbmdlKFJlbmRlckxheWVyKik7CkBAIC0xMzIsNyArMTMy
LDcgQEAgcHVibGljOgogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdOb25TdGFja2luZ0NsaXBw
aW5nTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyKSBjb25zdDsKIAogICAgIC8vIFJlcGFp
bnQgcGFydHMgb2YgYWxsIGNvbXBvc2l0ZWQgbGF5ZXJzIHRoYXQgaW50ZXJzZWN0IHRoZSBnaXZl
biBhYnNvbHV0ZSByZWN0YW5nbGUuCi0gICAgdm9pZCByZXBhaW50Q29tcG9zaXRlZExheWVyc0Fi
c29sdXRlUmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCByZXBhaW50Q29tcG9zaXRlZExh
eWVyc0Fic29sdXRlUmVjdChjb25zdCBMYXlvdXRSZWN0Jik7CiAKICAgICBSZW5kZXJMYXllciog
cm9vdFJlbmRlckxheWVyKCkgY29uc3Q7CiAgICAgR3JhcGhpY3NMYXllciogcm9vdEdyYXBoaWNz
TGF5ZXIoKSBjb25zdDsKQEAgLTE3NSw5ICsxNzUsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJv
b2wgcGFyZW50RnJhbWVDb250ZW50TGF5ZXJzKFJlbmRlclBhcnQqKTsKIAogICAgIC8vIFVwZGF0
ZSB0aGUgZ2VvbWV0cnkgb2YgdGhlIGxheWVycyB1c2VkIGZvciBjbGlwcGluZyBhbmQgc2Nyb2xs
aW5nIGluIGZyYW1lcy4KLSAgICB2b2lkIGZyYW1lVmlld0RpZENoYW5nZUxvY2F0aW9uKGNvbnN0
IEludFBvaW50JiBjb250ZW50c09mZnNldCk7CisgICAgdm9pZCBmcmFtZVZpZXdEaWRDaGFuZ2VM
b2NhdGlvbihjb25zdCBMYXlvdXRQb2ludCYgY29udGVudHNPZmZzZXQpOwogICAgIHZvaWQgZnJh
bWVWaWV3RGlkQ2hhbmdlU2l6ZSgpOwotICAgIHZvaWQgZnJhbWVWaWV3RGlkU2Nyb2xsKGNvbnN0
IEludFBvaW50JiA9IEludFBvaW50KCkpOworICAgIHZvaWQgZnJhbWVWaWV3RGlkU2Nyb2xsKGNv
bnN0IExheW91dFBvaW50JiA9IExheW91dFBvaW50KCkpOwogCiAgICAgU3RyaW5nIGxheWVyVHJl
ZUFzVGV4dChib29sIHNob3dEZWJ1Z0luZm8gPSBmYWxzZSk7CiAKQEAgLTIwMiw3ICsyMDIsNyBA
QCBwcml2YXRlOgogICAgIC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQgSW1wbGVtZW50YXRpb24KICAg
ICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBHcmFwaGljc0xheWVy
KiwgZG91YmxlKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0
IEdyYXBoaWNzTGF5ZXIqKSB7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9Ci0gICAgdmlydHVhbCB2
b2lkIHBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYs
IEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVh
bCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4
dCYsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBMYXlvdXRSZWN0Jik7CiAKICAg
ICAvLyBUaGVzZSBjYWxscyByZXR1cm4gZmFsc2UgYWx3YXlzLiBUaGV5IGFyZSBzYXlpbmcgdGhh
dCB0aGUgbGF5ZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsaWVudAogICAgIC8vICh0aGUgY2xp
cExheWVyIGFuZCBzY3JvbGxMYXllcikgc2hvdWxkIG5ldmVyIHNob3cgZGVidWdnaW5nIGluZm8u
CkBAIC0yMjIsMTIgKzIyMiwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJCYWNraW5nRm9y
TGF5ZXJJbmNsdWRpbmdEZXNjZW5kYW50cyhSZW5kZXJMYXllciopOwogCiAgICAgLy8gUmVwYWlu
dCB0aGUgZ2l2ZW4gcmVjdCAod2hpY2ggaXMgbGF5ZXIncyBjb29yZHMpLCBhbmQgcmVnaW9ucyBv
ZiBjaGlsZCBsYXllcnMgdGhhdCBpbnRlcnNlY3QgdGhhdCByZWN0LgotICAgIHZvaWQgcmVjdXJz
aXZlUmVwYWludExheWVyUmVjdChSZW5kZXJMYXllciogbGF5ZXIsIGNvbnN0IEludFJlY3QmIHJl
Y3QpOworICAgIHZvaWQgcmVjdXJzaXZlUmVwYWludExheWVyUmVjdChSZW5kZXJMYXllciosIGNv
bnN0IExheW91dFJlY3QmKTsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxSZW5kZXJMYXllciosIElu
dFJlY3Q+IE92ZXJsYXBNYXA7Ci0gICAgdm9pZCBhZGRUb092ZXJsYXBNYXAoT3ZlcmxhcE1hcCYs
IFJlbmRlckxheWVyKiwgSW50UmVjdCYgbGF5ZXJCb3VuZHMsIGJvb2wmIGJvdW5kc0NvbXB1dGVk
KTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVuZGVyTGF5ZXIqLCBMYXlvdXRSZWN0PiBPdmVybGFw
TWFwOworICAgIHZvaWQgYWRkVG9PdmVybGFwTWFwKE92ZXJsYXBNYXAmLCBSZW5kZXJMYXllcios
IExheW91dFJlY3QmIGxheWVyQm91bmRzLCBib29sJiBib3VuZHNDb21wdXRlZCk7CiAgICAgdm9p
ZCBhZGRUb092ZXJsYXBNYXBSZWN1cnNpdmUoT3ZlcmxhcE1hcCYsIFJlbmRlckxheWVyKik7Ci0g
ICAgc3RhdGljIGJvb2wgb3ZlcmxhcHNDb21wb3NpdGVkTGF5ZXJzKE92ZXJsYXBNYXAmLCBjb25z
dCBJbnRSZWN0JiBsYXllckJvdW5kcyk7CisgICAgc3RhdGljIGJvb2wgb3ZlcmxhcHNDb21wb3Np
dGVkTGF5ZXJzKE92ZXJsYXBNYXAmLCBjb25zdCBMYXlvdXRSZWN0JiBsYXllckJvdW5kcyk7CiAK
ICAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzVGltZXJGaXJlZChUaW1lcjxSZW5kZXJM
YXllckNvbXBvc2l0b3I+Kik7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>