<?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>162542</bug_id>
          
          <creation_ts>2016-09-25 19:44:14 -0700</creation_ts>
          <short_desc>[EFL] Adjust EFL indentation to EFL MiniBrowser</short_desc>
          <delta_ts>2016-09-25 20:24:26 -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>WebKit EFL</component>
          <version>WebKit 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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gyuyoung Kim">gyuyoung.kim</reporter>
          <assigned_to name="Gyuyoung Kim">gyuyoung.kim</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>lucas.de.marchi</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1233298</commentid>
    <comment_count>0</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2016-09-25 19:44:14 -0700</bug_when>
    <thetext>Some functions wasn&apos;t applied EFL coding style in prefix fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233299</commentid>
    <comment_count>1</comment_count>
      <attachid>289793</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2016-09-25 19:44:54 -0700</bug_when>
    <thetext>Created attachment 289793
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233300</commentid>
    <comment_count>2</comment_count>
      <attachid>289793</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-25 19:46:33 -0700</bug_when>
    <thetext>Comment on attachment 289793
Patch

Rejecting attachment 289793 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 289793, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Parsed 2 diffs from patch file(s).
patching file Tools/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Tools/MiniBrowser/efl/main.c
Hunk #2 FAILED at 664.
1 out of 2 hunks FAILED -- saving rejects to file Tools/MiniBrowser/efl/main.c.rej

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Full output: http://webkit-queues.webkit.org/results/2145038</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233301</commentid>
    <comment_count>3</comment_count>
      <attachid>289794</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2016-09-25 19:51:59 -0700</bug_when>
    <thetext>Created attachment 289794
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233305</commentid>
    <comment_count>4</comment_count>
      <attachid>289794</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-25 20:24:21 -0700</bug_when>
    <thetext>Comment on attachment 289794
Patch

Clearing flags on attachment: 289794

Committed r206364: &lt;http://trac.webkit.org/changeset/206364&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233306</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-25 20:24:26 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289793</attachid>
            <date>2016-09-25 19:44:54 -0700</date>
            <delta_ts>2016-09-25 19:51:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162542-20160926114158.patch</filename>
            <type>text/plain</type>
            <size>54205</size>
            <attacher name="Gyuyoung Kim">gyuyoung.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2MTk1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNTdmYzNlNWVhYWU0M2VjMGFhMGM0NGI5N2Y4MDU3NjEx
MGQ1NWYxNi4uOTYxYzhjNjM4MjFjYTY3ZGFlNmQ5MTZlMTFiNGYwYmExNmYyZjE1MiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYz
IEBACisyMDE2LTA5LTI1ICBHeXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBbRUZMXSBBZGp1c3QgRUZMIGluZGVudGF0aW9uIHRvIEVGTCBNaW5pQnJvd3Nl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNTQy
CisKKyAgICAgICAgVW5yZXZpZXdlZCwgRUZMIHNpbXBsZSBjb2Rpbmcgc3R5bGUgZml4LgorCisg
ICAgICAgIFNvbWUgZnVuY3Rpb25zIHdhc24ndCBhcHBsaWVkIEVGTCBjb2Rpbmcgc3R5bGUgaW4g
cHJlZml4IGZpeC4KKworICAgICAgICAqIE1pbmlCcm93c2VyL2VmbC9tYWluLmM6CisgICAgICAg
IChfa2V5X2Rvd25fY2IpOgorICAgICAgICAodmlld19mb2N1c19zZXQpOgorICAgICAgICAoX21v
dXNlX2Rvd25fY2IpOgorICAgICAgICAodGl0bGVfc2V0KToKKyAgICAgICAgKF90aXRsZV9jaGFu
Z2VkX2NiKToKKyAgICAgICAgKF91cmxfY2hhbmdlZF9jYik6CisgICAgICAgIChfYmFja19mb3J3
YXJkX2xpc3RfY2hhbmdlZF9jYik6CisgICAgICAgIChfcHJvZ3Jlc3NfY2IpOgorICAgICAgICAo
X2Vycm9yX2NiKToKKyAgICAgICAgKF9kb3dubG9hZF9yZXF1ZXN0X2NiKToKKyAgICAgICAgKGNs
b3NlX2ZpbGVfcGlja2VyKToKKyAgICAgICAgKF9maWxlcGlja2VyX3BhcmVudF9kZWxldGlvbl9j
Yik6CisgICAgICAgIChfZmlsZXBpY2tlcl9kZWxldGlvbl9jYik6CisgICAgICAgIChfZmlsZXNl
bGVjdG9yX2RvbmVfY2IpOgorICAgICAgICAoX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NiKToKKyAg
ICAgICAgKF9kb3dubG9hZF9maW5pc2hlZF9jYik6CisgICAgICAgIChfZG93bmxvYWRfZmFpbGVk
X2NiKToKKyAgICAgICAgKF9jb2xvcl9jaGFuZ2VkX2NiKToKKyAgICAgICAgKF9jb2xvcl9pdGVt
X3NlbGVjdGVkX2NiKToKKyAgICAgICAgKF9jb2xvcl9waWNrZXJfb2tfY2xpY2tlZF9jYik6Cisg
ICAgICAgIChfY29sb3JfcGlja2VyX2NhbmNlbF9jbGlja2VkX2NiKToKKyAgICAgICAgKF9jb2xv
cl9waWNrZXJfZGlzbWlzc19jYik6CisgICAgICAgIChfY29sb3JfcGlja2VyX3JlcXVlc3RfY2Ip
OgorICAgICAgICAocXVpdCk6CisgICAgICAgIChoYXNfc2NoZW1lKToKKyAgICAgICAgKHVybF9m
cm9tX3VzZXJfaW5wdXQpOgorICAgICAgICAodXJsX2xvYWRfZnJvbV91c2VyX2lucHV0KToKKyAg
ICAgICAgKF91cmxfYmFyX2FjdGl2YXRlZF9jYik6CisgICAgICAgIChfdXJsX2Jhcl9jbGlja2Vk
X2NiKToKKyAgICAgICAgKF9zZWFyY2hfZmllbGRfYWJvcnRlZF9jYik6CisgICAgICAgIChfc2Vh
cmNoX2ZpZWxkX2FjdGl2YXRlZF9jYik6CisgICAgICAgIChfc2VhcmNoX2ZpZWxkX2NsaWNrZWRf
Y2IpOgorICAgICAgICAoX2JhY2tfYnV0dG9uX2NsaWNrZWRfY2IpOgorICAgICAgICAoX2Zvcndh
cmRfYnV0dG9uX2NsaWNrZWRfY2IpOgorICAgICAgICAoX3NlYXJjaF9iYWNrd2FyZF9idXR0b25f
Y2xpY2tlZF9jYik6CisgICAgICAgIChfc2VhcmNoX2ZvcndhcmRfYnV0dG9uX2NsaWNrZWRfY2Ip
OgorICAgICAgICAoX3NlYXJjaF9jYXNlX29wdGlvbl9jaGFuZ2VkKToKKyAgICAgICAgKF9zZWFy
Y2hfd29yZF9zdGFydF9vcHRpb25fY2hhbmdlZF9jYik6CisgICAgICAgIChfc2VhcmNoX2Nsb3Nl
X2J1dHRvbl9jbGlja2VkX2NiKToKKyAgICAgICAgKF9yZWZyZXNoX2J1dHRvbl9jbGlja2VkX2Ni
KToKKyAgICAgICAgKF9zdG9wX2J1dHRvbl9jbGlja2VkX2NiKToKKyAgICAgICAgKGxpc3RfaXRl
bV9sYWJlbF9nZXQpOgorICAgICAgICAoX2xpc3RfaXRlbV9zZWxlY3RfY2IpOgorICAgICAgICAo
bmF2aWdhdGlvbl9idXR0b25fbG9uZ3ByZXNzX3Byb2Nlc3MpOgorICAgICAgICAoX2ZvcndhcmRf
YnV0dG9uX2xvbmdwcmVzc19jYik6CisgICAgICAgIChfYmFja19idXR0b25fbG9uZ3ByZXNzX2Ni
KToKKyAgICAgICAgKHF1aXRfZXZlbnRfbG9vcCk6CisgICAgICAgIChfb2tfY2xpY2tlZF9jYik6
CisgICAgICAgIChfZmlsZV9lbnRyeV9kaWFsb2dfc2hvdyk6CisKIDIwMTYtMDktMjAgIEFha2Fz
aCBKYWluICA8YWFrYXNoX2phaW5AYXBwbGUuY29tPgogCiAgICAgICAgIGVuYWJsZSByZW1vdGVf
YXBpIChmb3IgZGVidWdnaW5nKSBpbiBmbGFraW5lc3MgZGFzaGJvYXJkIGFwcApkaWZmIC0tZ2l0
IGEvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYyBiL1Rvb2xzL01pbmlCcm93c2VyL2VmbC9t
YWluLmMKaW5kZXggMzM2MDZkZTAyMTk0YWEwMjBkNGQyMWJlZWQ4Y2I4MjU1NGRiMTNjZi4uNmVm
ZmFjMGJiMzA3Mjc3NDYyMjM1NGNiNmNjNWY4ZjU0MWQ4OTlkMSAxMDA2NDQKLS0tIGEvVG9vbHMv
TWluaUJyb3dzZXIvZWZsL21haW4uYworKysgYi9Ub29scy9NaW5pQnJvd3Nlci9lZmwvbWFpbi5j
CkBAIC01OTYsOSArNTk2LDkgQEAgX2tleV9kb3duX2NiKHZvaWQgKnVzZXJfZGF0YSwgRXZhcyAq
ZSwgRXZhc19PYmplY3QgKmV3a192aWV3LCB2b2lkICpldmVudF9pbmZvKQogICAgICBFd2tfUGFn
aW5hdGlvbl9Nb2RlIG1vZGUgPSAgZXdrX3ZpZXdfcGFnaW5hdGlvbl9tb2RlX2dldChld2tfdmll
dyk7CiAgICAgIG1vZGUgPSAobW9kZSArIDEpICUgKEVXS19QQUdJTkFUSU9OX01PREVfQk9UVE9N
X1RPX1RPUCArIDEpOwogICAgICBpZiAoZXdrX3ZpZXdfcGFnaW5hdGlvbl9tb2RlX3NldChld2tf
dmlldywgbW9kZSkpCi0gICAgICAgICBJTkZPKCJDaGFuZ2UgUGFnaW5hdGlvbiBNb2RlIChGNykg
d2FzIHByZXNzZWQsIGNoYW5nZWQgdG86ICVkIiwgbW9kZSk7CisgICAgICAgSU5GTygiQ2hhbmdl
IFBhZ2luYXRpb24gTW9kZSAoRjcpIHdhcyBwcmVzc2VkLCBjaGFuZ2VkIHRvOiAlZCIsIG1vZGUp
OwogICAgICBlbHNlCi0gICAgICAgICBJTkZPKCJDaGFuZ2UgUGFnaW5hdGlvbiBNb2RlIChGNykg
d2FzIHByZXNzZWQsIGJ1dCBOT1QgY2hhbmdlZCEiKTsKKyAgICAgICBJTkZPKCJDaGFuZ2UgUGFn
aW5hdGlvbiBNb2RlIChGNykgd2FzIHByZXNzZWQsIGJ1dCBOT1QgY2hhbmdlZCEiKTsKICAgIH0g
ZWxzZSBpZiAoIXN0cmNtcChldi0+a2V5LCAiRjExIikpIHsKICAgICAgSU5GTygiRnVsbHNjcmVl
biAoRjExKSB3YXMgcHJlc3NlZCwgdG9nZ2xpbmcgd2luZG93L2Z1bGxzY3JlZW4uIik7CiAgICAg
IHRvZ2dsZV93aW5kb3dfZnVsbHNjcmVlbih3aW5kb3csICFlbG1fd2luX2Z1bGxzY3JlZW5fZ2V0
KHdpbmRvdy0+ZWxtX3dpbmRvdykpOwpAQCAtNjY0LDc2NiArNjY0LDc2OSBAQCBfa2V5X2Rvd25f
Y2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzICplLCBFdmFzX09iamVjdCAqZXdrX3ZpZXcsIHZvaWQg
KmV2ZW50X2luZm8pCiBzdGF0aWMgdm9pZAogdmlld19mb2N1c19zZXQoQnJvd3Nlcl9XaW5kb3cg
KndpbmRvdywgRWluYV9Cb29sIGZvY3VzKQogewotICAgIC8qIFdlIHN0ZWFsIGZvY3VzIGF3YXkg
ZnJvbSBlbG0ncyBmb2N1cyBtb2RlbCBhbmQgc3RhcnQgdG8gZG8gdGhpbmdzCi0gICAgICogbWFu
dWFsbHkgaGVyZSwgc28gZWxtIG5vdyBoYXMgbm8gY2x1ZSB3aGF0J3MgdXAuIFRlbGwgZWxtIHRo
YXQgaXRzCi0gICAgICogdG9wbGV2ZWwgd2lkZ2V0IGlzIHRvIGJlIHVuZm9jdXNlZCBzbyBlbG0g
Z2l2ZXMgdXAgdGhlIGZvY3VzICovCi0gICAgZWxtX29iamVjdF9mb2N1c19zZXQoZWxtX29iamVj
dF90b3Bfd2lkZ2V0X2dldCh3aW5kb3ctPmVsbV93aW5kb3cpLCBFSU5BX0ZBTFNFKTsKLSAgICBl
dmFzX29iamVjdF9mb2N1c19zZXQod2luZG93LT5ld2tfdmlldywgZm9jdXMpOworICAgLyogV2Ug
c3RlYWwgZm9jdXMgYXdheSBmcm9tIGVsbSdzIGZvY3VzIG1vZGVsIGFuZCBzdGFydCB0byBkbyB0
aGluZ3MKKyAgICAqIG1hbnVhbGx5IGhlcmUsIHNvIGVsbSBub3cgaGFzIG5vIGNsdWUgd2hhdCdz
IHVwLiBUZWxsIGVsbSB0aGF0IGl0cworICAgICogdG9wbGV2ZWwgd2lkZ2V0IGlzIHRvIGJlIHVu
Zm9jdXNlZCBzbyBlbG0gZ2l2ZXMgdXAgdGhlIGZvY3VzICovCisgICBlbG1fb2JqZWN0X2ZvY3Vz
X3NldChlbG1fb2JqZWN0X3RvcF93aWRnZXRfZ2V0KHdpbmRvdy0+ZWxtX3dpbmRvdyksIEVJTkFf
RkFMU0UpOworICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KHdpbmRvdy0+ZXdrX3ZpZXcsIGZvY3Vz
KTsKIH0KIAogc3RhdGljIHZvaWQKIF9tb3VzZV9kb3duX2NiKHZvaWQgKnVzZXJfZGF0YSwgRXZh
cyAqZSwgRXZhc19PYmplY3QgKmV3a192aWV3LCB2b2lkICpldmVudF9pbmZvKQogewotICAgIEJy
b3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7Ci0gICAg
RXZhc19FdmVudF9Nb3VzZV9Eb3duICpldiA9IChFdmFzX0V2ZW50X01vdXNlX0Rvd24gKilldmVu
dF9pbmZvOworICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVz
ZXJfZGF0YTsKKyAgIEV2YXNfRXZlbnRfTW91c2VfRG93biAqZXYgPSAoRXZhc19FdmVudF9Nb3Vz
ZV9Eb3duICopZXZlbnRfaW5mbzsKIAotICAgIC8qIENsZWFyIHNlbGVjdGlvbiBmcm9tIHRoZSBV
UkwgYmFyICovCi0gICAgZWxtX2VudHJ5X3NlbGVjdF9ub25lKHdpbmRvdy0+dXJsX2Jhcik7Cisg
ICAvKiBDbGVhciBzZWxlY3Rpb24gZnJvbSB0aGUgVVJMIGJhciAqLworICAgZWxtX2VudHJ5X3Nl
bGVjdF9ub25lKHdpbmRvdy0+dXJsX2Jhcik7CiAKLSAgICBpZiAobG9uZ3ByZXNzX2VuYWJsZWQp
Ci0gICAgICAgIGhpc3RvcnlfbGlzdF9oaWRlKHdpbmRvdyk7Ci0gICAgaWYgKGV2LT5idXR0b24g
PT0gMSkKLSAgICAgICAgdmlld19mb2N1c19zZXQod2luZG93LCBFSU5BX1RSVUUpOwotICAgIGVs
c2UgaWYgKGV2LT5idXR0b24gPT0gMikKLSAgICAgICAgdmlld19mb2N1c19zZXQod2luZG93LCAh
ZXZhc19vYmplY3RfZm9jdXNfZ2V0KGV3a192aWV3KSk7CisgICBpZiAobG9uZ3ByZXNzX2VuYWJs
ZWQpCisgICAgIGhpc3RvcnlfbGlzdF9oaWRlKHdpbmRvdyk7CisgICBpZiAoZXYtPmJ1dHRvbiA9
PSAxKQorICAgICB2aWV3X2ZvY3VzX3NldCh3aW5kb3csIEVJTkFfVFJVRSk7CisgICBlbHNlIGlm
IChldi0+YnV0dG9uID09IDIpCisgICAgIHZpZXdfZm9jdXNfc2V0KHdpbmRvdywgIWV2YXNfb2Jq
ZWN0X2ZvY3VzX2dldChld2tfdmlldykpOwogfQogCiBzdGF0aWMgdm9pZAogdGl0bGVfc2V0KEV2
YXNfT2JqZWN0ICplbG1fd2luZG93LCBjb25zdCBjaGFyICp0aXRsZSwgaW50IHByb2dyZXNzKQog
ewotICAgIEVpbmFfU3RyYnVmICpidWZmZXI7CisgICBFaW5hX1N0cmJ1ZiAqYnVmZmVyOwogCi0g
ICAgaWYgKCF0aXRsZSB8fCAhKnRpdGxlKSB7Ci0gICAgICAgIGVsbV93aW5fdGl0bGVfc2V0KGVs
bV93aW5kb3csIEFQUF9OQU1FKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgIGlmICghdGl0
bGUgfHwgISp0aXRsZSkgeworICAgICBlbG1fd2luX3RpdGxlX3NldChlbG1fd2luZG93LCBBUFBf
TkFNRSk7CisgICAgIHJldHVybjsKKyAgIH0KIAotICAgIGJ1ZmZlciA9IGVpbmFfc3RyYnVmX25l
dygpOwotICAgIGlmIChwcm9ncmVzcyA8IDEwMCkKLSAgICAgICAgZWluYV9zdHJidWZfYXBwZW5k
X3ByaW50ZihidWZmZXIsICIlcyAoJWQlJSkgLSAlcyIsIHRpdGxlLCBwcm9ncmVzcywgQVBQX05B
TUUpOwotICAgIGVsc2UKLSAgICAgICAgZWluYV9zdHJidWZfYXBwZW5kX3ByaW50ZihidWZmZXIs
ICIlcyAtICVzIiwgdGl0bGUsIEFQUF9OQU1FKTsKKyAgIGJ1ZmZlciA9IGVpbmFfc3RyYnVmX25l
dygpOworICAgaWYgKHByb2dyZXNzIDwgMTAwKQorICAgICBlaW5hX3N0cmJ1Zl9hcHBlbmRfcHJp
bnRmKGJ1ZmZlciwgIiVzICglZCUlKSAtICVzIiwgdGl0bGUsIHByb2dyZXNzLCBBUFBfTkFNRSk7
CisgICBlbHNlCisgICAgIGVpbmFfc3RyYnVmX2FwcGVuZF9wcmludGYoYnVmZmVyLCAiJXMgLSAl
cyIsIHRpdGxlLCBBUFBfTkFNRSk7CiAKLSAgICBlbG1fd2luX3RpdGxlX3NldChlbG1fd2luZG93
LCBlaW5hX3N0cmJ1Zl9zdHJpbmdfZ2V0KGJ1ZmZlcikpOwotICAgIGVpbmFfc3RyYnVmX2ZyZWUo
YnVmZmVyKTsKKyAgIGVsbV93aW5fdGl0bGVfc2V0KGVsbV93aW5kb3csIGVpbmFfc3RyYnVmX3N0
cmluZ19nZXQoYnVmZmVyKSk7CisgICBlaW5hX3N0cmJ1Zl9mcmVlKGJ1ZmZlcik7CiB9CiAKIHN0
YXRpYyB2b2lkCiBfdGl0bGVfY2hhbmdlZF9jYih2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0
ICpld2tfdmlldywgdm9pZCAqZXZlbnRfaW5mbykKIHsKLSAgICBCcm93c2VyX1dpbmRvdyAqd2lu
ZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOwotICAgIGNvbnN0IGNoYXIgKnRpdGxl
ID0gKGNvbnN0IGNoYXIgKilldmVudF9pbmZvOworICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9
IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKKyAgIGNvbnN0IGNoYXIgKnRpdGxlID0gKGNv
bnN0IGNoYXIgKilldmVudF9pbmZvOwogCi0gICAgdGl0bGVfc2V0KHdpbmRvdy0+ZWxtX3dpbmRv
dywgdGl0bGUsIDEwMCk7CisgICB0aXRsZV9zZXQod2luZG93LT5lbG1fd2luZG93LCB0aXRsZSwg
MTAwKTsKIH0KIAogc3RhdGljIHZvaWQKIF91cmxfY2hhbmdlZF9jYih2b2lkICp1c2VyX2RhdGEs
IEV2YXNfT2JqZWN0ICpld2tfdmlldywgdm9pZCAqZXZlbnRfaW5mbykKIHsKLSAgICBCcm93c2Vy
X1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOwotICAgIGNvbnN0
IGNoYXIgKnVybCA9IGV3a192aWV3X3VybF9nZXQod2luZG93LT5ld2tfdmlldyk7Ci0gICAgY2hh
ciAqY29udmVydGVkX3VybCA9IGVsbV9lbnRyeV91dGY4X3RvX21hcmt1cCh1cmwpOwotICAgIGVs
bV9lbnRyeV9lbnRyeV9zZXQod2luZG93LT51cmxfYmFyLCBjb252ZXJ0ZWRfdXJsKTsKKyAgIEJy
b3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7CisgICBj
b25zdCBjaGFyICp1cmwgPSBld2tfdmlld191cmxfZ2V0KHdpbmRvdy0+ZXdrX3ZpZXcpOworICAg
Y2hhciAqY29udmVydGVkX3VybCA9IGVsbV9lbnRyeV91dGY4X3RvX21hcmt1cCh1cmwpOworICAg
ZWxtX2VudHJ5X2VudHJ5X3NldCh3aW5kb3ctPnVybF9iYXIsIGNvbnZlcnRlZF91cmwpOwogCi0g
ICAgX2ljb25fY2hhbmdlZF9jYihld2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldChld2tf
dmlld19jb250ZXh0X2dldChld2tfdmlldykpLCB1cmwsIHVzZXJfZGF0YSk7CisgICBfaWNvbl9j
aGFuZ2VkX2NiKGV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2VfZ2V0KGV3a192aWV3X2NvbnRl
eHRfZ2V0KGV3a192aWV3KSksIHVybCwgdXNlcl9kYXRhKTsKIAotICAgIGZyZWUoY29udmVydGVk
X3VybCk7CisgICBmcmVlKGNvbnZlcnRlZF91cmwpOwogCi0gICAgc2VhcmNoX2JveF9oaWRlKHdp
bmRvdyk7CisgICBzZWFyY2hfYm94X2hpZGUod2luZG93KTsKIH0KIAogc3RhdGljIHZvaWQKIF9i
YWNrX2ZvcndhcmRfbGlzdF9jaGFuZ2VkX2NiKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3Qg
KmV3a192aWV3LCB2b2lkICpldmVudF9pbmZvKQogewotICAgIEJyb3dzZXJfV2luZG93ICp3aW5k
b3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7CisgICBCcm93c2VyX1dpbmRvdyAqd2lu
ZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOwogCi0gICAgLyogVXBkYXRlIG5hdmln
YXRpb24gYnV0dG9ucyBzdGF0ZSAqLwotICAgIGVsbV9vYmplY3RfZGlzYWJsZWRfc2V0KHdpbmRv
dy0+YmFja19idXR0b24sICFld2tfdmlld19iYWNrX3Bvc3NpYmxlKGV3a192aWV3KSk7Ci0gICAg
ZWxtX29iamVjdF9kaXNhYmxlZF9zZXQod2luZG93LT5mb3J3YXJkX2J1dHRvbiwgIWV3a192aWV3
X2ZvcndhcmRfcG9zc2libGUoZXdrX3ZpZXcpKTsKKyAgIC8qIFVwZGF0ZSBuYXZpZ2F0aW9uIGJ1
dHRvbnMgc3RhdGUgKi8KKyAgIGVsbV9vYmplY3RfZGlzYWJsZWRfc2V0KHdpbmRvdy0+YmFja19i
dXR0b24sICFld2tfdmlld19iYWNrX3Bvc3NpYmxlKGV3a192aWV3KSk7CisgICBlbG1fb2JqZWN0
X2Rpc2FibGVkX3NldCh3aW5kb3ctPmZvcndhcmRfYnV0dG9uLCAhZXdrX3ZpZXdfZm9yd2FyZF9w
b3NzaWJsZShld2tfdmlldykpOwogfQogCiBzdGF0aWMgdm9pZAogX3Byb2dyZXNzX2NiKHZvaWQg
KnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKmV3a192aWV3LCB2b2lkICpldmVudF9pbmZvKQogewot
ICAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7
Ci0gICAgZG91YmxlIHByb2dyZXNzID0gKihkb3VibGUgKilldmVudF9pbmZvOworICAgQnJvd3Nl
cl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKKyAgIGRvdWJs
ZSBwcm9ncmVzcyA9ICooZG91YmxlICopZXZlbnRfaW5mbzsKIAotICAgIHRpdGxlX3NldCh3aW5k
b3ctPmVsbV93aW5kb3csIGV3a192aWV3X3RpdGxlX2dldCh3aW5kb3ctPmV3a192aWV3KSwgcHJv
Z3Jlc3MgKiAxMDApOworICAgdGl0bGVfc2V0KHdpbmRvdy0+ZWxtX3dpbmRvdywgZXdrX3ZpZXdf
dGl0bGVfZ2V0KHdpbmRvdy0+ZXdrX3ZpZXcpLCBwcm9ncmVzcyAqIDEwMCk7CiB9CiAKIHN0YXRp
YyB2b2lkCiBfZXJyb3JfY2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqZXdrX3ZpZXcs
IHZvaWQgKmV2ZW50X2luZm8pCiB7Ci0gICAgRWluYV9TdHJidWYgKmJ1ZmZlcjsKLSAgICBjb25z
dCBFd2tfRXJyb3IgKmVycm9yID0gKGNvbnN0IEV3a19FcnJvciAqKWV2ZW50X2luZm87CisgICBF
aW5hX1N0cmJ1ZiAqYnVmZmVyOworICAgY29uc3QgRXdrX0Vycm9yICplcnJvciA9IChjb25zdCBF
d2tfRXJyb3IgKilldmVudF9pbmZvOwogCi0gICAgLyogVGhpcyBpcyBhIGNhbmNlbGxhdGlvbiwg
ZG8gbm90IGRpc3BsYXkgdGhlIGVycm9yIHBhZ2UgKi8KLSAgICBpZiAoZXdrX2Vycm9yX2NhbmNl
bGxhdGlvbl9nZXQoZXJyb3IpKQotICAgICAgICByZXR1cm47CisgICAvKiBUaGlzIGlzIGEgY2Fu
Y2VsbGF0aW9uLCBkbyBub3QgZGlzcGxheSB0aGUgZXJyb3IgcGFnZSAqLworICAgaWYgKGV3a19l
cnJvcl9jYW5jZWxsYXRpb25fZ2V0KGVycm9yKSkKKyAgICAgcmV0dXJuOwogCi0gICAgYnVmZmVy
ID0gZWluYV9zdHJidWZfbmV3KCk7Ci0gICAgZWluYV9zdHJidWZfYXBwZW5kX3ByaW50ZihidWZm
ZXIsCi0gICAgICAgICI8aHRtbD48Ym9keT48ZGl2IHN0eWxlPVwiY29sb3I6I2ZmMDAwMFwiPkVS
Uk9SITwvZGl2Pjxicj48ZGl2PkNvZGU6ICVkPGJyPkRlc2NyaXB0aW9uOiAlczxicj5VUkw6ICVz
PC9kaXY+PC9ib2R5PC9odG1sPiIsCi0gICAgICAgIGV3a19lcnJvcl9jb2RlX2dldChlcnJvciks
IGV3a19lcnJvcl9kZXNjcmlwdGlvbl9nZXQoZXJyb3IpLCBld2tfZXJyb3JfdXJsX2dldChlcnJv
cikpOworICAgYnVmZmVyID0gZWluYV9zdHJidWZfbmV3KCk7CisgICBlaW5hX3N0cmJ1Zl9hcHBl
bmRfcHJpbnRmKGJ1ZmZlciwKKyAgICAgIjxodG1sPjxib2R5PjxkaXYgc3R5bGU9XCJjb2xvcjoj
ZmYwMDAwXCI+RVJST1IhPC9kaXY+PGJyPjxkaXY+Q29kZTogJWQ8YnI+RGVzY3JpcHRpb246ICVz
PGJyPlVSTDogJXM8L2Rpdj48L2JvZHk8L2h0bWw+IiwKKyAgICAgZXdrX2Vycm9yX2NvZGVfZ2V0
KGVycm9yKSwgZXdrX2Vycm9yX2Rlc2NyaXB0aW9uX2dldChlcnJvciksIGV3a19lcnJvcl91cmxf
Z2V0KGVycm9yKSk7CiAKLSAgICBld2tfdmlld19odG1sX3N0cmluZ19sb2FkKGV3a192aWV3LCBl
aW5hX3N0cmJ1Zl9zdHJpbmdfZ2V0KGJ1ZmZlciksIDAsIGV3a19lcnJvcl91cmxfZ2V0KGVycm9y
KSk7Ci0gICAgZWluYV9zdHJidWZfZnJlZShidWZmZXIpOworICAgZXdrX3ZpZXdfaHRtbF9zdHJp
bmdfbG9hZChld2tfdmlldywgZWluYV9zdHJidWZfc3RyaW5nX2dldChidWZmZXIpLCAwLCBld2tf
ZXJyb3JfdXJsX2dldChlcnJvcikpOworICAgZWluYV9zdHJidWZfZnJlZShidWZmZXIpOwogfQog
CiBzdGF0aWMgdm9pZAogX2Rvd25sb2FkX3JlcXVlc3RfY2IoRXdrX0Rvd25sb2FkX0pvYiAqZG93
bmxvYWQsIHZvaWQgKnVzZXJfZGF0YSkKIHsKLSAgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0g
KEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOworICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9
IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKIAotICAgIEVpbmFfU3RyYnVmICpkZXN0aW5h
dGlvbl9wYXRoID0gZWluYV9zdHJidWZfbmV3KCk7CisgICBFaW5hX1N0cmJ1ZiAqZGVzdGluYXRp
b25fcGF0aCA9IGVpbmFfc3RyYnVmX25ldygpOwogCi0gICAgY29uc3QgY2hhciAqaG9tZV9wYXRo
ID0gZ2V0ZW52KCJIT01FIik7Ci0gICAgRWluYV9TdHJpbmdzaGFyZSAqc2F2ZV9maWxlX3BhdGgg
PSBfZmlsZV9lbnRyeV9kaWFsb2dfc2hvdyh3aW5kb3csICJET1dOTE9BRCIsIGhvbWVfcGF0aCA/
IGhvbWVfcGF0aCA6ICIvdG1wIik7CisgICBjb25zdCBjaGFyICpob21lX3BhdGggPSBnZXRlbnYo
IkhPTUUiKTsKKyAgIEVpbmFfU3RyaW5nc2hhcmUgKnNhdmVfZmlsZV9wYXRoID0gX2ZpbGVfZW50
cnlfZGlhbG9nX3Nob3cod2luZG93LCAiRE9XTkxPQUQiLCBob21lX3BhdGggPyBob21lX3BhdGgg
OiAiL3RtcCIpOwogCi0gICAgaWYgKHNhdmVfZmlsZV9wYXRoKQotICAgICAgICBlaW5hX3N0cmJ1
Zl9hcHBlbmRfcHJpbnRmKGRlc3RpbmF0aW9uX3BhdGgsICIlcyIsIHNhdmVfZmlsZV9wYXRoKTsK
LSAgICBlbHNlCi0gICAgICAgIGVpbmFfc3RyYnVmX2FwcGVuZChkZXN0aW5hdGlvbl9wYXRoLCAi
L3RtcCIpOworICAgaWYgKHNhdmVfZmlsZV9wYXRoKQorICAgICBlaW5hX3N0cmJ1Zl9hcHBlbmRf
cHJpbnRmKGRlc3RpbmF0aW9uX3BhdGgsICIlcyIsIHNhdmVfZmlsZV9wYXRoKTsKKyAgIGVsc2UK
KyAgICAgZWluYV9zdHJidWZfYXBwZW5kKGRlc3RpbmF0aW9uX3BhdGgsICIvdG1wIik7CiAKLSAg
ICBjb25zdCBjaGFyICpzdWdnZXN0ZWRfbmFtZSA9IGV3a19kb3dubG9hZF9qb2Jfc3VnZ2VzdGVk
X2ZpbGVuYW1lX2dldChkb3dubG9hZCk7Ci0gICAgaWYgKHN1Z2dlc3RlZF9uYW1lICYmICpzdWdn
ZXN0ZWRfbmFtZSkKLSAgICAgICAgZWluYV9zdHJidWZfYXBwZW5kX3ByaW50ZihkZXN0aW5hdGlv
bl9wYXRoLCAiLyVzIiwgc3VnZ2VzdGVkX25hbWUpOwotICAgIGVsc2UgewotICAgICAgICAvLyBH
ZW5lcmF0ZSBhIHVuaXF1ZSBmaWxlIG5hbWUgc2luY2Ugbm8gbmFtZSB3YXMgc3VnZ2VzdGVkLgot
ICAgICAgICBlaW5hX3N0cmJ1Zl9hcHBlbmQoZGVzdGluYXRpb25fcGF0aCwgIi9kb3dubG9hZGVk
LWZpbGUuWFhYWFhYIik7Ci0gICAgICAgIGNoYXIgKnVybCA9IE5VTEw7Ci0gICAgICAgIHVybCA9
IGVpbmFfc3RyYnVmX3N0cmluZ19zdGVhbChkZXN0aW5hdGlvbl9wYXRoKTsKLSAgICAgICAgaWYg
KG1rc3RlbXAodXJsKSA9PSAtMSkgewotICAgICAgICAgICAgRVJST1IoIkNvdWxkIG5vdCBnZW5l
cmF0ZSBhIHVuaXF1ZSBmaWxlIG5hbWUuIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgZWluYV9zdHJidWZfYXBwZW5kKGRlc3RpbmF0aW9uX3BhdGgsIHVybCk7Ci0g
ICAgfQorICAgY29uc3QgY2hhciAqc3VnZ2VzdGVkX25hbWUgPSBld2tfZG93bmxvYWRfam9iX3N1
Z2dlc3RlZF9maWxlbmFtZV9nZXQoZG93bmxvYWQpOworICAgaWYgKHN1Z2dlc3RlZF9uYW1lICYm
ICpzdWdnZXN0ZWRfbmFtZSkKKyAgICAgZWluYV9zdHJidWZfYXBwZW5kX3ByaW50ZihkZXN0aW5h
dGlvbl9wYXRoLCAiLyVzIiwgc3VnZ2VzdGVkX25hbWUpOworICAgZWxzZSB7CisgICAgIC8vIEdl
bmVyYXRlIGEgdW5pcXVlIGZpbGUgbmFtZSBzaW5jZSBubyBuYW1lIHdhcyBzdWdnZXN0ZWQuCisg
ICAgIGVpbmFfc3RyYnVmX2FwcGVuZChkZXN0aW5hdGlvbl9wYXRoLCAiL2Rvd25sb2FkZWQtZmls
ZS5YWFhYWFgiKTsKKyAgICAgY2hhciAqdXJsID0gTlVMTDsKKyAgICAgdXJsID0gZWluYV9zdHJi
dWZfc3RyaW5nX3N0ZWFsKGRlc3RpbmF0aW9uX3BhdGgpOworICAgICBpZiAobWtzdGVtcCh1cmwp
ID09IC0xKSB7CisgICAgICAgRVJST1IoIkNvdWxkIG5vdCBnZW5lcmF0ZSBhIHVuaXF1ZSBmaWxl
IG5hbWUuIik7CisgICAgICAgcmV0dXJuOworICAgICB9CisgICAgIGVpbmFfc3RyYnVmX2FwcGVu
ZChkZXN0aW5hdGlvbl9wYXRoLCB1cmwpOworICAgfQogCi0gICAgZXdrX2Rvd25sb2FkX2pvYl9k
ZXN0aW5hdGlvbl9zZXQoZG93bmxvYWQsIGVpbmFfc3RyYnVmX3N0cmluZ19nZXQoZGVzdGluYXRp
b25fcGF0aCkpOwotICAgIElORk8oIkRvd25sb2FkaW5nOiAlcyIsIGVpbmFfc3RyYnVmX3N0cmlu
Z19nZXQoZGVzdGluYXRpb25fcGF0aCkpOwotICAgIGVpbmFfc3RyYnVmX2ZyZWUoZGVzdGluYXRp
b25fcGF0aCk7Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoc2F2ZV9maWxlX3BhdGgpOworICAg
ZXdrX2Rvd25sb2FkX2pvYl9kZXN0aW5hdGlvbl9zZXQoZG93bmxvYWQsIGVpbmFfc3RyYnVmX3N0
cmluZ19nZXQoZGVzdGluYXRpb25fcGF0aCkpOworICAgSU5GTygiRG93bmxvYWRpbmc6ICVzIiwg
ZWluYV9zdHJidWZfc3RyaW5nX2dldChkZXN0aW5hdGlvbl9wYXRoKSk7CisgICBlaW5hX3N0cmJ1
Zl9mcmVlKGRlc3RpbmF0aW9uX3BhdGgpOworICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoc2F2ZV9m
aWxlX3BhdGgpOwogfQogCiBzdGF0aWMgdm9pZCBfZmlsZXBpY2tlcl9wYXJlbnRfZGVsZXRpb25f
Y2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzICpldmFzLCBFdmFzX09iamVjdCAqZWxtX3dpbmRvdywg
dm9pZCAqZXZlbnQpOwogCiBzdGF0aWMgdm9pZCBjbG9zZV9maWxlX3BpY2tlcihGaWxlX1NlbGVj
dG9yX0RhdGEgKmZzX2RhdGEpCiB7Ci0gICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVs
KGZzX2RhdGEtPnBhcmVudC0+ZWxtX3dpbmRvdywgRVZBU19DQUxMQkFDS19ERUwsIF9maWxlcGlj
a2VyX3BhcmVudF9kZWxldGlvbl9jYik7Ci0gICAgZXZhc19vYmplY3RfZGVsKGZzX2RhdGEtPmVs
bV93aW5kb3cpOwotICAgIGV3a19vYmplY3RfdW5yZWYoZnNfZGF0YS0+cmVxdWVzdCk7Ci0gICAg
ZnJlZShmc19kYXRhKTsKKyAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChmc19kYXRh
LT5wYXJlbnQtPmVsbV93aW5kb3csIEVWQVNfQ0FMTEJBQ0tfREVMLCBfZmlsZXBpY2tlcl9wYXJl
bnRfZGVsZXRpb25fY2IpOworICAgZXZhc19vYmplY3RfZGVsKGZzX2RhdGEtPmVsbV93aW5kb3cp
OworICAgZXdrX29iamVjdF91bnJlZihmc19kYXRhLT5yZXF1ZXN0KTsKKyAgIGZyZWUoZnNfZGF0
YSk7CiB9CiAKIHN0YXRpYyB2b2lkCiBfZmlsZXBpY2tlcl9wYXJlbnRfZGVsZXRpb25fY2Iodm9p
ZCAqdXNlcl9kYXRhLCBFdmFzICpldmFzLCBFdmFzX09iamVjdCAqZWxtX3dpbmRvdywgdm9pZCAq
ZXZlbnQpCiB7Ci0gICAgY2xvc2VfZmlsZV9waWNrZXIoKEZpbGVfU2VsZWN0b3JfRGF0YSAqKXVz
ZXJfZGF0YSk7CisgICBjbG9zZV9maWxlX3BpY2tlcigoRmlsZV9TZWxlY3Rvcl9EYXRhICopdXNl
cl9kYXRhKTsKIH0KIAogc3RhdGljIHZvaWQKIF9maWxlcGlja2VyX2RlbGV0aW9uX2NiKHZvaWQg
KnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKmVsbV93aW5kb3csIHZvaWQgKmV2ZW50X2luZm8pCiB7
Ci0gICAgY2xvc2VfZmlsZV9waWNrZXIoKEZpbGVfU2VsZWN0b3JfRGF0YSAqKXVzZXJfZGF0YSk7
CisgICBjbG9zZV9maWxlX3BpY2tlcigoRmlsZV9TZWxlY3Rvcl9EYXRhICopdXNlcl9kYXRhKTsK
IH0KIAogc3RhdGljIHZvaWQKIF9maWxlc2VsZWN0b3JfZG9uZV9jYih2b2lkICp1c2VyX2RhdGEs
IEV2YXNfT2JqZWN0ICpmaWxlX3NlbGVjdG9yLCB2b2lkICpldmVudF9pbmZvKQogewotICAgIEZp
bGVfU2VsZWN0b3JfRGF0YSAqZnNfZGF0YSA9IChGaWxlX1NlbGVjdG9yX0RhdGEgKil1c2VyX2Rh
dGE7CisgICBGaWxlX1NlbGVjdG9yX0RhdGEgKmZzX2RhdGEgPSAoRmlsZV9TZWxlY3Rvcl9EYXRh
ICopdXNlcl9kYXRhOwogCi0gICAgY29uc3QgY2hhciAqc2VsZWN0ZWQgPSAoY29uc3QgY2hhciAq
KWV2ZW50X2luZm87Ci0gICAgaWYgKHNlbGVjdGVkICYmICpzZWxlY3RlZCkKLSAgICAgICAgZXdr
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2ZpbGVfY2hvb3NlKGZzX2RhdGEtPnJlcXVlc3QsIHNlbGVj
dGVkKTsKKyAgIGNvbnN0IGNoYXIgKnNlbGVjdGVkID0gKGNvbnN0IGNoYXIgKilldmVudF9pbmZv
OworICAgaWYgKHNlbGVjdGVkICYmICpzZWxlY3RlZCkKKyAgICAgZXdrX2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2ZpbGVfY2hvb3NlKGZzX2RhdGEtPnJlcXVlc3QsIHNlbGVjdGVkKTsKIAotICAgIGNs
b3NlX2ZpbGVfcGlja2VyKGZzX2RhdGEpOworICAgY2xvc2VfZmlsZV9waWNrZXIoZnNfZGF0YSk7
CiB9CiAKIHN0YXRpYyB2b2lkCiBfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2Iodm9pZCAqdXNlcl9k
YXRhLCBFdmFzX09iamVjdCAqZXdrX3ZpZXcsIHZvaWQgKmV2ZW50X2luZm8pCiB7Ci0gICAgRXZh
c19PYmplY3QgKmJnOwotICAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5k
b3cgKil1c2VyX2RhdGE7Ci0gICAgRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0ICpyZXF1ZXN0ID0g
KEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdCAqKWV2ZW50X2luZm87CisgICBFdmFzX09iamVjdCAq
Ymc7CisgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9k
YXRhOworICAgRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0ICpyZXF1ZXN0ID0gKEV3a19GaWxlX0No
b29zZXJfUmVxdWVzdCAqKWV2ZW50X2luZm87CiAKLSAgICAvLyBTaG93IGJhc2ljIGZpbGUgcGlj
a2VyIHdoaWNoIGRvZXMgbm90IGN1cnJlbnRseSBzdXBwb3J0IG11bHRpcGxlIGZpbGVzCi0gICAg
Ly8gb3IgTUlNRSB0eXBlIGZpbHRlcmluZy4KLSAgICBFdmFzX09iamVjdCAqZWxtX3dpbmRvdyA9
IGVsbV93aW5fYWRkKHdpbmRvdy0+ZWxtX3dpbmRvdywgImZpbGUtcGlja2VyLXdpbmRvdyIsIEVM
TV9XSU5fRElBTE9HX0JBU0lDKTsKLSAgICBlbG1fd2luX3RpdGxlX3NldChlbG1fd2luZG93LCAi
RmlsZSBwaWNrZXIiKTsKLSAgICBlbG1fd2luX21vZGFsX3NldChlbG1fd2luZG93LCBFSU5BX1RS
VUUpOworICAgLy8gU2hvdyBiYXNpYyBmaWxlIHBpY2tlciB3aGljaCBkb2VzIG5vdCBjdXJyZW50
bHkgc3VwcG9ydCBtdWx0aXBsZSBmaWxlcworICAgLy8gb3IgTUlNRSB0eXBlIGZpbHRlcmluZy4K
KyAgIEV2YXNfT2JqZWN0ICplbG1fd2luZG93ID0gZWxtX3dpbl9hZGQod2luZG93LT5lbG1fd2lu
ZG93LCAiZmlsZS1waWNrZXItd2luZG93IiwgRUxNX1dJTl9ESUFMT0dfQkFTSUMpOworICAgZWxt
X3dpbl90aXRsZV9zZXQoZWxtX3dpbmRvdywgIkZpbGUgcGlja2VyIik7CisgICBlbG1fd2luX21v
ZGFsX3NldChlbG1fd2luZG93LCBFSU5BX1RSVUUpOwogCi0gICAgYmcgPSBlbG1fYmdfYWRkKGVs
bV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X3NpemVfaGludF93ZWlnaHRfc2V0KGJnLCBFVkFT
X0hJTlRfRVhQQU5ELCBFVkFTX0hJTlRfRVhQQU5EKTsKLSAgICBlbG1fd2luX3Jlc2l6ZV9vYmpl
Y3RfYWRkKGVsbV93aW5kb3csIGJnKTsKLSAgICBldmFzX29iamVjdF9zaG93KGJnKTsKKyAgIGJn
ID0gZWxtX2JnX2FkZChlbG1fd2luZG93KTsKKyAgIGV2YXNfb2JqZWN0X3NpemVfaGludF93ZWln
aHRfc2V0KGJnLCBFVkFTX0hJTlRfRVhQQU5ELCBFVkFTX0hJTlRfRVhQQU5EKTsKKyAgIGVsbV93
aW5fcmVzaXplX29iamVjdF9hZGQoZWxtX3dpbmRvdywgYmcpOworICAgZXZhc19vYmplY3Rfc2hv
dyhiZyk7CiAKLSAgICBGaWxlX1NlbGVjdG9yX0RhdGEgKmZzX2RhdGEgPSAoRmlsZV9TZWxlY3Rv
cl9EYXRhICopbWFsbG9jKHNpemVvZihGaWxlX1NlbGVjdG9yX0RhdGEpKTsKLSAgICBmc19kYXRh
LT5wYXJlbnQgPSB3aW5kb3c7Ci0gICAgZnNfZGF0YS0+ZWxtX3dpbmRvdyA9IGVsbV93aW5kb3c7
Ci0gICAgZnNfZGF0YS0+cmVxdWVzdCA9IGV3a19vYmplY3RfcmVmKHJlcXVlc3QpOwotICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChlbG1fd2luZG93LCAiZGVsZXRlLHJlcXVlc3Qi
LCBfZmlsZXBpY2tlcl9kZWxldGlvbl9jYiwgZnNfZGF0YSk7Ci0gICAgZXZhc19vYmplY3RfZXZl
bnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZWxtX3dpbmRvdywgRVZBU19DQUxMQkFDS19ERUwsIF9m
aWxlcGlja2VyX3BhcmVudF9kZWxldGlvbl9jYiwgZnNfZGF0YSk7CisgICBGaWxlX1NlbGVjdG9y
X0RhdGEgKmZzX2RhdGEgPSAoRmlsZV9TZWxlY3Rvcl9EYXRhICopbWFsbG9jKHNpemVvZihGaWxl
X1NlbGVjdG9yX0RhdGEpKTsKKyAgIGZzX2RhdGEtPnBhcmVudCA9IHdpbmRvdzsKKyAgIGZzX2Rh
dGEtPmVsbV93aW5kb3cgPSBlbG1fd2luZG93OworICAgZnNfZGF0YS0+cmVxdWVzdCA9IGV3a19v
YmplY3RfcmVmKHJlcXVlc3QpOworICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKGVs
bV93aW5kb3csICJkZWxldGUscmVxdWVzdCIsIF9maWxlcGlja2VyX2RlbGV0aW9uX2NiLCBmc19k
YXRhKTsKKyAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmVsbV93aW5k
b3csIEVWQVNfQ0FMTEJBQ0tfREVMLCBfZmlsZXBpY2tlcl9wYXJlbnRfZGVsZXRpb25fY2IsIGZz
X2RhdGEpOwogCi0gICAgRXZhc19PYmplY3QgKmZpbGVfc2VsZWN0b3IgPSBlbG1fZmlsZXNlbGVj
dG9yX2FkZChlbG1fd2luZG93KTsKLSAgICBjb25zdCBjaGFyICpob21lX3BhdGggPSBnZXRlbnYo
IkhPTUUiKTsKLSAgICBlbG1fZmlsZXNlbGVjdG9yX3BhdGhfc2V0KGZpbGVfc2VsZWN0b3IsIGhv
bWVfcGF0aCA/IGhvbWVfcGF0aCA6ICIvaG9tZSIpOwotICAgIGV2YXNfb2JqZWN0X3NpemVfaGlu
dF93ZWlnaHRfc2V0KGZpbGVfc2VsZWN0b3IsIEVWQVNfSElOVF9FWFBBTkQsIEVWQVNfSElOVF9F
WFBBTkQpOwotICAgIGVsbV93aW5fcmVzaXplX29iamVjdF9hZGQoZWxtX3dpbmRvdywgZmlsZV9z
ZWxlY3Rvcik7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhmaWxlX3NlbGVjdG9yKTsKKyAgIEV2YXNf
T2JqZWN0ICpmaWxlX3NlbGVjdG9yID0gZWxtX2ZpbGVzZWxlY3Rvcl9hZGQoZWxtX3dpbmRvdyk7
CisgICBjb25zdCBjaGFyICpob21lX3BhdGggPSBnZXRlbnYoIkhPTUUiKTsKKyAgIGVsbV9maWxl
c2VsZWN0b3JfcGF0aF9zZXQoZmlsZV9zZWxlY3RvciwgaG9tZV9wYXRoID8gaG9tZV9wYXRoIDog
Ii9ob21lIik7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfd2VpZ2h0X3NldChmaWxlX3NlbGVj
dG9yLCBFVkFTX0hJTlRfRVhQQU5ELCBFVkFTX0hJTlRfRVhQQU5EKTsKKyAgIGVsbV93aW5fcmVz
aXplX29iamVjdF9hZGQoZWxtX3dpbmRvdywgZmlsZV9zZWxlY3Rvcik7CisgICBldmFzX29iamVj
dF9zaG93KGZpbGVfc2VsZWN0b3IpOwogCi0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
YWRkKGZpbGVfc2VsZWN0b3IsICJkb25lIiwgX2ZpbGVzZWxlY3Rvcl9kb25lX2NiLCBmc19kYXRh
KTsKKyAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChmaWxlX3NlbGVjdG9yLCAiZG9u
ZSIsIF9maWxlc2VsZWN0b3JfZG9uZV9jYiwgZnNfZGF0YSk7CiAKLSAgICBldmFzX29iamVjdF9y
ZXNpemUoZWxtX3dpbmRvdywgNDAwLCA0MDApOwotICAgIGVsbV93aW5fY2VudGVyKGVsbV93aW5k
b3csIEVJTkFfVFJVRSwgRUlOQV9UUlVFKTsKLSAgICBldmFzX29iamVjdF9zaG93KGVsbV93aW5k
b3cpOworICAgZXZhc19vYmplY3RfcmVzaXplKGVsbV93aW5kb3csIDQwMCwgNDAwKTsKKyAgIGVs
bV93aW5fY2VudGVyKGVsbV93aW5kb3csIEVJTkFfVFJVRSwgRUlOQV9UUlVFKTsKKyAgIGV2YXNf
b2JqZWN0X3Nob3coZWxtX3dpbmRvdyk7CiB9CiAKIHN0YXRpYyB2b2lkCiBfZG93bmxvYWRfZmlu
aXNoZWRfY2IoRXdrX0Rvd25sb2FkX0pvYiAqZG93bmxvYWQsIHZvaWQgKnVzZXJfZGF0YSkKIHsK
LSAgICBJTkZPKCJEb3dubG9hZCBmaW5pc2hlZDogJXMiLCAgZXdrX2Rvd25sb2FkX2pvYl9kZXN0
aW5hdGlvbl9nZXQoZG93bmxvYWQpKTsKKyAgIElORk8oIkRvd25sb2FkIGZpbmlzaGVkOiAlcyIs
ICBld2tfZG93bmxvYWRfam9iX2Rlc3RpbmF0aW9uX2dldChkb3dubG9hZCkpOwogfQogCiBzdGF0
aWMgdm9pZAogX2Rvd25sb2FkX2ZhaWxlZF9jYihFd2tfRG93bmxvYWRfSm9iX0Vycm9yICpkb3du
bG9hZF9lcnJvciwgdm9pZCAqdXNlcl9kYXRhKQogewotICAgIEV3a19FcnJvciAqZXJyb3IgPSBk
b3dubG9hZF9lcnJvci0+ZXJyb3I7CisgICBFd2tfRXJyb3IgKmVycm9yID0gZG93bmxvYWRfZXJy
b3ItPmVycm9yOwogCi0gICAgSU5GTygiRG93bmxvYWQgZmFpbGVkISBFcnJvciBjb2RlOiAlZCwg
RXJyb3IgZGVzY3JpcHRpb246ICVzLCBFcnJvciBVUkw6ICVzIiwgZXdrX2Vycm9yX2NvZGVfZ2V0
KGVycm9yKSwgZXdrX2Vycm9yX2Rlc2NyaXB0aW9uX2dldChlcnJvciksIGV3a19lcnJvcl91cmxf
Z2V0KGVycm9yKSk7CisgICBJTkZPKCJEb3dubG9hZCBmYWlsZWQhIEVycm9yIGNvZGU6ICVkLCBF
cnJvciBkZXNjcmlwdGlvbjogJXMsIEVycm9yIFVSTDogJXMiLCBld2tfZXJyb3JfY29kZV9nZXQo
ZXJyb3IpLCBld2tfZXJyb3JfZGVzY3JpcHRpb25fZ2V0KGVycm9yKSwgZXdrX2Vycm9yX3VybF9n
ZXQoZXJyb3IpKTsKIH0KIAogc3RhdGljIHZvaWQKIF9jb2xvcl9jaGFuZ2VkX2NiKHZvaWQgKmRh
dGEsIEV2YXNfT2JqZWN0ICpvYmosIHZvaWQgKmV2ZW50X2luZm8pCiB7Ci0gICAgaW50IHIsIGcs
IGIsIGE7CisgICBpbnQgciwgZywgYiwgYTsKIAotICAgIGVsbV9jb2xvcnNlbGVjdG9yX2NvbG9y
X2dldChvYmosICZyLCAmZywgJmIsICZhKTsKLSAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoZGF0
YSwgciwgZywgYiwgYSk7CisgICBlbG1fY29sb3JzZWxlY3Rvcl9jb2xvcl9nZXQob2JqLCAmciwg
JmcsICZiLCAmYSk7CisgICBldmFzX29iamVjdF9jb2xvcl9zZXQoZGF0YSwgciwgZywgYiwgYSk7
CiB9CiAKIHN0YXRpYyB2b2lkCiBfY29sb3JfaXRlbV9zZWxlY3RlZF9jYih2b2lkICpkYXRhLCBF
dmFzX09iamVjdCAqb2JqLCB2b2lkICpldmVudF9pbmZvKQogewotICAgIGludCByLCBnLCBiLCBh
OwotICAgIEVsbV9PYmplY3RfSXRlbSAqY29sb3JfaXRlbSA9IChFbG1fT2JqZWN0X0l0ZW0gKill
dmVudF9pbmZvOworICAgaW50IHIsIGcsIGIsIGE7CisgICBFbG1fT2JqZWN0X0l0ZW0gKmNvbG9y
X2l0ZW0gPSAoRWxtX09iamVjdF9JdGVtICopZXZlbnRfaW5mbzsKIAotICAgIGVsbV9jb2xvcnNl
bGVjdG9yX3BhbGV0dGVfaXRlbV9jb2xvcl9nZXQoY29sb3JfaXRlbSwgJnIsICZnLCAmYiwgJmEp
OwotICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChkYXRhLCByLCBnLCBiLCBhKTsKKyAgIGVsbV9j
b2xvcnNlbGVjdG9yX3BhbGV0dGVfaXRlbV9jb2xvcl9nZXQoY29sb3JfaXRlbSwgJnIsICZnLCAm
YiwgJmEpOworICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KGRhdGEsIHIsIGcsIGIsIGEpOwogfQog
CiBzdGF0aWMgdm9pZAogX2NvbG9yX3BpY2tlcl9va19jbGlja2VkX2NiKHZvaWQgKmRhdGEsIEV2
YXNfT2JqZWN0ICpvYmosIHZvaWQgKmV2ZW50X2luZm8pCiB7Ci0gICAgaW50IHIsIGcsIGIsIGE7
Ci0gICAgQ29sb3JfU2VsZWN0b3IgKmNvbG9yX3NlbGVjdG9yID0gKENvbG9yX1NlbGVjdG9yICop
ZGF0YTsKKyAgIGludCByLCBnLCBiLCBhOworICAgQ29sb3JfU2VsZWN0b3IgKmNvbG9yX3NlbGVj
dG9yID0gKENvbG9yX1NlbGVjdG9yICopZGF0YTsKIAotICAgIGVsbV9jb2xvcnNlbGVjdG9yX2Nv
bG9yX2dldChjb2xvcl9zZWxlY3Rvci0+ZWxtX3NlbGVjdG9yLCAmciwgJmcsICZiLCAmYSk7Ci0g
ICAgZXdrX2NvbG9yX3BpY2tlcl9jb2xvcl9zZXQoY29sb3Jfc2VsZWN0b3ItPmV3a19waWNrZXIs
IHIsIGcsIGIsIGEpOworICAgZWxtX2NvbG9yc2VsZWN0b3JfY29sb3JfZ2V0KGNvbG9yX3NlbGVj
dG9yLT5lbG1fc2VsZWN0b3IsICZyLCAmZywgJmIsICZhKTsKKyAgIGV3a19jb2xvcl9waWNrZXJf
Y29sb3Jfc2V0KGNvbG9yX3NlbGVjdG9yLT5ld2tfcGlja2VyLCByLCBnLCBiLCBhKTsKIH0KIAog
c3RhdGljIHZvaWQKIF9jb2xvcl9waWNrZXJfY2FuY2VsX2NsaWNrZWRfY2Iodm9pZCAqZGF0YSwg
RXZhc19PYmplY3QgKm9iaiwgdm9pZCAqZXZlbnRfaW5mbykKIHsKLSAgICBpbnQgciwgZywgYiwg
YTsKKyAgIGludCByLCBnLCBiLCBhOwogCi0gICAgZXdrX2NvbG9yX3BpY2tlcl9jb2xvcl9nZXQo
ZGF0YSwgJnIsICZnLCAmYiwgJmEpOwotICAgIGV3a19jb2xvcl9waWNrZXJfY29sb3Jfc2V0KGRh
dGEsIHIsIGcsIGIsIGEpOworICAgZXdrX2NvbG9yX3BpY2tlcl9jb2xvcl9nZXQoZGF0YSwgJnIs
ICZnLCAmYiwgJmEpOworICAgZXdrX2NvbG9yX3BpY2tlcl9jb2xvcl9zZXQoZGF0YSwgciwgZywg
YiwgYSk7CiB9CiAKIHN0YXRpYyBFaW5hX0Jvb2wKIF9jb2xvcl9waWNrZXJfZGlzbWlzc19jYihF
d2tfVmlld19TbWFydF9EYXRhICpzZCkKIHsKLSAgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0g
d2luZG93X2ZpbmRfd2l0aF9ld2tfdmlldyhzZC0+c2VsZik7CisgICBCcm93c2VyX1dpbmRvdyAq
d2luZG93ID0gd2luZG93X2ZpbmRfd2l0aF9ld2tfdmlldyhzZC0+c2VsZik7CiAKLSAgICBldmFz
X29iamVjdF9kZWwod2luZG93LT5jb2xvcl9zZWxlY3Rvci5lbG1fc2VsZWN0b3Jfd2luZG93KTsK
LSAgICB3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5kb3cgPSBOVUxMOwor
ICAgZXZhc19vYmplY3RfZGVsKHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dp
bmRvdyk7CisgICB3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5kb3cgPSBO
VUxMOwogCi0gICAgcmV0dXJuIEVJTkFfVFJVRTsKKyAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAK
IHN0YXRpYyBFaW5hX0Jvb2wKIF9jb2xvcl9waWNrZXJfcmVxdWVzdF9jYihFd2tfVmlld19TbWFy
dF9EYXRhICpzZCwgRXdrX0NvbG9yX1BpY2tlciAqY29sb3JfcGlja2VyKQogewotICAgIGludCBy
LCBnLCBiLCBhOwotICAgIEV2YXNfT2JqZWN0ICpiYWNrZ3JvdW5kLCAqcmVjdCwgKmJveCwgKmJ1
dHRvbl9ib3gsICpyZWN0X2ZyYW1lLCAqY3NfZnJhbWUsICpva19idXR0b24sICpjYW5jZWxfYnV0
dG9uOwotCi0gICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IHdpbmRvd19maW5kX3dpdGhfZXdr
X3ZpZXcoc2QtPnNlbGYpOwotICAgIHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9y
X3dpbmRvdyA9IGVsbV93aW5fYWRkKHdpbmRvdy0+ZWxtX3dpbmRvdywgImNvbG9yIHNlbGVjdG9y
IiwgRUxNX1dJTl9CQVNJQyk7Ci0gICAgd2luZG93LT5jb2xvcl9zZWxlY3Rvci5ld2tfcGlja2Vy
ID0gY29sb3JfcGlja2VyOwotCi0gICAgZWxtX3dpbl90aXRsZV9zZXQod2luZG93LT5jb2xvcl9z
ZWxlY3Rvci5lbG1fc2VsZWN0b3Jfd2luZG93LCAiQ29sb3Igc2VsZWN0b3IiKTsKLQotICAgIC8q
IFNob3cgY29sb3IgdmlldyAqLwotICAgIGJhY2tncm91bmQgPSBlbG1fYmdfYWRkKHdpbmRvdy0+
Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdyk7Ci0gICAgZXZhc19vYmplY3Rfc2l6
ZV9oaW50X3dlaWdodF9zZXQoYmFja2dyb3VuZCwgRVZBU19ISU5UX0VYUEFORCwgRVZBU19ISU5U
X0VYUEFORCk7Ci0gICAgZWxtX3dpbl9yZXNpemVfb2JqZWN0X2FkZCh3aW5kb3ctPmNvbG9yX3Nl
bGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5kb3csIGJhY2tncm91bmQpOwotICAgIGV2YXNfb2JqZWN0
X3Nob3coYmFja2dyb3VuZCk7Ci0KLSAgICBib3ggPSBlbG1fYm94X2FkZCh3aW5kb3ctPmNvbG9y
X3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X3NpemVfaGlu
dF93ZWlnaHRfc2V0KGJveCwgRVZBU19ISU5UX0VYUEFORCwgRVZBU19ISU5UX0VYUEFORCk7Ci0g
ICAgZWxtX3dpbl9yZXNpemVfb2JqZWN0X2FkZCh3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9z
ZWxlY3Rvcl93aW5kb3csIGJveCk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhib3gpOwotCi0gICAg
cmVjdF9mcmFtZSA9IGVsbV9mcmFtZV9hZGQod2luZG93LT5jb2xvcl9zZWxlY3Rvci5lbG1fc2Vs
ZWN0b3Jfd2luZG93KTsKLSAgICBldmFzX29iamVjdF9zaXplX2hpbnRfd2VpZ2h0X3NldChyZWN0
X2ZyYW1lLCBFVkFTX0hJTlRfRVhQQU5ELCAwLjMpOwotICAgIGV2YXNfb2JqZWN0X3NpemVfaGlu
dF9hbGlnbl9zZXQocmVjdF9mcmFtZSwgRVZBU19ISU5UX0ZJTEwsIEVWQVNfSElOVF9GSUxMKTsK
LSAgICBlbG1fb2JqZWN0X3RleHRfc2V0KHJlY3RfZnJhbWUsICJDb2xvciBWaWV3Iik7Ci0gICAg
ZWxtX2JveF9wYWNrX2VuZChib3gsIHJlY3RfZnJhbWUpOwotICAgIGV2YXNfb2JqZWN0X3Nob3co
cmVjdF9mcmFtZSk7Ci0KLSAgICByZWN0ID0gZXZhc19vYmplY3RfcmVjdGFuZ2xlX2FkZChldmFz
X29iamVjdF9ldmFzX2dldCh3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5k
b3cpKTsKLSAgICBlbG1fb2JqZWN0X2NvbnRlbnRfc2V0KHJlY3RfZnJhbWUsIHJlY3QpOwotICAg
IGV3a19jb2xvcl9waWNrZXJfY29sb3JfZ2V0KHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZXdrX3Bp
Y2tlciwgJnIsICZnLCAmYiwgJmEpOwotICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChyZWN0LCBy
LCBnLCBiLCBhKTsKLSAgICBldmFzX29iamVjdF9zaG93KHJlY3QpOwotCi0gICAgLyogU2hvdyBj
b2xvciBzZWxlY3RvciAqLwotICAgIGNzX2ZyYW1lID0gZWxtX2ZyYW1lX2FkZCh3aW5kb3ctPmNv
bG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X3NpemVf
aGludF93ZWlnaHRfc2V0KGNzX2ZyYW1lLCBFVkFTX0hJTlRfRVhQQU5ELCAwLjcpOwotICAgIGV2
YXNfb2JqZWN0X3NpemVfaGludF9hbGlnbl9zZXQoY3NfZnJhbWUsIEVWQVNfSElOVF9GSUxMLCBF
VkFTX0hJTlRfRklMTCk7Ci0gICAgZWxtX29iamVjdF90ZXh0X3NldChjc19mcmFtZSwgIkNvbG9y
IFNlbGVjdG9yIik7Ci0gICAgZWxtX2JveF9wYWNrX2VuZChib3gsIGNzX2ZyYW1lKTsKLSAgICBl
dmFzX29iamVjdF9zaG93KGNzX2ZyYW1lKTsKLQotICAgIHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3Iu
ZWxtX3NlbGVjdG9yID0gZWxtX2NvbG9yc2VsZWN0b3JfYWRkKHdpbmRvdy0+Y29sb3Jfc2VsZWN0
b3IuZWxtX3NlbGVjdG9yX3dpbmRvdyk7Ci0gICAgZWxtX29iamVjdF9jb250ZW50X3NldChjc19m
cmFtZSwgd2luZG93LT5jb2xvcl9zZWxlY3Rvci5lbG1fc2VsZWN0b3IpOwotICAgIGV2YXNfb2Jq
ZWN0X3Nob3cod2luZG93LT5jb2xvcl9zZWxlY3Rvci5lbG1fc2VsZWN0b3IpOwotCi0gICAgLyog
T0ssIENhbmNlbCBCdXR0b25zICovCi0gICAgYnV0dG9uX2JveCA9IGVsbV9ib3hfYWRkKHdpbmRv
dy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdyk7Ci0gICAgZWxtX2JveF9ob3Jp
em9udGFsX3NldChidXR0b25fYm94LCBFSU5BX1RSVUUpOwotICAgIGV2YXNfb2JqZWN0X3NpemVf
aGludF9taW5fc2V0KGJ1dHRvbl9ib3gsIDIwMCwgNTApOwotICAgIGVsbV9ib3hfcGFja19lbmQo
Ym94LCBidXR0b25fYm94KTsKLSAgICBldmFzX29iamVjdF9zaG93KGJ1dHRvbl9ib3gpOwotCi0g
ICAgb2tfYnV0dG9uID0gZWxtX2J1dHRvbl9hZGQod2luZG93LT5jb2xvcl9zZWxlY3Rvci5lbG1f
c2VsZWN0b3Jfd2luZG93KTsKLSAgICBlbG1fb2JqZWN0X3RleHRfc2V0KG9rX2J1dHRvbiwgIk9L
Iik7Ci0gICAgZWxtX2JveF9wYWNrX2VuZChidXR0b25fYm94LCBva19idXR0b24pOwotICAgIGV2
YXNfb2JqZWN0X3Nob3cob2tfYnV0dG9uKTsKLQotICAgIGNhbmNlbF9idXR0b24gPSBlbG1fYnV0
dG9uX2FkZCh3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5kb3cpOwotICAg
IGVsbV9vYmplY3RfdGV4dF9zZXQoY2FuY2VsX2J1dHRvbiwgIkNhbmNlbCIpOwotICAgIGVsbV9i
b3hfcGFja19lbmQoYnV0dG9uX2JveCwgY2FuY2VsX2J1dHRvbik7Ci0gICAgZXZhc19vYmplY3Rf
c2hvdyhjYW5jZWxfYnV0dG9uKTsKLQotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2Fk
ZChva19idXR0b24sICJjbGlja2VkIiwgX2NvbG9yX3BpY2tlcl9va19jbGlja2VkX2NiLCAmKHdp
bmRvdy0+Y29sb3Jfc2VsZWN0b3IpKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19h
ZGQoY2FuY2VsX2J1dHRvbiwgImNsaWNrZWQiLCBfY29sb3JfcGlja2VyX2NhbmNlbF9jbGlja2Vk
X2NiLAotICAgICAgICB3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmV3a19waWNrZXIpOwotICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9z
ZWxlY3Rvcl93aW5kb3csICJkZWxldGUscmVxdWVzdCIsCi0gICAgICAgIF9jb2xvcl9waWNrZXJf
Y2FuY2VsX2NsaWNrZWRfY2IsIHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZXdrX3BpY2tlcik7Ci0g
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3Iu
ZWxtX3NlbGVjdG9yLCAiY2hhbmdlZCIsIF9jb2xvcl9jaGFuZ2VkX2NiLCByZWN0KTsKLSAgICBl
dmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5jb2xvcl9zZWxlY3Rvci5lbG1f
c2VsZWN0b3IsICJjb2xvcixpdGVtLHNlbGVjdGVkIiwgX2NvbG9yX2l0ZW1fc2VsZWN0ZWRfY2Is
Ci0gICAgICAgIHJlY3QpOwotCi0gICAgZWxtX3dpbl9jZW50ZXIod2luZG93LT5jb2xvcl9zZWxl
Y3Rvci5lbG1fc2VsZWN0b3Jfd2luZG93LCBFSU5BX1RSVUUsIEVJTkFfVFJVRSk7Ci0gICAgZXZh
c19vYmplY3RfcmVzaXplKHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRv
dywgMzUwLCA1MDApOwotICAgIGV2YXNfb2JqZWN0X3Nob3cod2luZG93LT5jb2xvcl9zZWxlY3Rv
ci5lbG1fc2VsZWN0b3Jfd2luZG93KTsKLQotICAgIHJldHVybiBFSU5BX1RSVUU7CisgICBpbnQg
ciwgZywgYiwgYTsKKyAgIEV2YXNfT2JqZWN0ICpiYWNrZ3JvdW5kLCAqcmVjdCwgKmJveCwgKmJ1
dHRvbl9ib3gsICpyZWN0X2ZyYW1lLCAqY3NfZnJhbWUsICpva19idXR0b24sICpjYW5jZWxfYnV0
dG9uOworCisgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gd2luZG93X2ZpbmRfd2l0aF9ld2tf
dmlldyhzZC0+c2VsZik7CisgICB3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93
aW5kb3cgPSBlbG1fd2luX2FkZCh3aW5kb3ctPmVsbV93aW5kb3csICJjb2xvciBzZWxlY3RvciIs
IEVMTV9XSU5fQkFTSUMpOworICAgd2luZG93LT5jb2xvcl9zZWxlY3Rvci5ld2tfcGlja2VyID0g
Y29sb3JfcGlja2VyOworCisgICBlbG1fd2luX3RpdGxlX3NldCh3aW5kb3ctPmNvbG9yX3NlbGVj
dG9yLmVsbV9zZWxlY3Rvcl93aW5kb3csICJDb2xvciBzZWxlY3RvciIpOworCisgICAvKiBTaG93
IGNvbG9yIHZpZXcgKi8KKyAgIGJhY2tncm91bmQgPSBlbG1fYmdfYWRkKHdpbmRvdy0+Y29sb3Jf
c2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdyk7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRf
d2VpZ2h0X3NldChiYWNrZ3JvdW5kLCBFVkFTX0hJTlRfRVhQQU5ELCBFVkFTX0hJTlRfRVhQQU5E
KTsKKyAgIGVsbV93aW5fcmVzaXplX29iamVjdF9hZGQod2luZG93LT5jb2xvcl9zZWxlY3Rvci5l
bG1fc2VsZWN0b3Jfd2luZG93LCBiYWNrZ3JvdW5kKTsKKyAgIGV2YXNfb2JqZWN0X3Nob3coYmFj
a2dyb3VuZCk7CisKKyAgIGJveCA9IGVsbV9ib3hfYWRkKHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3Iu
ZWxtX3NlbGVjdG9yX3dpbmRvdyk7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfd2VpZ2h0X3Nl
dChib3gsIEVWQVNfSElOVF9FWFBBTkQsIEVWQVNfSElOVF9FWFBBTkQpOworICAgZWxtX3dpbl9y
ZXNpemVfb2JqZWN0X2FkZCh3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5k
b3csIGJveCk7CisgICBldmFzX29iamVjdF9zaG93KGJveCk7CisKKyAgIHJlY3RfZnJhbWUgPSBl
bG1fZnJhbWVfYWRkKHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdyk7
CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfd2VpZ2h0X3NldChyZWN0X2ZyYW1lLCBFVkFTX0hJ
TlRfRVhQQU5ELCAwLjMpOworICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X2FsaWduX3NldChyZWN0
X2ZyYW1lLCBFVkFTX0hJTlRfRklMTCwgRVZBU19ISU5UX0ZJTEwpOworICAgZWxtX29iamVjdF90
ZXh0X3NldChyZWN0X2ZyYW1lLCAiQ29sb3IgVmlldyIpOworICAgZWxtX2JveF9wYWNrX2VuZChi
b3gsIHJlY3RfZnJhbWUpOworICAgZXZhc19vYmplY3Rfc2hvdyhyZWN0X2ZyYW1lKTsKKworICAg
cmVjdCA9IGV2YXNfb2JqZWN0X3JlY3RhbmdsZV9hZGQoZXZhc19vYmplY3RfZXZhc19nZXQod2lu
ZG93LT5jb2xvcl9zZWxlY3Rvci5lbG1fc2VsZWN0b3Jfd2luZG93KSk7CisgICBlbG1fb2JqZWN0
X2NvbnRlbnRfc2V0KHJlY3RfZnJhbWUsIHJlY3QpOworICAgZXdrX2NvbG9yX3BpY2tlcl9jb2xv
cl9nZXQod2luZG93LT5jb2xvcl9zZWxlY3Rvci5ld2tfcGlja2VyLCAmciwgJmcsICZiLCAmYSk7
CisgICBldmFzX29iamVjdF9jb2xvcl9zZXQocmVjdCwgciwgZywgYiwgYSk7CisgICBldmFzX29i
amVjdF9zaG93KHJlY3QpOworCisgICAvKiBTaG93IGNvbG9yIHNlbGVjdG9yICovCisgICBjc19m
cmFtZSA9IGVsbV9mcmFtZV9hZGQod2luZG93LT5jb2xvcl9zZWxlY3Rvci5lbG1fc2VsZWN0b3Jf
d2luZG93KTsKKyAgIGV2YXNfb2JqZWN0X3NpemVfaGludF93ZWlnaHRfc2V0KGNzX2ZyYW1lLCBF
VkFTX0hJTlRfRVhQQU5ELCAwLjcpOworICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X2FsaWduX3Nl
dChjc19mcmFtZSwgRVZBU19ISU5UX0ZJTEwsIEVWQVNfSElOVF9GSUxMKTsKKyAgIGVsbV9vYmpl
Y3RfdGV4dF9zZXQoY3NfZnJhbWUsICJDb2xvciBTZWxlY3RvciIpOworICAgZWxtX2JveF9wYWNr
X2VuZChib3gsIGNzX2ZyYW1lKTsKKyAgIGV2YXNfb2JqZWN0X3Nob3coY3NfZnJhbWUpOworCisg
ICB3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3RvciA9IGVsbV9jb2xvcnNlbGVjdG9y
X2FkZCh3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5kb3cpOworICAgZWxt
X29iamVjdF9jb250ZW50X3NldChjc19mcmFtZSwgd2luZG93LT5jb2xvcl9zZWxlY3Rvci5lbG1f
c2VsZWN0b3IpOworICAgZXZhc19vYmplY3Rfc2hvdyh3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVs
bV9zZWxlY3Rvcik7CisKKyAgIC8qIE9LLCBDYW5jZWwgQnV0dG9ucyAqLworICAgYnV0dG9uX2Jv
eCA9IGVsbV9ib3hfYWRkKHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRv
dyk7CisgICBlbG1fYm94X2hvcml6b250YWxfc2V0KGJ1dHRvbl9ib3gsIEVJTkFfVFJVRSk7Cisg
ICBldmFzX29iamVjdF9zaXplX2hpbnRfbWluX3NldChidXR0b25fYm94LCAyMDAsIDUwKTsKKyAg
IGVsbV9ib3hfcGFja19lbmQoYm94LCBidXR0b25fYm94KTsKKyAgIGV2YXNfb2JqZWN0X3Nob3co
YnV0dG9uX2JveCk7CisKKyAgIG9rX2J1dHRvbiA9IGVsbV9idXR0b25fYWRkKHdpbmRvdy0+Y29s
b3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdyk7CisgICBlbG1fb2JqZWN0X3RleHRfc2V0
KG9rX2J1dHRvbiwgIk9LIik7CisgICBlbG1fYm94X3BhY2tfZW5kKGJ1dHRvbl9ib3gsIG9rX2J1
dHRvbik7CisgICBldmFzX29iamVjdF9zaG93KG9rX2J1dHRvbik7CisKKyAgIGNhbmNlbF9idXR0
b24gPSBlbG1fYnV0dG9uX2FkZCh3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93
aW5kb3cpOworICAgZWxtX29iamVjdF90ZXh0X3NldChjYW5jZWxfYnV0dG9uLCAiQ2FuY2VsIik7
CisgICBlbG1fYm94X3BhY2tfZW5kKGJ1dHRvbl9ib3gsIGNhbmNlbF9idXR0b24pOworICAgZXZh
c19vYmplY3Rfc2hvdyhjYW5jZWxfYnV0dG9uKTsKKworICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfYWRkKG9rX2J1dHRvbiwgImNsaWNrZWQiLCBfY29sb3JfcGlja2VyX29rX2NsaWNrZWRf
Y2IsICYod2luZG93LT5jb2xvcl9zZWxlY3RvcikpOworICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfYWRkKGNhbmNlbF9idXR0b24sICJjbGlja2VkIiwgX2NvbG9yX3BpY2tlcl9jYW5jZWxf
Y2xpY2tlZF9jYiwKKyAgICAgd2luZG93LT5jb2xvcl9zZWxlY3Rvci5ld2tfcGlja2VyKTsKKyAg
IGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVs
bV9zZWxlY3Rvcl93aW5kb3csICJkZWxldGUscmVxdWVzdCIsCisgICAgIF9jb2xvcl9waWNrZXJf
Y2FuY2VsX2NsaWNrZWRfY2IsIHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZXdrX3BpY2tlcik7Cisg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5jb2xvcl9zZWxlY3Rvci5l
bG1fc2VsZWN0b3IsICJjaGFuZ2VkIiwgX2NvbG9yX2NoYW5nZWRfY2IsIHJlY3QpOworICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3Nl
bGVjdG9yLCAiY29sb3IsaXRlbSxzZWxlY3RlZCIsIF9jb2xvcl9pdGVtX3NlbGVjdGVkX2NiLAor
ICAgICByZWN0KTsKKworICAgaW50IHgsIHksIHdpZHRoLCBoZWlnaHQ7CisgICBldmFzX29iamVj
dF9nZW9tZXRyeV9nZXQod2luZG93LT5lbG1fd2luZG93LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdo
dCk7CisKKyAgIGVsbV93aW5fY2VudGVyKHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVj
dG9yX3dpbmRvdywgRUlOQV9UUlVFLCBFSU5BX1RSVUUpOworICAgZXZhc19vYmplY3RfcmVzaXpl
KHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdywgMzUwLCA1MDApOwor
ICAgZXZhc19vYmplY3Rfc2hvdyh3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93
aW5kb3cpOworCisgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBzdGF0aWMgaW50CiBxdWl0KEVp
bmFfQm9vbCBzdWNjZXNzLCBjb25zdCBjaGFyICptc2cpCiB7Ci0gICAgaWYgKG1zZykKLSAgICAg
ICAgc3VjY2VzcyA/IElORk8oIiVzIiwgbXNnKSA6IEVSUk9SKCIlcyIsIG1zZyk7CisgICBpZiAo
bXNnKQorICAgICBzdWNjZXNzID8gSU5GTygiJXMiLCBtc2cpIDogRVJST1IoIiVzIiwgbXNnKTsK
IAotICAgIGVpbmFfbG9nX2RvbWFpbl91bnJlZ2lzdGVyKF9sb2dfZG9tYWluX2lkKTsKLSAgICBl
d2tfb2JqZWN0X3VucmVmKGNvbmZpZ3VyYXRpb24oKSk7Ci0gICAgZXdrX3NodXRkb3duKCk7Ci0g
ICAgZWxtX3NodXRkb3duKCk7CisgICBlaW5hX2xvZ19kb21haW5fdW5yZWdpc3RlcihfbG9nX2Rv
bWFpbl9pZCk7CisgICBld2tfb2JqZWN0X3VucmVmKGNvbmZpZ3VyYXRpb24oKSk7CisgICBld2tf
c2h1dGRvd24oKTsKKyAgIGVsbV9zaHV0ZG93bigpOwogCi0gICAgaWYgKCFzdWNjZXNzKQotICAg
ICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgaWYgKCFzdWNjZXNzKQorICAgICByZXR1cm4g
RVhJVF9GQUlMVVJFOwogCi0gICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKKyAgIHJldHVybiBFWElU
X1NVQ0NFU1M7CiB9CiAKIHN0YXRpYyBFaW5hX0Jvb2wKIGhhc19zY2hlbWUoY29uc3QgY2hhciAq
dXJsKQogewotICAgIHJldHVybiAhIXN0cnN0cih1cmwsICI6Ly8iKTsKKyAgIHJldHVybiAhIXN0
cnN0cih1cmwsICI6Ly8iKTsKIH0KIAogc3RhdGljIGNoYXIgKgogdXJsX2Zyb21fdXNlcl9pbnB1
dChjb25zdCBjaGFyICphcmcpCiB7Ci0gICAgLyogSWYgaXQgaXMgYWxyZWFkeSBhIFVSTCwgcmV0
dXJuIHRoZSBhcmd1bWVudCBhcyBpcy4gKi8KLSAgICBpZiAoaGFzX3NjaGVtZShhcmcpIHx8IGVp
bmFfc3RyX2hhc19wcmVmaXgoYXJnLCBKQVZBU0NSSVBUX1NDSEVNRSkgfHwgIXN0cmNhc2VjbXAo
YXJnLCAiYWJvdXQ6YmxhbmsiKSkKLSAgICAgICAgcmV0dXJuIHN0cmR1cChhcmcpOworICAgLyog
SWYgaXQgaXMgYWxyZWFkeSBhIFVSTCwgcmV0dXJuIHRoZSBhcmd1bWVudCBhcyBpcy4gKi8KKyAg
IGlmIChoYXNfc2NoZW1lKGFyZykgfHwgZWluYV9zdHJfaGFzX3ByZWZpeChhcmcsIEpBVkFTQ1JJ
UFRfU0NIRU1FKSB8fCAhc3RyY2FzZWNtcChhcmcsICJhYm91dDpibGFuayIpKQorICAgICByZXR1
cm4gc3RyZHVwKGFyZyk7CiAKLSAgICBFaW5hX1N0cmJ1ZiAqYnVmID0gZWluYV9zdHJidWZfbWFu
YWdlX25ldyhlaW5hX2ZpbGVfcGF0aF9zYW5pdGl6ZShhcmcpKTsKKyAgIEVpbmFfU3RyYnVmICpi
dWYgPSBlaW5hX3N0cmJ1Zl9tYW5hZ2VfbmV3KGVpbmFfZmlsZV9wYXRoX3Nhbml0aXplKGFyZykp
OwogCi0gICAgLyogQ2hlY2sgaWYgdGhlIHBhdGggZXhpc3RzLiAqLwotICAgIGlmIChlY29yZV9m
aWxlX2V4aXN0cyhlaW5hX3N0cmJ1Zl9zdHJpbmdfZ2V0KGJ1ZikpKSB7Ci0gICAgICAgIC8qIEZp
bGUgZXhpc3RzLCBjb252ZXJ0IGxvY2FsIHBhdGggdG8gYSBVUkwuICovCi0gICAgICAgIGVpbmFf
c3RyYnVmX3ByZXBlbmQoYnVmLCBGSUxFX1NDSEVNRSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
LyogVGhlIHBhdGggZG9lcyBub3QgZXhpc3QsIGNvbnZlcnQgaXQgdG8gYSBVUkwgYnkKLSAgICAg
ICAgICAgcHJlcGVuZGluZyBodHRwOi8vIHNjaGVtZToKLSAgICAgICAgICAgd3d3Lmdvb2dsZS5j
b20gLT4gaHR0cDovL3d3dy5nb29nbGUuY29tICovCi0gICAgICAgIGVpbmFfc3RyYnVmX3N0cmlu
Z19mcmVlKGJ1Zik7Ci0gICAgICAgIGVpbmFfc3RyYnVmX2FwcGVuZF9wcmludGYoYnVmLCAiJXMl
cyIsIEhUVFBfU0NIRU1FLCBhcmcpOwotICAgIH0KLSAgICBjaGFyICp1cmwgPSBlaW5hX3N0cmJ1
Zl9zdHJpbmdfc3RlYWwoYnVmKTsKLSAgICBlaW5hX3N0cmJ1Zl9mcmVlKGJ1Zik7CisgICAvKiBD
aGVjayBpZiB0aGUgcGF0aCBleGlzdHMuICovCisgICBpZiAoZWNvcmVfZmlsZV9leGlzdHMoZWlu
YV9zdHJidWZfc3RyaW5nX2dldChidWYpKSkgeworICAgICAvKiBGaWxlIGV4aXN0cywgY29udmVy
dCBsb2NhbCBwYXRoIHRvIGEgVVJMLiAqLworICAgICBlaW5hX3N0cmJ1Zl9wcmVwZW5kKGJ1Ziwg
RklMRV9TQ0hFTUUpOworICAgfSBlbHNlIHsKKyAgICAgLyogVGhlIHBhdGggZG9lcyBub3QgZXhp
c3QsIGNvbnZlcnQgaXQgdG8gYSBVUkwgYnkKKyAgICAgICAgcHJlcGVuZGluZyBodHRwOi8vIHNj
aGVtZToKKyAgICAgICAgd3d3Lmdvb2dsZS5jb20gLT4gaHR0cDovL3d3dy5nb29nbGUuY29tICov
CisgICAgIGVpbmFfc3RyYnVmX3N0cmluZ19mcmVlKGJ1Zik7CisgICAgIGVpbmFfc3RyYnVmX2Fw
cGVuZF9wcmludGYoYnVmLCAiJXMlcyIsIEhUVFBfU0NIRU1FLCBhcmcpOworICAgfQorICAgY2hh
ciAqdXJsID0gZWluYV9zdHJidWZfc3RyaW5nX3N0ZWFsKGJ1Zik7CisgICBlaW5hX3N0cmJ1Zl9m
cmVlKGJ1Zik7CiAKLSAgICByZXR1cm4gdXJsOworICAgcmV0dXJuIHVybDsKIH0KIAogc3RhdGlj
IEVpbmFfQm9vbAogdXJsX2xvYWRfZnJvbV91c2VyX2lucHV0KEV2YXNfT2JqZWN0ICpld2tfdmll
dywgY29uc3QgY2hhciAqdXJsKQogewotICAgIGlmICghZXdrX3ZpZXcgfHwgIXVybCkKLSAgICAg
ICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICBpZiAoIWV3a192aWV3IHx8ICF1cmwpCisgICAgIHJl
dHVybiBFSU5BX0ZBTFNFOwogCi0gICAgaWYgKGVpbmFfc3RyX2hhc19wcmVmaXgodXJsLCBKQVZB
U0NSSVBUX1NDSEVNRSkpCi0gICAgICAgIHJldHVybiBld2tfdmlld19zY3JpcHRfZXhlY3V0ZShl
d2tfdmlldywgc3Ryc3RyKHVybCwgSkFWQVNDUklQVF9TQ0hFTUUpLCAwLCAwKTsKKyAgIGlmIChl
aW5hX3N0cl9oYXNfcHJlZml4KHVybCwgSkFWQVNDUklQVF9TQ0hFTUUpKQorICAgICByZXR1cm4g
ZXdrX3ZpZXdfc2NyaXB0X2V4ZWN1dGUoZXdrX3ZpZXcsIHN0cnN0cih1cmwsIEpBVkFTQ1JJUFRf
U0NIRU1FKSwgMCwgMCk7CiAKLSAgICByZXR1cm4gZXdrX3ZpZXdfdXJsX3NldChld2tfdmlldywg
dXJsKTsKKyAgIHJldHVybiBld2tfdmlld191cmxfc2V0KGV3a192aWV3LCB1cmwpOwogfQogCiBz
dGF0aWMgdm9pZAogX3VybF9iYXJfYWN0aXZhdGVkX2NiKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19P
YmplY3QgKnVybF9iYXIsIHZvaWQgKmV2ZW50X2luZm8pCiB7Ci0gICAgQnJvd3Nlcl9XaW5kb3cg
KndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKKyAgIEJyb3dzZXJfV2luZG93
ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7CiAKLSAgICBjb25zdCBjaGFy
ICptYXJrdXBfdXJsID0gZWxtX2VudHJ5X2VudHJ5X2dldCh1cmxfYmFyKTsKLSAgICBjaGFyICp1
c2VyX3VybCA9IGVsbV9lbnRyeV9tYXJrdXBfdG9fdXRmOChtYXJrdXBfdXJsKTsKLSAgICBjaGFy
ICp1cmwgPSB1cmxfZnJvbV91c2VyX2lucHV0KHVzZXJfdXJsKTsKLSAgICB1cmxfbG9hZF9mcm9t
X3VzZXJfaW5wdXQod2luZG93LT5ld2tfdmlldywgdXJsKTsKKyAgIGNvbnN0IGNoYXIgKm1hcmt1
cF91cmwgPSBlbG1fZW50cnlfZW50cnlfZ2V0KHVybF9iYXIpOworICAgY2hhciAqdXNlcl91cmwg
PSBlbG1fZW50cnlfbWFya3VwX3RvX3V0ZjgobWFya3VwX3VybCk7CisgICBjaGFyICp1cmwgPSB1
cmxfZnJvbV91c2VyX2lucHV0KHVzZXJfdXJsKTsKKyAgIHVybF9sb2FkX2Zyb21fdXNlcl9pbnB1
dCh3aW5kb3ctPmV3a192aWV3LCB1cmwpOwogCi0gICAgZnJlZSh1c2VyX3VybCk7Ci0gICAgZnJl
ZSh1cmwpOworICAgZnJlZSh1c2VyX3VybCk7CisgICBmcmVlKHVybCk7CiAKLSAgICAvKiBHaXZl
IGZvY3VzIGJhY2sgdG8gdGhlIHZpZXcgKi8KLSAgICB2aWV3X2ZvY3VzX3NldCh3aW5kb3csIEVJ
TkFfVFJVRSk7CisgICAvKiBHaXZlIGZvY3VzIGJhY2sgdG8gdGhlIHZpZXcgKi8KKyAgIHZpZXdf
Zm9jdXNfc2V0KHdpbmRvdywgRUlOQV9UUlVFKTsKIH0KIAogc3RhdGljIHZvaWQKIF91cmxfYmFy
X2NsaWNrZWRfY2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqdXJsX2Jhciwgdm9pZCAq
ZXZlbnRfaW5mbykKIHsKLSAgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2lu
ZG93ICopdXNlcl9kYXRhOworICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dp
bmRvdyAqKXVzZXJfZGF0YTsKIAotICAgIC8qIEdyYWIgZm9jdXMgZnJvbSB0aGUgdmlldyAqLwot
ICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldCh3aW5kb3ctPmV3a192aWV3LCBFSU5BX0ZBTFNFKTsK
LSAgICBlbG1fb2JqZWN0X2ZvY3VzX3NldCh1cmxfYmFyLCBFSU5BX1RSVUUpOworICAgLyogR3Jh
YiBmb2N1cyBmcm9tIHRoZSB2aWV3ICovCisgICBldmFzX29iamVjdF9mb2N1c19zZXQod2luZG93
LT5ld2tfdmlldywgRUlOQV9GQUxTRSk7CisgICBlbG1fb2JqZWN0X2ZvY3VzX3NldCh1cmxfYmFy
LCBFSU5BX1RSVUUpOwogfQogCiBzdGF0aWMgdm9pZAogX3NlYXJjaF9maWVsZF9hYm9ydGVkX2Ni
KHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKnNlYXJjaF9maWVsZCwgdm9pZCAqZXZlbnRf
aW5mbykKIHsKLSAgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICop
dXNlcl9kYXRhOwotICAgIHNlYXJjaF9ib3hfaGlkZSh3aW5kb3cpOworICAgQnJvd3Nlcl9XaW5k
b3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKKyAgIHNlYXJjaF9ib3hf
aGlkZSh3aW5kb3cpOwogCi0gICAgLyogR2l2ZSBmb2N1cyBiYWNrIHRvIHRoZSB2aWV3ICovCi0g
ICAgdmlld19mb2N1c19zZXQod2luZG93LCBFSU5BX1RSVUUpOworICAgLyogR2l2ZSBmb2N1cyBi
YWNrIHRvIHRoZSB2aWV3ICovCisgICB2aWV3X2ZvY3VzX3NldCh3aW5kb3csIEVJTkFfVFJVRSk7
CiB9CiAKIHN0YXRpYyB2b2lkCiBfc2VhcmNoX2ZpZWxkX2FjdGl2YXRlZF9jYih2b2lkICp1c2Vy
X2RhdGEsIEV2YXNfT2JqZWN0ICpzZWFyY2hfZmllbGQsIHZvaWQgKmV2ZW50X2luZm8pCiB7Ci0g
ICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsK
KyAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7
CiAKLSAgICBjb25zdCBjaGFyICptYXJrdXBfdGV4dCA9IGVsbV9lbnRyeV9lbnRyeV9nZXQoc2Vh
cmNoX2ZpZWxkKTsKLSAgICBjaGFyICp0ZXh0ID0gZWxtX2VudHJ5X21hcmt1cF90b191dGY4KG1h
cmt1cF90ZXh0KTsKLSAgICBld2tfdmlld190ZXh0X2ZpbmQod2luZG93LT5ld2tfdmlldywgdGV4
dCwgc2VhcmNoX2ZsYWdzLCBNQVhfU0VBUkNIX0NPVU5UKTsKLSAgICBmcmVlKHRleHQpOworICAg
Y29uc3QgY2hhciAqbWFya3VwX3RleHQgPSBlbG1fZW50cnlfZW50cnlfZ2V0KHNlYXJjaF9maWVs
ZCk7CisgICBjaGFyICp0ZXh0ID0gZWxtX2VudHJ5X21hcmt1cF90b191dGY4KG1hcmt1cF90ZXh0
KTsKKyAgIGV3a192aWV3X3RleHRfZmluZCh3aW5kb3ctPmV3a192aWV3LCB0ZXh0LCBzZWFyY2hf
ZmxhZ3MsIE1BWF9TRUFSQ0hfQ09VTlQpOworICAgZnJlZSh0ZXh0KTsKIAotICAgIC8qIEdyYWIg
Zm9jdXMgZnJvbSB0aGUgdmlldyAqLwotICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldCh3aW5kb3ct
PmV3a192aWV3LCBFSU5BX0ZBTFNFKTsKLSAgICBlbG1fb2JqZWN0X2ZvY3VzX3NldChzZWFyY2hf
ZmllbGQsIEVJTkFfVFJVRSk7CisgICAvKiBHcmFiIGZvY3VzIGZyb20gdGhlIHZpZXcgKi8KKyAg
IGV2YXNfb2JqZWN0X2ZvY3VzX3NldCh3aW5kb3ctPmV3a192aWV3LCBFSU5BX0ZBTFNFKTsKKyAg
IGVsbV9vYmplY3RfZm9jdXNfc2V0KHNlYXJjaF9maWVsZCwgRUlOQV9UUlVFKTsKIH0KIAogc3Rh
dGljIHZvaWQKIF9zZWFyY2hfZmllbGRfY2xpY2tlZF9jYih2b2lkICp1c2VyX2RhdGEsIEV2YXNf
T2JqZWN0ICpzZWFyY2hfZmllbGQsIHZvaWQgKmV2ZW50X2luZm8pCiB7Ci0gICAgQnJvd3Nlcl9X
aW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKKyAgIEJyb3dzZXJf
V2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7CiAKLSAgICAvKiBH
cmFiIGZvY3VzIGZyb20gdGhlIHZpZXcgKi8KLSAgICBldmFzX29iamVjdF9mb2N1c19zZXQod2lu
ZG93LT5ld2tfdmlldywgRUlOQV9GQUxTRSk7Ci0gICAgZWxtX29iamVjdF9mb2N1c19zZXQoc2Vh
cmNoX2ZpZWxkLCBFSU5BX1RSVUUpOworICAgLyogR3JhYiBmb2N1cyBmcm9tIHRoZSB2aWV3ICov
CisgICBldmFzX29iamVjdF9mb2N1c19zZXQod2luZG93LT5ld2tfdmlldywgRUlOQV9GQUxTRSk7
CisgICBlbG1fb2JqZWN0X2ZvY3VzX3NldChzZWFyY2hfZmllbGQsIEVJTkFfVFJVRSk7CiB9CiAK
IHN0YXRpYyB2b2lkCiBfYmFja19idXR0b25fY2xpY2tlZF9jYih2b2lkICp1c2VyX2RhdGEsIEV2
YXNfT2JqZWN0ICpiYWNrX2J1dHRvbiwgdm9pZCAqZXZlbnRfaW5mbykKIHsKLSAgICBpZiAobG9u
Z3ByZXNzX2VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKKyAgIGlmIChsb25ncHJlc3NfZW5hYmxl
ZCkKKyAgICAgcmV0dXJuOwogCi0gICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2Vy
X1dpbmRvdyAqKXVzZXJfZGF0YTsKKyAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nl
cl9XaW5kb3cgKil1c2VyX2RhdGE7CiAKLSAgICBld2tfdmlld19iYWNrKHdpbmRvdy0+ZXdrX3Zp
ZXcpOwotICAgIC8qIFVwZGF0ZSBiYWNrIGJ1dHRvbiBzdGF0ZSAqLwotICAgIGVsbV9vYmplY3Rf
ZGlzYWJsZWRfc2V0KGJhY2tfYnV0dG9uLCAhZXdrX3ZpZXdfYmFja19wb3NzaWJsZSh3aW5kb3ct
PmV3a192aWV3KSk7CisgICBld2tfdmlld19iYWNrKHdpbmRvdy0+ZXdrX3ZpZXcpOworICAgLyog
VXBkYXRlIGJhY2sgYnV0dG9uIHN0YXRlICovCisgICBlbG1fb2JqZWN0X2Rpc2FibGVkX3NldChi
YWNrX2J1dHRvbiwgIWV3a192aWV3X2JhY2tfcG9zc2libGUod2luZG93LT5ld2tfdmlldykpOwog
fQogCiBzdGF0aWMgdm9pZAogX2ZvcndhcmRfYnV0dG9uX2NsaWNrZWRfY2Iodm9pZCAqdXNlcl9k
YXRhLCBFdmFzX09iamVjdCAqZm9yd2FyZF9idXR0b24sIHZvaWQgKmV2ZW50X2luZm8pCiB7Ci0g
ICAgaWYgKGxvbmdwcmVzc19lbmFibGVkKQotICAgICAgICByZXR1cm47CisgICBpZiAobG9uZ3By
ZXNzX2VuYWJsZWQpCisgICAgIHJldHVybjsKIAotICAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cg
PSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7CisgICBCcm93c2VyX1dpbmRvdyAqd2luZG93
ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOwogCi0gICAgZXdrX3ZpZXdfZm9yd2FyZCh3
aW5kb3ctPmV3a192aWV3KTsKLSAgICAvKiBVcGRhdGUgZm9yd2FyZCBidXR0b24gc3RhdGUgKi8K
LSAgICBlbG1fb2JqZWN0X2Rpc2FibGVkX3NldChmb3J3YXJkX2J1dHRvbiwgIWV3a192aWV3X2Zv
cndhcmRfcG9zc2libGUod2luZG93LT5ld2tfdmlldykpOworICAgZXdrX3ZpZXdfZm9yd2FyZCh3
aW5kb3ctPmV3a192aWV3KTsKKyAgIC8qIFVwZGF0ZSBmb3J3YXJkIGJ1dHRvbiBzdGF0ZSAqLwor
ICAgZWxtX29iamVjdF9kaXNhYmxlZF9zZXQoZm9yd2FyZF9idXR0b24sICFld2tfdmlld19mb3J3
YXJkX3Bvc3NpYmxlKHdpbmRvdy0+ZXdrX3ZpZXcpKTsKIH0KIAogc3RhdGljIHZvaWQKIF9zZWFy
Y2hfYmFja3dhcmRfYnV0dG9uX2NsaWNrZWRfY2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVj
dCAqc2VhcmNoX2JhY2t3YXJkX2J1dHRvbiwgdm9pZCAqZXZlbnRfaW5mbykKIHsKLSAgICBCcm93
c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOworICAgQnJv
d3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKIAotICAg
IGNoYXIgKnRleHQgPSBlbG1fZW50cnlfbWFya3VwX3RvX3V0ZjgoZWxtX2VudHJ5X2VudHJ5X2dl
dCh3aW5kb3ctPnNlYXJjaC5zZWFyY2hfZmllbGQpKTsKLSAgICBld2tfdmlld190ZXh0X2ZpbmQo
d2luZG93LT5ld2tfdmlldywgdGV4dCwgc2VhcmNoX2ZsYWdzIHwgRVdLX0ZJTkRfT1BUSU9OU19C
QUNLV0FSRFMsIE1BWF9TRUFSQ0hfQ09VTlQpOwotICAgIGZyZWUodGV4dCk7CisgICBjaGFyICp0
ZXh0ID0gZWxtX2VudHJ5X21hcmt1cF90b191dGY4KGVsbV9lbnRyeV9lbnRyeV9nZXQod2luZG93
LT5zZWFyY2guc2VhcmNoX2ZpZWxkKSk7CisgICBld2tfdmlld190ZXh0X2ZpbmQod2luZG93LT5l
d2tfdmlldywgdGV4dCwgc2VhcmNoX2ZsYWdzIHwgRVdLX0ZJTkRfT1BUSU9OU19CQUNLV0FSRFMs
IE1BWF9TRUFSQ0hfQ09VTlQpOworICAgZnJlZSh0ZXh0KTsKIH0KIAogc3RhdGljIHZvaWQKIF9z
ZWFyY2hfZm9yd2FyZF9idXR0b25fY2xpY2tlZF9jYih2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2Jq
ZWN0ICpzZWFyY2hfZm9yd2FyZF9idXR0b24sIHZvaWQgKmV2ZW50X2luZm8pCiB7Ci0gICAgQnJv
d3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKKyAgIEJy
b3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7CiAKLSAg
ICBjaGFyICp0ZXh0ID0gZWxtX2VudHJ5X21hcmt1cF90b191dGY4KGVsbV9lbnRyeV9lbnRyeV9n
ZXQod2luZG93LT5zZWFyY2guc2VhcmNoX2ZpZWxkKSk7Ci0gICAgZXdrX3ZpZXdfdGV4dF9maW5k
KHdpbmRvdy0+ZXdrX3ZpZXcsIHRleHQsIHNlYXJjaF9mbGFncywgTUFYX1NFQVJDSF9DT1VOVCk7
Ci0gICAgZnJlZSh0ZXh0KTsKKyAgIGNoYXIgKnRleHQgPSBlbG1fZW50cnlfbWFya3VwX3RvX3V0
ZjgoZWxtX2VudHJ5X2VudHJ5X2dldCh3aW5kb3ctPnNlYXJjaC5zZWFyY2hfZmllbGQpKTsKKyAg
IGV3a192aWV3X3RleHRfZmluZCh3aW5kb3ctPmV3a192aWV3LCB0ZXh0LCBzZWFyY2hfZmxhZ3Ms
IE1BWF9TRUFSQ0hfQ09VTlQpOworICAgZnJlZSh0ZXh0KTsKIH0KIAogc3RhdGljIHZvaWQKIF9z
ZWFyY2hfY2FzZV9vcHRpb25fY2hhbmdlZCh2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpz
ZWFyY2hfY2FzZV9jaGVja19ib3gsIHZvaWQgKmV2ZW50X2luZm8pCiB7Ci0gICAgQnJvd3Nlcl9X
aW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKLSAgICBjaGFyICp0
ZXh0ID0gZWxtX2VudHJ5X21hcmt1cF90b191dGY4KGVsbV9lbnRyeV9lbnRyeV9nZXQod2luZG93
LT5zZWFyY2guc2VhcmNoX2ZpZWxkKSk7CisgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJy
b3dzZXJfV2luZG93ICopdXNlcl9kYXRhOworICAgY2hhciAqdGV4dCA9IGVsbV9lbnRyeV9tYXJr
dXBfdG9fdXRmOChlbG1fZW50cnlfZW50cnlfZ2V0KHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9maWVs
ZCkpOwogCi0gICAgLyogQml0IHRvZ2dsZSB0aGUgY2FzZSBzZW5zaXRpdmUgZmxhZyAqLwotICAg
IHNlYXJjaF9mbGFncyA9IHNlYXJjaF9mbGFncyBeIEVXS19GSU5EX09QVElPTlNfQ0FTRV9JTlNF
TlNJVElWRTsKKyAgIC8qIEJpdCB0b2dnbGUgdGhlIGNhc2Ugc2Vuc2l0aXZlIGZsYWcgKi8KKyAg
IHNlYXJjaF9mbGFncyA9IHNlYXJjaF9mbGFncyBeIEVXS19GSU5EX09QVElPTlNfQ0FTRV9JTlNF
TlNJVElWRTsKIAotICAgIGV3a192aWV3X3RleHRfZmluZCh3aW5kb3ctPmV3a192aWV3LCB0ZXh0
LCBzZWFyY2hfZmxhZ3MsIE1BWF9TRUFSQ0hfQ09VTlQpOwotICAgIGZyZWUodGV4dCk7CisgICBl
d2tfdmlld190ZXh0X2ZpbmQod2luZG93LT5ld2tfdmlldywgdGV4dCwgc2VhcmNoX2ZsYWdzLCBN
QVhfU0VBUkNIX0NPVU5UKTsKKyAgIGZyZWUodGV4dCk7CiB9CiAKIHN0YXRpYyB2b2lkCiBfc2Vh
cmNoX3dvcmRfc3RhcnRfb3B0aW9uX2NoYW5nZWRfY2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09i
amVjdCAqc2VhcmNoX3dvcmRfc3RhcnRfY2hlY2tfYm94LCB2b2lkICpldmVudF9pbmZvKQogewot
ICAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7
Ci0gICAgY2hhciAqdGV4dCA9IGVsbV9lbnRyeV9tYXJrdXBfdG9fdXRmOChlbG1fZW50cnlfZW50
cnlfZ2V0KHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9maWVsZCkpOworICAgQnJvd3Nlcl9XaW5kb3cg
KndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKKyAgIGNoYXIgKnRleHQgPSBl
bG1fZW50cnlfbWFya3VwX3RvX3V0ZjgoZWxtX2VudHJ5X2VudHJ5X2dldCh3aW5kb3ctPnNlYXJj
aC5zZWFyY2hfZmllbGQpKTsKIAotICAgIC8qIEJpdCB0b2dnbGUgdGhlIHdvcmQgc3RhcnQgZmxh
ZyAqLwotICAgIHNlYXJjaF9mbGFncyA9IHNlYXJjaF9mbGFncyBeIEVXS19GSU5EX09QVElPTlNf
QVRfV09SRF9TVEFSVFM7CisgICAvKiBCaXQgdG9nZ2xlIHRoZSB3b3JkIHN0YXJ0IGZsYWcgKi8K
KyAgIHNlYXJjaF9mbGFncyA9IHNlYXJjaF9mbGFncyBeIEVXS19GSU5EX09QVElPTlNfQVRfV09S
RF9TVEFSVFM7CiAKLSAgICBld2tfdmlld190ZXh0X2ZpbmQod2luZG93LT5ld2tfdmlldywgdGV4
dCwgc2VhcmNoX2ZsYWdzLCBNQVhfU0VBUkNIX0NPVU5UKTsKLSAgICBmcmVlKHRleHQpOworICAg
ZXdrX3ZpZXdfdGV4dF9maW5kKHdpbmRvdy0+ZXdrX3ZpZXcsIHRleHQsIHNlYXJjaF9mbGFncywg
TUFYX1NFQVJDSF9DT1VOVCk7CisgICBmcmVlKHRleHQpOwogfQogCiBzdGF0aWMgdm9pZAogX3Nl
YXJjaF9jbG9zZV9idXR0b25fY2xpY2tlZF9jYih2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0
ICpzZWFyY2hfY2xvc2VfYnV0dG9uLCB2b2lkICpldmVudF9pbmZvKQogewotICAgIEJyb3dzZXJf
V2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7CisgICBCcm93c2Vy
X1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOwogCi0gICAgc2Vh
cmNoX2JveF9oaWRlKHdpbmRvdyk7CisgICBzZWFyY2hfYm94X2hpZGUod2luZG93KTsKIH0KIAog
c3RhdGljIHZvaWQKIF9yZWZyZXNoX2J1dHRvbl9jbGlja2VkX2NiKHZvaWQgKnVzZXJfZGF0YSwg
RXZhc19PYmplY3QgKnJlZnJlc2hfYnV0dG9uLCB2b2lkICpldmVudF9pbmZvKQogewotICAgIEJy
b3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7CisgICBC
cm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOwogCi0g
ICAgRXZhcyAqZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KHJlZnJlc2hfYnV0dG9uKTsKLSAg
ICBFaW5hX0Jvb2wgY3RybFByZXNzZWQgPSBldmFzX2tleV9tb2RpZmllcl9pc19zZXQoZXZhc19r
ZXlfbW9kaWZpZXJfZ2V0KGV2YXMpLCAiQ29udHJvbCIpOwotICAgIGlmIChjdHJsUHJlc3NlZCkg
ewotICAgICAgICBJTkZPKCJSZWxvYWRpbmcgYW5kIGJ5cGFzc2luZyBjYWNoZS4uLiIpOwotICAg
ICAgICBld2tfdmlld19yZWxvYWRfYnlwYXNzX2NhY2hlKHdpbmRvdy0+ZXdrX3ZpZXcpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIElORk8oIlJlbG9hZGluZy4uLiIpOwotICAgICAgICBld2tfdmll
d19yZWxvYWQod2luZG93LT5ld2tfdmlldyk7Ci0gICAgfQorICAgRXZhcyAqZXZhcyA9IGV2YXNf
b2JqZWN0X2V2YXNfZ2V0KHJlZnJlc2hfYnV0dG9uKTsKKyAgIEVpbmFfQm9vbCBjdHJsUHJlc3Nl
ZCA9IGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChldmFzX2tleV9tb2RpZmllcl9nZXQoZXZhcyks
ICJDb250cm9sIik7CisgICBpZiAoY3RybFByZXNzZWQpIHsKKyAgICAgSU5GTygiUmVsb2FkaW5n
IGFuZCBieXBhc3NpbmcgY2FjaGUuLi4iKTsKKyAgICAgZXdrX3ZpZXdfcmVsb2FkX2J5cGFzc19j
YWNoZSh3aW5kb3ctPmV3a192aWV3KTsKKyAgIH0gZWxzZSB7CisgICAgIElORk8oIlJlbG9hZGlu
Zy4uLiIpOworICAgICBld2tfdmlld19yZWxvYWQod2luZG93LT5ld2tfdmlldyk7CisgICB9CiB9
CiAKIHN0YXRpYyB2b2lkCiBfc3RvcF9idXR0b25fY2xpY2tlZF9jYih2b2lkICp1c2VyX2RhdGEs
IEV2YXNfT2JqZWN0ICpzdG9wX2J1dHRvbiwgdm9pZCAqZXZlbnRfaW5mbykKIHsKLSAgICBCcm93
c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOworICAgQnJv
d3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKIAotICAg
IElORk8oIlN0b3Agd2FzIFByZXNzZWQuIEFib3J0aW5nIGxvYWQuLi4iKTsKLSAgICBld2tfdmll
d19zdG9wKHdpbmRvdy0+ZXdrX3ZpZXcpOworICAgSU5GTygiU3RvcCB3YXMgUHJlc3NlZC4gQWJv
cnRpbmcgbG9hZC4uLiIpOworICAgZXdrX3ZpZXdfc3RvcCh3aW5kb3ctPmV3a192aWV3KTsKIH0K
IAogc3RhdGljIGNoYXIgKgogbGlzdF9pdGVtX2xhYmVsX2dldCh2b2lkICpkYXRhLCBFdmFzX09i
amVjdCAqb2JqLCBjb25zdCBjaGFyICpwYXJ0KQogewotICAgIGludCBsZW4gPSBzdHJsZW4oKGNo
YXIgKilkYXRhKTsKLSAgICBjaGFyICpidWYgPSAoY2hhciAqKW1hbGxvYyhzaXplb2YoY2hhcikg
KiAobGVuICsgMSkpOwotICAgIHNucHJpbnRmKGJ1ZiwgbGVuICsgMSwgIiVzIiwgKGNoYXIgKilk
YXRhKTsKLSAgICByZXR1cm4gYnVmOworICAgaW50IGxlbiA9IHN0cmxlbigoY2hhciAqKWRhdGEp
OworICAgY2hhciAqYnVmID0gKGNoYXIgKiltYWxsb2Moc2l6ZW9mKGNoYXIpICogKGxlbiArIDEp
KTsKKyAgIHNucHJpbnRmKGJ1ZiwgbGVuICsgMSwgIiVzIiwgKGNoYXIgKilkYXRhKTsKKyAgIHJl
dHVybiBidWY7CiB9CiAKIHN0YXRpYyB2b2lkCiBfbGlzdF9pdGVtX3NlbGVjdF9jYih2b2lkICp1
c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpvYmosIHZvaWQgKmV2ZW50X2luZm8pCiB7Ci0gICAgQnJv
d3Nlcl9XaW5kb3cgKndpbmRvdyA9IGV2YXNfb2JqZWN0X2RhdGFfZ2V0KG9iaiwgIkJyb3dzZXJf
V2luZG93Iik7Ci0gICAgZXdrX3ZpZXdfbmF2aWdhdGVfdG8od2luZG93LT5ld2tfdmlldywgdXNl
cl9kYXRhKTsKLSAgICBoaXN0b3J5X2xpc3RfaGlkZSh3aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0
X2RhdGFfZGVsKG9iaiwgIkJyb3dzZXJfV2luZG93Iik7CisgICBCcm93c2VyX1dpbmRvdyAqd2lu
ZG93ID0gZXZhc19vYmplY3RfZGF0YV9nZXQob2JqLCAiQnJvd3Nlcl9XaW5kb3ciKTsKKyAgIGV3
a192aWV3X25hdmlnYXRlX3RvKHdpbmRvdy0+ZXdrX3ZpZXcsIHVzZXJfZGF0YSk7CisgICBoaXN0
b3J5X2xpc3RfaGlkZSh3aW5kb3cpOworICAgZXZhc19vYmplY3RfZGF0YV9kZWwob2JqLCAiQnJv
d3Nlcl9XaW5kb3ciKTsKIH0KIAogc3RhdGljIHZvaWQKIG5hdmlnYXRpb25fYnV0dG9uX2xvbmdw
cmVzc19wcm9jZXNzKHZvaWQgKnVzZXJfZGF0YSwgRWluYV9Cb29sIGZvcndhcmRfbmF2aWdhdGlv
bl9lbmFibGVkKQogewotICAgIGlmIChsb25ncHJlc3NfZW5hYmxlZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbG9uZ3ByZXNzX2VuYWJsZWQgPSBFSU5BX1RSVUU7Ci0gICAgQnJvd3Nlcl9XaW5k
b3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKLQotICAgIEV3a19CYWNr
X0ZvcndhcmRfTGlzdCAqbGlzdCA9IGV3a192aWV3X2JhY2tfZm9yd2FyZF9saXN0X2dldCh3aW5k
b3ctPmV3a192aWV3KTsKLSAgICBjb25zdCBFaW5hX0xpc3QgKmw7Ci0gICAgdm9pZCAqZGF0YTsK
LSAgICBzdGF0aWMgRWxtX0dlbmxpc3RfSXRlbV9DbGFzcyAqbGlzdF9pdGVtID0gTlVMTDsKLSAg
ICBjb25zdCBjaGFyICp0aXRsZSA9IE5VTEw7Ci0gICAgaW50IGl0ZW1fY291bnQ7Ci0gICAgaW50
IHg7Ci0gICAgaW50IHk7Ci0gICAgaW50IHdpZHRoOwotICAgIGludCBoZWlnaHQ7Ci0gICAgc2l6
ZV90IGluZGV4OwotCi0gICAgZXZhc19vYmplY3RfZGF0YV9zZXQod2luZG93LT5oaXN0b3J5Lmhp
c3RvcnlfbGlzdCwgIkJyb3dzZXJfV2luZG93Iiwgd2luZG93KTsKLQotICAgIGlmIChmb3J3YXJk
X25hdmlnYXRpb25fZW5hYmxlZCkKLSAgICAgICAgd2luZG93LT5oaXN0b3J5Lmhpc3RvcnlfbGlz
dF9pdGVtcyA9IGV3a19iYWNrX2ZvcndhcmRfbGlzdF9mb3J3YXJkX2l0ZW1zX2NvcHkobGlzdCk7
Ci0gICAgZWxzZQotICAgICAgICB3aW5kb3ctPmhpc3RvcnkuaGlzdG9yeV9saXN0X2l0ZW1zID0g
ZXdrX2JhY2tfZm9yd2FyZF9saXN0X2JhY2tfaXRlbXNfY29weShsaXN0KTsKLQotICAgIGlmICgh
bGlzdF9pdGVtKSB7Ci0gICAgICAgIGxpc3RfaXRlbSA9IGVsbV9nZW5saXN0X2l0ZW1fY2xhc3Nf
bmV3KCk7Ci0gICAgICAgIGxpc3RfaXRlbS0+aXRlbV9zdHlsZSA9ICJkZWZhdWx0IjsKLSAgICAg
ICAgbGlzdF9pdGVtLT5mdW5jLnRleHRfZ2V0ID0gbGlzdF9pdGVtX2xhYmVsX2dldDsKLSAgICAg
ICAgbGlzdF9pdGVtLT5mdW5jLmNvbnRlbnRfZ2V0ID0gTlVMTDsKLSAgICAgICAgbGlzdF9pdGVt
LT5mdW5jLnN0YXRlX2dldCA9IE5VTEw7Ci0gICAgICAgIGxpc3RfaXRlbS0+ZnVuYy5kZWwgPSBO
VUxMOwotICAgIH0KLQotICAgIGl0ZW1fY291bnQgPSBlaW5hX2xpc3RfY291bnQod2luZG93LT5o
aXN0b3J5Lmhpc3RvcnlfbGlzdF9pdGVtcyk7Ci0gICAgSU5GTygibmF2aWdhdGlvbl9idXR0b25f
bG9uZ3ByZXNzX3Byb2Nlc3MgOiBJdGVtIGNvdW50ID0gJWQgZm9yd2FyZF9uYXZpZ2F0aW9uX2Vu
YWJsZWQgPSAlZCIsIGl0ZW1fY291bnQsIGZvcndhcmRfbmF2aWdhdGlvbl9lbmFibGVkKTsKLQot
ICAgIEVJTkFfTElTVF9GT1JFQUNIKHdpbmRvdy0+aGlzdG9yeS5oaXN0b3J5X2xpc3RfaXRlbXMs
IGwsIGRhdGEpIHsKLSAgICAgICAgdGl0bGUgPSBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV90
aXRsZV9nZXQoZGF0YSk7Ci0gICAgICAgIElORk8oIiB0aXRsZSA9ICVzIiwgdGl0bGUpOwotICAg
ICAgICBlbG1fZ2VubGlzdF9pdGVtX2FwcGVuZCh3aW5kb3ctPmhpc3RvcnkuaGlzdG9yeV9saXN0
LCBsaXN0X2l0ZW0sICh2b2lkICopKHRpdGxlKSwgTlVMTCwgRUxNX0dFTkxJU1RfSVRFTV9OT05F
LCBfbGlzdF9pdGVtX3NlbGVjdF9jYiwgZGF0YSk7Ci0gICAgfQotCi0gICAgaWYgKGl0ZW1fY291
bnQgPiAwKSB7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldCh3aW5kb3ctPmVsbV93
aW5kb3csICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKLSAgICAgICAgZWxtX2xpc3RfZ28od2lu
ZG93LT5oaXN0b3J5Lmhpc3RvcnlfbGlzdCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZSh3
aW5kb3ctPmhpc3RvcnkuaGlzdG9yeV9ib3ggLCB3aWR0aCAvIDMgLCBMSVNUX0lURU1fSEVJR0hU
ICogaXRlbV9jb3VudCk7Ci0KLSAgICAgICAgaWYgKGZvcndhcmRfbmF2aWdhdGlvbl9lbmFibGVk
KSB7Ci0gICAgICAgICAgICBldmFzX29iamVjdF9tb3ZlKHdpbmRvdy0+aGlzdG9yeS5oaXN0b3J5
X2JveCAsIHggKyBUT09MX0JBUl9CVVRUT05fU0laRSArIDEsIHkgKyBUT09MX0JBUl9CVVRUT05f
U0laRSk7Ci0gICAgICAgICAgICBldmFzX29iamVjdF9tb3ZlKHdpbmRvdy0+aGlzdG9yeS5oaXN0
b3J5X2xpc3QgLCB4ICsgVE9PTF9CQVJfQlVUVE9OX1NJWkUgKyAxLCB5ICsgVE9PTF9CQVJfQlVU
VE9OX1NJWkUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZXZhc19vYmplY3RfbW92
ZSh3aW5kb3ctPmhpc3RvcnkuaGlzdG9yeV9ib3ggLCB4LCB5ICsgVE9PTF9CQVJfQlVUVE9OX1NJ
WkUpOwotICAgICAgICAgICAgZXZhc19vYmplY3RfbW92ZSh3aW5kb3ctPmhpc3RvcnkuaGlzdG9y
eV9saXN0ICwgeCwgeSArIFRPT0xfQkFSX0JVVFRPTl9TSVpFKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGVsbV9nZW5saXN0X21vZGVfc2V0KHdpbmRvdy0+aGlzdG9yeS5oaXN0b3J5X2xpc3QsIEVM
TV9MSVNUX0NPTVBSRVNTKTsKLSAgICAgICAgZXZhc19vYmplY3Rfc2hvdyh3aW5kb3ctPmhpc3Rv
cnkuaGlzdG9yeV9ib3gpOwotICAgICAgICBldmFzX29iamVjdF9zaG93KHdpbmRvdy0+aGlzdG9y
eS5oaXN0b3J5X2xpc3QpOwotICAgICAgICBldmFzX29iamVjdF9mb2N1c19zZXQod2luZG93LT5l
d2tfdmlldywgRUlOQV9GQUxTRSk7Ci0gICAgICAgIGVsbV9vYmplY3RfZm9jdXNfc2V0KHdpbmRv
dy0+aGlzdG9yeS5oaXN0b3J5X2xpc3QsIEVJTkFfVFJVRSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IGxvbmdwcmVzc19lbmFibGVkID0gRUlOQV9GQUxTRTsKKyAgIGlmIChsb25ncHJlc3NfZW5hYmxl
ZCkKKyAgICAgcmV0dXJuOworCisgICBsb25ncHJlc3NfZW5hYmxlZCA9IEVJTkFfVFJVRTsKKyAg
IEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7CisK
KyAgIEV3a19CYWNrX0ZvcndhcmRfTGlzdCAqbGlzdCA9IGV3a192aWV3X2JhY2tfZm9yd2FyZF9s
aXN0X2dldCh3aW5kb3ctPmV3a192aWV3KTsKKyAgIGNvbnN0IEVpbmFfTGlzdCAqbDsKKyAgIHZv
aWQgKmRhdGE7CisgICBzdGF0aWMgRWxtX0dlbmxpc3RfSXRlbV9DbGFzcyAqbGlzdF9pdGVtID0g
TlVMTDsKKyAgIGNvbnN0IGNoYXIgKnRpdGxlID0gTlVMTDsKKyAgIGludCBpdGVtX2NvdW50Owor
ICAgaW50IHg7CisgICBpbnQgeTsKKyAgIGludCB3aWR0aDsKKyAgIGludCBoZWlnaHQ7CisgICBz
aXplX3QgaW5kZXg7CisKKyAgIGV2YXNfb2JqZWN0X2RhdGFfc2V0KHdpbmRvdy0+aGlzdG9yeS5o
aXN0b3J5X2xpc3QsICJCcm93c2VyX1dpbmRvdyIsIHdpbmRvdyk7CisKKyAgIGlmIChmb3J3YXJk
X25hdmlnYXRpb25fZW5hYmxlZCkKKyAgICAgd2luZG93LT5oaXN0b3J5Lmhpc3RvcnlfbGlzdF9p
dGVtcyA9IGV3a19iYWNrX2ZvcndhcmRfbGlzdF9mb3J3YXJkX2l0ZW1zX2NvcHkobGlzdCk7Cisg
ICBlbHNlCisgICAgIHdpbmRvdy0+aGlzdG9yeS5oaXN0b3J5X2xpc3RfaXRlbXMgPSBld2tfYmFj
a19mb3J3YXJkX2xpc3RfYmFja19pdGVtc19jb3B5KGxpc3QpOworCisgICBpZiAoIWxpc3RfaXRl
bSkgeworICAgICBsaXN0X2l0ZW0gPSBlbG1fZ2VubGlzdF9pdGVtX2NsYXNzX25ldygpOworICAg
ICBsaXN0X2l0ZW0tPml0ZW1fc3R5bGUgPSAiZGVmYXVsdCI7CisgICAgIGxpc3RfaXRlbS0+ZnVu
Yy50ZXh0X2dldCA9IGxpc3RfaXRlbV9sYWJlbF9nZXQ7CisgICAgIGxpc3RfaXRlbS0+ZnVuYy5j
b250ZW50X2dldCA9IE5VTEw7CisgICAgIGxpc3RfaXRlbS0+ZnVuYy5zdGF0ZV9nZXQgPSBOVUxM
OworICAgICBsaXN0X2l0ZW0tPmZ1bmMuZGVsID0gTlVMTDsKKyAgIH0KKworICAgaXRlbV9jb3Vu
dCA9IGVpbmFfbGlzdF9jb3VudCh3aW5kb3ctPmhpc3RvcnkuaGlzdG9yeV9saXN0X2l0ZW1zKTsK
KyAgIElORk8oIm5hdmlnYXRpb25fYnV0dG9uX2xvbmdwcmVzc19wcm9jZXNzIDogSXRlbSBjb3Vu
dCA9ICVkIGZvcndhcmRfbmF2aWdhdGlvbl9lbmFibGVkID0gJWQiLCBpdGVtX2NvdW50LCBmb3J3
YXJkX25hdmlnYXRpb25fZW5hYmxlZCk7CisKKyAgIEVJTkFfTElTVF9GT1JFQUNIKHdpbmRvdy0+
aGlzdG9yeS5oaXN0b3J5X2xpc3RfaXRlbXMsIGwsIGRhdGEpIHsKKyAgICAgdGl0bGUgPSBld2tf
YmFja19mb3J3YXJkX2xpc3RfaXRlbV90aXRsZV9nZXQoZGF0YSk7CisgICAgIElORk8oIiB0aXRs
ZSA9ICVzIiwgdGl0bGUpOworICAgICBlbG1fZ2VubGlzdF9pdGVtX2FwcGVuZCh3aW5kb3ctPmhp
c3RvcnkuaGlzdG9yeV9saXN0LCBsaXN0X2l0ZW0sICh2b2lkICopKHRpdGxlKSwgTlVMTCwgRUxN
X0dFTkxJU1RfSVRFTV9OT05FLCBfbGlzdF9pdGVtX3NlbGVjdF9jYiwgZGF0YSk7CisgICB9CisK
KyAgIGlmIChpdGVtX2NvdW50ID4gMCkgeworICAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQo
d2luZG93LT5lbG1fd2luZG93LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CisgICAgIGVsbV9s
aXN0X2dvKHdpbmRvdy0+aGlzdG9yeS5oaXN0b3J5X2xpc3QpOworICAgICBldmFzX29iamVjdF9y
ZXNpemUod2luZG93LT5oaXN0b3J5Lmhpc3RvcnlfYm94ICwgd2lkdGggLyAzICwgTElTVF9JVEVN
X0hFSUdIVCAqIGl0ZW1fY291bnQpOworCisgICAgIGlmIChmb3J3YXJkX25hdmlnYXRpb25fZW5h
YmxlZCkgeworICAgICAgIGV2YXNfb2JqZWN0X21vdmUod2luZG93LT5oaXN0b3J5Lmhpc3Rvcnlf
Ym94ICwgeCArIFRPT0xfQkFSX0JVVFRPTl9TSVpFICsgMSwgeSArIFRPT0xfQkFSX0JVVFRPTl9T
SVpFKTsKKyAgICAgICBldmFzX29iamVjdF9tb3ZlKHdpbmRvdy0+aGlzdG9yeS5oaXN0b3J5X2xp
c3QgLCB4ICsgVE9PTF9CQVJfQlVUVE9OX1NJWkUgKyAxLCB5ICsgVE9PTF9CQVJfQlVUVE9OX1NJ
WkUpOworICAgICB9IGVsc2UgeworICAgICAgIGV2YXNfb2JqZWN0X21vdmUod2luZG93LT5oaXN0
b3J5Lmhpc3RvcnlfYm94ICwgeCwgeSArIFRPT0xfQkFSX0JVVFRPTl9TSVpFKTsKKyAgICAgICBl
dmFzX29iamVjdF9tb3ZlKHdpbmRvdy0+aGlzdG9yeS5oaXN0b3J5X2xpc3QgLCB4LCB5ICsgVE9P
TF9CQVJfQlVUVE9OX1NJWkUpOworICAgICB9CisKKyAgICAgZWxtX2dlbmxpc3RfbW9kZV9zZXQo
d2luZG93LT5oaXN0b3J5Lmhpc3RvcnlfbGlzdCwgRUxNX0xJU1RfQ09NUFJFU1MpOworICAgICBl
dmFzX29iamVjdF9zaG93KHdpbmRvdy0+aGlzdG9yeS5oaXN0b3J5X2JveCk7CisgICAgIGV2YXNf
b2JqZWN0X3Nob3cod2luZG93LT5oaXN0b3J5Lmhpc3RvcnlfbGlzdCk7CisgICAgIGV2YXNfb2Jq
ZWN0X2ZvY3VzX3NldCh3aW5kb3ctPmV3a192aWV3LCBFSU5BX0ZBTFNFKTsKKyAgICAgZWxtX29i
amVjdF9mb2N1c19zZXQod2luZG93LT5oaXN0b3J5Lmhpc3RvcnlfbGlzdCwgRUlOQV9UUlVFKTsK
KyAgIH0gZWxzZQorICAgICBsb25ncHJlc3NfZW5hYmxlZCA9IEVJTkFfRkFMU0U7CiB9CiAKIHN0
YXRpYyB2b2lkCiBfZm9yd2FyZF9idXR0b25fbG9uZ3ByZXNzX2NiKHZvaWQgKnVzZXJfZGF0YSwg
RXZhc19PYmplY3QgKmZvcndhcmRfYnV0dG9uLCB2b2lkICpldmVudF9pbmZvKQogewotICAgIEJy
b3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7CisgICBC
cm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOwogCi0g
ICAgbmF2aWdhdGlvbl9idXR0b25fbG9uZ3ByZXNzX3Byb2Nlc3ModXNlcl9kYXRhLCBFSU5BX1RS
VUUpOwotICAgIGVsbV9vYmplY3RfZGlzYWJsZWRfc2V0KGZvcndhcmRfYnV0dG9uLCAhZXdrX3Zp
ZXdfYmFja19wb3NzaWJsZSh3aW5kb3ctPmV3a192aWV3KSk7CisgICBuYXZpZ2F0aW9uX2J1dHRv
bl9sb25ncHJlc3NfcHJvY2Vzcyh1c2VyX2RhdGEsIEVJTkFfVFJVRSk7CisgICBlbG1fb2JqZWN0
X2Rpc2FibGVkX3NldChmb3J3YXJkX2J1dHRvbiwgIWV3a192aWV3X2JhY2tfcG9zc2libGUod2lu
ZG93LT5ld2tfdmlldykpOwogfQogCiBzdGF0aWMgdm9pZAogX2JhY2tfYnV0dG9uX2xvbmdwcmVz
c19jYih2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpiYWNrX2J1dHRvbiwgdm9pZCAqZXZl
bnRfaW5mbykKIHsKLSAgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93
ICopdXNlcl9kYXRhOworICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRv
dyAqKXVzZXJfZGF0YTsKIAotICAgIG5hdmlnYXRpb25fYnV0dG9uX2xvbmdwcmVzc19wcm9jZXNz
KHVzZXJfZGF0YSwgRUlOQV9GQUxTRSk7Ci0gICAgZWxtX29iamVjdF9kaXNhYmxlZF9zZXQoYmFj
a19idXR0b24sICFld2tfdmlld19iYWNrX3Bvc3NpYmxlKHdpbmRvdy0+ZXdrX3ZpZXcpKTsKKyAg
IG5hdmlnYXRpb25fYnV0dG9uX2xvbmdwcmVzc19wcm9jZXNzKHVzZXJfZGF0YSwgRUlOQV9GQUxT
RSk7CisgICBlbG1fb2JqZWN0X2Rpc2FibGVkX3NldChiYWNrX2J1dHRvbiwgIWV3a192aWV3X2Jh
Y2tfcG9zc2libGUod2luZG93LT5ld2tfdmlldykpOwogfQogCiBzdGF0aWMgdm9pZAogcXVpdF9l
dmVudF9sb29wKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKm9iaiwgdm9pZCAqZXZlbnRf
aW5mbykKIHsKLSAgICBlY29yZV9tYWluX2xvb3BfcXVpdCgpOworICAgZWNvcmVfbWFpbl9sb29w
X3F1aXQoKTsKIH0KIAogc3RhdGljIHZvaWQKIF9va19jbGlja2VkX2NiKHZvaWQgKnVzZXJfZGF0
YSwgRXZhc19PYmplY3QgKm9iaiwgdm9pZCAqZXZlbnRfaW5mbykKIHsKLSAgICBFaW5hX0Jvb2wg
KmNvbmZpcm1lZCA9IChFaW5hX0Jvb2wgKil1c2VyX2RhdGE7Ci0gICAgKmNvbmZpcm1lZCA9IEVJ
TkFfVFJVRTsKKyAgIEVpbmFfQm9vbCAqY29uZmlybWVkID0gKEVpbmFfQm9vbCAqKXVzZXJfZGF0
YTsKKyAgICpjb25maXJtZWQgPSBFSU5BX1RSVUU7CiAKLSAgICBlY29yZV9tYWluX2xvb3BfcXVp
dCgpOworICAgZWNvcmVfbWFpbl9sb29wX3F1aXQoKTsKIH0KIAogc3RhdGljIEVpbmFfU3RyaW5n
c2hhcmUgKgogX2ZpbGVfZW50cnlfZGlhbG9nX3Nob3coQnJvd3Nlcl9XaW5kb3cgKndpbmRvdywg
Y29uc3QgY2hhciAqbGFiZWxfdGFnLCBjb25zdCBjaGFyICpkZWZhdWx0X3RleHQpCiB7Ci0gICAg
RXZhc19PYmplY3QgKmZpbGVfcG9wdXAgPSBlbG1fcG9wdXBfYWRkKHdpbmRvdy0+ZWxtX3dpbmRv
dyk7Ci0gICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X3dlaWdodF9zZXQoZmlsZV9wb3B1cCwgRVZB
U19ISU5UX0VYUEFORCwgRVZBU19ISU5UX0VYUEFORCk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhm
aWxlX3BvcHVwKTsKLQotICAgIEV2YXNfT2JqZWN0ICp2Ym94ID0gZWxtX2JveF9hZGQoZmlsZV9w
b3B1cCk7Ci0gICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X3dlaWdodF9zZXQodmJveCwgRVZBU19I
SU5UX0VYUEFORCwgRVZBU19ISU5UX0VYUEFORCk7Ci0gICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50
X2FsaWduX3NldCh2Ym94LCBFVkFTX0hJTlRfRklMTCwgRVZBU19ISU5UX0ZJTEwpOwotICAgIGVs
bV9vYmplY3RfY29udGVudF9zZXQoZmlsZV9wb3B1cCwgdmJveCk7Ci0gICAgZXZhc19vYmplY3Rf
c2hvdyh2Ym94KTsKLQotICAgIEV2YXNfT2JqZWN0ICpsYWJlbCA9IGVsbV9sYWJlbF9hZGQod2lu
ZG93LT5lbG1fd2luZG93KTsKLSAgICBlbG1fb2JqZWN0X3RleHRfc2V0KGxhYmVsLCBsYWJlbF90
YWcpOwotICAgIGV2YXNfb2JqZWN0X3NpemVfaGludF93ZWlnaHRfc2V0KGxhYmVsLCBFVkFTX0hJ
TlRfRVhQQU5ELCAwLjApOwotICAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9hbGlnbl9zZXQobGFi
ZWwsIEVWQVNfSElOVF9GSUxMLCAwLjUpOwotICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChsYWJl
bCwgMjMsIDQ1LCA2NywgMTQyKTsKLSAgICBlbG1fYm94X3BhY2tfZW5kKHZib3gsIGxhYmVsKTsK
LSAgICBldmFzX29iamVjdF9zaG93KGxhYmVsKTsKLQotICAgIEV2YXNfT2JqZWN0ICpmc19lbnRy
eSA9IGVsbV9maWxlc2VsZWN0b3JfZW50cnlfYWRkKGZpbGVfcG9wdXApOwotICAgIGVsbV9maWxl
c2VsZWN0b3JfaXNfc2F2ZV9zZXQoZnNfZW50cnksIEVJTkFfVFJVRSk7Ci0gICAgZXZhc19vYmpl
Y3Rfc2l6ZV9oaW50X2FsaWduX3NldChmc19lbnRyeSwgRVZBU19ISU5UX0ZJTEwsIDApOwotICAg
IGVsbV9maWxlc2VsZWN0b3JfcGF0aF9zZXQoZnNfZW50cnksIGRlZmF1bHRfdGV4dCk7Ci0gICAg
ZWxtX29iamVjdF90ZXh0X3NldChmc19lbnRyeSwgIkZpbGVDaG9vc2VyIik7Ci0gICAgZWxtX2Jv
eF9wYWNrX2VuZCh2Ym94LCBmc19lbnRyeSk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhmc19lbnRy
eSk7Ci0KLSAgICBFdmFzX09iamVjdCAqaGJveCA9IGVsbV9ib3hfYWRkKGZpbGVfcG9wdXApOwot
ICAgIGV2YXNfb2JqZWN0X3NpemVfaGludF93ZWlnaHRfc2V0KGhib3gsIEVWQVNfSElOVF9FWFBB
TkQsIEVWQVNfSElOVF9FWFBBTkQpOwotICAgIGVsbV9ib3hfaG9yaXpvbnRhbF9zZXQoaGJveCwg
RUlOQV9UUlVFKTsKLSAgICBldmFzX29iamVjdF9zaXplX2hpbnRfYWxpZ25fc2V0KGhib3gsIEVW
QVNfSElOVF9GSUxMLCBFVkFTX0hJTlRfRklMTCk7Ci0gICAgZWxtX2JveF9wYWNrX2VuZCh2Ym94
LCBoYm94KTsKLSAgICBldmFzX29iamVjdF9zaG93KGhib3gpOwotCi0gICAgRWluYV9Cb29sIG9r
ID0gRUlOQV9GQUxTRTsKLSAgICBFdmFzX09iamVjdCAqb2tfYnV0dG9uID0gZWxtX2J1dHRvbl9h
ZGQoZmlsZV9wb3B1cCk7Ci0gICAgZWxtX29iamVjdF90ZXh0X3NldChva19idXR0b24sICJPSyIp
OwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChva19idXR0b24sICJjbGlja2Vk
IiwgX29rX2NsaWNrZWRfY2IsICZvayk7Ci0gICAgZWxtX2JveF9wYWNrX2VuZChoYm94LCBva19i
dXR0b24pOwotICAgIGV2YXNfb2JqZWN0X3Nob3cob2tfYnV0dG9uKTsKLQotICAgIEV2YXNfT2Jq
ZWN0ICpjYW5jZWxfYnV0dG9uID0gZWxtX2J1dHRvbl9hZGQoZmlsZV9wb3B1cCk7Ci0gICAgZWxt
X29iamVjdF90ZXh0X3NldChjYW5jZWxfYnV0dG9uLCAiQ2FuY2VsIik7Ci0gICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfYWRkKGNhbmNlbF9idXR0b24sICJjbGlja2VkIiwgcXVpdF9ldmVu
dF9sb29wLCBOVUxMKTsKLSAgICBlbG1fYm94X3BhY2tfZW5kKGhib3gsIGNhbmNlbF9idXR0b24p
OwotICAgIGV2YXNfb2JqZWN0X3Nob3coY2FuY2VsX2J1dHRvbik7Ci0KLSAgICBlY29yZV9tYWlu
X2xvb3BfYmVnaW4oKTsKLQotICAgIEVpbmFfU3RyaW5nc2hhcmUgKmZpbGVfcGF0aCA9IG9rID8g
ZWluYV9zdHJpbmdzaGFyZV9hZGQoZWxtX2ZpbGVzZWxlY3Rvcl9wYXRoX2dldChmc19lbnRyeSkp
IDogTlVMTDsKLSAgICBldmFzX29iamVjdF9kZWwoZmlsZV9wb3B1cCk7Ci0gICAgcmV0dXJuIGZp
bGVfcGF0aDsKKyAgIEV2YXNfT2JqZWN0ICpmaWxlX3BvcHVwID0gZWxtX3BvcHVwX2FkZCh3aW5k
b3ctPmVsbV93aW5kb3cpOworICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X3dlaWdodF9zZXQoZmls
ZV9wb3B1cCwgRVZBU19ISU5UX0VYUEFORCwgRVZBU19ISU5UX0VYUEFORCk7CisgICBldmFzX29i
amVjdF9zaG93KGZpbGVfcG9wdXApOworCisgICBFdmFzX09iamVjdCAqdmJveCA9IGVsbV9ib3hf
YWRkKGZpbGVfcG9wdXApOworICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X3dlaWdodF9zZXQodmJv
eCwgRVZBU19ISU5UX0VYUEFORCwgRVZBU19ISU5UX0VYUEFORCk7CisgICBldmFzX29iamVjdF9z
aXplX2hpbnRfYWxpZ25fc2V0KHZib3gsIEVWQVNfSElOVF9GSUxMLCBFVkFTX0hJTlRfRklMTCk7
CisgICBlbG1fb2JqZWN0X2NvbnRlbnRfc2V0KGZpbGVfcG9wdXAsIHZib3gpOworICAgZXZhc19v
YmplY3Rfc2hvdyh2Ym94KTsKKworICAgRXZhc19PYmplY3QgKmxhYmVsID0gZWxtX2xhYmVsX2Fk
ZCh3aW5kb3ctPmVsbV93aW5kb3cpOworICAgZWxtX29iamVjdF90ZXh0X3NldChsYWJlbCwgbGFi
ZWxfdGFnKTsKKyAgIGV2YXNfb2JqZWN0X3NpemVfaGludF93ZWlnaHRfc2V0KGxhYmVsLCBFVkFT
X0hJTlRfRVhQQU5ELCAwLjApOworICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X2FsaWduX3NldChs
YWJlbCwgRVZBU19ISU5UX0ZJTEwsIDAuNSk7CisgICBldmFzX29iamVjdF9jb2xvcl9zZXQobGFi
ZWwsIDIzLCA0NSwgNjcsIDE0Mik7CisgICBlbG1fYm94X3BhY2tfZW5kKHZib3gsIGxhYmVsKTsK
KyAgIGV2YXNfb2JqZWN0X3Nob3cobGFiZWwpOworCisgICBFdmFzX09iamVjdCAqZnNfZW50cnkg
PSBlbG1fZmlsZXNlbGVjdG9yX2VudHJ5X2FkZChmaWxlX3BvcHVwKTsKKyAgIGVsbV9maWxlc2Vs
ZWN0b3JfaXNfc2F2ZV9zZXQoZnNfZW50cnksIEVJTkFfVFJVRSk7CisgICBldmFzX29iamVjdF9z
aXplX2hpbnRfYWxpZ25fc2V0KGZzX2VudHJ5LCBFVkFTX0hJTlRfRklMTCwgMCk7CisgICBlbG1f
ZmlsZXNlbGVjdG9yX3BhdGhfc2V0KGZzX2VudHJ5LCBkZWZhdWx0X3RleHQpOworICAgZWxtX29i
amVjdF90ZXh0X3NldChmc19lbnRyeSwgIkZpbGVDaG9vc2VyIik7CisgICBlbG1fYm94X3BhY2tf
ZW5kKHZib3gsIGZzX2VudHJ5KTsKKyAgIGV2YXNfb2JqZWN0X3Nob3coZnNfZW50cnkpOworCisg
ICBFdmFzX09iamVjdCAqaGJveCA9IGVsbV9ib3hfYWRkKGZpbGVfcG9wdXApOworICAgZXZhc19v
YmplY3Rfc2l6ZV9oaW50X3dlaWdodF9zZXQoaGJveCwgRVZBU19ISU5UX0VYUEFORCwgRVZBU19I
SU5UX0VYUEFORCk7CisgICBlbG1fYm94X2hvcml6b250YWxfc2V0KGhib3gsIEVJTkFfVFJVRSk7
CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfYWxpZ25fc2V0KGhib3gsIEVWQVNfSElOVF9GSUxM
LCBFVkFTX0hJTlRfRklMTCk7CisgICBlbG1fYm94X3BhY2tfZW5kKHZib3gsIGhib3gpOworICAg
ZXZhc19vYmplY3Rfc2hvdyhoYm94KTsKKworICAgRWluYV9Cb29sIG9rID0gRUlOQV9GQUxTRTsK
KyAgIEV2YXNfT2JqZWN0ICpva19idXR0b24gPSBlbG1fYnV0dG9uX2FkZChmaWxlX3BvcHVwKTsK
KyAgIGVsbV9vYmplY3RfdGV4dF9zZXQob2tfYnV0dG9uLCAiT0siKTsKKyAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGxiYWNrX2FkZChva19idXR0b24sICJjbGlja2VkIiwgX29rX2NsaWNrZWRfY2Is
ICZvayk7CisgICBlbG1fYm94X3BhY2tfZW5kKGhib3gsIG9rX2J1dHRvbik7CisgICBldmFzX29i
amVjdF9zaG93KG9rX2J1dHRvbik7CisKKyAgIEV2YXNfT2JqZWN0ICpjYW5jZWxfYnV0dG9uID0g
ZWxtX2J1dHRvbl9hZGQoZmlsZV9wb3B1cCk7CisgICBlbG1fb2JqZWN0X3RleHRfc2V0KGNhbmNl
bF9idXR0b24sICJDYW5jZWwiKTsKKyAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChj
YW5jZWxfYnV0dG9uLCAiY2xpY2tlZCIsIHF1aXRfZXZlbnRfbG9vcCwgTlVMTCk7CisgICBlbG1f
Ym94X3BhY2tfZW5kKGhib3gsIGNhbmNlbF9idXR0b24pOworICAgZXZhc19vYmplY3Rfc2hvdyhj
YW5jZWxfYnV0dG9uKTsKKworICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7CisKKyAgIEVpbmFf
U3RyaW5nc2hhcmUgKmZpbGVfcGF0aCA9IG9rID8gZWluYV9zdHJpbmdzaGFyZV9hZGQoZWxtX2Zp
bGVzZWxlY3Rvcl9wYXRoX2dldChmc19lbnRyeSkpIDogTlVMTDsKKyAgIGV2YXNfb2JqZWN0X2Rl
bChmaWxlX3BvcHVwKTsKKyAgIHJldHVybiBmaWxlX3BhdGg7CiB9CiAKIHN0YXRpYyB2b2lkCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289794</attachid>
            <date>2016-09-25 19:51:59 -0700</date>
            <delta_ts>2016-09-25 20:24:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162542-20160926114902.patch</filename>
            <type>text/plain</type>
            <size>54196</size>
            <attacher name="Gyuyoung Kim">gyuyoung.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2MzYzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNmEzYTZjMTBiY2Y1NWZiMGExOWE4ZmY4OTQwNTMyNTU3
MGMzYmYyNi4uOWI3NTZhN2Y2MTZlMzQ0YjFhYmFjNjFkZmVkMmExZWI4NmY3ZTQ0ZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYz
IEBACisyMDE2LTA5LTI1ICBHeXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBbRUZMXSBBZGp1c3QgRUZMIGluZGVudGF0aW9uIHRvIEVGTCBNaW5pQnJvd3Nl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNTQy
CisKKyAgICAgICAgVW5yZXZpZXdlZCwgRUZMIHNpbXBsZSBjb2Rpbmcgc3R5bGUgZml4LgorCisg
ICAgICAgIFNvbWUgZnVuY3Rpb25zIHdhc24ndCBhcHBsaWVkIEVGTCBjb2Rpbmcgc3R5bGUgaW4g
cHJlZml4IGZpeC4KKworICAgICAgICAqIE1pbmlCcm93c2VyL2VmbC9tYWluLmM6CisgICAgICAg
IChfa2V5X2Rvd25fY2IpOgorICAgICAgICAodmlld19mb2N1c19zZXQpOgorICAgICAgICAoX21v
dXNlX2Rvd25fY2IpOgorICAgICAgICAodGl0bGVfc2V0KToKKyAgICAgICAgKF90aXRsZV9jaGFu
Z2VkX2NiKToKKyAgICAgICAgKF91cmxfY2hhbmdlZF9jYik6CisgICAgICAgIChfYmFja19mb3J3
YXJkX2xpc3RfY2hhbmdlZF9jYik6CisgICAgICAgIChfcHJvZ3Jlc3NfY2IpOgorICAgICAgICAo
X2Vycm9yX2NiKToKKyAgICAgICAgKF9kb3dubG9hZF9yZXF1ZXN0X2NiKToKKyAgICAgICAgKGNs
b3NlX2ZpbGVfcGlja2VyKToKKyAgICAgICAgKF9maWxlcGlja2VyX3BhcmVudF9kZWxldGlvbl9j
Yik6CisgICAgICAgIChfZmlsZXBpY2tlcl9kZWxldGlvbl9jYik6CisgICAgICAgIChfZmlsZXNl
bGVjdG9yX2RvbmVfY2IpOgorICAgICAgICAoX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NiKToKKyAg
ICAgICAgKF9kb3dubG9hZF9maW5pc2hlZF9jYik6CisgICAgICAgIChfZG93bmxvYWRfZmFpbGVk
X2NiKToKKyAgICAgICAgKF9jb2xvcl9jaGFuZ2VkX2NiKToKKyAgICAgICAgKF9jb2xvcl9pdGVt
X3NlbGVjdGVkX2NiKToKKyAgICAgICAgKF9jb2xvcl9waWNrZXJfb2tfY2xpY2tlZF9jYik6Cisg
ICAgICAgIChfY29sb3JfcGlja2VyX2NhbmNlbF9jbGlja2VkX2NiKToKKyAgICAgICAgKF9jb2xv
cl9waWNrZXJfZGlzbWlzc19jYik6CisgICAgICAgIChfY29sb3JfcGlja2VyX3JlcXVlc3RfY2Ip
OgorICAgICAgICAocXVpdCk6CisgICAgICAgIChoYXNfc2NoZW1lKToKKyAgICAgICAgKHVybF9m
cm9tX3VzZXJfaW5wdXQpOgorICAgICAgICAodXJsX2xvYWRfZnJvbV91c2VyX2lucHV0KToKKyAg
ICAgICAgKF91cmxfYmFyX2FjdGl2YXRlZF9jYik6CisgICAgICAgIChfdXJsX2Jhcl9jbGlja2Vk
X2NiKToKKyAgICAgICAgKF9zZWFyY2hfZmllbGRfYWJvcnRlZF9jYik6CisgICAgICAgIChfc2Vh
cmNoX2ZpZWxkX2FjdGl2YXRlZF9jYik6CisgICAgICAgIChfc2VhcmNoX2ZpZWxkX2NsaWNrZWRf
Y2IpOgorICAgICAgICAoX2JhY2tfYnV0dG9uX2NsaWNrZWRfY2IpOgorICAgICAgICAoX2Zvcndh
cmRfYnV0dG9uX2NsaWNrZWRfY2IpOgorICAgICAgICAoX3NlYXJjaF9iYWNrd2FyZF9idXR0b25f
Y2xpY2tlZF9jYik6CisgICAgICAgIChfc2VhcmNoX2ZvcndhcmRfYnV0dG9uX2NsaWNrZWRfY2Ip
OgorICAgICAgICAoX3NlYXJjaF9jYXNlX29wdGlvbl9jaGFuZ2VkKToKKyAgICAgICAgKF9zZWFy
Y2hfd29yZF9zdGFydF9vcHRpb25fY2hhbmdlZF9jYik6CisgICAgICAgIChfc2VhcmNoX2Nsb3Nl
X2J1dHRvbl9jbGlja2VkX2NiKToKKyAgICAgICAgKF9yZWZyZXNoX2J1dHRvbl9jbGlja2VkX2Ni
KToKKyAgICAgICAgKF9zdG9wX2J1dHRvbl9jbGlja2VkX2NiKToKKyAgICAgICAgKGxpc3RfaXRl
bV9sYWJlbF9nZXQpOgorICAgICAgICAoX2xpc3RfaXRlbV9zZWxlY3RfY2IpOgorICAgICAgICAo
bmF2aWdhdGlvbl9idXR0b25fbG9uZ3ByZXNzX3Byb2Nlc3MpOgorICAgICAgICAoX2ZvcndhcmRf
YnV0dG9uX2xvbmdwcmVzc19jYik6CisgICAgICAgIChfYmFja19idXR0b25fbG9uZ3ByZXNzX2Ni
KToKKyAgICAgICAgKHF1aXRfZXZlbnRfbG9vcCk6CisgICAgICAgIChfb2tfY2xpY2tlZF9jYik6
CisgICAgICAgIChfZmlsZV9lbnRyeV9kaWFsb2dfc2hvdyk6CisKIDIwMTYtMDktMjQgIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBbV0syXSBhbmNob3IuZG93bmxv
YWQgYXR0cmlidXRlIHZhbHVlIGlzIGlnbm9yZWQgYnkgTkVUV09SS19TRVNTSU9OIGNvZGUgcGF0
aApkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYyBiL1Rvb2xzL01pbmlC
cm93c2VyL2VmbC9tYWluLmMKaW5kZXggY2FhYmRmYTQyNDY0NDM4YTFiOGExYjI4MTNiMjkyODc3
YmRlODA5Zi4uMDk3MzY4MTdkN2I1NTE5ZDRjMzcyZTkwNzJmODU5ZTNlN2EwMmU5OCAxMDA2NDQK
LS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYworKysgYi9Ub29scy9NaW5pQnJvd3Nl
ci9lZmwvbWFpbi5jCkBAIC01OTYsOSArNTk2LDkgQEAgX2tleV9kb3duX2NiKHZvaWQgKnVzZXJf
ZGF0YSwgRXZhcyAqZSwgRXZhc19PYmplY3QgKmV3a192aWV3LCB2b2lkICpldmVudF9pbmZvKQog
ICAgICBFd2tfUGFnaW5hdGlvbl9Nb2RlIG1vZGUgPSAgZXdrX3ZpZXdfcGFnaW5hdGlvbl9tb2Rl
X2dldChld2tfdmlldyk7CiAgICAgIG1vZGUgPSAobW9kZSArIDEpICUgKEVXS19QQUdJTkFUSU9O
X01PREVfQk9UVE9NX1RPX1RPUCArIDEpOwogICAgICBpZiAoZXdrX3ZpZXdfcGFnaW5hdGlvbl9t
b2RlX3NldChld2tfdmlldywgbW9kZSkpCi0gICAgICAgICBJTkZPKCJDaGFuZ2UgUGFnaW5hdGlv
biBNb2RlIChGNykgd2FzIHByZXNzZWQsIGNoYW5nZWQgdG86ICVkIiwgbW9kZSk7CisgICAgICAg
SU5GTygiQ2hhbmdlIFBhZ2luYXRpb24gTW9kZSAoRjcpIHdhcyBwcmVzc2VkLCBjaGFuZ2VkIHRv
OiAlZCIsIG1vZGUpOwogICAgICBlbHNlCi0gICAgICAgICBJTkZPKCJDaGFuZ2UgUGFnaW5hdGlv
biBNb2RlIChGNykgd2FzIHByZXNzZWQsIGJ1dCBOT1QgY2hhbmdlZCEiKTsKKyAgICAgICBJTkZP
KCJDaGFuZ2UgUGFnaW5hdGlvbiBNb2RlIChGNykgd2FzIHByZXNzZWQsIGJ1dCBOT1QgY2hhbmdl
ZCEiKTsKICAgIH0gZWxzZSBpZiAoIXN0cmNtcChldi0+a2V5LCAiRjExIikpIHsKICAgICAgSU5G
TygiRnVsbHNjcmVlbiAoRjExKSB3YXMgcHJlc3NlZCwgdG9nZ2xpbmcgd2luZG93L2Z1bGxzY3Jl
ZW4uIik7CiAgICAgIHRvZ2dsZV93aW5kb3dfZnVsbHNjcmVlbih3aW5kb3csICFlbG1fd2luX2Z1
bGxzY3JlZW5fZ2V0KHdpbmRvdy0+ZWxtX3dpbmRvdykpOwpAQCAtNjY0LDc2MCArNjY0LDc2MyBA
QCBfa2V5X2Rvd25fY2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzICplLCBFdmFzX09iamVjdCAqZXdr
X3ZpZXcsIHZvaWQgKmV2ZW50X2luZm8pCiBzdGF0aWMgdm9pZAogdmlld19mb2N1c19zZXQoQnJv
d3Nlcl9XaW5kb3cgKndpbmRvdywgRWluYV9Cb29sIGZvY3VzKQogewotICAgIC8qIFdlIHN0ZWFs
IGZvY3VzIGF3YXkgZnJvbSBlbG0ncyBmb2N1cyBtb2RlbCBhbmQgc3RhcnQgdG8gZG8gdGhpbmdz
Ci0gICAgICogbWFudWFsbHkgaGVyZSwgc28gZWxtIG5vdyBoYXMgbm8gY2x1ZSB3aGF0J3MgdXAu
IFRlbGwgZWxtIHRoYXQgaXRzCi0gICAgICogdG9wbGV2ZWwgd2lkZ2V0IGlzIHRvIGJlIHVuZm9j
dXNlZCBzbyBlbG0gZ2l2ZXMgdXAgdGhlIGZvY3VzICovCi0gICAgZWxtX29iamVjdF9mb2N1c19z
ZXQoZWxtX29iamVjdF90b3Bfd2lkZ2V0X2dldCh3aW5kb3ctPmVsbV93aW5kb3cpLCBFSU5BX0ZB
TFNFKTsKLSAgICBldmFzX29iamVjdF9mb2N1c19zZXQod2luZG93LT5ld2tfdmlldywgZm9jdXMp
OworICAgLyogV2Ugc3RlYWwgZm9jdXMgYXdheSBmcm9tIGVsbSdzIGZvY3VzIG1vZGVsIGFuZCBz
dGFydCB0byBkbyB0aGluZ3MKKyAgICAqIG1hbnVhbGx5IGhlcmUsIHNvIGVsbSBub3cgaGFzIG5v
IGNsdWUgd2hhdCdzIHVwLiBUZWxsIGVsbSB0aGF0IGl0cworICAgICogdG9wbGV2ZWwgd2lkZ2V0
IGlzIHRvIGJlIHVuZm9jdXNlZCBzbyBlbG0gZ2l2ZXMgdXAgdGhlIGZvY3VzICovCisgICBlbG1f
b2JqZWN0X2ZvY3VzX3NldChlbG1fb2JqZWN0X3RvcF93aWRnZXRfZ2V0KHdpbmRvdy0+ZWxtX3dp
bmRvdyksIEVJTkFfRkFMU0UpOworICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KHdpbmRvdy0+ZXdr
X3ZpZXcsIGZvY3VzKTsKIH0KIAogc3RhdGljIHZvaWQKIF9tb3VzZV9kb3duX2NiKHZvaWQgKnVz
ZXJfZGF0YSwgRXZhcyAqZSwgRXZhc19PYmplY3QgKmV3a192aWV3LCB2b2lkICpldmVudF9pbmZv
KQogewotICAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2Vy
X2RhdGE7Ci0gICAgRXZhc19FdmVudF9Nb3VzZV9Eb3duICpldiA9IChFdmFzX0V2ZW50X01vdXNl
X0Rvd24gKilldmVudF9pbmZvOworICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2Vy
X1dpbmRvdyAqKXVzZXJfZGF0YTsKKyAgIEV2YXNfRXZlbnRfTW91c2VfRG93biAqZXYgPSAoRXZh
c19FdmVudF9Nb3VzZV9Eb3duICopZXZlbnRfaW5mbzsKIAotICAgIC8qIENsZWFyIHNlbGVjdGlv
biBmcm9tIHRoZSBVUkwgYmFyICovCi0gICAgZWxtX2VudHJ5X3NlbGVjdF9ub25lKHdpbmRvdy0+
dXJsX2Jhcik7CisgICAvKiBDbGVhciBzZWxlY3Rpb24gZnJvbSB0aGUgVVJMIGJhciAqLworICAg
ZWxtX2VudHJ5X3NlbGVjdF9ub25lKHdpbmRvdy0+dXJsX2Jhcik7CiAKLSAgICBpZiAobG9uZ3By
ZXNzX2VuYWJsZWQpCi0gICAgICAgIGhpc3RvcnlfbGlzdF9oaWRlKHdpbmRvdyk7Ci0gICAgaWYg
KGV2LT5idXR0b24gPT0gMSkKLSAgICAgICAgdmlld19mb2N1c19zZXQod2luZG93LCBFSU5BX1RS
VUUpOwotICAgIGVsc2UgaWYgKGV2LT5idXR0b24gPT0gMikKLSAgICAgICAgdmlld19mb2N1c19z
ZXQod2luZG93LCAhZXZhc19vYmplY3RfZm9jdXNfZ2V0KGV3a192aWV3KSk7CisgICBpZiAobG9u
Z3ByZXNzX2VuYWJsZWQpCisgICAgIGhpc3RvcnlfbGlzdF9oaWRlKHdpbmRvdyk7CisgICBpZiAo
ZXYtPmJ1dHRvbiA9PSAxKQorICAgICB2aWV3X2ZvY3VzX3NldCh3aW5kb3csIEVJTkFfVFJVRSk7
CisgICBlbHNlIGlmIChldi0+YnV0dG9uID09IDIpCisgICAgIHZpZXdfZm9jdXNfc2V0KHdpbmRv
dywgIWV2YXNfb2JqZWN0X2ZvY3VzX2dldChld2tfdmlldykpOwogfQogCiBzdGF0aWMgdm9pZAog
dGl0bGVfc2V0KEV2YXNfT2JqZWN0ICplbG1fd2luZG93LCBjb25zdCBjaGFyICp0aXRsZSwgaW50
IHByb2dyZXNzKQogewotICAgIEVpbmFfU3RyYnVmICpidWZmZXI7CisgICBFaW5hX1N0cmJ1ZiAq
YnVmZmVyOwogCi0gICAgaWYgKCF0aXRsZSB8fCAhKnRpdGxlKSB7Ci0gICAgICAgIGVsbV93aW5f
dGl0bGVfc2V0KGVsbV93aW5kb3csIEFQUF9OQU1FKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgIGlmICghdGl0bGUgfHwgISp0aXRsZSkgeworICAgICBlbG1fd2luX3RpdGxlX3NldChlbG1f
d2luZG93LCBBUFBfTkFNRSk7CisgICAgIHJldHVybjsKKyAgIH0KIAotICAgIGJ1ZmZlciA9IGVp
bmFfc3RyYnVmX25ldygpOwotICAgIGlmIChwcm9ncmVzcyA8IDEwMCkKLSAgICAgICAgZWluYV9z
dHJidWZfYXBwZW5kX3ByaW50ZihidWZmZXIsICIlcyAoJWQlJSkgLSAlcyIsIHRpdGxlLCBwcm9n
cmVzcywgQVBQX05BTUUpOwotICAgIGVsc2UKLSAgICAgICAgZWluYV9zdHJidWZfYXBwZW5kX3By
aW50ZihidWZmZXIsICIlcyAtICVzIiwgdGl0bGUsIEFQUF9OQU1FKTsKKyAgIGJ1ZmZlciA9IGVp
bmFfc3RyYnVmX25ldygpOworICAgaWYgKHByb2dyZXNzIDwgMTAwKQorICAgICBlaW5hX3N0cmJ1
Zl9hcHBlbmRfcHJpbnRmKGJ1ZmZlciwgIiVzICglZCUlKSAtICVzIiwgdGl0bGUsIHByb2dyZXNz
LCBBUFBfTkFNRSk7CisgICBlbHNlCisgICAgIGVpbmFfc3RyYnVmX2FwcGVuZF9wcmludGYoYnVm
ZmVyLCAiJXMgLSAlcyIsIHRpdGxlLCBBUFBfTkFNRSk7CiAKLSAgICBlbG1fd2luX3RpdGxlX3Nl
dChlbG1fd2luZG93LCBlaW5hX3N0cmJ1Zl9zdHJpbmdfZ2V0KGJ1ZmZlcikpOwotICAgIGVpbmFf
c3RyYnVmX2ZyZWUoYnVmZmVyKTsKKyAgIGVsbV93aW5fdGl0bGVfc2V0KGVsbV93aW5kb3csIGVp
bmFfc3RyYnVmX3N0cmluZ19nZXQoYnVmZmVyKSk7CisgICBlaW5hX3N0cmJ1Zl9mcmVlKGJ1ZmZl
cik7CiB9CiAKIHN0YXRpYyB2b2lkCiBfdGl0bGVfY2hhbmdlZF9jYih2b2lkICp1c2VyX2RhdGEs
IEV2YXNfT2JqZWN0ICpld2tfdmlldywgdm9pZCAqZXZlbnRfaW5mbykKIHsKLSAgICBCcm93c2Vy
X1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOwotICAgIGNvbnN0
IGNoYXIgKnRpdGxlID0gKGNvbnN0IGNoYXIgKilldmVudF9pbmZvOworICAgQnJvd3Nlcl9XaW5k
b3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKKyAgIGNvbnN0IGNoYXIg
KnRpdGxlID0gKGNvbnN0IGNoYXIgKilldmVudF9pbmZvOwogCi0gICAgdGl0bGVfc2V0KHdpbmRv
dy0+ZWxtX3dpbmRvdywgdGl0bGUsIDEwMCk7CisgICB0aXRsZV9zZXQod2luZG93LT5lbG1fd2lu
ZG93LCB0aXRsZSwgMTAwKTsKIH0KIAogc3RhdGljIHZvaWQKIF91cmxfY2hhbmdlZF9jYih2b2lk
ICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpld2tfdmlldywgdm9pZCAqZXZlbnRfaW5mbykKIHsK
LSAgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRh
OwotICAgIGNvbnN0IGNoYXIgKnVybCA9IGV3a192aWV3X3VybF9nZXQod2luZG93LT5ld2tfdmll
dyk7Ci0gICAgY2hhciAqY29udmVydGVkX3VybCA9IGVsbV9lbnRyeV91dGY4X3RvX21hcmt1cCh1
cmwpOwotICAgIGVsbV9lbnRyeV9lbnRyeV9zZXQod2luZG93LT51cmxfYmFyLCBjb252ZXJ0ZWRf
dXJsKTsKKyAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2Vy
X2RhdGE7CisgICBjb25zdCBjaGFyICp1cmwgPSBld2tfdmlld191cmxfZ2V0KHdpbmRvdy0+ZXdr
X3ZpZXcpOworICAgY2hhciAqY29udmVydGVkX3VybCA9IGVsbV9lbnRyeV91dGY4X3RvX21hcmt1
cCh1cmwpOworICAgZWxtX2VudHJ5X2VudHJ5X3NldCh3aW5kb3ctPnVybF9iYXIsIGNvbnZlcnRl
ZF91cmwpOwogCi0gICAgX2ljb25fY2hhbmdlZF9jYihld2tfY29udGV4dF9mYXZpY29uX2RhdGFi
YXNlX2dldChld2tfdmlld19jb250ZXh0X2dldChld2tfdmlldykpLCB1cmwsIHVzZXJfZGF0YSk7
CisgICBfaWNvbl9jaGFuZ2VkX2NiKGV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2VfZ2V0KGV3
a192aWV3X2NvbnRleHRfZ2V0KGV3a192aWV3KSksIHVybCwgdXNlcl9kYXRhKTsKIAotICAgIGZy
ZWUoY29udmVydGVkX3VybCk7CisgICBmcmVlKGNvbnZlcnRlZF91cmwpOwogCi0gICAgc2VhcmNo
X2JveF9oaWRlKHdpbmRvdyk7CisgICBzZWFyY2hfYm94X2hpZGUod2luZG93KTsKIH0KIAogc3Rh
dGljIHZvaWQKIF9iYWNrX2ZvcndhcmRfbGlzdF9jaGFuZ2VkX2NiKHZvaWQgKnVzZXJfZGF0YSwg
RXZhc19PYmplY3QgKmV3a192aWV3LCB2b2lkICpldmVudF9pbmZvKQogewotICAgIEJyb3dzZXJf
V2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7CisgICBCcm93c2Vy
X1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOwogCi0gICAgLyog
VXBkYXRlIG5hdmlnYXRpb24gYnV0dG9ucyBzdGF0ZSAqLwotICAgIGVsbV9vYmplY3RfZGlzYWJs
ZWRfc2V0KHdpbmRvdy0+YmFja19idXR0b24sICFld2tfdmlld19iYWNrX3Bvc3NpYmxlKGV3a192
aWV3KSk7Ci0gICAgZWxtX29iamVjdF9kaXNhYmxlZF9zZXQod2luZG93LT5mb3J3YXJkX2J1dHRv
biwgIWV3a192aWV3X2ZvcndhcmRfcG9zc2libGUoZXdrX3ZpZXcpKTsKKyAgIC8qIFVwZGF0ZSBu
YXZpZ2F0aW9uIGJ1dHRvbnMgc3RhdGUgKi8KKyAgIGVsbV9vYmplY3RfZGlzYWJsZWRfc2V0KHdp
bmRvdy0+YmFja19idXR0b24sICFld2tfdmlld19iYWNrX3Bvc3NpYmxlKGV3a192aWV3KSk7Cisg
ICBlbG1fb2JqZWN0X2Rpc2FibGVkX3NldCh3aW5kb3ctPmZvcndhcmRfYnV0dG9uLCAhZXdrX3Zp
ZXdfZm9yd2FyZF9wb3NzaWJsZShld2tfdmlldykpOwogfQogCiBzdGF0aWMgdm9pZAogX3Byb2dy
ZXNzX2NiKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKmV3a192aWV3LCB2b2lkICpldmVu
dF9pbmZvKQogewotICAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cg
Kil1c2VyX2RhdGE7Ci0gICAgZG91YmxlIHByb2dyZXNzID0gKihkb3VibGUgKilldmVudF9pbmZv
OworICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0
YTsKKyAgIGRvdWJsZSBwcm9ncmVzcyA9ICooZG91YmxlICopZXZlbnRfaW5mbzsKIAotICAgIHRp
dGxlX3NldCh3aW5kb3ctPmVsbV93aW5kb3csIGV3a192aWV3X3RpdGxlX2dldCh3aW5kb3ctPmV3
a192aWV3KSwgcHJvZ3Jlc3MgKiAxMDApOworICAgdGl0bGVfc2V0KHdpbmRvdy0+ZWxtX3dpbmRv
dywgZXdrX3ZpZXdfdGl0bGVfZ2V0KHdpbmRvdy0+ZXdrX3ZpZXcpLCBwcm9ncmVzcyAqIDEwMCk7
CiB9CiAKIHN0YXRpYyB2b2lkCiBfZXJyb3JfY2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVj
dCAqZXdrX3ZpZXcsIHZvaWQgKmV2ZW50X2luZm8pCiB7Ci0gICAgRWluYV9TdHJidWYgKmJ1ZmZl
cjsKLSAgICBjb25zdCBFd2tfRXJyb3IgKmVycm9yID0gKGNvbnN0IEV3a19FcnJvciAqKWV2ZW50
X2luZm87CisgICBFaW5hX1N0cmJ1ZiAqYnVmZmVyOworICAgY29uc3QgRXdrX0Vycm9yICplcnJv
ciA9IChjb25zdCBFd2tfRXJyb3IgKilldmVudF9pbmZvOwogCi0gICAgLyogVGhpcyBpcyBhIGNh
bmNlbGxhdGlvbiwgZG8gbm90IGRpc3BsYXkgdGhlIGVycm9yIHBhZ2UgKi8KLSAgICBpZiAoZXdr
X2Vycm9yX2NhbmNlbGxhdGlvbl9nZXQoZXJyb3IpKQotICAgICAgICByZXR1cm47CisgICAvKiBU
aGlzIGlzIGEgY2FuY2VsbGF0aW9uLCBkbyBub3QgZGlzcGxheSB0aGUgZXJyb3IgcGFnZSAqLwor
ICAgaWYgKGV3a19lcnJvcl9jYW5jZWxsYXRpb25fZ2V0KGVycm9yKSkKKyAgICAgcmV0dXJuOwog
Ci0gICAgYnVmZmVyID0gZWluYV9zdHJidWZfbmV3KCk7Ci0gICAgZWluYV9zdHJidWZfYXBwZW5k
X3ByaW50ZihidWZmZXIsCi0gICAgICAgICI8aHRtbD48Ym9keT48ZGl2IHN0eWxlPVwiY29sb3I6
I2ZmMDAwMFwiPkVSUk9SITwvZGl2Pjxicj48ZGl2PkNvZGU6ICVkPGJyPkRlc2NyaXB0aW9uOiAl
czxicj5VUkw6ICVzPC9kaXY+PC9ib2R5PC9odG1sPiIsCi0gICAgICAgIGV3a19lcnJvcl9jb2Rl
X2dldChlcnJvciksIGV3a19lcnJvcl9kZXNjcmlwdGlvbl9nZXQoZXJyb3IpLCBld2tfZXJyb3Jf
dXJsX2dldChlcnJvcikpOworICAgYnVmZmVyID0gZWluYV9zdHJidWZfbmV3KCk7CisgICBlaW5h
X3N0cmJ1Zl9hcHBlbmRfcHJpbnRmKGJ1ZmZlciwKKyAgICAgIjxodG1sPjxib2R5PjxkaXYgc3R5
bGU9XCJjb2xvcjojZmYwMDAwXCI+RVJST1IhPC9kaXY+PGJyPjxkaXY+Q29kZTogJWQ8YnI+RGVz
Y3JpcHRpb246ICVzPGJyPlVSTDogJXM8L2Rpdj48L2JvZHk8L2h0bWw+IiwKKyAgICAgZXdrX2Vy
cm9yX2NvZGVfZ2V0KGVycm9yKSwgZXdrX2Vycm9yX2Rlc2NyaXB0aW9uX2dldChlcnJvciksIGV3
a19lcnJvcl91cmxfZ2V0KGVycm9yKSk7CiAKLSAgICBld2tfdmlld19odG1sX3N0cmluZ19sb2Fk
KGV3a192aWV3LCBlaW5hX3N0cmJ1Zl9zdHJpbmdfZ2V0KGJ1ZmZlciksIDAsIGV3a19lcnJvcl91
cmxfZ2V0KGVycm9yKSk7Ci0gICAgZWluYV9zdHJidWZfZnJlZShidWZmZXIpOworICAgZXdrX3Zp
ZXdfaHRtbF9zdHJpbmdfbG9hZChld2tfdmlldywgZWluYV9zdHJidWZfc3RyaW5nX2dldChidWZm
ZXIpLCAwLCBld2tfZXJyb3JfdXJsX2dldChlcnJvcikpOworICAgZWluYV9zdHJidWZfZnJlZShi
dWZmZXIpOwogfQogCiBzdGF0aWMgdm9pZAogX2Rvd25sb2FkX3JlcXVlc3RfY2IoRXdrX0Rvd25s
b2FkX0pvYiAqZG93bmxvYWQsIHZvaWQgKnVzZXJfZGF0YSkKIHsKLSAgICBCcm93c2VyX1dpbmRv
dyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOworICAgQnJvd3Nlcl9XaW5k
b3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKIAotICAgIEVpbmFfU3Ry
YnVmICpkZXN0aW5hdGlvbl9wYXRoID0gZWluYV9zdHJidWZfbmV3KCk7CisgICBFaW5hX1N0cmJ1
ZiAqZGVzdGluYXRpb25fcGF0aCA9IGVpbmFfc3RyYnVmX25ldygpOwogCi0gICAgY29uc3QgY2hh
ciAqaG9tZV9wYXRoID0gZ2V0ZW52KCJIT01FIik7Ci0gICAgRWluYV9TdHJpbmdzaGFyZSAqc2F2
ZV9maWxlX3BhdGggPSBfZmlsZV9lbnRyeV9kaWFsb2dfc2hvdyh3aW5kb3csICJET1dOTE9BRCIs
IGhvbWVfcGF0aCA/IGhvbWVfcGF0aCA6ICIvdG1wIik7CisgICBjb25zdCBjaGFyICpob21lX3Bh
dGggPSBnZXRlbnYoIkhPTUUiKTsKKyAgIEVpbmFfU3RyaW5nc2hhcmUgKnNhdmVfZmlsZV9wYXRo
ID0gX2ZpbGVfZW50cnlfZGlhbG9nX3Nob3cod2luZG93LCAiRE9XTkxPQUQiLCBob21lX3BhdGgg
PyBob21lX3BhdGggOiAiL3RtcCIpOwogCi0gICAgaWYgKHNhdmVfZmlsZV9wYXRoKQotICAgICAg
ICBlaW5hX3N0cmJ1Zl9hcHBlbmRfcHJpbnRmKGRlc3RpbmF0aW9uX3BhdGgsICIlcyIsIHNhdmVf
ZmlsZV9wYXRoKTsKLSAgICBlbHNlCi0gICAgICAgIGVpbmFfc3RyYnVmX2FwcGVuZChkZXN0aW5h
dGlvbl9wYXRoLCAiL3RtcCIpOworICAgaWYgKHNhdmVfZmlsZV9wYXRoKQorICAgICBlaW5hX3N0
cmJ1Zl9hcHBlbmRfcHJpbnRmKGRlc3RpbmF0aW9uX3BhdGgsICIlcyIsIHNhdmVfZmlsZV9wYXRo
KTsKKyAgIGVsc2UKKyAgICAgZWluYV9zdHJidWZfYXBwZW5kKGRlc3RpbmF0aW9uX3BhdGgsICIv
dG1wIik7CiAKLSAgICBjb25zdCBjaGFyICpzdWdnZXN0ZWRfbmFtZSA9IGV3a19kb3dubG9hZF9q
b2Jfc3VnZ2VzdGVkX2ZpbGVuYW1lX2dldChkb3dubG9hZCk7Ci0gICAgaWYgKHN1Z2dlc3RlZF9u
YW1lICYmICpzdWdnZXN0ZWRfbmFtZSkKLSAgICAgICAgZWluYV9zdHJidWZfYXBwZW5kX3ByaW50
ZihkZXN0aW5hdGlvbl9wYXRoLCAiLyVzIiwgc3VnZ2VzdGVkX25hbWUpOwotICAgIGVsc2Ugewot
ICAgICAgICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBmaWxlIG5hbWUgc2luY2Ugbm8gbmFtZSB3YXMg
c3VnZ2VzdGVkLgotICAgICAgICBlaW5hX3N0cmJ1Zl9hcHBlbmQoZGVzdGluYXRpb25fcGF0aCwg
Ii9kb3dubG9hZGVkLWZpbGUuWFhYWFhYIik7Ci0gICAgICAgIGNoYXIgKnVybCA9IE5VTEw7Ci0g
ICAgICAgIHVybCA9IGVpbmFfc3RyYnVmX3N0cmluZ19zdGVhbChkZXN0aW5hdGlvbl9wYXRoKTsK
LSAgICAgICAgaWYgKG1rc3RlbXAodXJsKSA9PSAtMSkgewotICAgICAgICAgICAgRVJST1IoIkNv
dWxkIG5vdCBnZW5lcmF0ZSBhIHVuaXF1ZSBmaWxlIG5hbWUuIik7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgZWluYV9zdHJidWZfYXBwZW5kKGRlc3RpbmF0aW9uX3Bh
dGgsIHVybCk7Ci0gICAgfQorICAgY29uc3QgY2hhciAqc3VnZ2VzdGVkX25hbWUgPSBld2tfZG93
bmxvYWRfam9iX3N1Z2dlc3RlZF9maWxlbmFtZV9nZXQoZG93bmxvYWQpOworICAgaWYgKHN1Z2dl
c3RlZF9uYW1lICYmICpzdWdnZXN0ZWRfbmFtZSkKKyAgICAgZWluYV9zdHJidWZfYXBwZW5kX3By
aW50ZihkZXN0aW5hdGlvbl9wYXRoLCAiLyVzIiwgc3VnZ2VzdGVkX25hbWUpOworICAgZWxzZSB7
CisgICAgIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGZpbGUgbmFtZSBzaW5jZSBubyBuYW1lIHdhcyBz
dWdnZXN0ZWQuCisgICAgIGVpbmFfc3RyYnVmX2FwcGVuZChkZXN0aW5hdGlvbl9wYXRoLCAiL2Rv
d25sb2FkZWQtZmlsZS5YWFhYWFgiKTsKKyAgICAgY2hhciAqdXJsID0gTlVMTDsKKyAgICAgdXJs
ID0gZWluYV9zdHJidWZfc3RyaW5nX3N0ZWFsKGRlc3RpbmF0aW9uX3BhdGgpOworICAgICBpZiAo
bWtzdGVtcCh1cmwpID09IC0xKSB7CisgICAgICAgRVJST1IoIkNvdWxkIG5vdCBnZW5lcmF0ZSBh
IHVuaXF1ZSBmaWxlIG5hbWUuIik7CisgICAgICAgcmV0dXJuOworICAgICB9CisgICAgIGVpbmFf
c3RyYnVmX2FwcGVuZChkZXN0aW5hdGlvbl9wYXRoLCB1cmwpOworICAgfQogCi0gICAgZXdrX2Rv
d25sb2FkX2pvYl9kZXN0aW5hdGlvbl9zZXQoZG93bmxvYWQsIGVpbmFfc3RyYnVmX3N0cmluZ19n
ZXQoZGVzdGluYXRpb25fcGF0aCkpOwotICAgIElORk8oIkRvd25sb2FkaW5nOiAlcyIsIGVpbmFf
c3RyYnVmX3N0cmluZ19nZXQoZGVzdGluYXRpb25fcGF0aCkpOwotICAgIGVpbmFfc3RyYnVmX2Zy
ZWUoZGVzdGluYXRpb25fcGF0aCk7Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoc2F2ZV9maWxl
X3BhdGgpOworICAgZXdrX2Rvd25sb2FkX2pvYl9kZXN0aW5hdGlvbl9zZXQoZG93bmxvYWQsIGVp
bmFfc3RyYnVmX3N0cmluZ19nZXQoZGVzdGluYXRpb25fcGF0aCkpOworICAgSU5GTygiRG93bmxv
YWRpbmc6ICVzIiwgZWluYV9zdHJidWZfc3RyaW5nX2dldChkZXN0aW5hdGlvbl9wYXRoKSk7Cisg
ICBlaW5hX3N0cmJ1Zl9mcmVlKGRlc3RpbmF0aW9uX3BhdGgpOworICAgZWluYV9zdHJpbmdzaGFy
ZV9kZWwoc2F2ZV9maWxlX3BhdGgpOwogfQogCiBzdGF0aWMgdm9pZCBfZmlsZXBpY2tlcl9wYXJl
bnRfZGVsZXRpb25fY2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzICpldmFzLCBFdmFzX09iamVjdCAq
ZWxtX3dpbmRvdywgdm9pZCAqZXZlbnQpOwogCiBzdGF0aWMgdm9pZCBjbG9zZV9maWxlX3BpY2tl
cihGaWxlX1NlbGVjdG9yX0RhdGEgKmZzX2RhdGEpCiB7Ci0gICAgZXZhc19vYmplY3RfZXZlbnRf
Y2FsbGJhY2tfZGVsKGZzX2RhdGEtPnBhcmVudC0+ZWxtX3dpbmRvdywgRVZBU19DQUxMQkFDS19E
RUwsIF9maWxlcGlja2VyX3BhcmVudF9kZWxldGlvbl9jYik7Ci0gICAgZXZhc19vYmplY3RfZGVs
KGZzX2RhdGEtPmVsbV93aW5kb3cpOwotICAgIGV3a19vYmplY3RfdW5yZWYoZnNfZGF0YS0+cmVx
dWVzdCk7Ci0gICAgZnJlZShmc19kYXRhKTsKKyAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNr
X2RlbChmc19kYXRhLT5wYXJlbnQtPmVsbV93aW5kb3csIEVWQVNfQ0FMTEJBQ0tfREVMLCBfZmls
ZXBpY2tlcl9wYXJlbnRfZGVsZXRpb25fY2IpOworICAgZXZhc19vYmplY3RfZGVsKGZzX2RhdGEt
PmVsbV93aW5kb3cpOworICAgZXdrX29iamVjdF91bnJlZihmc19kYXRhLT5yZXF1ZXN0KTsKKyAg
IGZyZWUoZnNfZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkCiBfZmlsZXBpY2tlcl9wYXJlbnRfZGVs
ZXRpb25fY2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzICpldmFzLCBFdmFzX09iamVjdCAqZWxtX3dp
bmRvdywgdm9pZCAqZXZlbnQpCiB7Ci0gICAgY2xvc2VfZmlsZV9waWNrZXIoKEZpbGVfU2VsZWN0
b3JfRGF0YSAqKXVzZXJfZGF0YSk7CisgICBjbG9zZV9maWxlX3BpY2tlcigoRmlsZV9TZWxlY3Rv
cl9EYXRhICopdXNlcl9kYXRhKTsKIH0KIAogc3RhdGljIHZvaWQKIF9maWxlcGlja2VyX2RlbGV0
aW9uX2NiKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKmVsbV93aW5kb3csIHZvaWQgKmV2
ZW50X2luZm8pCiB7Ci0gICAgY2xvc2VfZmlsZV9waWNrZXIoKEZpbGVfU2VsZWN0b3JfRGF0YSAq
KXVzZXJfZGF0YSk7CisgICBjbG9zZV9maWxlX3BpY2tlcigoRmlsZV9TZWxlY3Rvcl9EYXRhICop
dXNlcl9kYXRhKTsKIH0KIAogc3RhdGljIHZvaWQKIF9maWxlc2VsZWN0b3JfZG9uZV9jYih2b2lk
ICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpmaWxlX3NlbGVjdG9yLCB2b2lkICpldmVudF9pbmZv
KQogewotICAgIEZpbGVfU2VsZWN0b3JfRGF0YSAqZnNfZGF0YSA9IChGaWxlX1NlbGVjdG9yX0Rh
dGEgKil1c2VyX2RhdGE7CisgICBGaWxlX1NlbGVjdG9yX0RhdGEgKmZzX2RhdGEgPSAoRmlsZV9T
ZWxlY3Rvcl9EYXRhICopdXNlcl9kYXRhOwogCi0gICAgY29uc3QgY2hhciAqc2VsZWN0ZWQgPSAo
Y29uc3QgY2hhciAqKWV2ZW50X2luZm87Ci0gICAgaWYgKHNlbGVjdGVkICYmICpzZWxlY3RlZCkK
LSAgICAgICAgZXdrX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2ZpbGVfY2hvb3NlKGZzX2RhdGEtPnJl
cXVlc3QsIHNlbGVjdGVkKTsKKyAgIGNvbnN0IGNoYXIgKnNlbGVjdGVkID0gKGNvbnN0IGNoYXIg
KilldmVudF9pbmZvOworICAgaWYgKHNlbGVjdGVkICYmICpzZWxlY3RlZCkKKyAgICAgZXdrX2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2ZpbGVfY2hvb3NlKGZzX2RhdGEtPnJlcXVlc3QsIHNlbGVjdGVk
KTsKIAotICAgIGNsb3NlX2ZpbGVfcGlja2VyKGZzX2RhdGEpOworICAgY2xvc2VfZmlsZV9waWNr
ZXIoZnNfZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkCiBfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2Io
dm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqZXdrX3ZpZXcsIHZvaWQgKmV2ZW50X2luZm8p
CiB7Ci0gICAgRXZhc19PYmplY3QgKmJnOwotICAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAo
QnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7Ci0gICAgRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0
ICpyZXF1ZXN0ID0gKEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdCAqKWV2ZW50X2luZm87CisgICBF
dmFzX09iamVjdCAqYmc7CisgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2lu
ZG93ICopdXNlcl9kYXRhOworICAgRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0ICpyZXF1ZXN0ID0g
KEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdCAqKWV2ZW50X2luZm87CiAKLSAgICAvLyBTaG93IGJh
c2ljIGZpbGUgcGlja2VyIHdoaWNoIGRvZXMgbm90IGN1cnJlbnRseSBzdXBwb3J0IG11bHRpcGxl
IGZpbGVzCi0gICAgLy8gb3IgTUlNRSB0eXBlIGZpbHRlcmluZy4KLSAgICBFdmFzX09iamVjdCAq
ZWxtX3dpbmRvdyA9IGVsbV93aW5fYWRkKHdpbmRvdy0+ZWxtX3dpbmRvdywgImZpbGUtcGlja2Vy
LXdpbmRvdyIsIEVMTV9XSU5fRElBTE9HX0JBU0lDKTsKLSAgICBlbG1fd2luX3RpdGxlX3NldChl
bG1fd2luZG93LCAiRmlsZSBwaWNrZXIiKTsKLSAgICBlbG1fd2luX21vZGFsX3NldChlbG1fd2lu
ZG93LCBFSU5BX1RSVUUpOworICAgLy8gU2hvdyBiYXNpYyBmaWxlIHBpY2tlciB3aGljaCBkb2Vz
IG5vdCBjdXJyZW50bHkgc3VwcG9ydCBtdWx0aXBsZSBmaWxlcworICAgLy8gb3IgTUlNRSB0eXBl
IGZpbHRlcmluZy4KKyAgIEV2YXNfT2JqZWN0ICplbG1fd2luZG93ID0gZWxtX3dpbl9hZGQod2lu
ZG93LT5lbG1fd2luZG93LCAiZmlsZS1waWNrZXItd2luZG93IiwgRUxNX1dJTl9ESUFMT0dfQkFT
SUMpOworICAgZWxtX3dpbl90aXRsZV9zZXQoZWxtX3dpbmRvdywgIkZpbGUgcGlja2VyIik7Cisg
ICBlbG1fd2luX21vZGFsX3NldChlbG1fd2luZG93LCBFSU5BX1RSVUUpOwogCi0gICAgYmcgPSBl
bG1fYmdfYWRkKGVsbV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X3NpemVfaGludF93ZWlnaHRf
c2V0KGJnLCBFVkFTX0hJTlRfRVhQQU5ELCBFVkFTX0hJTlRfRVhQQU5EKTsKLSAgICBlbG1fd2lu
X3Jlc2l6ZV9vYmplY3RfYWRkKGVsbV93aW5kb3csIGJnKTsKLSAgICBldmFzX29iamVjdF9zaG93
KGJnKTsKKyAgIGJnID0gZWxtX2JnX2FkZChlbG1fd2luZG93KTsKKyAgIGV2YXNfb2JqZWN0X3Np
emVfaGludF93ZWlnaHRfc2V0KGJnLCBFVkFTX0hJTlRfRVhQQU5ELCBFVkFTX0hJTlRfRVhQQU5E
KTsKKyAgIGVsbV93aW5fcmVzaXplX29iamVjdF9hZGQoZWxtX3dpbmRvdywgYmcpOworICAgZXZh
c19vYmplY3Rfc2hvdyhiZyk7CiAKLSAgICBGaWxlX1NlbGVjdG9yX0RhdGEgKmZzX2RhdGEgPSAo
RmlsZV9TZWxlY3Rvcl9EYXRhICopbWFsbG9jKHNpemVvZihGaWxlX1NlbGVjdG9yX0RhdGEpKTsK
LSAgICBmc19kYXRhLT5wYXJlbnQgPSB3aW5kb3c7Ci0gICAgZnNfZGF0YS0+ZWxtX3dpbmRvdyA9
IGVsbV93aW5kb3c7Ci0gICAgZnNfZGF0YS0+cmVxdWVzdCA9IGV3a19vYmplY3RfcmVmKHJlcXVl
c3QpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChlbG1fd2luZG93LCAiZGVs
ZXRlLHJlcXVlc3QiLCBfZmlsZXBpY2tlcl9kZWxldGlvbl9jYiwgZnNfZGF0YSk7Ci0gICAgZXZh
c19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZWxtX3dpbmRvdywgRVZBU19DQUxM
QkFDS19ERUwsIF9maWxlcGlja2VyX3BhcmVudF9kZWxldGlvbl9jYiwgZnNfZGF0YSk7CisgICBG
aWxlX1NlbGVjdG9yX0RhdGEgKmZzX2RhdGEgPSAoRmlsZV9TZWxlY3Rvcl9EYXRhICopbWFsbG9j
KHNpemVvZihGaWxlX1NlbGVjdG9yX0RhdGEpKTsKKyAgIGZzX2RhdGEtPnBhcmVudCA9IHdpbmRv
dzsKKyAgIGZzX2RhdGEtPmVsbV93aW5kb3cgPSBlbG1fd2luZG93OworICAgZnNfZGF0YS0+cmVx
dWVzdCA9IGV3a19vYmplY3RfcmVmKHJlcXVlc3QpOworICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfYWRkKGVsbV93aW5kb3csICJkZWxldGUscmVxdWVzdCIsIF9maWxlcGlja2VyX2RlbGV0
aW9uX2NiLCBmc19kYXRhKTsKKyAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZCh3aW5k
b3ctPmVsbV93aW5kb3csIEVWQVNfQ0FMTEJBQ0tfREVMLCBfZmlsZXBpY2tlcl9wYXJlbnRfZGVs
ZXRpb25fY2IsIGZzX2RhdGEpOwogCi0gICAgRXZhc19PYmplY3QgKmZpbGVfc2VsZWN0b3IgPSBl
bG1fZmlsZXNlbGVjdG9yX2FkZChlbG1fd2luZG93KTsKLSAgICBjb25zdCBjaGFyICpob21lX3Bh
dGggPSBnZXRlbnYoIkhPTUUiKTsKLSAgICBlbG1fZmlsZXNlbGVjdG9yX3BhdGhfc2V0KGZpbGVf
c2VsZWN0b3IsIGhvbWVfcGF0aCA/IGhvbWVfcGF0aCA6ICIvaG9tZSIpOwotICAgIGV2YXNfb2Jq
ZWN0X3NpemVfaGludF93ZWlnaHRfc2V0KGZpbGVfc2VsZWN0b3IsIEVWQVNfSElOVF9FWFBBTkQs
IEVWQVNfSElOVF9FWFBBTkQpOwotICAgIGVsbV93aW5fcmVzaXplX29iamVjdF9hZGQoZWxtX3dp
bmRvdywgZmlsZV9zZWxlY3Rvcik7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhmaWxlX3NlbGVjdG9y
KTsKKyAgIEV2YXNfT2JqZWN0ICpmaWxlX3NlbGVjdG9yID0gZWxtX2ZpbGVzZWxlY3Rvcl9hZGQo
ZWxtX3dpbmRvdyk7CisgICBjb25zdCBjaGFyICpob21lX3BhdGggPSBnZXRlbnYoIkhPTUUiKTsK
KyAgIGVsbV9maWxlc2VsZWN0b3JfcGF0aF9zZXQoZmlsZV9zZWxlY3RvciwgaG9tZV9wYXRoID8g
aG9tZV9wYXRoIDogIi9ob21lIik7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfd2VpZ2h0X3Nl
dChmaWxlX3NlbGVjdG9yLCBFVkFTX0hJTlRfRVhQQU5ELCBFVkFTX0hJTlRfRVhQQU5EKTsKKyAg
IGVsbV93aW5fcmVzaXplX29iamVjdF9hZGQoZWxtX3dpbmRvdywgZmlsZV9zZWxlY3Rvcik7Cisg
ICBldmFzX29iamVjdF9zaG93KGZpbGVfc2VsZWN0b3IpOwogCi0gICAgZXZhc19vYmplY3Rfc21h
cnRfY2FsbGJhY2tfYWRkKGZpbGVfc2VsZWN0b3IsICJkb25lIiwgX2ZpbGVzZWxlY3Rvcl9kb25l
X2NiLCBmc19kYXRhKTsKKyAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChmaWxlX3Nl
bGVjdG9yLCAiZG9uZSIsIF9maWxlc2VsZWN0b3JfZG9uZV9jYiwgZnNfZGF0YSk7CiAKLSAgICBl
dmFzX29iamVjdF9yZXNpemUoZWxtX3dpbmRvdywgNDAwLCA0MDApOwotICAgIGVsbV93aW5fY2Vu
dGVyKGVsbV93aW5kb3csIEVJTkFfVFJVRSwgRUlOQV9UUlVFKTsKLSAgICBldmFzX29iamVjdF9z
aG93KGVsbV93aW5kb3cpOworICAgZXZhc19vYmplY3RfcmVzaXplKGVsbV93aW5kb3csIDQwMCwg
NDAwKTsKKyAgIGVsbV93aW5fY2VudGVyKGVsbV93aW5kb3csIEVJTkFfVFJVRSwgRUlOQV9UUlVF
KTsKKyAgIGV2YXNfb2JqZWN0X3Nob3coZWxtX3dpbmRvdyk7CiB9CiAKIHN0YXRpYyB2b2lkCiBf
ZG93bmxvYWRfZmluaXNoZWRfY2IoRXdrX0Rvd25sb2FkX0pvYiAqZG93bmxvYWQsIHZvaWQgKnVz
ZXJfZGF0YSkKIHsKLSAgICBJTkZPKCJEb3dubG9hZCBmaW5pc2hlZDogJXMiLCAgZXdrX2Rvd25s
b2FkX2pvYl9kZXN0aW5hdGlvbl9nZXQoZG93bmxvYWQpKTsKKyAgIElORk8oIkRvd25sb2FkIGZp
bmlzaGVkOiAlcyIsICBld2tfZG93bmxvYWRfam9iX2Rlc3RpbmF0aW9uX2dldChkb3dubG9hZCkp
OwogfQogCiBzdGF0aWMgdm9pZAogX2Rvd25sb2FkX2ZhaWxlZF9jYihFd2tfRG93bmxvYWRfSm9i
X0Vycm9yICpkb3dubG9hZF9lcnJvciwgdm9pZCAqdXNlcl9kYXRhKQogewotICAgIEV3a19FcnJv
ciAqZXJyb3IgPSBkb3dubG9hZF9lcnJvci0+ZXJyb3I7CisgICBFd2tfRXJyb3IgKmVycm9yID0g
ZG93bmxvYWRfZXJyb3ItPmVycm9yOwogCi0gICAgSU5GTygiRG93bmxvYWQgZmFpbGVkISBFcnJv
ciBjb2RlOiAlZCwgRXJyb3IgZGVzY3JpcHRpb246ICVzLCBFcnJvciBVUkw6ICVzIiwgZXdrX2Vy
cm9yX2NvZGVfZ2V0KGVycm9yKSwgZXdrX2Vycm9yX2Rlc2NyaXB0aW9uX2dldChlcnJvciksIGV3
a19lcnJvcl91cmxfZ2V0KGVycm9yKSk7CisgICBJTkZPKCJEb3dubG9hZCBmYWlsZWQhIEVycm9y
IGNvZGU6ICVkLCBFcnJvciBkZXNjcmlwdGlvbjogJXMsIEVycm9yIFVSTDogJXMiLCBld2tfZXJy
b3JfY29kZV9nZXQoZXJyb3IpLCBld2tfZXJyb3JfZGVzY3JpcHRpb25fZ2V0KGVycm9yKSwgZXdr
X2Vycm9yX3VybF9nZXQoZXJyb3IpKTsKIH0KIAogc3RhdGljIHZvaWQKIF9jb2xvcl9jaGFuZ2Vk
X2NiKHZvaWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvYmosIHZvaWQgKmV2ZW50X2luZm8pCiB7Ci0g
ICAgaW50IHIsIGcsIGIsIGE7CisgICBpbnQgciwgZywgYiwgYTsKIAotICAgIGVsbV9jb2xvcnNl
bGVjdG9yX2NvbG9yX2dldChvYmosICZyLCAmZywgJmIsICZhKTsKLSAgICBldmFzX29iamVjdF9j
b2xvcl9zZXQoZGF0YSwgciwgZywgYiwgYSk7CisgICBlbG1fY29sb3JzZWxlY3Rvcl9jb2xvcl9n
ZXQob2JqLCAmciwgJmcsICZiLCAmYSk7CisgICBldmFzX29iamVjdF9jb2xvcl9zZXQoZGF0YSwg
ciwgZywgYiwgYSk7CiB9CiAKIHN0YXRpYyB2b2lkCiBfY29sb3JfaXRlbV9zZWxlY3RlZF9jYih2
b2lkICpkYXRhLCBFdmFzX09iamVjdCAqb2JqLCB2b2lkICpldmVudF9pbmZvKQogewotICAgIGlu
dCByLCBnLCBiLCBhOwotICAgIEVsbV9PYmplY3RfSXRlbSAqY29sb3JfaXRlbSA9IChFbG1fT2Jq
ZWN0X0l0ZW0gKilldmVudF9pbmZvOworICAgaW50IHIsIGcsIGIsIGE7CisgICBFbG1fT2JqZWN0
X0l0ZW0gKmNvbG9yX2l0ZW0gPSAoRWxtX09iamVjdF9JdGVtICopZXZlbnRfaW5mbzsKIAotICAg
IGVsbV9jb2xvcnNlbGVjdG9yX3BhbGV0dGVfaXRlbV9jb2xvcl9nZXQoY29sb3JfaXRlbSwgJnIs
ICZnLCAmYiwgJmEpOwotICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChkYXRhLCByLCBnLCBiLCBh
KTsKKyAgIGVsbV9jb2xvcnNlbGVjdG9yX3BhbGV0dGVfaXRlbV9jb2xvcl9nZXQoY29sb3JfaXRl
bSwgJnIsICZnLCAmYiwgJmEpOworICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KGRhdGEsIHIsIGcs
IGIsIGEpOwogfQogCiBzdGF0aWMgdm9pZAogX2NvbG9yX3BpY2tlcl9va19jbGlja2VkX2NiKHZv
aWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvYmosIHZvaWQgKmV2ZW50X2luZm8pCiB7Ci0gICAgaW50
IHIsIGcsIGIsIGE7Ci0gICAgQ29sb3JfU2VsZWN0b3IgKmNvbG9yX3NlbGVjdG9yID0gKENvbG9y
X1NlbGVjdG9yICopZGF0YTsKKyAgIGludCByLCBnLCBiLCBhOworICAgQ29sb3JfU2VsZWN0b3Ig
KmNvbG9yX3NlbGVjdG9yID0gKENvbG9yX1NlbGVjdG9yICopZGF0YTsKIAotICAgIGVsbV9jb2xv
cnNlbGVjdG9yX2NvbG9yX2dldChjb2xvcl9zZWxlY3Rvci0+ZWxtX3NlbGVjdG9yLCAmciwgJmcs
ICZiLCAmYSk7Ci0gICAgZXdrX2NvbG9yX3BpY2tlcl9jb2xvcl9zZXQoY29sb3Jfc2VsZWN0b3It
PmV3a19waWNrZXIsIHIsIGcsIGIsIGEpOworICAgZWxtX2NvbG9yc2VsZWN0b3JfY29sb3JfZ2V0
KGNvbG9yX3NlbGVjdG9yLT5lbG1fc2VsZWN0b3IsICZyLCAmZywgJmIsICZhKTsKKyAgIGV3a19j
b2xvcl9waWNrZXJfY29sb3Jfc2V0KGNvbG9yX3NlbGVjdG9yLT5ld2tfcGlja2VyLCByLCBnLCBi
LCBhKTsKIH0KIAogc3RhdGljIHZvaWQKIF9jb2xvcl9waWNrZXJfY2FuY2VsX2NsaWNrZWRfY2Io
dm9pZCAqZGF0YSwgRXZhc19PYmplY3QgKm9iaiwgdm9pZCAqZXZlbnRfaW5mbykKIHsKLSAgICBp
bnQgciwgZywgYiwgYTsKKyAgIGludCByLCBnLCBiLCBhOwogCi0gICAgZXdrX2NvbG9yX3BpY2tl
cl9jb2xvcl9nZXQoZGF0YSwgJnIsICZnLCAmYiwgJmEpOwotICAgIGV3a19jb2xvcl9waWNrZXJf
Y29sb3Jfc2V0KGRhdGEsIHIsIGcsIGIsIGEpOworICAgZXdrX2NvbG9yX3BpY2tlcl9jb2xvcl9n
ZXQoZGF0YSwgJnIsICZnLCAmYiwgJmEpOworICAgZXdrX2NvbG9yX3BpY2tlcl9jb2xvcl9zZXQo
ZGF0YSwgciwgZywgYiwgYSk7CiB9CiAKIHN0YXRpYyBFaW5hX0Jvb2wKIF9jb2xvcl9waWNrZXJf
ZGlzbWlzc19jYihFd2tfVmlld19TbWFydF9EYXRhICpzZCkKIHsKLSAgICBCcm93c2VyX1dpbmRv
dyAqd2luZG93ID0gd2luZG93X2ZpbmRfd2l0aF9ld2tfdmlldyhzZC0+c2VsZik7CisgICBCcm93
c2VyX1dpbmRvdyAqd2luZG93ID0gd2luZG93X2ZpbmRfd2l0aF9ld2tfdmlldyhzZC0+c2VsZik7
CiAKLSAgICBldmFzX29iamVjdF9kZWwod2luZG93LT5jb2xvcl9zZWxlY3Rvci5lbG1fc2VsZWN0
b3Jfd2luZG93KTsKLSAgICB3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5k
b3cgPSBOVUxMOworICAgZXZhc19vYmplY3RfZGVsKHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxt
X3NlbGVjdG9yX3dpbmRvdyk7CisgICB3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rv
cl93aW5kb3cgPSBOVUxMOwogCi0gICAgcmV0dXJuIEVJTkFfVFJVRTsKKyAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKIHN0YXRpYyBFaW5hX0Jvb2wKIF9jb2xvcl9waWNrZXJfcmVxdWVzdF9jYihF
d2tfVmlld19TbWFydF9EYXRhICpzZCwgRXdrX0NvbG9yX1BpY2tlciAqY29sb3JfcGlja2VyKQog
ewotICAgIGludCByLCBnLCBiLCBhOwotICAgIEV2YXNfT2JqZWN0ICpiYWNrZ3JvdW5kLCAqcmVj
dCwgKmJveCwgKmJ1dHRvbl9ib3gsICpyZWN0X2ZyYW1lLCAqY3NfZnJhbWUsICpva19idXR0b24s
ICpjYW5jZWxfYnV0dG9uOwotCi0gICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IHdpbmRvd19m
aW5kX3dpdGhfZXdrX3ZpZXcoc2QtPnNlbGYpOwotICAgIHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3Iu
ZWxtX3NlbGVjdG9yX3dpbmRvdyA9IGVsbV93aW5fYWRkKHdpbmRvdy0+ZWxtX3dpbmRvdywgImNv
bG9yIHNlbGVjdG9yIiwgRUxNX1dJTl9CQVNJQyk7Ci0gICAgd2luZG93LT5jb2xvcl9zZWxlY3Rv
ci5ld2tfcGlja2VyID0gY29sb3JfcGlja2VyOwotCi0gICAgZWxtX3dpbl90aXRsZV9zZXQod2lu
ZG93LT5jb2xvcl9zZWxlY3Rvci5lbG1fc2VsZWN0b3Jfd2luZG93LCAiQ29sb3Igc2VsZWN0b3Ii
KTsKLQotICAgIC8qIFNob3cgY29sb3IgdmlldyAqLwotICAgIGJhY2tncm91bmQgPSBlbG1fYmdf
YWRkKHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdyk7Ci0gICAgZXZh
c19vYmplY3Rfc2l6ZV9oaW50X3dlaWdodF9zZXQoYmFja2dyb3VuZCwgRVZBU19ISU5UX0VYUEFO
RCwgRVZBU19ISU5UX0VYUEFORCk7Ci0gICAgZWxtX3dpbl9yZXNpemVfb2JqZWN0X2FkZCh3aW5k
b3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5kb3csIGJhY2tncm91bmQpOwotICAg
IGV2YXNfb2JqZWN0X3Nob3coYmFja2dyb3VuZCk7Ci0KLSAgICBib3ggPSBlbG1fYm94X2FkZCh3
aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5kb3cpOwotICAgIGV2YXNfb2Jq
ZWN0X3NpemVfaGludF93ZWlnaHRfc2V0KGJveCwgRVZBU19ISU5UX0VYUEFORCwgRVZBU19ISU5U
X0VYUEFORCk7Ci0gICAgZWxtX3dpbl9yZXNpemVfb2JqZWN0X2FkZCh3aW5kb3ctPmNvbG9yX3Nl
bGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5kb3csIGJveCk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhi
b3gpOwotCi0gICAgcmVjdF9mcmFtZSA9IGVsbV9mcmFtZV9hZGQod2luZG93LT5jb2xvcl9zZWxl
Y3Rvci5lbG1fc2VsZWN0b3Jfd2luZG93KTsKLSAgICBldmFzX29iamVjdF9zaXplX2hpbnRfd2Vp
Z2h0X3NldChyZWN0X2ZyYW1lLCBFVkFTX0hJTlRfRVhQQU5ELCAwLjMpOwotICAgIGV2YXNfb2Jq
ZWN0X3NpemVfaGludF9hbGlnbl9zZXQocmVjdF9mcmFtZSwgRVZBU19ISU5UX0ZJTEwsIEVWQVNf
SElOVF9GSUxMKTsKLSAgICBlbG1fb2JqZWN0X3RleHRfc2V0KHJlY3RfZnJhbWUsICJDb2xvciBW
aWV3Iik7Ci0gICAgZWxtX2JveF9wYWNrX2VuZChib3gsIHJlY3RfZnJhbWUpOwotICAgIGV2YXNf
b2JqZWN0X3Nob3cocmVjdF9mcmFtZSk7Ci0KLSAgICByZWN0ID0gZXZhc19vYmplY3RfcmVjdGFu
Z2xlX2FkZChldmFzX29iamVjdF9ldmFzX2dldCh3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9z
ZWxlY3Rvcl93aW5kb3cpKTsKLSAgICBlbG1fb2JqZWN0X2NvbnRlbnRfc2V0KHJlY3RfZnJhbWUs
IHJlY3QpOwotICAgIGV3a19jb2xvcl9waWNrZXJfY29sb3JfZ2V0KHdpbmRvdy0+Y29sb3Jfc2Vs
ZWN0b3IuZXdrX3BpY2tlciwgJnIsICZnLCAmYiwgJmEpOwotICAgIGV2YXNfb2JqZWN0X2NvbG9y
X3NldChyZWN0LCByLCBnLCBiLCBhKTsKLSAgICBldmFzX29iamVjdF9zaG93KHJlY3QpOwotCi0g
ICAgLyogU2hvdyBjb2xvciBzZWxlY3RvciAqLwotICAgIGNzX2ZyYW1lID0gZWxtX2ZyYW1lX2Fk
ZCh3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5kb3cpOwotICAgIGV2YXNf
b2JqZWN0X3NpemVfaGludF93ZWlnaHRfc2V0KGNzX2ZyYW1lLCBFVkFTX0hJTlRfRVhQQU5ELCAw
LjcpOwotICAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9hbGlnbl9zZXQoY3NfZnJhbWUsIEVWQVNf
SElOVF9GSUxMLCBFVkFTX0hJTlRfRklMTCk7Ci0gICAgZWxtX29iamVjdF90ZXh0X3NldChjc19m
cmFtZSwgIkNvbG9yIFNlbGVjdG9yIik7Ci0gICAgZWxtX2JveF9wYWNrX2VuZChib3gsIGNzX2Zy
YW1lKTsKLSAgICBldmFzX29iamVjdF9zaG93KGNzX2ZyYW1lKTsKLQotICAgIHdpbmRvdy0+Y29s
b3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yID0gZWxtX2NvbG9yc2VsZWN0b3JfYWRkKHdpbmRvdy0+
Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdyk7Ci0gICAgZWxtX29iamVjdF9jb250
ZW50X3NldChjc19mcmFtZSwgd2luZG93LT5jb2xvcl9zZWxlY3Rvci5lbG1fc2VsZWN0b3IpOwot
ICAgIGV2YXNfb2JqZWN0X3Nob3cod2luZG93LT5jb2xvcl9zZWxlY3Rvci5lbG1fc2VsZWN0b3Ip
OwotCi0gICAgLyogT0ssIENhbmNlbCBCdXR0b25zICovCi0gICAgYnV0dG9uX2JveCA9IGVsbV9i
b3hfYWRkKHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdyk7Ci0gICAg
ZWxtX2JveF9ob3Jpem9udGFsX3NldChidXR0b25fYm94LCBFSU5BX1RSVUUpOwotICAgIGV2YXNf
b2JqZWN0X3NpemVfaGludF9taW5fc2V0KGJ1dHRvbl9ib3gsIDIwMCwgNTApOwotICAgIGVsbV9i
b3hfcGFja19lbmQoYm94LCBidXR0b25fYm94KTsKLSAgICBldmFzX29iamVjdF9zaG93KGJ1dHRv
bl9ib3gpOwotCi0gICAgb2tfYnV0dG9uID0gZWxtX2J1dHRvbl9hZGQod2luZG93LT5jb2xvcl9z
ZWxlY3Rvci5lbG1fc2VsZWN0b3Jfd2luZG93KTsKLSAgICBlbG1fb2JqZWN0X3RleHRfc2V0KG9r
X2J1dHRvbiwgIk9LIik7Ci0gICAgZWxtX2JveF9wYWNrX2VuZChidXR0b25fYm94LCBva19idXR0
b24pOwotICAgIGV2YXNfb2JqZWN0X3Nob3cob2tfYnV0dG9uKTsKLQotICAgIGNhbmNlbF9idXR0
b24gPSBlbG1fYnV0dG9uX2FkZCh3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93
aW5kb3cpOwotICAgIGVsbV9vYmplY3RfdGV4dF9zZXQoY2FuY2VsX2J1dHRvbiwgIkNhbmNlbCIp
OwotICAgIGVsbV9ib3hfcGFja19lbmQoYnV0dG9uX2JveCwgY2FuY2VsX2J1dHRvbik7Ci0gICAg
ZXZhc19vYmplY3Rfc2hvdyhjYW5jZWxfYnV0dG9uKTsKLQotICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2NhbGxiYWNrX2FkZChva19idXR0b24sICJjbGlja2VkIiwgX2NvbG9yX3BpY2tlcl9va19jbGlj
a2VkX2NiLCAmKHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IpKTsKLSAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19hZGQoY2FuY2VsX2J1dHRvbiwgImNsaWNrZWQiLCBfY29sb3JfcGlja2VyX2Nh
bmNlbF9jbGlja2VkX2NiLAotICAgICAgICB3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmV3a19waWNr
ZXIpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmNvbG9yX3Nl
bGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5kb3csICJkZWxldGUscmVxdWVzdCIsCi0gICAgICAgIF9j
b2xvcl9waWNrZXJfY2FuY2VsX2NsaWNrZWRfY2IsIHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZXdr
X3BpY2tlcik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+Y29s
b3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yLCAiY2hhbmdlZCIsIF9jb2xvcl9jaGFuZ2VkX2NiLCBy
ZWN0KTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5jb2xvcl9z
ZWxlY3Rvci5lbG1fc2VsZWN0b3IsICJjb2xvcixpdGVtLHNlbGVjdGVkIiwgX2NvbG9yX2l0ZW1f
c2VsZWN0ZWRfY2IsCi0gICAgICAgIHJlY3QpOwotCi0gICAgZWxtX3dpbl9jZW50ZXIod2luZG93
LT5jb2xvcl9zZWxlY3Rvci5lbG1fc2VsZWN0b3Jfd2luZG93LCBFSU5BX1RSVUUsIEVJTkFfVFJV
RSk7Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3Nl
bGVjdG9yX3dpbmRvdywgMzUwLCA1MDApOwotICAgIGV2YXNfb2JqZWN0X3Nob3cod2luZG93LT5j
b2xvcl9zZWxlY3Rvci5lbG1fc2VsZWN0b3Jfd2luZG93KTsKLQotICAgIHJldHVybiBFSU5BX1RS
VUU7CisgICBpbnQgciwgZywgYiwgYTsKKyAgIEV2YXNfT2JqZWN0ICpiYWNrZ3JvdW5kLCAqcmVj
dCwgKmJveCwgKmJ1dHRvbl9ib3gsICpyZWN0X2ZyYW1lLCAqY3NfZnJhbWUsICpva19idXR0b24s
ICpjYW5jZWxfYnV0dG9uOworCisgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gd2luZG93X2Zp
bmRfd2l0aF9ld2tfdmlldyhzZC0+c2VsZik7CisgICB3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVs
bV9zZWxlY3Rvcl93aW5kb3cgPSBlbG1fd2luX2FkZCh3aW5kb3ctPmVsbV93aW5kb3csICJjb2xv
ciBzZWxlY3RvciIsIEVMTV9XSU5fQkFTSUMpOworICAgd2luZG93LT5jb2xvcl9zZWxlY3Rvci5l
d2tfcGlja2VyID0gY29sb3JfcGlja2VyOworCisgICBlbG1fd2luX3RpdGxlX3NldCh3aW5kb3ct
PmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5kb3csICJDb2xvciBzZWxlY3RvciIpOwor
CisgICAvKiBTaG93IGNvbG9yIHZpZXcgKi8KKyAgIGJhY2tncm91bmQgPSBlbG1fYmdfYWRkKHdp
bmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdyk7CisgICBldmFzX29iamVj
dF9zaXplX2hpbnRfd2VpZ2h0X3NldChiYWNrZ3JvdW5kLCBFVkFTX0hJTlRfRVhQQU5ELCBFVkFT
X0hJTlRfRVhQQU5EKTsKKyAgIGVsbV93aW5fcmVzaXplX29iamVjdF9hZGQod2luZG93LT5jb2xv
cl9zZWxlY3Rvci5lbG1fc2VsZWN0b3Jfd2luZG93LCBiYWNrZ3JvdW5kKTsKKyAgIGV2YXNfb2Jq
ZWN0X3Nob3coYmFja2dyb3VuZCk7CisKKyAgIGJveCA9IGVsbV9ib3hfYWRkKHdpbmRvdy0+Y29s
b3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdyk7CisgICBldmFzX29iamVjdF9zaXplX2hp
bnRfd2VpZ2h0X3NldChib3gsIEVWQVNfSElOVF9FWFBBTkQsIEVWQVNfSElOVF9FWFBBTkQpOwor
ICAgZWxtX3dpbl9yZXNpemVfb2JqZWN0X2FkZCh3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9z
ZWxlY3Rvcl93aW5kb3csIGJveCk7CisgICBldmFzX29iamVjdF9zaG93KGJveCk7CisKKyAgIHJl
Y3RfZnJhbWUgPSBlbG1fZnJhbWVfYWRkKHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVj
dG9yX3dpbmRvdyk7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfd2VpZ2h0X3NldChyZWN0X2Zy
YW1lLCBFVkFTX0hJTlRfRVhQQU5ELCAwLjMpOworICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X2Fs
aWduX3NldChyZWN0X2ZyYW1lLCBFVkFTX0hJTlRfRklMTCwgRVZBU19ISU5UX0ZJTEwpOworICAg
ZWxtX29iamVjdF90ZXh0X3NldChyZWN0X2ZyYW1lLCAiQ29sb3IgVmlldyIpOworICAgZWxtX2Jv
eF9wYWNrX2VuZChib3gsIHJlY3RfZnJhbWUpOworICAgZXZhc19vYmplY3Rfc2hvdyhyZWN0X2Zy
YW1lKTsKKworICAgcmVjdCA9IGV2YXNfb2JqZWN0X3JlY3RhbmdsZV9hZGQoZXZhc19vYmplY3Rf
ZXZhc19nZXQod2luZG93LT5jb2xvcl9zZWxlY3Rvci5lbG1fc2VsZWN0b3Jfd2luZG93KSk7Cisg
ICBlbG1fb2JqZWN0X2NvbnRlbnRfc2V0KHJlY3RfZnJhbWUsIHJlY3QpOworICAgZXdrX2NvbG9y
X3BpY2tlcl9jb2xvcl9nZXQod2luZG93LT5jb2xvcl9zZWxlY3Rvci5ld2tfcGlja2VyLCAmciwg
JmcsICZiLCAmYSk7CisgICBldmFzX29iamVjdF9jb2xvcl9zZXQocmVjdCwgciwgZywgYiwgYSk7
CisgICBldmFzX29iamVjdF9zaG93KHJlY3QpOworCisgICAvKiBTaG93IGNvbG9yIHNlbGVjdG9y
ICovCisgICBjc19mcmFtZSA9IGVsbV9mcmFtZV9hZGQod2luZG93LT5jb2xvcl9zZWxlY3Rvci5l
bG1fc2VsZWN0b3Jfd2luZG93KTsKKyAgIGV2YXNfb2JqZWN0X3NpemVfaGludF93ZWlnaHRfc2V0
KGNzX2ZyYW1lLCBFVkFTX0hJTlRfRVhQQU5ELCAwLjcpOworICAgZXZhc19vYmplY3Rfc2l6ZV9o
aW50X2FsaWduX3NldChjc19mcmFtZSwgRVZBU19ISU5UX0ZJTEwsIEVWQVNfSElOVF9GSUxMKTsK
KyAgIGVsbV9vYmplY3RfdGV4dF9zZXQoY3NfZnJhbWUsICJDb2xvciBTZWxlY3RvciIpOworICAg
ZWxtX2JveF9wYWNrX2VuZChib3gsIGNzX2ZyYW1lKTsKKyAgIGV2YXNfb2JqZWN0X3Nob3coY3Nf
ZnJhbWUpOworCisgICB3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3RvciA9IGVsbV9j
b2xvcnNlbGVjdG9yX2FkZCh3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5k
b3cpOworICAgZWxtX29iamVjdF9jb250ZW50X3NldChjc19mcmFtZSwgd2luZG93LT5jb2xvcl9z
ZWxlY3Rvci5lbG1fc2VsZWN0b3IpOworICAgZXZhc19vYmplY3Rfc2hvdyh3aW5kb3ctPmNvbG9y
X3NlbGVjdG9yLmVsbV9zZWxlY3Rvcik7CisKKyAgIC8qIE9LLCBDYW5jZWwgQnV0dG9ucyAqLwor
ICAgYnV0dG9uX2JveCA9IGVsbV9ib3hfYWRkKHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3Nl
bGVjdG9yX3dpbmRvdyk7CisgICBlbG1fYm94X2hvcml6b250YWxfc2V0KGJ1dHRvbl9ib3gsIEVJ
TkFfVFJVRSk7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfbWluX3NldChidXR0b25fYm94LCAy
MDAsIDUwKTsKKyAgIGVsbV9ib3hfcGFja19lbmQoYm94LCBidXR0b25fYm94KTsKKyAgIGV2YXNf
b2JqZWN0X3Nob3coYnV0dG9uX2JveCk7CisKKyAgIG9rX2J1dHRvbiA9IGVsbV9idXR0b25fYWRk
KHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdyk7CisgICBlbG1fb2Jq
ZWN0X3RleHRfc2V0KG9rX2J1dHRvbiwgIk9LIik7CisgICBlbG1fYm94X3BhY2tfZW5kKGJ1dHRv
bl9ib3gsIG9rX2J1dHRvbik7CisgICBldmFzX29iamVjdF9zaG93KG9rX2J1dHRvbik7CisKKyAg
IGNhbmNlbF9idXR0b24gPSBlbG1fYnV0dG9uX2FkZCh3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVs
bV9zZWxlY3Rvcl93aW5kb3cpOworICAgZWxtX29iamVjdF90ZXh0X3NldChjYW5jZWxfYnV0dG9u
LCAiQ2FuY2VsIik7CisgICBlbG1fYm94X3BhY2tfZW5kKGJ1dHRvbl9ib3gsIGNhbmNlbF9idXR0
b24pOworICAgZXZhc19vYmplY3Rfc2hvdyhjYW5jZWxfYnV0dG9uKTsKKworICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfYWRkKG9rX2J1dHRvbiwgImNsaWNrZWQiLCBfY29sb3JfcGlja2Vy
X29rX2NsaWNrZWRfY2IsICYod2luZG93LT5jb2xvcl9zZWxlY3RvcikpOworICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfYWRkKGNhbmNlbF9idXR0b24sICJjbGlja2VkIiwgX2NvbG9yX3Bp
Y2tlcl9jYW5jZWxfY2xpY2tlZF9jYiwKKyAgICAgd2luZG93LT5jb2xvcl9zZWxlY3Rvci5ld2tf
cGlja2VyKTsKKyAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmNvbG9y
X3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5kb3csICJkZWxldGUscmVxdWVzdCIsCisgICAgIF9j
b2xvcl9waWNrZXJfY2FuY2VsX2NsaWNrZWRfY2IsIHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZXdr
X3BpY2tlcik7CisgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5jb2xv
cl9zZWxlY3Rvci5lbG1fc2VsZWN0b3IsICJjaGFuZ2VkIiwgX2NvbG9yX2NoYW5nZWRfY2IsIHJl
Y3QpOworICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+Y29sb3Jfc2Vs
ZWN0b3IuZWxtX3NlbGVjdG9yLCAiY29sb3IsaXRlbSxzZWxlY3RlZCIsIF9jb2xvcl9pdGVtX3Nl
bGVjdGVkX2NiLAorICAgICByZWN0KTsKKworICAgaW50IHgsIHksIHdpZHRoLCBoZWlnaHQ7Cisg
ICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQod2luZG93LT5lbG1fd2luZG93LCAmeCwgJnksICZ3
aWR0aCwgJmhlaWdodCk7CisKKyAgIGVsbV93aW5fY2VudGVyKHdpbmRvdy0+Y29sb3Jfc2VsZWN0
b3IuZWxtX3NlbGVjdG9yX3dpbmRvdywgRUlOQV9UUlVFLCBFSU5BX1RSVUUpOworICAgZXZhc19v
YmplY3RfcmVzaXplKHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdywg
MzUwLCA1MDApOworICAgZXZhc19vYmplY3Rfc2hvdyh3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVs
bV9zZWxlY3Rvcl93aW5kb3cpOworCisgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBzdGF0aWMg
aW50CiBxdWl0KEVpbmFfQm9vbCBzdWNjZXNzLCBjb25zdCBjaGFyICptc2cpCiB7Ci0gICAgaWYg
KG1zZykKLSAgICAgICAgc3VjY2VzcyA/IElORk8oIiVzIiwgbXNnKSA6IEVSUk9SKCIlcyIsIG1z
Zyk7CisgICBpZiAobXNnKQorICAgICBzdWNjZXNzID8gSU5GTygiJXMiLCBtc2cpIDogRVJST1Io
IiVzIiwgbXNnKTsKIAotICAgIGVpbmFfbG9nX2RvbWFpbl91bnJlZ2lzdGVyKF9sb2dfZG9tYWlu
X2lkKTsKLSAgICBld2tfb2JqZWN0X3VucmVmKGNvbmZpZ3VyYXRpb24oKSk7Ci0gICAgZXdrX3No
dXRkb3duKCk7Ci0gICAgZWxtX3NodXRkb3duKCk7CisgICBlaW5hX2xvZ19kb21haW5fdW5yZWdp
c3RlcihfbG9nX2RvbWFpbl9pZCk7CisgICBld2tfb2JqZWN0X3VucmVmKGNvbmZpZ3VyYXRpb24o
KSk7CisgICBld2tfc2h1dGRvd24oKTsKKyAgIGVsbV9zaHV0ZG93bigpOwogCi0gICAgaWYgKCFz
dWNjZXNzKQotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgaWYgKCFzdWNjZXNzKQor
ICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwogCi0gICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKKyAg
IHJldHVybiBFWElUX1NVQ0NFU1M7CiB9CiAKIHN0YXRpYyBFaW5hX0Jvb2wKIGhhc19zY2hlbWUo
Y29uc3QgY2hhciAqdXJsKQogewotICAgIHJldHVybiAhIXN0cnN0cih1cmwsICI6Ly8iKTsKKyAg
IHJldHVybiAhIXN0cnN0cih1cmwsICI6Ly8iKTsKIH0KIAogc3RhdGljIGNoYXIgKgogdXJsX2Zy
b21fdXNlcl9pbnB1dChjb25zdCBjaGFyICphcmcpCiB7Ci0gICAgLyogSWYgaXQgaXMgYWxyZWFk
eSBhIFVSTCwgcmV0dXJuIHRoZSBhcmd1bWVudCBhcyBpcy4gKi8KLSAgICBpZiAoaGFzX3NjaGVt
ZShhcmcpIHx8IGVpbmFfc3RyX2hhc19wcmVmaXgoYXJnLCBKQVZBU0NSSVBUX1NDSEVNRSkgfHwg
IXN0cmNhc2VjbXAoYXJnLCAiYWJvdXQ6YmxhbmsiKSkKLSAgICAgICAgcmV0dXJuIHN0cmR1cChh
cmcpOworICAgLyogSWYgaXQgaXMgYWxyZWFkeSBhIFVSTCwgcmV0dXJuIHRoZSBhcmd1bWVudCBh
cyBpcy4gKi8KKyAgIGlmIChoYXNfc2NoZW1lKGFyZykgfHwgZWluYV9zdHJfaGFzX3ByZWZpeChh
cmcsIEpBVkFTQ1JJUFRfU0NIRU1FKSB8fCAhc3RyY2FzZWNtcChhcmcsICJhYm91dDpibGFuayIp
KQorICAgICByZXR1cm4gc3RyZHVwKGFyZyk7CiAKLSAgICBFaW5hX1N0cmJ1ZiAqYnVmID0gZWlu
YV9zdHJidWZfbWFuYWdlX25ldyhlaW5hX2ZpbGVfcGF0aF9zYW5pdGl6ZShhcmcpKTsKKyAgIEVp
bmFfU3RyYnVmICpidWYgPSBlaW5hX3N0cmJ1Zl9tYW5hZ2VfbmV3KGVpbmFfZmlsZV9wYXRoX3Nh
bml0aXplKGFyZykpOwogCi0gICAgLyogQ2hlY2sgaWYgdGhlIHBhdGggZXhpc3RzLiAqLwotICAg
IGlmIChlY29yZV9maWxlX2V4aXN0cyhlaW5hX3N0cmJ1Zl9zdHJpbmdfZ2V0KGJ1ZikpKSB7Ci0g
ICAgICAgIC8qIEZpbGUgZXhpc3RzLCBjb252ZXJ0IGxvY2FsIHBhdGggdG8gYSBVUkwuICovCi0g
ICAgICAgIGVpbmFfc3RyYnVmX3ByZXBlbmQoYnVmLCBGSUxFX1NDSEVNRSk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgLyogVGhlIHBhdGggZG9lcyBub3QgZXhpc3QsIGNvbnZlcnQgaXQgdG8gYSBV
UkwgYnkKLSAgICAgICAgICAgcHJlcGVuZGluZyBodHRwOi8vIHNjaGVtZToKLSAgICAgICAgICAg
d3d3Lmdvb2dsZS5jb20gLT4gaHR0cDovL3d3dy5nb29nbGUuY29tICovCi0gICAgICAgIGVpbmFf
c3RyYnVmX3N0cmluZ19mcmVlKGJ1Zik7Ci0gICAgICAgIGVpbmFfc3RyYnVmX2FwcGVuZF9wcmlu
dGYoYnVmLCAiJXMlcyIsIEhUVFBfU0NIRU1FLCBhcmcpOwotICAgIH0KLSAgICBjaGFyICp1cmwg
PSBlaW5hX3N0cmJ1Zl9zdHJpbmdfc3RlYWwoYnVmKTsKLSAgICBlaW5hX3N0cmJ1Zl9mcmVlKGJ1
Zik7CisgICAvKiBDaGVjayBpZiB0aGUgcGF0aCBleGlzdHMuICovCisgICBpZiAoZWNvcmVfZmls
ZV9leGlzdHMoZWluYV9zdHJidWZfc3RyaW5nX2dldChidWYpKSkgeworICAgICAvKiBGaWxlIGV4
aXN0cywgY29udmVydCBsb2NhbCBwYXRoIHRvIGEgVVJMLiAqLworICAgICBlaW5hX3N0cmJ1Zl9w
cmVwZW5kKGJ1ZiwgRklMRV9TQ0hFTUUpOworICAgfSBlbHNlIHsKKyAgICAgLyogVGhlIHBhdGgg
ZG9lcyBub3QgZXhpc3QsIGNvbnZlcnQgaXQgdG8gYSBVUkwgYnkKKyAgICAgICAgcHJlcGVuZGlu
ZyBodHRwOi8vIHNjaGVtZToKKyAgICAgICAgd3d3Lmdvb2dsZS5jb20gLT4gaHR0cDovL3d3dy5n
b29nbGUuY29tICovCisgICAgIGVpbmFfc3RyYnVmX3N0cmluZ19mcmVlKGJ1Zik7CisgICAgIGVp
bmFfc3RyYnVmX2FwcGVuZF9wcmludGYoYnVmLCAiJXMlcyIsIEhUVFBfU0NIRU1FLCBhcmcpOwor
ICAgfQorICAgY2hhciAqdXJsID0gZWluYV9zdHJidWZfc3RyaW5nX3N0ZWFsKGJ1Zik7CisgICBl
aW5hX3N0cmJ1Zl9mcmVlKGJ1Zik7CiAKLSAgICByZXR1cm4gdXJsOworICAgcmV0dXJuIHVybDsK
IH0KIAogc3RhdGljIEVpbmFfQm9vbAogdXJsX2xvYWRfZnJvbV91c2VyX2lucHV0KEV2YXNfT2Jq
ZWN0ICpld2tfdmlldywgY29uc3QgY2hhciAqdXJsKQogewotICAgIGlmICghZXdrX3ZpZXcgfHwg
IXVybCkKLSAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICBpZiAoIWV3a192aWV3IHx8ICF1
cmwpCisgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogCi0gICAgaWYgKGVpbmFfc3RyX2hhc19wcmVm
aXgodXJsLCBKQVZBU0NSSVBUX1NDSEVNRSkpCi0gICAgICAgIHJldHVybiBld2tfdmlld19zY3Jp
cHRfZXhlY3V0ZShld2tfdmlldywgc3Ryc3RyKHVybCwgSkFWQVNDUklQVF9TQ0hFTUUpLCAwLCAw
KTsKKyAgIGlmIChlaW5hX3N0cl9oYXNfcHJlZml4KHVybCwgSkFWQVNDUklQVF9TQ0hFTUUpKQor
ICAgICByZXR1cm4gZXdrX3ZpZXdfc2NyaXB0X2V4ZWN1dGUoZXdrX3ZpZXcsIHN0cnN0cih1cmws
IEpBVkFTQ1JJUFRfU0NIRU1FKSwgMCwgMCk7CiAKLSAgICByZXR1cm4gZXdrX3ZpZXdfdXJsX3Nl
dChld2tfdmlldywgdXJsKTsKKyAgIHJldHVybiBld2tfdmlld191cmxfc2V0KGV3a192aWV3LCB1
cmwpOwogfQogCiBzdGF0aWMgdm9pZAogX3VybF9iYXJfYWN0aXZhdGVkX2NiKHZvaWQgKnVzZXJf
ZGF0YSwgRXZhc19PYmplY3QgKnVybF9iYXIsIHZvaWQgKmV2ZW50X2luZm8pCiB7Ci0gICAgQnJv
d3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKKyAgIEJy
b3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7CiAKLSAg
ICBjb25zdCBjaGFyICptYXJrdXBfdXJsID0gZWxtX2VudHJ5X2VudHJ5X2dldCh1cmxfYmFyKTsK
LSAgICBjaGFyICp1c2VyX3VybCA9IGVsbV9lbnRyeV9tYXJrdXBfdG9fdXRmOChtYXJrdXBfdXJs
KTsKLSAgICBjaGFyICp1cmwgPSB1cmxfZnJvbV91c2VyX2lucHV0KHVzZXJfdXJsKTsKLSAgICB1
cmxfbG9hZF9mcm9tX3VzZXJfaW5wdXQod2luZG93LT5ld2tfdmlldywgdXJsKTsKKyAgIGNvbnN0
IGNoYXIgKm1hcmt1cF91cmwgPSBlbG1fZW50cnlfZW50cnlfZ2V0KHVybF9iYXIpOworICAgY2hh
ciAqdXNlcl91cmwgPSBlbG1fZW50cnlfbWFya3VwX3RvX3V0ZjgobWFya3VwX3VybCk7CisgICBj
aGFyICp1cmwgPSB1cmxfZnJvbV91c2VyX2lucHV0KHVzZXJfdXJsKTsKKyAgIHVybF9sb2FkX2Zy
b21fdXNlcl9pbnB1dCh3aW5kb3ctPmV3a192aWV3LCB1cmwpOwogCi0gICAgZnJlZSh1c2VyX3Vy
bCk7Ci0gICAgZnJlZSh1cmwpOworICAgZnJlZSh1c2VyX3VybCk7CisgICBmcmVlKHVybCk7CiAK
LSAgICAvKiBHaXZlIGZvY3VzIGJhY2sgdG8gdGhlIHZpZXcgKi8KLSAgICB2aWV3X2ZvY3VzX3Nl
dCh3aW5kb3csIEVJTkFfVFJVRSk7CisgICAvKiBHaXZlIGZvY3VzIGJhY2sgdG8gdGhlIHZpZXcg
Ki8KKyAgIHZpZXdfZm9jdXNfc2V0KHdpbmRvdywgRUlOQV9UUlVFKTsKIH0KIAogc3RhdGljIHZv
aWQKIF91cmxfYmFyX2NsaWNrZWRfY2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqdXJs
X2Jhciwgdm9pZCAqZXZlbnRfaW5mbykKIHsKLSAgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0g
KEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOworICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9
IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKIAotICAgIC8qIEdyYWIgZm9jdXMgZnJvbSB0
aGUgdmlldyAqLwotICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldCh3aW5kb3ctPmV3a192aWV3LCBF
SU5BX0ZBTFNFKTsKLSAgICBlbG1fb2JqZWN0X2ZvY3VzX3NldCh1cmxfYmFyLCBFSU5BX1RSVUUp
OworICAgLyogR3JhYiBmb2N1cyBmcm9tIHRoZSB2aWV3ICovCisgICBldmFzX29iamVjdF9mb2N1
c19zZXQod2luZG93LT5ld2tfdmlldywgRUlOQV9GQUxTRSk7CisgICBlbG1fb2JqZWN0X2ZvY3Vz
X3NldCh1cmxfYmFyLCBFSU5BX1RSVUUpOwogfQogCiBzdGF0aWMgdm9pZAogX3NlYXJjaF9maWVs
ZF9hYm9ydGVkX2NiKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKnNlYXJjaF9maWVsZCwg
dm9pZCAqZXZlbnRfaW5mbykKIHsKLSAgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dz
ZXJfV2luZG93ICopdXNlcl9kYXRhOwotICAgIHNlYXJjaF9ib3hfaGlkZSh3aW5kb3cpOworICAg
QnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKKyAg
IHNlYXJjaF9ib3hfaGlkZSh3aW5kb3cpOwogCi0gICAgLyogR2l2ZSBmb2N1cyBiYWNrIHRvIHRo
ZSB2aWV3ICovCi0gICAgdmlld19mb2N1c19zZXQod2luZG93LCBFSU5BX1RSVUUpOworICAgLyog
R2l2ZSBmb2N1cyBiYWNrIHRvIHRoZSB2aWV3ICovCisgICB2aWV3X2ZvY3VzX3NldCh3aW5kb3cs
IEVJTkFfVFJVRSk7CiB9CiAKIHN0YXRpYyB2b2lkCiBfc2VhcmNoX2ZpZWxkX2FjdGl2YXRlZF9j
Yih2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpzZWFyY2hfZmllbGQsIHZvaWQgKmV2ZW50
X2luZm8pCiB7Ci0gICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAq
KXVzZXJfZGF0YTsKKyAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cg
Kil1c2VyX2RhdGE7CiAKLSAgICBjb25zdCBjaGFyICptYXJrdXBfdGV4dCA9IGVsbV9lbnRyeV9l
bnRyeV9nZXQoc2VhcmNoX2ZpZWxkKTsKLSAgICBjaGFyICp0ZXh0ID0gZWxtX2VudHJ5X21hcmt1
cF90b191dGY4KG1hcmt1cF90ZXh0KTsKLSAgICBld2tfdmlld190ZXh0X2ZpbmQod2luZG93LT5l
d2tfdmlldywgdGV4dCwgc2VhcmNoX2ZsYWdzLCBNQVhfU0VBUkNIX0NPVU5UKTsKLSAgICBmcmVl
KHRleHQpOworICAgY29uc3QgY2hhciAqbWFya3VwX3RleHQgPSBlbG1fZW50cnlfZW50cnlfZ2V0
KHNlYXJjaF9maWVsZCk7CisgICBjaGFyICp0ZXh0ID0gZWxtX2VudHJ5X21hcmt1cF90b191dGY4
KG1hcmt1cF90ZXh0KTsKKyAgIGV3a192aWV3X3RleHRfZmluZCh3aW5kb3ctPmV3a192aWV3LCB0
ZXh0LCBzZWFyY2hfZmxhZ3MsIE1BWF9TRUFSQ0hfQ09VTlQpOworICAgZnJlZSh0ZXh0KTsKIAot
ICAgIC8qIEdyYWIgZm9jdXMgZnJvbSB0aGUgdmlldyAqLwotICAgIGV2YXNfb2JqZWN0X2ZvY3Vz
X3NldCh3aW5kb3ctPmV3a192aWV3LCBFSU5BX0ZBTFNFKTsKLSAgICBlbG1fb2JqZWN0X2ZvY3Vz
X3NldChzZWFyY2hfZmllbGQsIEVJTkFfVFJVRSk7CisgICAvKiBHcmFiIGZvY3VzIGZyb20gdGhl
IHZpZXcgKi8KKyAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldCh3aW5kb3ctPmV3a192aWV3LCBFSU5B
X0ZBTFNFKTsKKyAgIGVsbV9vYmplY3RfZm9jdXNfc2V0KHNlYXJjaF9maWVsZCwgRUlOQV9UUlVF
KTsKIH0KIAogc3RhdGljIHZvaWQKIF9zZWFyY2hfZmllbGRfY2xpY2tlZF9jYih2b2lkICp1c2Vy
X2RhdGEsIEV2YXNfT2JqZWN0ICpzZWFyY2hfZmllbGQsIHZvaWQgKmV2ZW50X2luZm8pCiB7Ci0g
ICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsK
KyAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7
CiAKLSAgICAvKiBHcmFiIGZvY3VzIGZyb20gdGhlIHZpZXcgKi8KLSAgICBldmFzX29iamVjdF9m
b2N1c19zZXQod2luZG93LT5ld2tfdmlldywgRUlOQV9GQUxTRSk7Ci0gICAgZWxtX29iamVjdF9m
b2N1c19zZXQoc2VhcmNoX2ZpZWxkLCBFSU5BX1RSVUUpOworICAgLyogR3JhYiBmb2N1cyBmcm9t
IHRoZSB2aWV3ICovCisgICBldmFzX29iamVjdF9mb2N1c19zZXQod2luZG93LT5ld2tfdmlldywg
RUlOQV9GQUxTRSk7CisgICBlbG1fb2JqZWN0X2ZvY3VzX3NldChzZWFyY2hfZmllbGQsIEVJTkFf
VFJVRSk7CiB9CiAKIHN0YXRpYyB2b2lkCiBfYmFja19idXR0b25fY2xpY2tlZF9jYih2b2lkICp1
c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpiYWNrX2J1dHRvbiwgdm9pZCAqZXZlbnRfaW5mbykKIHsK
LSAgICBpZiAobG9uZ3ByZXNzX2VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKKyAgIGlmIChsb25n
cHJlc3NfZW5hYmxlZCkKKyAgICAgcmV0dXJuOwogCi0gICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRv
dyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKKyAgIEJyb3dzZXJfV2luZG93ICp3aW5k
b3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7CiAKLSAgICBld2tfdmlld19iYWNrKHdp
bmRvdy0+ZXdrX3ZpZXcpOwotICAgIC8qIFVwZGF0ZSBiYWNrIGJ1dHRvbiBzdGF0ZSAqLwotICAg
IGVsbV9vYmplY3RfZGlzYWJsZWRfc2V0KGJhY2tfYnV0dG9uLCAhZXdrX3ZpZXdfYmFja19wb3Nz
aWJsZSh3aW5kb3ctPmV3a192aWV3KSk7CisgICBld2tfdmlld19iYWNrKHdpbmRvdy0+ZXdrX3Zp
ZXcpOworICAgLyogVXBkYXRlIGJhY2sgYnV0dG9uIHN0YXRlICovCisgICBlbG1fb2JqZWN0X2Rp
c2FibGVkX3NldChiYWNrX2J1dHRvbiwgIWV3a192aWV3X2JhY2tfcG9zc2libGUod2luZG93LT5l
d2tfdmlldykpOwogfQogCiBzdGF0aWMgdm9pZAogX2ZvcndhcmRfYnV0dG9uX2NsaWNrZWRfY2Io
dm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqZm9yd2FyZF9idXR0b24sIHZvaWQgKmV2ZW50
X2luZm8pCiB7Ci0gICAgaWYgKGxvbmdwcmVzc19lbmFibGVkKQotICAgICAgICByZXR1cm47Cisg
ICBpZiAobG9uZ3ByZXNzX2VuYWJsZWQpCisgICAgIHJldHVybjsKIAotICAgIEJyb3dzZXJfV2lu
ZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7CisgICBCcm93c2VyX1dp
bmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOwogCi0gICAgZXdrX3Zp
ZXdfZm9yd2FyZCh3aW5kb3ctPmV3a192aWV3KTsKLSAgICAvKiBVcGRhdGUgZm9yd2FyZCBidXR0
b24gc3RhdGUgKi8KLSAgICBlbG1fb2JqZWN0X2Rpc2FibGVkX3NldChmb3J3YXJkX2J1dHRvbiwg
IWV3a192aWV3X2ZvcndhcmRfcG9zc2libGUod2luZG93LT5ld2tfdmlldykpOworICAgZXdrX3Zp
ZXdfZm9yd2FyZCh3aW5kb3ctPmV3a192aWV3KTsKKyAgIC8qIFVwZGF0ZSBmb3J3YXJkIGJ1dHRv
biBzdGF0ZSAqLworICAgZWxtX29iamVjdF9kaXNhYmxlZF9zZXQoZm9yd2FyZF9idXR0b24sICFl
d2tfdmlld19mb3J3YXJkX3Bvc3NpYmxlKHdpbmRvdy0+ZXdrX3ZpZXcpKTsKIH0KIAogc3RhdGlj
IHZvaWQKIF9zZWFyY2hfYmFja3dhcmRfYnV0dG9uX2NsaWNrZWRfY2Iodm9pZCAqdXNlcl9kYXRh
LCBFdmFzX09iamVjdCAqc2VhcmNoX2JhY2t3YXJkX2J1dHRvbiwgdm9pZCAqZXZlbnRfaW5mbykK
IHsKLSAgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9k
YXRhOworICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJf
ZGF0YTsKIAotICAgIGNoYXIgKnRleHQgPSBlbG1fZW50cnlfbWFya3VwX3RvX3V0ZjgoZWxtX2Vu
dHJ5X2VudHJ5X2dldCh3aW5kb3ctPnNlYXJjaC5zZWFyY2hfZmllbGQpKTsKLSAgICBld2tfdmll
d190ZXh0X2ZpbmQod2luZG93LT5ld2tfdmlldywgdGV4dCwgc2VhcmNoX2ZsYWdzIHwgRVdLX0ZJ
TkRfT1BUSU9OU19CQUNLV0FSRFMsIE1BWF9TRUFSQ0hfQ09VTlQpOwotICAgIGZyZWUodGV4dCk7
CisgICBjaGFyICp0ZXh0ID0gZWxtX2VudHJ5X21hcmt1cF90b191dGY4KGVsbV9lbnRyeV9lbnRy
eV9nZXQod2luZG93LT5zZWFyY2guc2VhcmNoX2ZpZWxkKSk7CisgICBld2tfdmlld190ZXh0X2Zp
bmQod2luZG93LT5ld2tfdmlldywgdGV4dCwgc2VhcmNoX2ZsYWdzIHwgRVdLX0ZJTkRfT1BUSU9O
U19CQUNLV0FSRFMsIE1BWF9TRUFSQ0hfQ09VTlQpOworICAgZnJlZSh0ZXh0KTsKIH0KIAogc3Rh
dGljIHZvaWQKIF9zZWFyY2hfZm9yd2FyZF9idXR0b25fY2xpY2tlZF9jYih2b2lkICp1c2VyX2Rh
dGEsIEV2YXNfT2JqZWN0ICpzZWFyY2hfZm9yd2FyZF9idXR0b24sIHZvaWQgKmV2ZW50X2luZm8p
CiB7Ci0gICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJf
ZGF0YTsKKyAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2Vy
X2RhdGE7CiAKLSAgICBjaGFyICp0ZXh0ID0gZWxtX2VudHJ5X21hcmt1cF90b191dGY4KGVsbV9l
bnRyeV9lbnRyeV9nZXQod2luZG93LT5zZWFyY2guc2VhcmNoX2ZpZWxkKSk7Ci0gICAgZXdrX3Zp
ZXdfdGV4dF9maW5kKHdpbmRvdy0+ZXdrX3ZpZXcsIHRleHQsIHNlYXJjaF9mbGFncywgTUFYX1NF
QVJDSF9DT1VOVCk7Ci0gICAgZnJlZSh0ZXh0KTsKKyAgIGNoYXIgKnRleHQgPSBlbG1fZW50cnlf
bWFya3VwX3RvX3V0ZjgoZWxtX2VudHJ5X2VudHJ5X2dldCh3aW5kb3ctPnNlYXJjaC5zZWFyY2hf
ZmllbGQpKTsKKyAgIGV3a192aWV3X3RleHRfZmluZCh3aW5kb3ctPmV3a192aWV3LCB0ZXh0LCBz
ZWFyY2hfZmxhZ3MsIE1BWF9TRUFSQ0hfQ09VTlQpOworICAgZnJlZSh0ZXh0KTsKIH0KIAogc3Rh
dGljIHZvaWQKIF9zZWFyY2hfY2FzZV9vcHRpb25fY2hhbmdlZCh2b2lkICp1c2VyX2RhdGEsIEV2
YXNfT2JqZWN0ICpzZWFyY2hfY2FzZV9jaGVja19ib3gsIHZvaWQgKmV2ZW50X2luZm8pCiB7Ci0g
ICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsK
LSAgICBjaGFyICp0ZXh0ID0gZWxtX2VudHJ5X21hcmt1cF90b191dGY4KGVsbV9lbnRyeV9lbnRy
eV9nZXQod2luZG93LT5zZWFyY2guc2VhcmNoX2ZpZWxkKSk7CisgICBCcm93c2VyX1dpbmRvdyAq
d2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOworICAgY2hhciAqdGV4dCA9IGVs
bV9lbnRyeV9tYXJrdXBfdG9fdXRmOChlbG1fZW50cnlfZW50cnlfZ2V0KHdpbmRvdy0+c2VhcmNo
LnNlYXJjaF9maWVsZCkpOwogCi0gICAgLyogQml0IHRvZ2dsZSB0aGUgY2FzZSBzZW5zaXRpdmUg
ZmxhZyAqLwotICAgIHNlYXJjaF9mbGFncyA9IHNlYXJjaF9mbGFncyBeIEVXS19GSU5EX09QVElP
TlNfQ0FTRV9JTlNFTlNJVElWRTsKKyAgIC8qIEJpdCB0b2dnbGUgdGhlIGNhc2Ugc2Vuc2l0aXZl
IGZsYWcgKi8KKyAgIHNlYXJjaF9mbGFncyA9IHNlYXJjaF9mbGFncyBeIEVXS19GSU5EX09QVElP
TlNfQ0FTRV9JTlNFTlNJVElWRTsKIAotICAgIGV3a192aWV3X3RleHRfZmluZCh3aW5kb3ctPmV3
a192aWV3LCB0ZXh0LCBzZWFyY2hfZmxhZ3MsIE1BWF9TRUFSQ0hfQ09VTlQpOwotICAgIGZyZWUo
dGV4dCk7CisgICBld2tfdmlld190ZXh0X2ZpbmQod2luZG93LT5ld2tfdmlldywgdGV4dCwgc2Vh
cmNoX2ZsYWdzLCBNQVhfU0VBUkNIX0NPVU5UKTsKKyAgIGZyZWUodGV4dCk7CiB9CiAKIHN0YXRp
YyB2b2lkCiBfc2VhcmNoX3dvcmRfc3RhcnRfb3B0aW9uX2NoYW5nZWRfY2Iodm9pZCAqdXNlcl9k
YXRhLCBFdmFzX09iamVjdCAqc2VhcmNoX3dvcmRfc3RhcnRfY2hlY2tfYm94LCB2b2lkICpldmVu
dF9pbmZvKQogewotICAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cg
Kil1c2VyX2RhdGE7Ci0gICAgY2hhciAqdGV4dCA9IGVsbV9lbnRyeV9tYXJrdXBfdG9fdXRmOChl
bG1fZW50cnlfZW50cnlfZ2V0KHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9maWVsZCkpOworICAgQnJv
d3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKKyAgIGNo
YXIgKnRleHQgPSBlbG1fZW50cnlfbWFya3VwX3RvX3V0ZjgoZWxtX2VudHJ5X2VudHJ5X2dldCh3
aW5kb3ctPnNlYXJjaC5zZWFyY2hfZmllbGQpKTsKIAotICAgIC8qIEJpdCB0b2dnbGUgdGhlIHdv
cmQgc3RhcnQgZmxhZyAqLwotICAgIHNlYXJjaF9mbGFncyA9IHNlYXJjaF9mbGFncyBeIEVXS19G
SU5EX09QVElPTlNfQVRfV09SRF9TVEFSVFM7CisgICAvKiBCaXQgdG9nZ2xlIHRoZSB3b3JkIHN0
YXJ0IGZsYWcgKi8KKyAgIHNlYXJjaF9mbGFncyA9IHNlYXJjaF9mbGFncyBeIEVXS19GSU5EX09Q
VElPTlNfQVRfV09SRF9TVEFSVFM7CiAKLSAgICBld2tfdmlld190ZXh0X2ZpbmQod2luZG93LT5l
d2tfdmlldywgdGV4dCwgc2VhcmNoX2ZsYWdzLCBNQVhfU0VBUkNIX0NPVU5UKTsKLSAgICBmcmVl
KHRleHQpOworICAgZXdrX3ZpZXdfdGV4dF9maW5kKHdpbmRvdy0+ZXdrX3ZpZXcsIHRleHQsIHNl
YXJjaF9mbGFncywgTUFYX1NFQVJDSF9DT1VOVCk7CisgICBmcmVlKHRleHQpOwogfQogCiBzdGF0
aWMgdm9pZAogX3NlYXJjaF9jbG9zZV9idXR0b25fY2xpY2tlZF9jYih2b2lkICp1c2VyX2RhdGEs
IEV2YXNfT2JqZWN0ICpzZWFyY2hfY2xvc2VfYnV0dG9uLCB2b2lkICpldmVudF9pbmZvKQogewot
ICAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7
CisgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRh
OwogCi0gICAgc2VhcmNoX2JveF9oaWRlKHdpbmRvdyk7CisgICBzZWFyY2hfYm94X2hpZGUod2lu
ZG93KTsKIH0KIAogc3RhdGljIHZvaWQKIF9yZWZyZXNoX2J1dHRvbl9jbGlja2VkX2NiKHZvaWQg
KnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKnJlZnJlc2hfYnV0dG9uLCB2b2lkICpldmVudF9pbmZv
KQogewotICAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2Vy
X2RhdGE7CisgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNl
cl9kYXRhOwogCi0gICAgRXZhcyAqZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KHJlZnJlc2hf
YnV0dG9uKTsKLSAgICBFaW5hX0Jvb2wgY3RybFByZXNzZWQgPSBldmFzX2tleV9tb2RpZmllcl9p
c19zZXQoZXZhc19rZXlfbW9kaWZpZXJfZ2V0KGV2YXMpLCAiQ29udHJvbCIpOwotICAgIGlmIChj
dHJsUHJlc3NlZCkgewotICAgICAgICBJTkZPKCJSZWxvYWRpbmcgYW5kIGJ5cGFzc2luZyBjYWNo
ZS4uLiIpOwotICAgICAgICBld2tfdmlld19yZWxvYWRfYnlwYXNzX2NhY2hlKHdpbmRvdy0+ZXdr
X3ZpZXcpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIElORk8oIlJlbG9hZGluZy4uLiIpOwotICAg
ICAgICBld2tfdmlld19yZWxvYWQod2luZG93LT5ld2tfdmlldyk7Ci0gICAgfQorICAgRXZhcyAq
ZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KHJlZnJlc2hfYnV0dG9uKTsKKyAgIEVpbmFfQm9v
bCBjdHJsUHJlc3NlZCA9IGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChldmFzX2tleV9tb2RpZmll
cl9nZXQoZXZhcyksICJDb250cm9sIik7CisgICBpZiAoY3RybFByZXNzZWQpIHsKKyAgICAgSU5G
TygiUmVsb2FkaW5nIGFuZCBieXBhc3NpbmcgY2FjaGUuLi4iKTsKKyAgICAgZXdrX3ZpZXdfcmVs
b2FkX2J5cGFzc19jYWNoZSh3aW5kb3ctPmV3a192aWV3KTsKKyAgIH0gZWxzZSB7CisgICAgIElO
Rk8oIlJlbG9hZGluZy4uLiIpOworICAgICBld2tfdmlld19yZWxvYWQod2luZG93LT5ld2tfdmll
dyk7CisgICB9CiB9CiAKIHN0YXRpYyB2b2lkCiBfc3RvcF9idXR0b25fY2xpY2tlZF9jYih2b2lk
ICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpzdG9wX2J1dHRvbiwgdm9pZCAqZXZlbnRfaW5mbykK
IHsKLSAgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9k
YXRhOworICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJf
ZGF0YTsKIAotICAgIElORk8oIlN0b3Agd2FzIFByZXNzZWQuIEFib3J0aW5nIGxvYWQuLi4iKTsK
LSAgICBld2tfdmlld19zdG9wKHdpbmRvdy0+ZXdrX3ZpZXcpOworICAgSU5GTygiU3RvcCB3YXMg
UHJlc3NlZC4gQWJvcnRpbmcgbG9hZC4uLiIpOworICAgZXdrX3ZpZXdfc3RvcCh3aW5kb3ctPmV3
a192aWV3KTsKIH0KIAogc3RhdGljIGNoYXIgKgogbGlzdF9pdGVtX2xhYmVsX2dldCh2b2lkICpk
YXRhLCBFdmFzX09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpwYXJ0KQogewotICAgIGludCBsZW4g
PSBzdHJsZW4oKGNoYXIgKilkYXRhKTsKLSAgICBjaGFyICpidWYgPSAoY2hhciAqKW1hbGxvYyhz
aXplb2YoY2hhcikgKiAobGVuICsgMSkpOwotICAgIHNucHJpbnRmKGJ1ZiwgbGVuICsgMSwgIiVz
IiwgKGNoYXIgKilkYXRhKTsKLSAgICByZXR1cm4gYnVmOworICAgaW50IGxlbiA9IHN0cmxlbigo
Y2hhciAqKWRhdGEpOworICAgY2hhciAqYnVmID0gKGNoYXIgKiltYWxsb2Moc2l6ZW9mKGNoYXIp
ICogKGxlbiArIDEpKTsKKyAgIHNucHJpbnRmKGJ1ZiwgbGVuICsgMSwgIiVzIiwgKGNoYXIgKilk
YXRhKTsKKyAgIHJldHVybiBidWY7CiB9CiAKIHN0YXRpYyB2b2lkCiBfbGlzdF9pdGVtX3NlbGVj
dF9jYih2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpvYmosIHZvaWQgKmV2ZW50X2luZm8p
CiB7Ci0gICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IGV2YXNfb2JqZWN0X2RhdGFfZ2V0KG9i
aiwgIkJyb3dzZXJfV2luZG93Iik7Ci0gICAgZXdrX3ZpZXdfbmF2aWdhdGVfdG8od2luZG93LT5l
d2tfdmlldywgdXNlcl9kYXRhKTsKLSAgICBoaXN0b3J5X2xpc3RfaGlkZSh3aW5kb3cpOwotICAg
IGV2YXNfb2JqZWN0X2RhdGFfZGVsKG9iaiwgIkJyb3dzZXJfV2luZG93Iik7CisgICBCcm93c2Vy
X1dpbmRvdyAqd2luZG93ID0gZXZhc19vYmplY3RfZGF0YV9nZXQob2JqLCAiQnJvd3Nlcl9XaW5k
b3ciKTsKKyAgIGV3a192aWV3X25hdmlnYXRlX3RvKHdpbmRvdy0+ZXdrX3ZpZXcsIHVzZXJfZGF0
YSk7CisgICBoaXN0b3J5X2xpc3RfaGlkZSh3aW5kb3cpOworICAgZXZhc19vYmplY3RfZGF0YV9k
ZWwob2JqLCAiQnJvd3Nlcl9XaW5kb3ciKTsKIH0KIAogc3RhdGljIHZvaWQKIG5hdmlnYXRpb25f
YnV0dG9uX2xvbmdwcmVzc19wcm9jZXNzKHZvaWQgKnVzZXJfZGF0YSwgRWluYV9Cb29sIGZvcndh
cmRfbmF2aWdhdGlvbl9lbmFibGVkKQogewotICAgIGlmIChsb25ncHJlc3NfZW5hYmxlZCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbG9uZ3ByZXNzX2VuYWJsZWQgPSBFSU5BX1RSVUU7Ci0gICAg
QnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKLQot
ICAgIEV3a19CYWNrX0ZvcndhcmRfTGlzdCAqbGlzdCA9IGV3a192aWV3X2JhY2tfZm9yd2FyZF9s
aXN0X2dldCh3aW5kb3ctPmV3a192aWV3KTsKLSAgICBjb25zdCBFaW5hX0xpc3QgKmw7Ci0gICAg
dm9pZCAqZGF0YTsKLSAgICBzdGF0aWMgRWxtX0dlbmxpc3RfSXRlbV9DbGFzcyAqbGlzdF9pdGVt
ID0gTlVMTDsKLSAgICBjb25zdCBjaGFyICp0aXRsZSA9IE5VTEw7Ci0gICAgaW50IGl0ZW1fY291
bnQ7Ci0gICAgaW50IHg7Ci0gICAgaW50IHk7Ci0gICAgaW50IHdpZHRoOwotICAgIGludCBoZWln
aHQ7Ci0gICAgc2l6ZV90IGluZGV4OwotCi0gICAgZXZhc19vYmplY3RfZGF0YV9zZXQod2luZG93
LT5oaXN0b3J5Lmhpc3RvcnlfbGlzdCwgIkJyb3dzZXJfV2luZG93Iiwgd2luZG93KTsKLQotICAg
IGlmIChmb3J3YXJkX25hdmlnYXRpb25fZW5hYmxlZCkKLSAgICAgICAgd2luZG93LT5oaXN0b3J5
Lmhpc3RvcnlfbGlzdF9pdGVtcyA9IGV3a19iYWNrX2ZvcndhcmRfbGlzdF9mb3J3YXJkX2l0ZW1z
X2NvcHkobGlzdCk7Ci0gICAgZWxzZQotICAgICAgICB3aW5kb3ctPmhpc3RvcnkuaGlzdG9yeV9s
aXN0X2l0ZW1zID0gZXdrX2JhY2tfZm9yd2FyZF9saXN0X2JhY2tfaXRlbXNfY29weShsaXN0KTsK
LQotICAgIGlmICghbGlzdF9pdGVtKSB7Ci0gICAgICAgIGxpc3RfaXRlbSA9IGVsbV9nZW5saXN0
X2l0ZW1fY2xhc3NfbmV3KCk7Ci0gICAgICAgIGxpc3RfaXRlbS0+aXRlbV9zdHlsZSA9ICJkZWZh
dWx0IjsKLSAgICAgICAgbGlzdF9pdGVtLT5mdW5jLnRleHRfZ2V0ID0gbGlzdF9pdGVtX2xhYmVs
X2dldDsKLSAgICAgICAgbGlzdF9pdGVtLT5mdW5jLmNvbnRlbnRfZ2V0ID0gTlVMTDsKLSAgICAg
ICAgbGlzdF9pdGVtLT5mdW5jLnN0YXRlX2dldCA9IE5VTEw7Ci0gICAgICAgIGxpc3RfaXRlbS0+
ZnVuYy5kZWwgPSBOVUxMOwotICAgIH0KLQotICAgIGl0ZW1fY291bnQgPSBlaW5hX2xpc3RfY291
bnQod2luZG93LT5oaXN0b3J5Lmhpc3RvcnlfbGlzdF9pdGVtcyk7Ci0gICAgSU5GTygibmF2aWdh
dGlvbl9idXR0b25fbG9uZ3ByZXNzX3Byb2Nlc3MgOiBJdGVtIGNvdW50ID0gJWQgZm9yd2FyZF9u
YXZpZ2F0aW9uX2VuYWJsZWQgPSAlZCIsIGl0ZW1fY291bnQsIGZvcndhcmRfbmF2aWdhdGlvbl9l
bmFibGVkKTsKLQotICAgIEVJTkFfTElTVF9GT1JFQUNIKHdpbmRvdy0+aGlzdG9yeS5oaXN0b3J5
X2xpc3RfaXRlbXMsIGwsIGRhdGEpIHsKLSAgICAgICAgdGl0bGUgPSBld2tfYmFja19mb3J3YXJk
X2xpc3RfaXRlbV90aXRsZV9nZXQoZGF0YSk7Ci0gICAgICAgIElORk8oIiB0aXRsZSA9ICVzIiwg
dGl0bGUpOwotICAgICAgICBlbG1fZ2VubGlzdF9pdGVtX2FwcGVuZCh3aW5kb3ctPmhpc3Rvcnku
aGlzdG9yeV9saXN0LCBsaXN0X2l0ZW0sICh2b2lkICopKHRpdGxlKSwgTlVMTCwgRUxNX0dFTkxJ
U1RfSVRFTV9OT05FLCBfbGlzdF9pdGVtX3NlbGVjdF9jYiwgZGF0YSk7Ci0gICAgfQotCi0gICAg
aWYgKGl0ZW1fY291bnQgPiAwKSB7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldCh3
aW5kb3ctPmVsbV93aW5kb3csICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKLSAgICAgICAgZWxt
X2xpc3RfZ28od2luZG93LT5oaXN0b3J5Lmhpc3RvcnlfbGlzdCk7Ci0gICAgICAgIGV2YXNfb2Jq
ZWN0X3Jlc2l6ZSh3aW5kb3ctPmhpc3RvcnkuaGlzdG9yeV9ib3ggLCB3aWR0aCAvIDMgLCBMSVNU
X0lURU1fSEVJR0hUICogaXRlbV9jb3VudCk7Ci0KLSAgICAgICAgaWYgKGZvcndhcmRfbmF2aWdh
dGlvbl9lbmFibGVkKSB7Ci0gICAgICAgICAgICBldmFzX29iamVjdF9tb3ZlKHdpbmRvdy0+aGlz
dG9yeS5oaXN0b3J5X2JveCAsIHggKyBUT09MX0JBUl9CVVRUT05fU0laRSArIDEsIHkgKyBUT09M
X0JBUl9CVVRUT05fU0laRSk7Ci0gICAgICAgICAgICBldmFzX29iamVjdF9tb3ZlKHdpbmRvdy0+
aGlzdG9yeS5oaXN0b3J5X2xpc3QgLCB4ICsgVE9PTF9CQVJfQlVUVE9OX1NJWkUgKyAxLCB5ICsg
VE9PTF9CQVJfQlVUVE9OX1NJWkUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZXZh
c19vYmplY3RfbW92ZSh3aW5kb3ctPmhpc3RvcnkuaGlzdG9yeV9ib3ggLCB4LCB5ICsgVE9PTF9C
QVJfQlVUVE9OX1NJWkUpOwotICAgICAgICAgICAgZXZhc19vYmplY3RfbW92ZSh3aW5kb3ctPmhp
c3RvcnkuaGlzdG9yeV9saXN0ICwgeCwgeSArIFRPT0xfQkFSX0JVVFRPTl9TSVpFKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGVsbV9nZW5saXN0X21vZGVfc2V0KHdpbmRvdy0+aGlzdG9yeS5oaXN0
b3J5X2xpc3QsIEVMTV9MSVNUX0NPTVBSRVNTKTsKLSAgICAgICAgZXZhc19vYmplY3Rfc2hvdyh3
aW5kb3ctPmhpc3RvcnkuaGlzdG9yeV9ib3gpOwotICAgICAgICBldmFzX29iamVjdF9zaG93KHdp
bmRvdy0+aGlzdG9yeS5oaXN0b3J5X2xpc3QpOwotICAgICAgICBldmFzX29iamVjdF9mb2N1c19z
ZXQod2luZG93LT5ld2tfdmlldywgRUlOQV9GQUxTRSk7Ci0gICAgICAgIGVsbV9vYmplY3RfZm9j
dXNfc2V0KHdpbmRvdy0+aGlzdG9yeS5oaXN0b3J5X2xpc3QsIEVJTkFfVFJVRSk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIGxvbmdwcmVzc19lbmFibGVkID0gRUlOQV9GQUxTRTsKKyAgIGlmIChsb25n
cHJlc3NfZW5hYmxlZCkKKyAgICAgcmV0dXJuOworCisgICBsb25ncHJlc3NfZW5hYmxlZCA9IEVJ
TkFfVFJVRTsKKyAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1
c2VyX2RhdGE7CisKKyAgIEV3a19CYWNrX0ZvcndhcmRfTGlzdCAqbGlzdCA9IGV3a192aWV3X2Jh
Y2tfZm9yd2FyZF9saXN0X2dldCh3aW5kb3ctPmV3a192aWV3KTsKKyAgIGNvbnN0IEVpbmFfTGlz
dCAqbDsKKyAgIHZvaWQgKmRhdGE7CisgICBzdGF0aWMgRWxtX0dlbmxpc3RfSXRlbV9DbGFzcyAq
bGlzdF9pdGVtID0gTlVMTDsKKyAgIGNvbnN0IGNoYXIgKnRpdGxlID0gTlVMTDsKKyAgIGludCBp
dGVtX2NvdW50OworICAgaW50IHg7CisgICBpbnQgeTsKKyAgIGludCB3aWR0aDsKKyAgIGludCBo
ZWlnaHQ7CisgICBzaXplX3QgaW5kZXg7CisKKyAgIGV2YXNfb2JqZWN0X2RhdGFfc2V0KHdpbmRv
dy0+aGlzdG9yeS5oaXN0b3J5X2xpc3QsICJCcm93c2VyX1dpbmRvdyIsIHdpbmRvdyk7CisKKyAg
IGlmIChmb3J3YXJkX25hdmlnYXRpb25fZW5hYmxlZCkKKyAgICAgd2luZG93LT5oaXN0b3J5Lmhp
c3RvcnlfbGlzdF9pdGVtcyA9IGV3a19iYWNrX2ZvcndhcmRfbGlzdF9mb3J3YXJkX2l0ZW1zX2Nv
cHkobGlzdCk7CisgICBlbHNlCisgICAgIHdpbmRvdy0+aGlzdG9yeS5oaXN0b3J5X2xpc3RfaXRl
bXMgPSBld2tfYmFja19mb3J3YXJkX2xpc3RfYmFja19pdGVtc19jb3B5KGxpc3QpOworCisgICBp
ZiAoIWxpc3RfaXRlbSkgeworICAgICBsaXN0X2l0ZW0gPSBlbG1fZ2VubGlzdF9pdGVtX2NsYXNz
X25ldygpOworICAgICBsaXN0X2l0ZW0tPml0ZW1fc3R5bGUgPSAiZGVmYXVsdCI7CisgICAgIGxp
c3RfaXRlbS0+ZnVuYy50ZXh0X2dldCA9IGxpc3RfaXRlbV9sYWJlbF9nZXQ7CisgICAgIGxpc3Rf
aXRlbS0+ZnVuYy5jb250ZW50X2dldCA9IE5VTEw7CisgICAgIGxpc3RfaXRlbS0+ZnVuYy5zdGF0
ZV9nZXQgPSBOVUxMOworICAgICBsaXN0X2l0ZW0tPmZ1bmMuZGVsID0gTlVMTDsKKyAgIH0KKwor
ICAgaXRlbV9jb3VudCA9IGVpbmFfbGlzdF9jb3VudCh3aW5kb3ctPmhpc3RvcnkuaGlzdG9yeV9s
aXN0X2l0ZW1zKTsKKyAgIElORk8oIm5hdmlnYXRpb25fYnV0dG9uX2xvbmdwcmVzc19wcm9jZXNz
IDogSXRlbSBjb3VudCA9ICVkIGZvcndhcmRfbmF2aWdhdGlvbl9lbmFibGVkID0gJWQiLCBpdGVt
X2NvdW50LCBmb3J3YXJkX25hdmlnYXRpb25fZW5hYmxlZCk7CisKKyAgIEVJTkFfTElTVF9GT1JF
QUNIKHdpbmRvdy0+aGlzdG9yeS5oaXN0b3J5X2xpc3RfaXRlbXMsIGwsIGRhdGEpIHsKKyAgICAg
dGl0bGUgPSBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV90aXRsZV9nZXQoZGF0YSk7CisgICAg
IElORk8oIiB0aXRsZSA9ICVzIiwgdGl0bGUpOworICAgICBlbG1fZ2VubGlzdF9pdGVtX2FwcGVu
ZCh3aW5kb3ctPmhpc3RvcnkuaGlzdG9yeV9saXN0LCBsaXN0X2l0ZW0sICh2b2lkICopKHRpdGxl
KSwgTlVMTCwgRUxNX0dFTkxJU1RfSVRFTV9OT05FLCBfbGlzdF9pdGVtX3NlbGVjdF9jYiwgZGF0
YSk7CisgICB9CisKKyAgIGlmIChpdGVtX2NvdW50ID4gMCkgeworICAgICBldmFzX29iamVjdF9n
ZW9tZXRyeV9nZXQod2luZG93LT5lbG1fd2luZG93LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7
CisgICAgIGVsbV9saXN0X2dvKHdpbmRvdy0+aGlzdG9yeS5oaXN0b3J5X2xpc3QpOworICAgICBl
dmFzX29iamVjdF9yZXNpemUod2luZG93LT5oaXN0b3J5Lmhpc3RvcnlfYm94ICwgd2lkdGggLyAz
ICwgTElTVF9JVEVNX0hFSUdIVCAqIGl0ZW1fY291bnQpOworCisgICAgIGlmIChmb3J3YXJkX25h
dmlnYXRpb25fZW5hYmxlZCkgeworICAgICAgIGV2YXNfb2JqZWN0X21vdmUod2luZG93LT5oaXN0
b3J5Lmhpc3RvcnlfYm94ICwgeCArIFRPT0xfQkFSX0JVVFRPTl9TSVpFICsgMSwgeSArIFRPT0xf
QkFSX0JVVFRPTl9TSVpFKTsKKyAgICAgICBldmFzX29iamVjdF9tb3ZlKHdpbmRvdy0+aGlzdG9y
eS5oaXN0b3J5X2xpc3QgLCB4ICsgVE9PTF9CQVJfQlVUVE9OX1NJWkUgKyAxLCB5ICsgVE9PTF9C
QVJfQlVUVE9OX1NJWkUpOworICAgICB9IGVsc2UgeworICAgICAgIGV2YXNfb2JqZWN0X21vdmUo
d2luZG93LT5oaXN0b3J5Lmhpc3RvcnlfYm94ICwgeCwgeSArIFRPT0xfQkFSX0JVVFRPTl9TSVpF
KTsKKyAgICAgICBldmFzX29iamVjdF9tb3ZlKHdpbmRvdy0+aGlzdG9yeS5oaXN0b3J5X2xpc3Qg
LCB4LCB5ICsgVE9PTF9CQVJfQlVUVE9OX1NJWkUpOworICAgICB9CisKKyAgICAgZWxtX2dlbmxp
c3RfbW9kZV9zZXQod2luZG93LT5oaXN0b3J5Lmhpc3RvcnlfbGlzdCwgRUxNX0xJU1RfQ09NUFJF
U1MpOworICAgICBldmFzX29iamVjdF9zaG93KHdpbmRvdy0+aGlzdG9yeS5oaXN0b3J5X2JveCk7
CisgICAgIGV2YXNfb2JqZWN0X3Nob3cod2luZG93LT5oaXN0b3J5Lmhpc3RvcnlfbGlzdCk7Cisg
ICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldCh3aW5kb3ctPmV3a192aWV3LCBFSU5BX0ZBTFNFKTsK
KyAgICAgZWxtX29iamVjdF9mb2N1c19zZXQod2luZG93LT5oaXN0b3J5Lmhpc3RvcnlfbGlzdCwg
RUlOQV9UUlVFKTsKKyAgIH0gZWxzZQorICAgICBsb25ncHJlc3NfZW5hYmxlZCA9IEVJTkFfRkFM
U0U7CiB9CiAKIHN0YXRpYyB2b2lkCiBfZm9yd2FyZF9idXR0b25fbG9uZ3ByZXNzX2NiKHZvaWQg
KnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKmZvcndhcmRfYnV0dG9uLCB2b2lkICpldmVudF9pbmZv
KQogewotICAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2Vy
X2RhdGE7CisgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNl
cl9kYXRhOwogCi0gICAgbmF2aWdhdGlvbl9idXR0b25fbG9uZ3ByZXNzX3Byb2Nlc3ModXNlcl9k
YXRhLCBFSU5BX1RSVUUpOwotICAgIGVsbV9vYmplY3RfZGlzYWJsZWRfc2V0KGZvcndhcmRfYnV0
dG9uLCAhZXdrX3ZpZXdfYmFja19wb3NzaWJsZSh3aW5kb3ctPmV3a192aWV3KSk7CisgICBuYXZp
Z2F0aW9uX2J1dHRvbl9sb25ncHJlc3NfcHJvY2Vzcyh1c2VyX2RhdGEsIEVJTkFfVFJVRSk7Cisg
ICBlbG1fb2JqZWN0X2Rpc2FibGVkX3NldChmb3J3YXJkX2J1dHRvbiwgIWV3a192aWV3X2JhY2tf
cG9zc2libGUod2luZG93LT5ld2tfdmlldykpOwogfQogCiBzdGF0aWMgdm9pZAogX2JhY2tfYnV0
dG9uX2xvbmdwcmVzc19jYih2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpiYWNrX2J1dHRv
biwgdm9pZCAqZXZlbnRfaW5mbykKIHsKLSAgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJy
b3dzZXJfV2luZG93ICopdXNlcl9kYXRhOworICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChC
cm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKIAotICAgIG5hdmlnYXRpb25fYnV0dG9uX2xvbmdw
cmVzc19wcm9jZXNzKHVzZXJfZGF0YSwgRUlOQV9GQUxTRSk7Ci0gICAgZWxtX29iamVjdF9kaXNh
YmxlZF9zZXQoYmFja19idXR0b24sICFld2tfdmlld19iYWNrX3Bvc3NpYmxlKHdpbmRvdy0+ZXdr
X3ZpZXcpKTsKKyAgIG5hdmlnYXRpb25fYnV0dG9uX2xvbmdwcmVzc19wcm9jZXNzKHVzZXJfZGF0
YSwgRUlOQV9GQUxTRSk7CisgICBlbG1fb2JqZWN0X2Rpc2FibGVkX3NldChiYWNrX2J1dHRvbiwg
IWV3a192aWV3X2JhY2tfcG9zc2libGUod2luZG93LT5ld2tfdmlldykpOwogfQogCiBzdGF0aWMg
dm9pZAogX29rX2NsaWNrZWRfY2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqb2JqLCB2
b2lkICpldmVudF9pbmZvKQogewotICAgIEVpbmFfQm9vbCAqY29uZmlybWVkID0gKEVpbmFfQm9v
bCAqKXVzZXJfZGF0YTsKLSAgICAqY29uZmlybWVkID0gRUlOQV9UUlVFOworICAgRWluYV9Cb29s
ICpjb25maXJtZWQgPSAoRWluYV9Cb29sICopdXNlcl9kYXRhOworICAgKmNvbmZpcm1lZCA9IEVJ
TkFfVFJVRTsKIH0KIAogc3RhdGljIEVpbmFfU3RyaW5nc2hhcmUgKgogX2ZpbGVfZW50cnlfZGlh
bG9nX3Nob3coQnJvd3Nlcl9XaW5kb3cgKndpbmRvdywgY29uc3QgY2hhciAqbGFiZWxfdGFnLCBj
b25zdCBjaGFyICpkZWZhdWx0X3RleHQpCiB7Ci0gICAgRXZhc19PYmplY3QgKmZpbGVfcG9wdXAg
PSBlbG1fcG9wdXBfYWRkKHdpbmRvdy0+ZWxtX3dpbmRvdyk7Ci0gICAgZXZhc19vYmplY3Rfc2l6
ZV9oaW50X3dlaWdodF9zZXQoZmlsZV9wb3B1cCwgRVZBU19ISU5UX0VYUEFORCwgRVZBU19ISU5U
X0VYUEFORCk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhmaWxlX3BvcHVwKTsKLQotICAgIEV2YXNf
T2JqZWN0ICp2Ym94ID0gZWxtX2JveF9hZGQoZmlsZV9wb3B1cCk7Ci0gICAgZXZhc19vYmplY3Rf
c2l6ZV9oaW50X3dlaWdodF9zZXQodmJveCwgRVZBU19ISU5UX0VYUEFORCwgRVZBU19ISU5UX0VY
UEFORCk7Ci0gICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X2FsaWduX3NldCh2Ym94LCBFVkFTX0hJ
TlRfRklMTCwgRVZBU19ISU5UX0ZJTEwpOwotICAgIGVsbV9vYmplY3RfY29udGVudF9zZXQoZmls
ZV9wb3B1cCwgdmJveCk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyh2Ym94KTsKLQotICAgIEV2YXNf
T2JqZWN0ICpsYWJlbCA9IGVsbV9sYWJlbF9hZGQod2luZG93LT5lbG1fd2luZG93KTsKLSAgICBl
bG1fb2JqZWN0X3RleHRfc2V0KGxhYmVsLCBsYWJlbF90YWcpOwotICAgIGV2YXNfb2JqZWN0X3Np
emVfaGludF93ZWlnaHRfc2V0KGxhYmVsLCBFVkFTX0hJTlRfRVhQQU5ELCAwLjApOwotICAgIGV2
YXNfb2JqZWN0X3NpemVfaGludF9hbGlnbl9zZXQobGFiZWwsIEVWQVNfSElOVF9GSUxMLCAwLjUp
OwotICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChsYWJlbCwgMjMsIDQ1LCA2NywgMTQyKTsKLSAg
ICBlbG1fYm94X3BhY2tfZW5kKHZib3gsIGxhYmVsKTsKLSAgICBldmFzX29iamVjdF9zaG93KGxh
YmVsKTsKLQotICAgIEV2YXNfT2JqZWN0ICpmc19lbnRyeSA9IGVsbV9maWxlc2VsZWN0b3JfZW50
cnlfYWRkKGZpbGVfcG9wdXApOwotICAgIGVsbV9maWxlc2VsZWN0b3JfaXNfc2F2ZV9zZXQoZnNf
ZW50cnksIEVJTkFfVFJVRSk7Ci0gICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X2FsaWduX3NldChm
c19lbnRyeSwgRVZBU19ISU5UX0ZJTEwsIDApOwotICAgIGVsbV9maWxlc2VsZWN0b3JfcGF0aF9z
ZXQoZnNfZW50cnksIGRlZmF1bHRfdGV4dCk7Ci0gICAgZWxtX29iamVjdF90ZXh0X3NldChmc19l
bnRyeSwgIkZpbGVDaG9vc2VyIik7Ci0gICAgZWxtX2JveF9wYWNrX2VuZCh2Ym94LCBmc19lbnRy
eSk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhmc19lbnRyeSk7Ci0KLSAgICBFdmFzX09iamVjdCAq
aGJveCA9IGVsbV9ib3hfYWRkKGZpbGVfcG9wdXApOwotICAgIGV2YXNfb2JqZWN0X3NpemVfaGlu
dF93ZWlnaHRfc2V0KGhib3gsIEVWQVNfSElOVF9FWFBBTkQsIEVWQVNfSElOVF9FWFBBTkQpOwot
ICAgIGVsbV9ib3hfaG9yaXpvbnRhbF9zZXQoaGJveCwgRUlOQV9UUlVFKTsKLSAgICBldmFzX29i
amVjdF9zaXplX2hpbnRfYWxpZ25fc2V0KGhib3gsIEVWQVNfSElOVF9GSUxMLCBFVkFTX0hJTlRf
RklMTCk7Ci0gICAgZWxtX2JveF9wYWNrX2VuZCh2Ym94LCBoYm94KTsKLSAgICBldmFzX29iamVj
dF9zaG93KGhib3gpOwotCi0gICAgRWluYV9Cb29sIG9rID0gRUlOQV9GQUxTRTsKLSAgICBFdmFz
X09iamVjdCAqb2tfYnV0dG9uID0gZWxtX2J1dHRvbl9hZGQoZmlsZV9wb3B1cCk7Ci0gICAgZWxt
X29iamVjdF90ZXh0X3NldChva19idXR0b24sICJPSyIpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2NhbGxiYWNrX2FkZChva19idXR0b24sICJjbGlja2VkIiwgX29rX2NsaWNrZWRfY2IsICZvayk7
Ci0gICAgZWxtX2JveF9wYWNrX2VuZChoYm94LCBva19idXR0b24pOwotICAgIGV2YXNfb2JqZWN0
X3Nob3cob2tfYnV0dG9uKTsKLQotICAgIEVpbmFfQm9vbCBjYW5jZWwgPSBFSU5BX0ZBTFNFOwot
ICAgIEV2YXNfT2JqZWN0ICpjYW5jZWxfYnV0dG9uID0gZWxtX2J1dHRvbl9hZGQoZmlsZV9wb3B1
cCk7Ci0gICAgZWxtX29iamVjdF90ZXh0X3NldChjYW5jZWxfYnV0dG9uLCAiQ2FuY2VsIik7Ci0g
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKGNhbmNlbF9idXR0b24sICJjbGlja2Vk
IiwgX29rX2NsaWNrZWRfY2IsICZjYW5jZWwpOwotICAgIGVsbV9ib3hfcGFja19lbmQoaGJveCwg
Y2FuY2VsX2J1dHRvbik7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhjYW5jZWxfYnV0dG9uKTsKLQot
ICAgIHdoaWxlIChvayAhPSBFSU5BX1RSVUUgJiYgY2FuY2VsICE9IEVJTkFfVFJVRSkKLSAgICAg
ICBlY29yZV9tYWluX2xvb3BfaXRlcmF0ZSgpOwotCi0gICAgRWluYV9TdHJpbmdzaGFyZSAqZmls
ZV9wYXRoID0gb2sgPyBlaW5hX3N0cmluZ3NoYXJlX2FkZChlbG1fZmlsZXNlbGVjdG9yX3BhdGhf
Z2V0KGZzX2VudHJ5KSkgOiBOVUxMOwotICAgIGV2YXNfb2JqZWN0X2RlbChmaWxlX3BvcHVwKTsK
LSAgICByZXR1cm4gZmlsZV9wYXRoOworICAgRXZhc19PYmplY3QgKmZpbGVfcG9wdXAgPSBlbG1f
cG9wdXBfYWRkKHdpbmRvdy0+ZWxtX3dpbmRvdyk7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRf
d2VpZ2h0X3NldChmaWxlX3BvcHVwLCBFVkFTX0hJTlRfRVhQQU5ELCBFVkFTX0hJTlRfRVhQQU5E
KTsKKyAgIGV2YXNfb2JqZWN0X3Nob3coZmlsZV9wb3B1cCk7CisKKyAgIEV2YXNfT2JqZWN0ICp2
Ym94ID0gZWxtX2JveF9hZGQoZmlsZV9wb3B1cCk7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRf
d2VpZ2h0X3NldCh2Ym94LCBFVkFTX0hJTlRfRVhQQU5ELCBFVkFTX0hJTlRfRVhQQU5EKTsKKyAg
IGV2YXNfb2JqZWN0X3NpemVfaGludF9hbGlnbl9zZXQodmJveCwgRVZBU19ISU5UX0ZJTEwsIEVW
QVNfSElOVF9GSUxMKTsKKyAgIGVsbV9vYmplY3RfY29udGVudF9zZXQoZmlsZV9wb3B1cCwgdmJv
eCk7CisgICBldmFzX29iamVjdF9zaG93KHZib3gpOworCisgICBFdmFzX09iamVjdCAqbGFiZWwg
PSBlbG1fbGFiZWxfYWRkKHdpbmRvdy0+ZWxtX3dpbmRvdyk7CisgICBlbG1fb2JqZWN0X3RleHRf
c2V0KGxhYmVsLCBsYWJlbF90YWcpOworICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X3dlaWdodF9z
ZXQobGFiZWwsIEVWQVNfSElOVF9FWFBBTkQsIDAuMCk7CisgICBldmFzX29iamVjdF9zaXplX2hp
bnRfYWxpZ25fc2V0KGxhYmVsLCBFVkFTX0hJTlRfRklMTCwgMC41KTsKKyAgIGV2YXNfb2JqZWN0
X2NvbG9yX3NldChsYWJlbCwgMjMsIDQ1LCA2NywgMTQyKTsKKyAgIGVsbV9ib3hfcGFja19lbmQo
dmJveCwgbGFiZWwpOworICAgZXZhc19vYmplY3Rfc2hvdyhsYWJlbCk7CisKKyAgIEV2YXNfT2Jq
ZWN0ICpmc19lbnRyeSA9IGVsbV9maWxlc2VsZWN0b3JfZW50cnlfYWRkKGZpbGVfcG9wdXApOwor
ICAgZWxtX2ZpbGVzZWxlY3Rvcl9pc19zYXZlX3NldChmc19lbnRyeSwgRUlOQV9UUlVFKTsKKyAg
IGV2YXNfb2JqZWN0X3NpemVfaGludF9hbGlnbl9zZXQoZnNfZW50cnksIEVWQVNfSElOVF9GSUxM
LCAwKTsKKyAgIGVsbV9maWxlc2VsZWN0b3JfcGF0aF9zZXQoZnNfZW50cnksIGRlZmF1bHRfdGV4
dCk7CisgICBlbG1fb2JqZWN0X3RleHRfc2V0KGZzX2VudHJ5LCAiRmlsZUNob29zZXIiKTsKKyAg
IGVsbV9ib3hfcGFja19lbmQodmJveCwgZnNfZW50cnkpOworICAgZXZhc19vYmplY3Rfc2hvdyhm
c19lbnRyeSk7CisKKyAgIEV2YXNfT2JqZWN0ICpoYm94ID0gZWxtX2JveF9hZGQoZmlsZV9wb3B1
cCk7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfd2VpZ2h0X3NldChoYm94LCBFVkFTX0hJTlRf
RVhQQU5ELCBFVkFTX0hJTlRfRVhQQU5EKTsKKyAgIGVsbV9ib3hfaG9yaXpvbnRhbF9zZXQoaGJv
eCwgRUlOQV9UUlVFKTsKKyAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9hbGlnbl9zZXQoaGJveCwg
RVZBU19ISU5UX0ZJTEwsIEVWQVNfSElOVF9GSUxMKTsKKyAgIGVsbV9ib3hfcGFja19lbmQodmJv
eCwgaGJveCk7CisgICBldmFzX29iamVjdF9zaG93KGhib3gpOworCisgICBFaW5hX0Jvb2wgb2sg
PSBFSU5BX0ZBTFNFOworICAgRXZhc19PYmplY3QgKm9rX2J1dHRvbiA9IGVsbV9idXR0b25fYWRk
KGZpbGVfcG9wdXApOworICAgZWxtX29iamVjdF90ZXh0X3NldChva19idXR0b24sICJPSyIpOwor
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKG9rX2J1dHRvbiwgImNsaWNrZWQiLCBf
b2tfY2xpY2tlZF9jYiwgJm9rKTsKKyAgIGVsbV9ib3hfcGFja19lbmQoaGJveCwgb2tfYnV0dG9u
KTsKKyAgIGV2YXNfb2JqZWN0X3Nob3cob2tfYnV0dG9uKTsKKworICAgRWluYV9Cb29sIGNhbmNl
bCA9IEVJTkFfRkFMU0U7CisgICBFdmFzX09iamVjdCAqY2FuY2VsX2J1dHRvbiA9IGVsbV9idXR0
b25fYWRkKGZpbGVfcG9wdXApOworICAgZWxtX29iamVjdF90ZXh0X3NldChjYW5jZWxfYnV0dG9u
LCAiQ2FuY2VsIik7CisgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoY2FuY2VsX2J1
dHRvbiwgImNsaWNrZWQiLCBfb2tfY2xpY2tlZF9jYiwgJmNhbmNlbCk7CisgICBlbG1fYm94X3Bh
Y2tfZW5kKGhib3gsIGNhbmNlbF9idXR0b24pOworICAgZXZhc19vYmplY3Rfc2hvdyhjYW5jZWxf
YnV0dG9uKTsKKworICAgd2hpbGUgKG9rICE9IEVJTkFfVFJVRSAmJiBjYW5jZWwgIT0gRUlOQV9U
UlVFKQorICAgIGVjb3JlX21haW5fbG9vcF9pdGVyYXRlKCk7CisKKyAgIEVpbmFfU3RyaW5nc2hh
cmUgKmZpbGVfcGF0aCA9IG9rID8gZWluYV9zdHJpbmdzaGFyZV9hZGQoZWxtX2ZpbGVzZWxlY3Rv
cl9wYXRoX2dldChmc19lbnRyeSkpIDogTlVMTDsKKyAgIGV2YXNfb2JqZWN0X2RlbChmaWxlX3Bv
cHVwKTsKKyAgIHJldHVybiBmaWxlX3BhdGg7CiB9CiAKIHN0YXRpYyB2b2lkCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>