[syslog-ng]More information on time_reopen, continuous reconnects, and syslog-ng1.4.10 - 1.4.12.

matthew.copeland@honeywell.com matthew.copeland@honeywell.com
Thu, 6 Sep 2001 17:25:33 +0000 (UTC)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

---1768452832-1985525895-999797133=:16138
Content-Type: TEXT/PLAIN; charset=US-ASCII


I think that part of the problem with this patch is that fd->super.alive
doesn't get set to zero.  I could be wrong, but I traced through the
original code using gdb and then I received your patch.  So after trying
the patch and finding that it didn't work, I went back and looked at the
output of the script file.  The first time the socket times out,
fd->super.alive gets set to 0 and the second poll doesn't happen.  Then,
when you go into the for loop if continues back fd->super.alive is
zero.  If this is the setup to get it to setup the callback for
reconnecting later, maybe we should do the POLLERR check when we do the
fd->super.alive check, and set fd->super.alive = 0 if we get into that if
statement.  What do you think?  (I have included the script output session
of my walk through the code using gdb.)

Matthew M. Copeland

> 
> > Index: io.c
> > ===================================================================
> > RCS file: /var/cvs/libol/src/io.c,v
> > retrieving revision 1.25
> > diff -u -r1.25 io.c
> > --- io.c	2001/08/26 21:28:18	1.25
> > +++ io.c	2001/09/05 20:39:02
> > @@ -231,7 +231,7 @@
> >  			if (!fd->super.alive)
> >  				continue;
> >  			
> > -			if (fds[i].revents & POLLHUP) {
> > +			if (fds[i].revents & (POLLHUP|POLLERR|POLLNVAL)) {
> >  				if (fd->want_read && fd->read)
> >  					READ_FD(fd);
> >  				else if (fd->want_write && fd->write)
> > @@ -246,10 +246,12 @@
> >  				close_fd(fd, CLOSE_PROTOCOL_FAILURE);
> >  				continue;
> >  			}
> > +			/*
> >  			if (fds[i].revents & (POLLNVAL | POLLERR)) {
> >  				close_fd(fd, CLOSE_POLL_FAILED);
> >  				continue;
> >  			}
> > +			*/
> >  			if (fds[i].revents & POLLOUT)
> >  				if (fd->want_write && fd->write)
> >  					WRITE_FD(fd);
> > 
> > 
> 
> 

-- 
You may be sure that when a man begins to call himself a "realist," he
is preparing to do something he is secretly ashamed of doing.
		-- Sydney Harris


---1768452832-1985525895-999797133=:16138
Content-Type: TEXT/PLAIN; charset=X-UNKNOWN; name=smfd_typescript
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.21.0109061725330.16138@fisb.gaa.aro.allied.com>
Content-Description: 
Content-Disposition: attachment; filename=smfd_typescript

U2NyaXB0IHN0YXJ0ZWQgb24gV2VkIFNlcCAgNSAyMTozODozMSAyMDAxDQob
XTA7cm9vdEBmaXNiOiAvdXNyL2xvY2FsL3N5c2xvZy9zYmluB1tyb290QGZp
c2Igc2Jpbl0jIGV4aXQICAgIZ2RiIHN5c2xvZy1uZw0NCkdOVSBnZGIgMTk5
OTEwMDQNDQpDb3B5cmlnaHQgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4NDQpHREIgaXMgZnJlZSBzb2Z0d2FyZSwgY292ZXJlZCBieSB0
aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB5b3UgYXJlDQ0K
d2VsY29tZSB0byBjaGFuZ2UgaXQgYW5kL29yIGRpc3RyaWJ1dGUgY29waWVz
IG9mIGl0IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4NDQpUeXBlICJzaG93
IGNvcHlpbmciIHRvIHNlZSB0aGUgY29uZGl0aW9ucy4NDQpUaGVyZSBpcyBh
YnNvbHV0ZWx5IG5vIHdhcnJhbnR5IGZvciBHREIuICBUeXBlICJzaG93IHdh
cnJhbnR5IiBmb3IgZGV0YWlscy4NDQpUaGlzIEdEQiB3YXMgY29uZmlndXJl
ZCBhcyAiaTM4Ni1yZWRoYXQtbGludXgiLi4uDQ0KKGdkYikgc2V0IC0tCCAI
CCAIYXJncyAtLWRlYnVnIC0tdmVyYm9zZSAtZiAvZXRjL3N5c2xvZy1uZy9z
eXNsbwdnLW5nLmNvbmYNDQooZ2RiKSBiIGlvLmM6aW9faXRlcg0NCkJyZWFr
cG9pbnQgMSBhdCAweDgwNTQ4NzA6IGZpbGUgaW8uYywgbGluZSA5Ni4NDQoo
Z2RiKSBydW4NDQpTdGFydGluZyBwcm9ncmFtOiAvdXNyL2xvY2FsL3N5c2xv
Zy9zYmluL3N5c2xvZy1uZyAtLWRlYnVnIC0tdmVyYm9zZSAtZiAvZXRjL3N5
c2xvZy1uZy9zeXNsb2ctbmcuY29uZg0NCmJpbmRpbmcgZmQgNSwgdW5peGFk
ZHI6IC9kZXYvbG9nDQ0KaW8uYzogbGlzdGVuaW5nIG9uIGZkIDUNDQppby5j
OiBjb25uZWN0aW5nIHVzaW5nIGZkIDYNDQpjb25uZWN0aW5nIGZkIDYgdG8g
aW5ldGFkZHIgMTUxLjE1MC4zMi4xMzUsIHBvcnQgOTk5DQ0Kc3lzbG9nLW5n
IHZlcnNpb24gMS40LjEyIHN0YXJ0aW5nDQ0KDQ0KQnJlYWtwb2ludCAxLCBp
b19pdGVyIChiPTB4ODA1ZmUxOCkgYXQgaW8uYzo5Ng0NCjk2CQlzdHJ1Y3Qg
cG9sbGZkICpmZHMgPSBOVUxMOw0NCihnZGIpIGMNDQpDb250aW51aW5nLg0N
CmlvLmM6IFByZXBhcmluZyBmZCA2IGZvciB3cml0aW5nDQ0KaW8uYzogUHJl
cGFyaW5nIGZkIDcgZm9yIHJlYWRpbmcNDQoNDQpCcmVha3BvaW50IDEsIGlv
X2l0ZXIgKGI9MHg4MDVmZTE4KSBhdCBpby5jOjk2DQ0KOTYJCXN0cnVjdCBw
b2xsZmQgKmZkcyA9IE5VTEw7DQ0KKGdkYikgDQ0KQ29udGludWluZy4NDQoN
DQpCcmVha3BvaW50IDEsIGlvX2l0ZXIgKGI9MHg4MDVmZTE4KSBhdCBpby5j
Ojk2DQ0KOTYJCXN0cnVjdCBwb2xsZmQgKmZkcyA9IE5VTEw7DQ0KKGdkYikg
DQ0KQ29udGludWluZy4NDQpSZWFkIEVPRiBvbiBmZCA3Lg0NCk1hcmtpbmcg
ZmQgNyBmb3IgY2xvc2luZy4NDQoNDQpCcmVha3BvaW50IDEsIGlvX2l0ZXIg
KGI9MHg4MDVmZTE4KSBhdCBpby5jOjk2DQ0KOTYJCXN0cnVjdCBwb2xsZmQg
KmZkcyA9IE5VTEw7DQ0KKGdkYikgDQ0KQ29udGludWluZy4NDQoNDQpCcmVh
a3BvaW50IDEsIGlvX2l0ZXIgKGI9MHg4MDVmZTE4KSBhdCBpby5jOjk2DQ0K
OTYJCXN0cnVjdCBwb2xsZmQgKmZkcyA9IE5VTEw7DQ0KKGdkYikgDQ0KQ29u
dGludWluZy4NDQpDbG9zaW5nIGZkIDcuDQ0KDQ0KQnJlYWtwb2ludCAxLCBp
b19pdGVyIChiPTB4ODA1ZmUxOCkgYXQgaW8uYzo5Ng0NCjk2CQlzdHJ1Y3Qg
cG9sbGZkICpmZHMgPSBOVUxMOw0NCihnZGIpIGMNDQpDb250aW51aW5nLg0N
Cg0NCkJyZWFrcG9pbnQgMSwgaW9faXRlciAoYj0weDgwNWZlMTgpIGF0IGlv
LmM6OTYNDQo5NgkJc3RydWN0IHBvbGxmZCAqZmRzID0gTlVMTDsNDQooZ2Ri
KSBzDQ0KOTcJCWludCByZXMgPSAwOw0NCihnZGIpIA0NCjk4CQlpbnQgdGlt
ZW91dCA9IC0xOw0NCihnZGIpIA0NCjk5CQl0aW1lX3Qgbm93ID0gdGltZShO
VUxMKTsNDQooZ2RiKSANDQoxMTAJCQlmb3IoZmRfcCA9ICZiLT5maWxlczsg
KGZkID0gKmZkX3ApOyApIHsNDQooZ2RiKSANDQoxMTEJCQkJaWYgKGZkLT5z
dXBlci5hbGl2ZSkgew0NCihnZGIpIHByaW50IGZkLT5zdXBlci5hbGl2ZQ0N
CiQxID0gMQ0NCihnZGIpIG4NDQoxMTIJCQkJCWlmIChmZC0+cHJlcGFyZSkg
ew0NCihnZGIpIHByaW50IGZkLT5wcmVwYXJlDQ0KJDIgPSAodm9pZCAoKiko
KSkgMHg4MDU1NjVjIDxwcmVwYXJlPg0NCihnZGIpIG4NDQoxMTMJCQkJCQlQ
UkVQQVJFX0ZEKGZkKTsNDQooZ2RiKSBzDQ0KcHJlcGFyZSAoZmQ9MHg4MDY0
NGIwKSBhdCBpby5jOjU2Mw0NCjU2MwkJQ0FTVChpb19mZCwgc2VsZiwgZmQp
Ow0NCihnZGIpIG4NDQo1NjUJCWlmIChmZC0+c3VwZXIuYWxpdmUgJiYgc2Vs
Zi0+YnVmZmVyKQ0NCihnZGIpIGJ0DQ0KIzAgIHByZXBhcmUgKGZkPTB4ODA2
NDRiMCkgYXQgaW8uYzo1NjUNDQojMSAgMHg4MDU0OGNmIGluIGlvX2l0ZXIg
KGI9MHg4MDVmZTE4KSBhdCBpby5jOjExMw0NCiMyICAweDgwNDlkYmMgaW4g
bWFpbl9sb29wIChiYWNrZW5kPTB4ODA1ZmUxOCkgYXQgbWFpbi5jOjE0OA0N
CiMzICAweDgwNGEyMjAgaW4gbWFpbiAoYXJnYz01LCBhcmd2PTB4YmZmZmZh
YzQpIGF0IG1haW4uYzozMTMNDQooZ2RiKSBwcmludCBzZWxmLT5idWZmZXIN
DQokMyA9IChzdHJ1Y3QgYWJzdHJhY3RfYnVmZmVyICopIDB4ODA2NDQwOA0N
CihnZGIpIHByaW50IHNlbGYtPmJ1ZmZlcggICAgICAgICAgICBtbMUAqG1sx
QChzZWxmLT5idWZmZXIpDQ0KJDQgPSB7c3VwZXIgPSB7c3VwZXIgPSB7bmV4
dCA9IDB4ODA2NDNiMCwgaXNhID0gMHg4MDVmNmMwLCANDQogICAgICBhbGxv
Y19tZXRob2QgPSAwICdcMDAwJywgbWFya2VkID0gMCAnXDAwMCcsIGRlYWQg
PSAwICdcMDAwJ30sIA0NCiAgICB3cml0ZSA9IDB4ODA1N2FiYyA8ZG9fd3Jp
dGU+LCB3cml0ZXN0ciA9IDB4ODA1N2FmOCA8ZG9fd3JpdGVfc3RyPn0sIA0N
CiAgd3JpdGFibGUgPSAweDAsIGNsb3NlZCA9IDAsIGZsdXNoID0gMHg4MDU3
YmE4IDxkb19mbHVzaD4sIA0NCiAgcHJlcGFyZSA9IDB4ODA1N2NlYyA8ZG9f
cHJlcGFyZV93cml0ZT4sIGNsb3NlID0gMHg4MDU3ZDI0IDxkb19jbG9zZT59
DQ0KKGdkYikgcHJpbnQgZmQNDQokNSA9IChzdHJ1Y3Qgbm9uYmxvY2tpbmdf
ZmQgKikgMHg4MDY0NGIwDQ0KKGdkYikgcHJpbnQgZmQICBtbMUAqDQ0KJDYg
PSB7c3VwZXIgPSB7c3VwZXIgPSB7bmV4dCA9IDB4ODA2NDQ1OCwgaXNhID0g
MHg4MDVmNDYwLCANDQogICAgICBhbGxvY19tZXRob2QgPSAwICdcMDAwJywg
bWFya2VkID0gMCAnXDAwMCcsIGRlYWQgPSAwICdcMDAwJ30sIA0NCiAgICBh
bGl2ZSA9IDEsIGtpbGwgPSAweDgwNTU3YzQgPGRvX2tpbGxfZmQ+fSwgbmV4
dCA9IDB4ODA2NDNiMCwgZmQgPSA2LCANDQogIGZuYW1lID0gMHgwLCB0b19i
ZV9jbG9zZWQgPSAwLCBjbG9zZV9yZWFzb24gPSAtMSwgDQ0KICBjbG9zZV9j
YWxsYmFjayA9IDB4ODA2NDUxMCwgcHJlcGFyZSA9IDB4ODA1NTY1YyA8cHJl
cGFyZT4sIHdhbnRfcmVhZCA9IDAsIA0NCiAgcmVhZCA9IDAsIHdhbnRfd3Jp
dGUgPSAwLCB3cml0ZSA9IDB4ODA1NTJmNCA8d3JpdGVfY2FsbGJhY2s+LCAN
DQogIHJlYWxseV9jbG9zZSA9IDB9DQ0KKGdkYikgbg0NCjU2NgkJCWZkLT53
YW50X3dyaXRlID0gQlVGX1BSRVBBUkUoc2VsZi0+YnVmZmVyKTsNDQooZ2Ri
KSBzDQ0KZG9fcHJlcGFyZV93cml0ZSAoYz0weDgwNjQ0MDgpIGF0IHBrdF9i
dWZmZXIuYzoxMjYNDQoxMjYJCUNBU1QocGt0X2J1ZmZlciwgc2VsZiwgYyk7
DQ0KKGdkYikgYnQNDQojMCAgZG9fcHJlcGFyZV93cml0ZSAoYz0weDgwNjQ0
MDgpIGF0IHBrdF9idWZmZXIuYzoxMjYNDQojMSAgMHg4MDU1NjliIGluIHBy
ZXBhcmUgKGZkPTB4ODA2NDRiMCkgYXQgaW8uYzo1NjYNDQojMiAgMHg4MDU0
OGNmIGluIGlvX2l0ZXIgKGI9MHg4MDVmZTE4KSBhdCBpby5jOjExMw0NCiMz
ICAweDgwNDlkYmMgaW4gbWFpbl9sb29wIChiYWNrZW5kPTB4ODA1ZmUxOCkg
YXQgbWFpbi5jOjE0OA0NCiM0ICAweDgwNGEyMjAgaW4gbWFpbiAoYXJnYz01
LCBhcmd2PTB4YmZmZmZhYzQpIGF0IG1haW4uYzozMTMNDQooZ2RiKSBuDQ0K
MTI4CQlyZXR1cm4gc2VsZi0+cXVldWVfc2l6ZSA+IHNlbGYtPnF1ZXVlX21p
bjsNDQooZ2RiKSBuDQ0KMHg4MDU3ZDIwCTEyOQl9DQ0KKGdkYikgbg0NCnBy
ZXBhcmUgKGZkPTB4ODA2NDRiMCkgYXQgaW8uYzo1NzANDQo1NzAJCWlmIChm
ZC0+dG9fYmVfY2xvc2VkKSB7DQ0KKGdkYikgDQ0KNTgyCX0NDQooZ2RiKSBw
cmludCBmZC0+dG9fYmVfY2xvc2VkDQ0KJDcgPSAwDQ0KKGdkYikgbg0NCmlv
X2l0ZXIgKGI9MHg4MDVmZTE4KSBhdCBpby5jOjExNA0NCjExNAkJCQkJfSBl
bHNlIGlmIChmZC0+dG9fYmVfY2xvc2VkKSB7DQ0KKGdkYikgbg0NCjExNwkJ
CQl9DQ0KKGdkYikgbg0NCjE0MgkJCQlmZF9wID0gJmZkLT5uZXh0Ow0NCihn
ZGIpIA0NCjExMAkJCWZvcihmZF9wID0gJmItPmZpbGVzOyAoZmQgPSAqZmRf
cCk7ICkgew0NCihnZGIpIA0NCjExMQkJCQlpZiAoZmQtPnN1cGVyLmFsaXZl
KSB7DQ0KKGdkYikgDQ0KMTEyCQkJCQlpZiAoZmQtPnByZXBhcmUpIHsNDQoo
Z2RiKSANDQoxMTcJCQkJfQ0NCihnZGIpIA0NCjE0MgkJCQlmZF9wID0gJmZk
LT5uZXh0Ow0NCihnZGIpIA0NCjExMAkJCWZvcihmZF9wID0gJmItPmZpbGVz
OyAoZmQgPSAqZmRfcCk7ICkgew0NCihnZGIpIA0NCjE0OAkJCUZPUl9RVUVV
RSgmYi0+Y2FsbG91dHMsIHN0cnVjdCBjYWxsb3V0ICosIG4pIHsNDQooZ2Ri
KSBuDQ0KMTU4CQluZmRzID0gMDsNDQooZ2RiKSBuDQ0KMTYxCQlpZiAoIWIt
PnJlbG9hZGluZykgew0NCihnZGIpIG4NDQoxNjQJCQlmb3IoZmQgPSBiLT5m
aWxlczsgZmQ7IGZkID0gZmQtPm5leHQpIHsNDQooZ2RiKSBuDQ0KMTY1CQkJ
CW5mZHMrKzsNDQooZ2RiKSBuDQ0KMTY0CQkJZm9yKGZkID0gYi0+ZmlsZXM7
IGZkOyBmZCA9IGZkLT5uZXh0KSB7DQ0KKGdkYikgDQ0KMTY1CQkJCW5mZHMr
KzsNDQooZ2RiKSANDQoxNjQJCQlmb3IoZmQgPSBiLT5maWxlczsgZmQ7IGZk
ID0gZmQtPm5leHQpIHsNDQooZ2RiKSANDQoxNjkJCWlmIChuZmRzKSB7DQ0K
KGdkYikgDQ0KMTcwCQkJaW50IGFsbF9ldmVudHMgPSAwOw0NCihnZGIpIA0N
CjE3MgkJCWZkcyA9IGFsbG9jYShzaXplb2Yoc3RydWN0IHBvbGxmZCkgKiBu
ZmRzKTsNDQooZ2RiKSANDQoxNzgJCQkJZm9yIChmZCA9IGItPmZpbGVzLCBp
ID0gMDsgZmQ7IGZkID0gZmQtPm5leHQsIGkrKykNDQooZ2RiKSANDQoxODAJ
CQkJCWFzc2VydChpIDwgbmZkcyk7DQ0KKGdkYikgDQ0KMTgyCQkJCQlmZHNb
aV0uZmQgPSBmZC0+ZmQ7DQ0KKGdkYikgbg0NCjE4MwkJCQkJZmRzW2ldLmV2
ZW50cyA9IDA7DQ0KKGdkYikgDQ0KMTg0CQkJCQlmZHNbaV0ucmV2ZW50cyA9
IDA7DQ0KKGdkYikgDQ0KMTg2CQkJCQlpZiAoZmQtPndhbnRfcmVhZCkNDQoo
Z2RiKSANDQoxODkJCQkJCWlmIChmZC0+d2FudF93cml0ZSkNDQooZ2RiKSAN
DQoxOTIJCQkJCWFsbF9ldmVudHMgfD0gZmRzW2ldLmV2ZW50czsNDQooZ2Ri
KSANDQoxNzgJCQkJZm9yIChmZCA9IGItPmZpbGVzLCBpID0gMDsgZmQ7IGZk
ID0gZmQtPm5leHQsIGkrKykNDQooZ2RiKSANDQoxODAJCQkJCWFzc2VydChp
IDwgbmZkcyk7DQ0KKGdkYikgDQ0KMTgyCQkJCQlmZHNbaV0uZmQgPSBmZC0+
ZmQ7DQ0KKGdkYikgDQ0KMTgzCQkJCQlmZHNbaV0uZXZlbnRzID0gMDsNDQoo
Z2RiKSANDQoxODQJCQkJCWZkc1tpXS5yZXZlbnRzID0gMDsNDQooZ2RiKSAN
DQoxODYJCQkJCWlmIChmZC0+d2FudF9yZWFkKQ0NCihnZGIpIA0NCjE4NwkJ
CQkJCWZkc1tpXS5ldmVudHMgfD0gUE9MTElOOw0NCihnZGIpIA0NCjE4OQkJ
CQkJaWYgKGZkLT53YW50X3dyaXRlKQ0NCihnZGIpIA0NCjE5MgkJCQkJYWxs
X2V2ZW50cyB8PSBmZHNbaV0uZXZlbnRzOw0NCihnZGIpIA0NCjE3OAkJCQlm
b3IgKGZkID0gYi0+ZmlsZXMsIGkgPSAwOyBmZDsgZmQgPSBmZC0+bmV4dCwg
aSsrKQ0NCihnZGIpIA0NCjE5NAkJCQlhc3NlcnQoaSA9PSBuZmRzKTsNDQoo
Z2RiKSANDQoxOTYJCQlpZiAoYWxsX2V2ZW50cykNDQooZ2RiKSANDQoxOTcJ
CQkJcmVzID0gcG9sbChmZHMsIG5mZHMsIElETEVfVElNRSk7DQ0KKGdkYikg
DQ0KMjAwCSAgICAgICAgaWYgKCFyZXMgJiYgbmZkcykgew0NCihnZGIpIHBy
aW50IHJlcw0NCiQ4ID0gMA0NCihnZGIpIG4NDQoyMDEJICAgICAgICAgICAg
ICAgIGdjX21heWJlKCZiLT5zdXBlciwgMCk7DQ0KKGdkYikgbg0NCjIwMgkg
ICAgICAgICAgICAgICAgcmVzID0gcG9sbChmZHMsIG5mZHMsIHRpbWVvdXQg
PCAwID8gNjAwMDAgOiB0aW1lb3V0ICogMTAwMCk7DQ0KKGdkYikgbgggCHBy
aW50ICpiDQ0KJDkgPSB7c3VwZXIgPSB7bmV4dCA9IDB4MCwgaXNhID0gMHg4
MDVlOTYwLCBhbGxvY19tZXRob2QgPSAwICdcMDAwJywgDQ0KICAgIG1hcmtl
ZCA9IDAgJ1wwMDAnLCBkZWFkID0gMCAnXDAwMCd9LCByZWxvYWRpbmcgPSAw
LCBmaWxlcyA9IDB4ODA2NDRiMCwgDQ0KICBjYWxsb3V0cyA9IHtodF9saW5r
cyA9IHsweDgwNWZlMzAsIDB4MCwgMHg4MDVmZTJjfX19DQ0KKGdkYikgcHJp
bnQgKmItPnN1cGVyDQ0KU3RydWN0dXJlIGhhcyBubyBjb21wb25lbnQgbmFt
ZWQgb3BlcmF0b3IqLg0NCihnZGIpIHByaW50ICpiLT5zdXBlcggICAgICAgI
CBtbMVANDQokMTAgPSB7bmV4dCA9IDB4MCwgaXNhID0gMHg4MDVlOTYwLCBh
bGxvY19tZXRob2QgPSAwICdcMDAwJywgDQ0KICBtYXJrZWQgPSAwICdcMDAw
JywgZGVhZCA9IDAgJ1wwMDAnfQ0NCihnZGIpIG4NDQoyMDMJICAgICAgICB9
DQ0KKGdkYikgcHJpbnQgcmVzDQ0KJDExID0gMQ0NCihnZGIpIG4NDQoyMDcJ
CWlmIChyZXMgPCAwKQ0NCihnZGIpIG4NDQoyMTcJCWlmIChuZmRzICYmIHJl
cyA+IDApIHsNDQooZ2RiKSBuDQ0KMjI0CQkJZm9yKGZkID0gYi0+ZmlsZXMs
IGk9MDsgZmQ7IGZkID0gZmQtPm5leHQsIGkrKykNDQooZ2RiKSBuDQ0KMjMx
CQkJCWlmICghZmQtPnN1cGVyLmFsaXZlKQ0NCihnZGIpIG4NDQoyMzQJCQkJ
aWYgKGZkc1tpXS5yZXZlbnRzICYgUE9MTEhVUCkgew0NCihnZGIpIG4NDQoy
NDUJCQkJaWYgKGZkc1tpXS5yZXZlbnRzICYgUE9MTFBSSSkgew0NCihnZGIp
IG4NDQoyNDkJCQkJaWYgKGZkc1tpXS5yZXZlbnRzICYgKFBPTExOVkFMIHwg
UE9MTEVSUikpIHsNDQooZ2RiKSBuDQ0KMjUzCQkJCWlmIChmZHNbaV0ucmV2
ZW50cyAmIFBPTExPVVQpDQ0KKGdkYikgbg0NCjI1NwkJCQlpZiAoZmRzW2ld
LnJldmVudHMgJiBQT0xMSU4pIHsNDQooZ2RiKSBuDQ0KMjI0CQkJZm9yKGZk
ID0gYi0+ZmlsZXMsIGk9MDsgZmQ7IGZkID0gZmQtPm5leHQsIGkrKykNDQoo
Z2RiKSBuDQ0KMjMxCQkJCWlmICghZmQtPnN1cGVyLmFsaXZlKQ0NCihnZGIp
IA0NCjIzNAkJCQlpZiAoZmRzW2ldLnJldmVudHMgJiBQT0xMSFVQKSB7DQ0K
KGdkYikgDQ0KMjQ1CQkJCWlmIChmZHNbaV0ucmV2ZW50cyAmIFBPTExQUkkp
IHsNDQooZ2RiKSANDQoyNDkJCQkJaWYgKGZkc1tpXS5yZXZlbnRzICYgKFBP
TExOVkFMIHwgUE9MTEVSUikpIHsNDQooZ2RiKSANDQoyNTMJCQkJaWYgKGZk
c1tpXS5yZXZlbnRzICYgUE9MTE9VVCkNDQooZ2RiKSANDQoyNTcJCQkJaWYg
KGZkc1tpXS5yZXZlbnRzICYgUE9MTElOKSB7DQ0KKGdkYikgDQ0KMjU4CQkJ
CQlpZiAoZmQtPndhbnRfcmVhZCAmJiBmZC0+cmVhZCkNDQooZ2RiKSANDQoy
NTkJCQkJCQlSRUFEX0ZEKGZkKTsNDQooZ2RiKSBzDQ0KbGlzdGVuX2NhbGxi
YWNrIChmZD0weDgwNjQzYjApIGF0IGlvLmM6NTAwDQ0KNTAwCQlDQVNUKGxp
c3Rlbl9mZCwgc2VsZiwgZmQpOw0NCihnZGIpIGJ0DQ0KIzAgIGxpc3Rlbl9j
YWxsYmFjayAoZmQ9MHg4MDY0M2IwKSBhdCBpby5jOjUwMA0NCiMxICAweDgw
NTRlMDMgaW4gaW9faXRlciAoYj0weDgwNWZlMTgpIGF0IGlvLmM6MjU5DQ0K
IzIgIDB4ODA0OWRiYyBpbiBtYWluX2xvb3AgKGJhY2tlbmQ9MHg4MDVmZTE4
KSBhdCBtYWluLmM6MTQ4DQ0KIzMgIDB4ODA0YTIyMCBpbiBtYWluIChhcmdj
PTUsIGFyZ3Y9MHhiZmZmZmFjNCkgYXQgbWFpbi5jOjMxMw0NCihnZGIpIG4N
DQo1MDIJCXN0cnVjdCBzb2NrYWRkciAqcGVlciA9IChzdHJ1Y3Qgc29ja2Fk
ZHIgKikgJnNvY2thZGRyX2J1ZjsNDQooZ2RiKSANDQo1MDMJCXNvY2tsZW5f
dCBhZGRyX2xlbiA9IHNpemVvZihzb2NrYWRkcl9idWYpOw0NCihnZGIpIA0N
CjUwNwkJY29ubiA9IGFjY2VwdChmZC0+ZmQsDQ0KKGdkYikgDQ0KNTA5CQlp
ZiAoY29ubiA8IDApDQ0KKGdkYikgDQ0KNTE0CQlpZiAoYWRkcl9sZW4pIHsN
DQooZ2RiKSANDQo1MTUJCQlyZXMgPSBGRF9MSVNURU5fQ0FMTEJBQ0soc2Vs
Zi0+Y2FsbGJhY2ssIGNvbm4sDQ0KKGdkYikgDQ0KaW8uYzogUHJlcGFyaW5n
IGZkIDcgZm9yIHJlYWRpbmcNDQo1MTcJCQlpZiAoU1RfQ0xPU0VEUChyZXMp
KQ0NCihnZGIpIA0NCjUyMwkJfQ0NCihnZGIpIA0NCjUyNwl9DQ0KKGdkYikg
DQ0KaW9faXRlciAoYj0weDgwNWZlMTgpIGF0IGlvLmM6MjI0DQ0KMjI0CQkJ
Zm9yKGZkID0gYi0+ZmlsZXMsIGk9MDsgZmQ7IGZkID0gZmQtPm5leHQsIGkr
KykNDQooZ2RiKSANDQoyNjMJCQlhc3NlcnQoaSA9PSBuZmRzKTsNDQooZ2Ri
KSANDQoyNjYJCW5jbyA9IDA7DQ0KKGdkYikgDQ0KMjY4CQkJRk9SX1FVRVVF
KCZiLT5jYWxsb3V0cywgc3RydWN0IGNhbGxvdXQgKiwgbikgew0NCihnZGIp
IHMNDQoyNzcJCWlmICghbmZkcyAmJiAhbmNvICYmICFiLT5yZWxvYWRpbmcp
IHsNDQooZ2RiKSANDQoyODEJCXJldHVybiAxOw0NCihnZGIpIA0NCjB4ODA1
NGVlMAkyODIJfQ0NCihnZGIpIA0NCm1haW5fbG9vcCAoYmFja2VuZD0weDgw
NWZlMTgpIGF0IG1haW4uYzoxNDkNDQoxNDkJCQlpZiAoZXhpdF9tYWluX2xv
b3ApDQ0KKGdkYikgbg0NCjE1MQkJCWlmIChzaWdodXByZWN2ZCAmJiAhcmVz
dGFydGluZykgew0NCihnZGIpIA0NCjE3MgkJCWlmIChzaWd0ZXJtcmVjdmQp
IHsNDQooZ2RiKSANDQoxNzcJCX0NDQooZ2RiKSANDQoxNDgJCXdoaWxlIChp
b19pdGVyKCZiYWNrZW5kLT5zdXBlcikpIHsNDQooZ2RiKSANDQoNDQpCcmVh
a3BvaW50IDEsIGlvX2l0ZXIgKGI9MHg4MDVmZTE4KSBhdCBpby5jOjk2DQ0K
OTYJCXN0cnVjdCBwb2xsZmQgKmZkcyA9IE5VTEw7DQ0KKGdkYikgbg0NCjk3
CQlpbnQgcmVzID0gMDsNDQooZ2RiKSANDQo5OAkJaW50IHRpbWVvdXQgPSAt
MTsNDQooZ2RiKSANDQo5OQkJdGltZV90IG5vdyA9IHRpbWUoTlVMTCk7DQ0K
KGdkYikgDQ0KMTEwCQkJZm9yKGZkX3AgPSAmYi0+ZmlsZXM7IChmZCA9ICpm
ZF9wKTsgKSB7DQ0KKGdkYikgDQ0KMTExCQkJCWlmIChmZC0+c3VwZXIuYWxp
dmUpIHsNDQooZ2RiKSANDQoxMTIJCQkJCWlmIChmZC0+cHJlcGFyZSkgew0N
CihnZGIpIA0NCjExMwkJCQkJCVBSRVBBUkVfRkQoZmQpOw0NCihnZGIpIHMN
DQpwcmVwYXJlIChmZD0weDgwNjRhOTApIGF0IGlvLmM6NTYzDQ0KNTYzCQlD
QVNUKGlvX2ZkLCBzZWxmLCBmZCk7DQ0KKGdkYikgbg0NCjU2NQkJaWYgKGZk
LT5zdXBlci5hbGl2ZSAmJiBzZWxmLT5idWZmZXIpDQ0KKGdkYikgcHJpbnQg
ZmQtPmZkDQ0KJDEyID0gNw0NCihnZGIpIHByaW50IGZkLT5zdWVwCCAICCAI
cGVyLmFsaXZlDQ0KJDEzID0gMQ0NCihnZGIpIHAIIAhuDQ0KNTY4CQkJZmQt
PndhbnRfd3JpdGUgPSAwOw0NCihnZGIpIG4NDQo1NzAJCWlmIChmZC0+dG9f
YmVfY2xvc2VkKSB7DQ0KKGdkYikgbg0NCjU4Mgl9DQ0KKGdkYikgbg0NCmlv
X2l0ZXIgKGI9MHg4MDVmZTE4KSBhdCBpby5jOjExNA0NCjExNAkJCQkJfSBl
bHNlIGlmIChmZC0+dG9fYmVfY2xvc2VkKSB7DQ0KKGdkYikgDQ0KMTE3CQkJ
CX0NDQooZ2RiKSANDQoxNDIJCQkJZmRfcCA9ICZmZC0+bmV4dDsNDQooZ2Ri
KSANDQoxMTAJCQlmb3IoZmRfcCA9ICZiLT5maWxlczsgKGZkID0gKmZkX3Ap
OyApIHsNDQooZ2RiKSANDQoxMTEJCQkJaWYgKGZkLT5zdXBlci5hbGl2ZSkg
ew0NCihnZGIpIA0NCjExMgkJCQkJaWYgKGZkLT5wcmVwYXJlKSB7DQ0KKGdk
YikgDQ0KMTEzCQkJCQkJUFJFUEFSRV9GRChmZCk7DQ0KKGdkYikgcw0NCnBy
ZXBhcmUgKGZkPTB4ODA2NDRiMCkgYXQgaW8uYzo1NjMNDQo1NjMJCUNBU1Qo
aW9fZmQsIHNlbGYsIGZkKTsNDQooZ2RiKSBuDQ0KNTY1CQlpZiAoZmQtPnN1
cGVyLmFsaXZlICYmIHNlbGYtPmJ1ZmZlcikNDQooZ2RiKSBwcmludCBmZC0+
ZmQNDQokMTQgPSA2DQ0KKGdkYikgbg0NCjU2NgkJCWZkLT53YW50X3dyaXRl
ID0gQlVGX1BSRVBBUkUoc2VsZi0+YnVmZmVyKTsNDQooZ2RiKSANDQo1NzAJ
CWlmIChmZC0+dG9fYmVfY2xvc2VkKSB7DQ0KKGdkYikgDQ0KNTgyCX0NDQoo
Z2RiKSANDQppb19pdGVyIChiPTB4ODA1ZmUxOCkgYXQgaW8uYzoxMTQNDQox
MTQJCQkJCX0gZWxzZSBpZiAoZmQtPnRvX2JlX2Nsb3NlZCkgew0NCihnZGIp
IA0NCjExNwkJCQl9DQ0KKGdkYikgDQ0KMTQyCQkJCWZkX3AgPSAmZmQtPm5l
eHQ7DQ0KKGdkYikgDQ0KMTEwCQkJZm9yKGZkX3AgPSAmYi0+ZmlsZXM7IChm
ZCA9ICpmZF9wKTsgKSB7DQ0KKGdkYikgDQ0KMTExCQkJCWlmIChmZC0+c3Vw
ZXIuYWxpdmUpIHsNDQooZ2RiKSANDQoxMTIJCQkJCWlmIChmZC0+cHJlcGFy
ZSkgew0NCihnZGIpIA0NCjExNwkJCQl9DQ0KKGdkYikgDQ0KMTQyCQkJCWZk
X3AgPSAmZmQtPm5leHQ7DQ0KKGdkYikgDQ0KMTEwCQkJZm9yKGZkX3AgPSAm
Yi0+ZmlsZXM7IChmZCA9ICpmZF9wKTsgKSB7DQ0KKGdkYikgDQ0KMTQ4CQkJ
Rk9SX1FVRVVFKCZiLT5jYWxsb3V0cywgc3RydWN0IGNhbGxvdXQgKiwgbikg
ew0NCihnZGIpIA0NCjE1OAkJbmZkcyA9IDA7DQ0KKGdkYikgDQ0KMTYxCQlp
ZiAoIWItPnJlbG9hZGluZykgew0NCihnZGIpIA0NCjE2NAkJCWZvcihmZCA9
IGItPmZpbGVzOyBmZDsgZmQgPSBmZC0+bmV4dCkgew0NCihnZGIpIA0NCjE2
NQkJCQluZmRzKys7DQ0KKGdkYikgDQ0KMTY0CQkJZm9yKGZkID0gYi0+Zmls
ZXM7IGZkOyBmZCA9IGZkLT5uZXh0KSB7DQ0KKGdkYikgDQ0KMTY1CQkJCW5m
ZHMrKzsNDQooZ2RiKSANDQoxNjQJCQlmb3IoZmQgPSBiLT5maWxlczsgZmQ7
IGZkID0gZmQtPm5leHQpIHsNDQooZ2RiKSANDQoxNjUJCQkJbmZkcysrOw0N
CihnZGIpIA0NCjE2NAkJCWZvcihmZCA9IGItPmZpbGVzOyBmZDsgZmQgPSBm
ZC0+bmV4dCkgew0NCihnZGIpIA0NCjE2OQkJaWYgKG5mZHMpIHsNDQooZ2Ri
KSANDQoxNzAJCQlpbnQgYWxsX2V2ZW50cyA9IDA7DQ0KKGdkYikgDQ0KMTcy
CQkJZmRzID0gYWxsb2NhKHNpemVvZihzdHJ1Y3QgcG9sbGZkKSAqIG5mZHMp
Ow0NCihnZGIpIA0NCjE3OAkJCQlmb3IgKGZkID0gYi0+ZmlsZXMsIGkgPSAw
OyBmZDsgZmQgPSBmZC0+bmV4dCwgaSsrKQ0NCihnZGIpIA0NCjE4MAkJCQkJ
YXNzZXJ0KGkgPCBuZmRzKTsNDQooZ2RiKSANDQoxODIJCQkJCWZkc1tpXS5m
ZCA9IGZkLT5mZDsNDQooZ2RiKSANDQoxODMJCQkJCWZkc1tpXS5ldmVudHMg
PSAwOw0NCihnZGIpIA0NCjE4NAkJCQkJZmRzW2ldLnJldmVudHMgPSAwOw0N
CihnZGIpIA0NCjE4NgkJCQkJaWYgKGZkLT53YW50X3JlYWQpDQ0KKGdkYikg
DQ0KMTg3CQkJCQkJZmRzW2ldLmV2ZW50cyB8PSBQT0xMSU47DQ0KKGdkYikg
DQ0KMTg5CQkJCQlpZiAoZmQtPndhbnRfd3JpdGUpDQ0KKGdkYikgDQ0KMTky
CQkJCQlhbGxfZXZlbnRzIHw9IGZkc1tpXS5ldmVudHM7DQ0KKGdkYikgDQ0K
MTc4CQkJCWZvciAoZmQgPSBiLT5maWxlcywgaSA9IDA7IGZkOyBmZCA9IGZk
LT5uZXh0LCBpKyspDQ0KKGdkYikgDQ0KMTgwCQkJCQlhc3NlcnQoaSA8IG5m
ZHMpOw0NCihnZGIpIA0NCjE4MgkJCQkJZmRzW2ldLmZkID0gZmQtPmZkOw0N
CihnZGIpIA0NCjE4MwkJCQkJZmRzW2ldLmV2ZW50cyA9IDA7DQ0KKGdkYikg
DQ0KMTg0CQkJCQlmZHNbaV0ucmV2ZW50cyA9IDA7DQ0KKGdkYikgDQ0KMTg2
CQkJCQlpZiAoZmQtPndhbnRfcmVhZCkNDQooZ2RiKSANDQoxODkJCQkJCWlm
IChmZC0+d2FudF93cml0ZSkNDQooZ2RiKSANDQoxOTIJCQkJCWFsbF9ldmVu
dHMgfD0gZmRzW2ldLmV2ZW50czsNDQooZ2RiKSANDQoxNzgJCQkJZm9yIChm
ZCA9IGItPmZpbGVzLCBpID0gMDsgZmQ7IGZkID0gZmQtPm5leHQsIGkrKykN
DQooZ2RiKSANDQoxODAJCQkJCWFzc2VydChpIDwgbmZkcyk7DQ0KKGdkYikg
DQ0KMTgyCQkJCQlmZHNbaV0uZmQgPSBmZC0+ZmQ7DQ0KKGdkYikgDQ0KMTgz
CQkJCQlmZHNbaV0uZXZlbnRzID0gMDsNDQooZ2RiKSANDQoxODQJCQkJCWZk
c1tpXS5yZXZlbnRzID0gMDsNDQooZ2RiKSANDQoxODYJCQkJCWlmIChmZC0+
d2FudF9yZWFkKQ0NCihnZGIpIA0NCjE4NwkJCQkJCWZkc1tpXS5ldmVudHMg
fD0gUE9MTElOOw0NCihnZGIpIA0NCjE4OQkJCQkJaWYgKGZkLT53YW50X3dy
aXRlKQ0NCihnZGIpIA0NCjE5MgkJCQkJYWxsX2V2ZW50cyB8PSBmZHNbaV0u
ZXZlbnRzOw0NCihnZGIpIA0NCjE3OAkJCQlmb3IgKGZkID0gYi0+ZmlsZXMs
IGkgPSAwOyBmZDsgZmQgPSBmZC0+bmV4dCwgaSsrKQ0NCihnZGIpIA0NCjE5
NAkJCQlhc3NlcnQoaSA9PSBuZmRzKTsNDQooZ2RiKSANDQoxOTYJCQlpZiAo
YWxsX2V2ZW50cykNDQooZ2RiKSANDQoxOTcJCQkJcmVzID0gcG9sbChmZHMs
IG5mZHMsIElETEVfVElNRSk7DQ0KKGdkYikgDQ0KMjAwCSAgICAgICAgaWYg
KCFyZXMgJiYgbmZkcykgew0NCihnZGIpIHByaW50IHJlcw0NCiQxNSA9IDEN
DQooZ2RiKSBuDQ0KMjA1CSAgICAgICAgICAgICAgICBnY19tYXliZSgmYi0+
c3VwZXIsIDEpOw0NCihnZGIpIA0NCjIwNwkJaWYgKHJlcyA8IDApDQ0KKGdk
YikgbwggCHByaW50IGINDQokMTYgPSAoc3RydWN0IGlvX2JhY2tlbmQgKikg
MHg4MDVmZTE4DQ0KKGdkYikgcHJpbnQgKmINDQokMTcgPSB7c3VwZXIgPSB7
bmV4dCA9IDB4MCwgaXNhID0gMHg4MDVlOTYwLCBhbGxvY19tZXRob2QgPSAw
ICdcMDAwJywgDQ0KICAgIG1hcmtlZCA9IDAgJ1wwMDAnLCBkZWFkID0gMCAn
XDAwMCd9LCByZWxvYWRpbmcgPSAwLCBmaWxlcyA9IDB4ODA2NGE5MCwgDQ0K
ICBjYWxsb3V0cyA9IHtodF9saW5rcyA9IHsweDgwNWZlMzAsIDB4MCwgMHg4
MDVmZTJjfX19DQ0KKGdkYikgbg0NCjIxNwkJaWYgKG5mZHMgJiYgcmVzID4g
MCkgew0NCihnZGIpIG4NDQoyMjQJCQlmb3IoZmQgPSBiLT5maWxlcywgaT0w
OyBmZDsgZmQgPSBmZC0+bmV4dCwgaSsrKQ0NCihnZGIpIG4NDQoyMzEJCQkJ
aWYgKCFmZC0+c3VwZXIuYWxpdmUpDQ0KKGdkYikgcHJpbnQgZmQtPnN1cGVy
LmFsaXZlDQ0KJDE4ID0gMQ0NCihnZGIpIG4NDQoyMzQJCQkJaWYgKGZkc1tp
XS5yZXZlbnRzICYgUE9MTEhVUCkgew0NCihnZGIpIG4NDQoyMzUJCQkJCWlm
IChmZC0+d2FudF9yZWFkICYmIGZkLT5yZWFkKQ0NCihnZGIpIHByaW50IGZk
c1tpXS5yZWUIIAh2ZW50cw0NCiQxOSA9IDE3DQ0KKGdkYikgbg0NCjIzNgkJ
CQkJCVJFQURfRkQoZmQpOw0NCihnZGIpIHMNDQpyZWFkX2NhbGxiYWNrIChm
ZD0weDgwNjRhOTApIGF0IGlvLmM6Mzk5DQ0KMzk5CQlDQVNUKGlvX2ZkLCBz
ZWxmLCBmZCk7DQ0KKGdkYikgbg0NCjQwMgkJc3RydWN0IGZkX3JlYWQgciA9
DQ0KKGdkYikgbg0NCjQwNgkJcmVzID0gUkVBRF9IQU5ETEVSKHNlbGYtPmhh
bmRsZXIsDQ0KKGdkYikgcw0NCmRvX3JlYWRfbGluZSAoaD0weDgwNjRhZDQs
IHJlYWQ9MHhiZmZmZjk0OCkgYXQgc291cmNlcy5jOjc1DQ0KNzUJCUNBU1Qo
bG9nX3JlYWRlciwgY2xvc3VyZSwgKmgpOw0NCihnZGIpIG4NDQo4MAkJc2l6
ZV90IHNhbGVuID0gc2l6ZW9mKHNhYnVmKTsNDQooZ2RiKSBwCCAIaSBsb2Nh
bHMNDQpjbG9zdXJlID0gKHN0cnVjdCBsb2dfcmVhZGVyICopIDB4ODA2NGMz
MA0NCmVvbCA9ICh1bnNpZ25lZCBjaGFyICopIDB4YmZmZmY5MjAgIkj5/784
UVwwMDVcYlwwMDEiDQ0Kc3RhcnQgPSAodW5zaWduZWQgY2hhciAqKSAweDQw
MTIxZDYwICIiDQ0KbGVuZ3RoID0gMTQ0DQ0KbiA9IDEzNDYzMDE2MA0NCnNh
YnVmID0gIvRKXDAwNlxi9EpcMDA2XGIo+P+/TVwwMzFcMDA1XGKwQFwwMDZc
YuhLXDAwNlxioFwwMzBcMDA1XGJcMDAwXDAwMFwwMDBcMDAw6EtcMDA2XGJQ
QFwwMDZcYkT4/78lXDAyNFwwMDVcYlBAXDAwNlxiXDIyMEpcMDA2XGIwS1ww
MDZcYtxcMDIzXDAwNVxiUP9cMDA1XGJw+f+/0lRcMDA1XGJQ/1wwMDVcYlxh
XDAwMFwwMDBcMDAwMEtcMDA2XGJcYlRcMDA1XGJcYVwwMDBcMDAwXDAwMFww
MDBcMDAwXDAwMFwwMDBcMDEzXDAwMFwwMDBcMDAwbPj/v1wwMDFcMDAwXDAw
MDAwMDAwMTdmQG9cMDAzXDAwMFwwMDBcMDAzXDAwMFwwMDBcMDAw5s9cYkDs
MVwwMjJAIExcMDA2XGJgXDAzNVwwMjJAwFwwMDNcMDAwXDAwMFx0XDAwMFww
MDBcMDAwXDAwMFwwMDBcMDAwXDAwMLFcMDIwXDAwMEAoXDAwNFwwMDBcMDAw
YFwwMzVcMDIyQEBcMjEzXDAwNFxius9cYkA0XGFcMDAwQFwwMDBcMDAwXDAw
MFwwMDAkXGJcMDAwQPRcMDAyXDAwMEBcMDAwPFwwMDFAXDAwNFwwMDBcMDAw
XDAwMCIuLi4NDQpzYWxlbiA9IDEzNDYyNzUxNg0NCihnZGIpIG4NDQo4MgkJ
aWYgKCFjbG9zdXJlLT5kZ3JhbSkgew0NCihnZGIpIGJ0DQ0KIzAgIGRvX3Jl
YWRfbGluZSAoaD0weDgwNjRhZDQsIHJlYWQ9MHhiZmZmZjk0OCkgYXQgc291
cmNlcy5jOjgyDQ0KIzEgIDB4ODA1NTFhOSBpbiByZWFkX2NhbGxiYWNrIChm
ZD0weDgwNjRhOTApIGF0IGlvLmM6NDA2DQ0KIzIgIDB4ODA1NGNlOCBpbiBp
b19pdGVyIChiPTB4ODA1ZmUxOCkgYXQgaW8uYzoyMzYNDQojMyAgMHg4MDQ5
ZGJjIGluIG1haW5fbG9vcCAoYmFja2VuZD0weDgwNWZlMTgpIGF0IG1haW4u
YzoxNDgNDQojNCAgMHg4MDRhMjIwIGluIG1haW4gKGFyZ2M9NSwgYXJndj0w
eGJmZmZmYWM0KSBhdCBtYWluLmM6MzEzDQ0KKGdkYikgbg0NCjgzCQkJbiA9
IEFfUkVBRChyZWFkLCBNQVhfTElORSAtIGNsb3N1cmUtPnBvcywgY2xvc3Vy
ZS0+YnVmZmVyICsgY2xvc3VyZS0+cG9zKTsNDQooZ2RiKSBzDQ0KZG9fcmVh
ZCAocj0weGJmZmZmOTIwLCBsZW5ndGg9MTAyNCwgYnVmZmVyPTB4ODA2NGM0
OCAiIikgYXQgaW8uYzozMDgNDQozMDgJICBDQVNUKGZkX3JlYWQsIGNsb3N1
cmUsICpyKTsNDQooZ2RiKSBuDQ0KMzEwCSAgaWYgKCFsZW5ndGgpDQ0KKGdk
YikgYnQNDQojMCAgZG9fcmVhZCAocj0weGJmZmZmOTIwLCBsZW5ndGg9MTAy
NCwgYnVmZmVyPTB4ODA2NGM0OCAiIikgYXQgaW8uYzozMTANDQojMSAgMHg4
MDRhMzliIGluIGRvX3JlYWRfbGluZSAoaD0weDgwNjRhZDQsIHJlYWQ9MHhi
ZmZmZjk0OCkgYXQgc291cmNlcy5jOjgzDQ0KIzIgIDB4ODA1NTFhOSBpbiBy
ZWFkX2NhbGxiYWNrIChmZD0weDgwNjRhOTApIGF0IGlvLmM6NDA2DQ0KIzMg
IDB4ODA1NGNlOCBpbiBpb19pdGVyIChiPTB4ODA1ZmUxOCkgYXQgaW8uYzoy
MzYNDQojNCAgMHg4MDQ5ZGJjIGluIG1haW5fbG9vcCAoYmFja2VuZD0weDgw
NWZlMTgpIGF0IG1haW4uYzoxNDgNDQojNSAgMHg4MDRhMjIwIGluIG1haW4g
KGFyZ2M9NSwgYXJndj0weGJmZmZmYWM0KSBhdCBtYWluLmM6MzEzDQ0KKGdk
Yikgbg0NCjMxOAkgICAgICBpbnQgcmVzID0gcmVhZChjbG9zdXJlLT5mZCwg
YnVmZmVyLCBsZW5ndGgpOw0NCihnZGIpIG4NDQozMjYJICAgICAgaWYgKCFy
ZXMpDQ0KKGdkYikgbg0NCjMzMgkgICAgICBpZiAocmVzID4gMCkNDQooZ2Ri
KSBuDQ0KMzMzCQlyZXR1cm4gcmVzOw0NCihnZGIpIG4NDQozNTUJfQ0NCihn
ZGIpIG4NDQpkb19yZWFkX2xpbmUgKGg9MHg4MDY0YWQ0LCByZWFkPTB4YmZm
ZmY5NDgpIGF0IHNvdXJjZXMuYzo4NA0NCjg0CQkJc2FsZW4gPSAwOw0NCihn
ZGIpIG4NDQo4NQkJfQ0NCihnZGIpIGJ0DQ0KIzAgIGRvX3JlYWRfbGluZSAo
aD0weDgwNjRhZDQsIHJlYWQ9MHhiZmZmZjk0OCkgYXQgc291cmNlcy5jOjg1
DQ0KIzEgIDB4ODA1NTFhOSBpbiByZWFkX2NhbGxiYWNrIChmZD0weDgwNjRh
OTApIGF0IGlvLmM6NDA2DQ0KIzIgIDB4ODA1NGNlOCBpbiBpb19pdGVyIChi
PTB4ODA1ZmUxOCkgYXQgaW8uYzoyMzYNDQojMyAgMHg4MDQ5ZGJjIGluIG1h
aW5fbG9vcCAoYmFja2VuZD0weDgwNWZlMTgpIGF0IG1haW4uYzoxNDgNDQoj
NCAgMHg4MDRhMjIwIGluIG1haW4gKGFyZ2M9NSwgYXJndj0weGJmZmZmYWM0
KSBhdCBtYWluLmM6MzEzDQ0KKGdkYikgbg0NCjg5CQlzd2l0Y2gobikgew0N
CihnZGIpIG4NDQo5OAkJY2xvc3VyZS0+cG9zICs9IG47DQ0KKGdkYikgbg0N
CjEwMAkJZW9sID0gbWVtY2hyKGNsb3N1cmUtPmJ1ZmZlciwgJ1wwJywgY2xv
c3VyZS0+cG9zKTsNDQooZ2RiKSBuDQ0KMTAxCQlpZiAoZW9sID09IE5VTEwp
DQ0KKGdkYikgbg0NCjEwMwkJaWYgKCFlb2wgJiYgY2xvc3VyZS0+cG9zKSB7
DQ0KKGdkYikgDQ0KMTA5CQlzdGFydCA9IGNsb3N1cmUtPmJ1ZmZlcjsNDQoo
Z2RiKSANDQoxMTAJCXdoaWxlIChlb2wpIHsNDQooZ2RiKSANDQoxMTQJCQlV
SU5UOCAqZW5kID0gZW9sOw0NCihnZGIpIA0NCjExNgkJCXdoaWxlICgoZW5k
ID4gc3RhcnQpICYmIChlbmRbLTFdID09ICdccicgfHwgZW5kWy0xXSA9PSAn
XG4nIHx8IGVuZFstMV0gPT0gMCkpDQ0KKGdkYikgDQ0KMTE5CQkJbGVuZ3Ro
ID0gZW5kIC0gc3RhcnQ7DQ0KKGdkYikgDQ0KMTIxCQkJaWYgKGxlbmd0aCkN
DQooZ2RiKSANDQoxMjIJCQkJZG9faGFuZGxlX2xpbmUoY2xvc3VyZSwgbGVu
Z3RoLCBzdGFydCwgc2FsZW4gPyAoYWJzdHJhY3RfYWRkciAqKSAmc2FidWYg
OiBOVUxMICwgc2FsZW4pOw0NCihnZGIpIA0NCjEyNAkJCXN0YXJ0ID0gZW5k
ICsgMTsNDQooZ2RiKSANDQoxMjYJCQllb2wgPSBtZW1jaHIoc3RhcnQsICdc
MCcsICZjbG9zdXJlLT5idWZmZXJbY2xvc3VyZS0+cG9zXSAtIHN0YXJ0KTsN
DQooZ2RiKSANDQoxMjcJCQlpZiAoZW9sID09IE5VTEwpDQ0KKGdkYikgDQ0K
MTI4CQkJCWVvbCA9IG1lbWNocihzdGFydCwgJ1xuJywgJmNsb3N1cmUtPmJ1
ZmZlcltjbG9zdXJlLT5wb3NdIC0gc3RhcnQpOw0NCihnZGIpIA0NCjEzMAkJ
fQ0NCihnZGIpIA0NCjEzMQkJbWVtbW92ZShjbG9zdXJlLT5idWZmZXIsIHN0
YXJ0LCAmY2xvc3VyZS0+YnVmZmVyW2Nsb3N1cmUtPnBvc10gLSBzdGFydCk7
DQ0KKGdkYikgDQ0KMTMyCQljbG9zdXJlLT5wb3MgPSAmY2xvc3VyZS0+YnVm
ZmVyW2Nsb3N1cmUtPnBvc10gLSBzdGFydDsNDQooZ2RiKSANDQoxMzMJCXJl
dHVybiBTVF9PSyB8IFNUX0dPT047DQ0KKGdkYikgDQ0KMHg4MDRhNjMwCTEz
NAl9DQ0KKGdkYikgDQ0KcmVhZF9jYWxsYmFjayAoZmQ9MHg4MDY0YTkwKSBh
dCBpby5jOjQyNQ0NCjQyNQkJaWYgKHJlcyAmIFNUX0hPTEQpDQ0KKGdkYikg
YnQNDQojMCAgcmVhZF9jYWxsYmFjayAoZmQ9MHg4MDY0YTkwKSBhdCBpby5j
OjQyNQ0NCiMxICAweDgwNTRjZTggaW4gaW9faXRlciAoYj0weDgwNWZlMTgp
IGF0IGlvLmM6MjM2DQ0KIzIgIDB4ODA0OWRiYyBpbiBtYWluX2xvb3AgKGJh
Y2tlbmQ9MHg4MDVmZTE4KSBhdCBtYWluLmM6MTQ4DQ0KIzMgIDB4ODA0YTIy
MCBpbiBtYWluIChhcmdjPTUsIGFyZ3Y9MHhiZmZmZmFjNCkgYXQgbWFpbi5j
OjMxMw0NCihnZGIpIHByaW50IGZkLT5mZA0NCiQyMCA9IDcNDQooZ2RiKSBw
cmludCAqZmQNDQokMjEgPSB7c3VwZXIgPSB7c3VwZXIgPSB7bmV4dCA9IDB4
ODA2NGIzMCwgaXNhID0gMHg4MDVmNDYwLCANDQogICAgICBhbGxvY19tZXRo
b2QgPSAwICdcMDAwJywgbWFya2VkID0gMCAnXDAwMCcsIGRlYWQgPSAwICdc
MDAwJ30sIA0NCiAgICBhbGl2ZSA9IDEsIGtpbGwgPSAweDgwNTU3YzQgPGRv
X2tpbGxfZmQ+fSwgbmV4dCA9IDB4ODA2NDRiMCwgZmQgPSA3LCANDQogIGZu
YW1lID0gMHgwLCB0b19iZV9jbG9zZWQgPSAwLCBjbG9zZV9yZWFzb24gPSAt
MSwgDQ0KICBjbG9zZV9jYWxsYmFjayA9IDB4ODA2NGI2MCwgcHJlcGFyZSA9
IDB4ODA1NTY1YyA8cHJlcGFyZT4sIHdhbnRfcmVhZCA9IDEsIA0NCiAgcmVh
ZCA9IDB4ODA1NTEzOCA8cmVhZF9jYWxsYmFjaz4sIHdhbnRfd3JpdGUgPSAw
LCB3cml0ZSA9IDAsIA0NCiAgcmVhbGx5X2Nsb3NlID0gMH0NDQooZ2RiKSBu
DQ0KNDMxCQlpZiAocmVzICYgU1RfRElFKQ0NCihnZGIpIA0NCjQzNgkJZWxz
ZSBpZiAocmVzICYgU1RfQ0xPU0UpDQ0KKGdkYikgDQ0KNDQwCX0NDQooZ2Ri
KSANDQppb19pdGVyIChiPTB4ODA1ZmUxOCkgYXQgaW8uYzoyNDMNDQoyNDMJ
CQkJCWNvbnRpbnVlOw0NCihnZGIpIG4NDQoyMjQJCQlmb3IoZmQgPSBiLT5m
aWxlcywgaT0wOyBmZDsgZmQgPSBmZC0+bmV4dCwgaSsrKQ0NCihnZGIpIA0N
CjIzMQkJCQlpZiAoIWZkLT5zdXBlci5hbGl2ZSkNDQooZ2RiKSANDQoyMzQJ
CQkJaWYgKGZkc1tpXS5yZXZlbnRzICYgUE9MTEhVUCkgew0NCihnZGIpIA0N
CjI0NQkJCQlpZiAoZmRzW2ldLnJldmVudHMgJiBQT0xMUFJJKSB7DQ0KKGdk
YikgDQ0KMjQ5CQkJCWlmIChmZHNbaV0ucmV2ZW50cyAmIChQT0xMTlZBTCB8
IFBPTExFUlIpKSB7DQ0KKGdkYikgDQ0KMjUzCQkJCWlmIChmZHNbaV0ucmV2
ZW50cyAmIFBPTExPVVQpDQ0KKGdkYikgDQ0KMjU3CQkJCWlmIChmZHNbaV0u
cmV2ZW50cyAmIFBPTExJTikgew0NCihnZGIpIA0NCjIyNAkJCWZvcihmZCA9
IGItPmZpbGVzLCBpPTA7IGZkOyBmZCA9IGZkLT5uZXh0LCBpKyspDQ0KKGdk
YikgDQ0KMjMxCQkJCWlmICghZmQtPnN1cGVyLmFsaXZlKQ0NCihnZGIpIA0N
CjIzNAkJCQlpZiAoZmRzW2ldLnJldmVudHMgJiBQT0xMSFVQKSB7DQ0KKGdk
YikgDQ0KMjQ1CQkJCWlmIChmZHNbaV0ucmV2ZW50cyAmIFBPTExQUkkpIHsN
DQooZ2RiKSANDQoyNDkJCQkJaWYgKGZkc1tpXS5yZXZlbnRzICYgKFBPTExO
VkFMIHwgUE9MTEVSUikpIHsNDQooZ2RiKSANDQoyNTMJCQkJaWYgKGZkc1tp
XS5yZXZlbnRzICYgUE9MTE9VVCkNDQooZ2RiKSANDQoyNTcJCQkJaWYgKGZk
c1tpXS5yZXZlbnRzICYgUE9MTElOKSB7DQ0KKGdkYikgDQ0KMjI0CQkJZm9y
KGZkID0gYi0+ZmlsZXMsIGk9MDsgZmQ7IGZkID0gZmQtPm5leHQsIGkrKykN
DQooZ2RiKSANDQoyNjMJCQlhc3NlcnQoaSA9PSBuZmRzKTsNDQooZ2RiKSAN
DQoyNjYJCW5jbyA9IDA7DQ0KKGdkYikgDQ0KMjY4CQkJRk9SX1FVRVVFKCZi
LT5jYWxsb3V0cywgc3RydWN0IGNhbGxvdXQgKiwgbikgew0NCihnZGIpIA0N
CjI3NwkJaWYgKCFuZmRzICYmICFuY28gJiYgIWItPnJlbG9hZGluZykgew0N
CihnZGIpIA0NCjI4MQkJcmV0dXJuIDE7DQ0KKGdkYikgDQ0KMHg4MDU0ZWUw
CTI4Mgl9DQ0KKGdkYikgDQ0KbWFpbl9sb29wIChiYWNrZW5kPTB4ODA1ZmUx
OCkgYXQgbWFpbi5jOjE0OQ0NCjE0OQkJCWlmIChleGl0X21haW5fbG9vcCkN
DQooZ2RiKSANDQoxNTEJCQlpZiAoc2lnaHVwcmVjdmQgJiYgIXJlc3RhcnRp
bmcpIHsNDQooZ2RiKSANDQoxNzIJCQlpZiAoc2lndGVybXJlY3ZkKSB7DQ0K
KGdkYikgDQ0KMTc3CQl9DQ0KKGdkYikgDQ0KMTQ4CQl3aGlsZSAoaW9faXRl
cigmYmFja2VuZC0+c3VwZXIpKSB7DQ0KKGdkYikgDQ0KDQ0KQnJlYWtwb2lu
dCAxLCBpb19pdGVyIChiPTB4ODA1ZmUxOCkgYXQgaW8uYzo5Ng0NCjk2CQlz
dHJ1Y3QgcG9sbGZkICpmZHMgPSBOVUxMOw0NCihnZGIpIA0NCjk3CQlpbnQg
cmVzID0gMDsNDQooZ2RiKSANDQo5OAkJaW50IHRpbWVvdXQgPSAtMTsNDQoo
Z2RiKSANDQo5OQkJdGltZV90IG5vdyA9IHRpbWUoTlVMTCk7DQ0KKGdkYikg
DQ0KMTEwCQkJZm9yKGZkX3AgPSAmYi0+ZmlsZXM7IChmZCA9ICpmZF9wKTsg
KSB7DQ0KKGdkYikgDQ0KMTExCQkJCWlmIChmZC0+c3VwZXIuYWxpdmUpIHsN
DQooZ2RiKSANDQoxMTIJCQkJCWlmIChmZC0+cHJlcGFyZSkgew0NCihnZGIp
IA0NCjExMwkJCQkJCVBSRVBBUkVfRkQoZmQpOw0NCihnZGIpIHMNDQpwcmVw
YXJlIChmZD0weDgwNjRhOTApIGF0IGlvLmM6NTYzDQ0KNTYzCQlDQVNUKGlv
X2ZkLCBzZWxmLCBmZCk7DQ0KKGdkYikgbg0NCjU2NQkJaWYgKGZkLT5zdXBl
ci5hbGl2ZSAmJiBzZWxmLT5idWZmZXIpDQ0KKGdkYikgcHJpbnQgZmQtPmZk
DQ0KJDIyID0gNw0NCihnZGIpIHByaW50ICpmZA0NCiQyMyA9IHtzdXBlciA9
IHtzdXBlciA9IHtuZXh0ID0gMHg4MDY0YjMwLCBpc2EgPSAweDgwNWY0NjAs
IA0NCiAgICAgIGFsbG9jX21ldGhvZCA9IDAgJ1wwMDAnLCBtYXJrZWQgPSAw
ICdcMDAwJywgZGVhZCA9IDAgJ1wwMDAnfSwgDQ0KICAgIGFsaXZlID0gMSwg
a2lsbCA9IDB4ODA1NTdjNCA8ZG9fa2lsbF9mZD59LCBuZXh0ID0gMHg4MDY0
NGIwLCBmZCA9IDcsIA0NCiAgZm5hbWUgPSAweDAsIHRvX2JlX2Nsb3NlZCA9
IDAsIGNsb3NlX3JlYXNvbiA9IC0xLCANDQogIGNsb3NlX2NhbGxiYWNrID0g
MHg4MDY0YjYwLCBwcmVwYXJlID0gMHg4MDU1NjVjIDxwcmVwYXJlPiwgd2Fu
dF9yZWFkID0gMSwgDQ0KICByZWFkID0gMHg4MDU1MTM4IDxyZWFkX2NhbGxi
YWNrPiwgd2FudF93cml0ZSA9IDAsIHdyaXRlID0gMCwgDQ0KICByZWFsbHlf
Y2xvc2UgPSAwfQ0NCihnZGIpIG4NDQo1NjgJCQlmZC0+d2FudF93cml0ZSA9
IDA7DQ0KKGdkYikgbg0NCjU3MAkJaWYgKGZkLT50b19iZV9jbG9zZWQpIHsN
DQooZ2RiKSBuDQ0KNTgyCX0NDQooZ2RiKSBuDQ0KaW9faXRlciAoYj0weDgw
NWZlMTgpIGF0IGlvLmM6MTE0DQ0KMTE0CQkJCQl9IGVsc2UgaWYgKGZkLT50
b19iZV9jbG9zZWQpIHsNDQooZ2RiKSANDQoxMTcJCQkJfQ0NCihnZGIpIA0N
CjE0MgkJCQlmZF9wID0gJmZkLT5uZXh0Ow0NCihnZGIpIA0NCjExMAkJCWZv
cihmZF9wID0gJmItPmZpbGVzOyAoZmQgPSAqZmRfcCk7ICkgew0NCihnZGIp
IA0NCjExMQkJCQlpZiAoZmQtPnN1cGVyLmFsaXZlKSB7DQ0KKGdkYikgDQ0K
MTEyCQkJCQlpZiAoZmQtPnByZXBhcmUpIHsNDQooZ2RiKSANDQoxMTMJCQkJ
CQlQUkVQQVJFX0ZEKGZkKTsNDQooZ2RiKSBzDQ0KcHJlcGFyZSAoZmQ9MHg4
MDY0NGIwKSBhdCBpby5jOjU2Mw0NCjU2MwkJQ0FTVChpb19mZCwgc2VsZiwg
ZmQpOw0NCihnZGIpIHByaW50IGZkLT5mZA0NCiQyNCA9IDYNDQooZ2RiKSBu
DQ0KNTY1CQlpZiAoZmQtPnN1cGVyLmFsaXZlICYmIHNlbGYtPmJ1ZmZlcikN
DQooZ2RiKSANDQo1NjYJCQlmZC0+d2FudF93cml0ZSA9IEJVRl9QUkVQQVJF
KHNlbGYtPmJ1ZmZlcik7DQ0KKGdkYikgcHJpbnQgKmZkDQ0KJDI1ID0ge3N1
cGVyID0ge3N1cGVyID0ge25leHQgPSAweDgwNjQ0NTgsIGlzYSA9IDB4ODA1
ZjQ2MCwgDQ0KICAgICAgYWxsb2NfbWV0aG9kID0gMCAnXDAwMCcsIG1hcmtl
ZCA9IDAgJ1wwMDAnLCBkZWFkID0gMCAnXDAwMCd9LCANDQogICAgYWxpdmUg
PSAxLCBraWxsID0gMHg4MDU1N2M0IDxkb19raWxsX2ZkPn0sIG5leHQgPSAw
eDgwNjQzYjAsIGZkID0gNiwgDQ0KICBmbmFtZSA9IDB4MCwgdG9fYmVfY2xv
c2VkID0gMCwgY2xvc2VfcmVhc29uID0gLTEsIA0NCiAgY2xvc2VfY2FsbGJh
Y2sgPSAweDgwNjQ1MTAsIHByZXBhcmUgPSAweDgwNTU2NWMgPHByZXBhcmU+
LCB3YW50X3JlYWQgPSAwLCANDQogIHJlYWQgPSAwLCB3YW50X3dyaXRlID0g
MCwgd3JpdGUgPSAweDgwNTUyZjQgPHdyaXRlX2NhbGxiYWNrPiwgDQ0KICBy
ZWFsbHlfY2xvc2UgPSAwfQ0NCihnZGIpIG4NDQo1NzAJCWlmIChmZC0+dG9f
YmVfY2xvc2VkKSB7DQ0KKGdkYikgbg0NCjU4Mgl9DQ0KKGdkYikgDQ0KaW9f
aXRlciAoYj0weDgwNWZlMTgpIGF0IGlvLmM6MTE0DQ0KMTE0CQkJCQl9IGVs
c2UgaWYgKGZkLT50b19iZV9jbG9zZWQpIHsNDQooZ2RiKSANDQoxMTcJCQkJ
fQ0NCihnZGIpIA0NCjE0MgkJCQlmZF9wID0gJmZkLT5uZXh0Ow0NCihnZGIp
IA0NCjExMAkJCWZvcihmZF9wID0gJmItPmZpbGVzOyAoZmQgPSAqZmRfcCk7
ICkgew0NCihnZGIpIA0NCjExMQkJCQlpZiAoZmQtPnN1cGVyLmFsaXZlKSB7
DQ0KKGdkYikgDQ0KMTEyCQkJCQlpZiAoZmQtPnByZXBhcmUpIHsNDQooZ2Ri
KSANDQoxMTcJCQkJfQ0NCihnZGIpIA0NCjE0MgkJCQlmZF9wID0gJmZkLT5u
ZXh0Ow0NCihnZGIpIA0NCjExMAkJCWZvcihmZF9wID0gJmItPmZpbGVzOyAo
ZmQgPSAqZmRfcCk7ICkgew0NCihnZGIpIA0NCjE0OAkJCUZPUl9RVUVVRSgm
Yi0+Y2FsbG91dHMsIHN0cnVjdCBjYWxsb3V0ICosIG4pIHsNDQooZ2RiKSAN
DQoxNTgJCW5mZHMgPSAwOw0NCihnZGIpIA0NCjE2MQkJaWYgKCFiLT5yZWxv
YWRpbmcpIHsNDQooZ2RiKSANDQoxNjQJCQlmb3IoZmQgPSBiLT5maWxlczsg
ZmQ7IGZkID0gZmQtPm5leHQpIHsNDQooZ2RiKSANDQoxNjUJCQkJbmZkcysr
Ow0NCihnZGIpIA0NCjE2NAkJCWZvcihmZCA9IGItPmZpbGVzOyBmZDsgZmQg
PSBmZC0+bmV4dCkgew0NCihnZGIpIA0NCjE2NQkJCQluZmRzKys7DQ0KKGdk
YikgDQ0KMTY0CQkJZm9yKGZkID0gYi0+ZmlsZXM7IGZkOyBmZCA9IGZkLT5u
ZXh0KSB7DQ0KKGdkYikgDQ0KMTY1CQkJCW5mZHMrKzsNDQooZ2RiKSANDQox
NjQJCQlmb3IoZmQgPSBiLT5maWxlczsgZmQ7IGZkID0gZmQtPm5leHQpIHsN
DQooZ2RiKSANDQoxNjkJCWlmIChuZmRzKSB7DQ0KKGdkYikgDQ0KMTcwCQkJ
aW50IGFsbF9ldmVudHMgPSAwOw0NCihnZGIpIA0NCjE3MgkJCWZkcyA9IGFs
bG9jYShzaXplb2Yoc3RydWN0IHBvbGxmZCkgKiBuZmRzKTsNDQooZ2RiKSAN
DQoxNzgJCQkJZm9yIChmZCA9IGItPmZpbGVzLCBpID0gMDsgZmQ7IGZkID0g
ZmQtPm5leHQsIGkrKykNDQooZ2RiKSANDQoxODAJCQkJCWFzc2VydChpIDwg
bmZkcyk7DQ0KKGdkYikgDQ0KMTgyCQkJCQlmZHNbaV0uZmQgPSBmZC0+ZmQ7
DQ0KKGdkYikgDQ0KMTgzCQkJCQlmZHNbaV0uZXZlbnRzID0gMDsNDQooZ2Ri
KSANDQoxODQJCQkJCWZkc1tpXS5yZXZlbnRzID0gMDsNDQooZ2RiKSANDQox
ODYJCQkJCWlmIChmZC0+d2FudF9yZWFkKQ0NCihnZGIpIA0NCjE4NwkJCQkJ
CWZkc1tpXS5ldmVudHMgfD0gUE9MTElOOw0NCihnZGIpIA0NCjE4OQkJCQkJ
aWYgKGZkLT53YW50X3dyaXRlKQ0NCihnZGIpIA0NCjE5MgkJCQkJYWxsX2V2
ZW50cyB8PSBmZHNbaV0uZXZlbnRzOw0NCihnZGIpIA0NCjE3OAkJCQlmb3Ig
KGZkID0gYi0+ZmlsZXMsIGkgPSAwOyBmZDsgZmQgPSBmZC0+bmV4dCwgaSsr
KQ0NCihnZGIpIA0NCjE4MAkJCQkJYXNzZXJ0KGkgPCBuZmRzKTsNDQooZ2Ri
KSANDQoxODIJCQkJCWZkc1tpXS5mZCA9IGZkLT5mZDsNDQooZ2RiKSANDQox
ODMJCQkJCWZkc1tpXS5ldmVudHMgPSAwOw0NCihnZGIpIA0NCjE4NAkJCQkJ
ZmRzW2ldLnJldmVudHMgPSAwOw0NCihnZGIpIA0NCjE4NgkJCQkJaWYgKGZk
LT53YW50X3JlYWQpDQ0KKGdkYikgDQ0KMTg5CQkJCQlpZiAoZmQtPndhbnRf
d3JpdGUpDQ0KKGdkYikgDQ0KMTkwCQkJCQkJZmRzW2ldLmV2ZW50cyB8PSBQ
T0xMT1VUOw0NCihnZGIpIA0NCjE5MgkJCQkJYWxsX2V2ZW50cyB8PSBmZHNb
aV0uZXZlbnRzOw0NCihnZGIpIA0NCjE3OAkJCQlmb3IgKGZkID0gYi0+Zmls
ZXMsIGkgPSAwOyBmZDsgZmQgPSBmZC0+bmV4dCwgaSsrKQ0NCihnZGIpIA0N
CjE4MAkJCQkJYXNzZXJ0KGkgPCBuZmRzKTsNDQooZ2RiKSANDQoxODIJCQkJ
CWZkc1tpXS5mZCA9IGZkLT5mZDsNDQooZ2RiKSANDQoxODMJCQkJCWZkc1tp
XS5ldmVudHMgPSAwOw0NCihnZGIpIA0NCjE4NAkJCQkJZmRzW2ldLnJldmVu
dHMgPSAwOw0NCihnZGIpIA0NCjE4NgkJCQkJaWYgKGZkLT53YW50X3JlYWQp
DQ0KKGdkYikgDQ0KMTg3CQkJCQkJZmRzW2ldLmV2ZW50cyB8PSBQT0xMSU47
DQ0KKGdkYikgDQ0KMTg5CQkJCQlpZiAoZmQtPndhbnRfd3JpdGUpDQ0KKGdk
YikgDQ0KMTkyCQkJCQlhbGxfZXZlbnRzIHw9IGZkc1tpXS5ldmVudHM7DQ0K
KGdkYikgDQ0KMTc4CQkJCWZvciAoZmQgPSBiLT5maWxlcywgaSA9IDA7IGZk
OyBmZCA9IGZkLT5uZXh0LCBpKyspDQ0KKGdkYikgDQ0KMTk0CQkJCWFzc2Vy
dChpID09IG5mZHMpOw0NCihnZGIpIA0NCjE5NgkJCWlmIChhbGxfZXZlbnRz
KQ0NCihnZGIpIA0NCjE5NwkJCQlyZXMgPSBwb2xsKGZkcywgbmZkcywgSURM
RV9USU1FKTsNDQooZ2RiKSANDQoyMDAJICAgICAgICBpZiAoIXJlcyAmJiBu
ZmRzKSB7DQ0KKGdkYikgcHJpbnQgcmVzDQ0KJDI2ID0gMg0NCihnZGIpIG4N
DQoyMDUJICAgICAgICAgICAgICAgIGdjX21heWJlKCZiLT5zdXBlciwgMSk7
DQ0KKGdkYikgbg0NCjIwNwkJaWYgKHJlcyA8IDApDQ0KKGdkYikgDQ0KMjE3
CQlpZiAobmZkcyAmJiByZXMgPiAwKSB7DQ0KKGdkYikgDQ0KMjI0CQkJZm9y
KGZkID0gYi0+ZmlsZXMsIGk9MDsgZmQ7IGZkID0gZmQtPm5leHQsIGkrKykN
DQooZ2RiKSANDQoyMzEJCQkJaWYgKCFmZC0+c3VwZXIuYWxpdmUpDQ0KKGdk
YikgDQ0KMjM0CQkJCWlmIChmZHNbaV0ucmV2ZW50cyAmIFBPTExIVVApIHsN
DQooZ2RiKSANDQoyMzUJCQkJCWlmIChmZC0+d2FudF9yZWFkICYmIGZkLT5y
ZWFkKQ0NCihnZGIpIA0NCjIzNgkJCQkJCVJFQURfRkQoZmQpOw0NCihnZGIp
IG4NDQpSZWFkIEVPRiBvbiBmZCA3Lg0NCk1hcmtpbmcgZmQgNyBmb3IgY2xv
c2luZy4NDQoyNDMJCQkJCWNvbnRpbnVlOw0NCihnZGIpIG4NDQoyMjQJCQlm
b3IoZmQgPSBiLT5maWxlcywgaT0wOyBmZDsgZmQgPSBmZC0+bmV4dCwgaSsr
KQ0NCihnZGIpIA0NCjIzMQkJCQlpZiAoIWZkLT5zdXBlci5hbGl2ZSkNDQoo
Z2RiKSANDQoyMzQJCQkJaWYgKGZkc1tpXS5yZXZlbnRzICYgUE9MTEhVUCkg
ew0NCihnZGIpIA0NCjI0NQkJCQlpZiAoZmRzW2ldLnJldmVudHMgJiBQT0xM
UFJJKSB7DQ0KKGdkYikgDQ0KMjQ5CQkJCWlmIChmZHNbaV0ucmV2ZW50cyAm
IChQT0xMTlZBTCB8IFBPTExFUlIpKSB7DQ0KKGdkYikgDQ0KMjUzCQkJCWlm
IChmZHNbaV0ucmV2ZW50cyAmIFBPTExPVVQpDQ0KKGdkYikgDQ0KMjU0CQkJ
CQlpZiAoZmQtPndhbnRfd3JpdGUgJiYgZmQtPndyaXRlKQ0NCihnZGIpIA0N
CjI1NQkJCQkJCVdSSVRFX0ZEKGZkKTsNDQooZ2RiKSBzDQ0Kd3JpdGVfY2Fs
bGJhY2sgKGZkPTB4ODA2NDRiMCkgYXQgaW8uYzo0ODENDQo0ODEJCUNBU1Qo
aW9fZmQsIHNlbGYsIGZkKTsNDQooZ2RiKSBuDQ0KNDg0CQlzdHJ1Y3QgZmRf
d3JpdGUgdyA9DQ0KKGdkYikgDQ0KNDg3CQlhc3NlcnQoc2VsZi0+YnVmZmVy
KTsNDQooZ2RiKSANDQo0ODkJCXJlcyA9IEJVRl9GTFVTSChzZWxmLT5idWZm
ZXIsICZ3LnN1cGVyKTsNDQooZ2RiKSANDQo0OTAJCWlmIChyZXMgJiBTVF9D
TE9TRSkNDQooZ2RiKSANDQo0OTYJfSAgDQ0KKGdkYikgaSBsb2NhbHMNDQpz
ZWxmID0gKHN0cnVjdCBpb19mZCAqKSAweDgwNjQ0YjANDQpyZXMgPSAwDQ0K
dyA9IHtzdXBlciA9IHtzdXBlciA9IHtuZXh0ID0gMHgwLCBpc2EgPSAweDAs
IGFsbG9jX21ldGhvZCA9IDIgJ1wwMDInLCANDQogICAgICBtYXJrZWQgPSAw
ICdcMDAwJywgZGVhZCA9IDAgJ1wwMDAnfSwgd3JpdGUgPSAweDgwNTUyNWMg
PGRvX3dyaXRlPiwgDQ0KICAgIHdyaXRlc3RyID0gMH0sIGZkID0gNn0NDQoo
Z2RiKSBwaW4IIAgIIAhyaW50IAggCAggCAggCAggCAggCAggCAcHBwcHbg0N
CmlvX2l0ZXIgKGI9MHg4MDVmZTE4KSBhdCBpby5jOjI1Nw0NCjI1NwkJCQlp
ZiAoZmRzW2ldLnJldmVudHMgJiBQT0xMSU4pIHsNDQooZ2RiKSANDQoyMjQJ
CQlmb3IoZmQgPSBiLT5maWxlcywgaT0wOyBmZDsgZmQgPSBmZC0+bmV4dCwg
aSsrKQ0NCihnZGIpIA0NCjIzMQkJCQlpZiAoIWZkLT5zdXBlci5hbGl2ZSkN
DQooZ2RiKSANDQoyMzQJCQkJaWYgKGZkc1tpXS5yZXZlbnRzICYgUE9MTEhV
UCkgew0NCihnZGIpIA0NCjI0NQkJCQlpZiAoZmRzW2ldLnJldmVudHMgJiBQ
T0xMUFJJKSB7DQ0KKGdkYikgDQ0KMjQ5CQkJCWlmIChmZHNbaV0ucmV2ZW50
cyAmIChQT0xMTlZBTCB8IFBPTExFUlIpKSB7DQ0KKGdkYikgDQ0KMjUzCQkJ
CWlmIChmZHNbaV0ucmV2ZW50cyAmIFBPTExPVVQpDQ0KKGdkYikgDQ0KMjU3
CQkJCWlmIChmZHNbaV0ucmV2ZW50cyAmIFBPTExJTikgew0NCihnZGIpIA0N
CjIyNAkJCWZvcihmZCA9IGItPmZpbGVzLCBpPTA7IGZkOyBmZCA9IGZkLT5u
ZXh0LCBpKyspDQ0KKGdkYikgDQ0KMjYzCQkJYXNzZXJ0KGkgPT0gbmZkcyk7
DQ0KKGdkYikgDQ0KMjY2CQluY28gPSAwOw0NCihnZGIpIA0NCjI2OAkJCUZP
Ul9RVUVVRSgmYi0+Y2FsbG91dHMsIHN0cnVjdCBjYWxsb3V0ICosIG4pIHsN
DQooZ2RiKSANDQoyNzcJCWlmICghbmZkcyAmJiAhbmNvICYmICFiLT5yZWxv
YWRpbmcpIHsNDQooZ2RiKSANDQoyODEJCXJldHVybiAxOw0NCihnZGIpIA0N
CjB4ODA1NGVlMAkyODIJfQ0NCihnZGIpIA0NCm1haW5fbG9vcCAoYmFja2Vu
ZD0weDgwNWZlMTgpIGF0IG1haW4uYzoxNDkNDQoxNDkJCQlpZiAoZXhpdF9t
YWluX2xvb3ApDQ0KKGdkYikgDQ0KMTUxCQkJaWYgKHNpZ2h1cHJlY3ZkICYm
ICFyZXN0YXJ0aW5nKSB7DQ0KKGdkYikgDQ0KMTcyCQkJaWYgKHNpZ3Rlcm1y
ZWN2ZCkgew0NCihnZGIpIA0NCjE3NwkJfQ0NCihnZGIpIA0NCjE0OAkJd2hp
bGUgKGlvX2l0ZXIoJmJhY2tlbmQtPnN1cGVyKSkgew0NCihnZGIpIA0NCg0N
CkJyZWFrcG9pbnQgMSwgaW9faXRlciAoYj0weDgwNWZlMTgpIGF0IGlvLmM6
OTYNDQo5NgkJc3RydWN0IHBvbGxmZCAqZmRzID0gTlVMTDsNDQooZ2RiKSAN
DQo5NwkJaW50IHJlcyA9IDA7DQ0KKGdkYikgDQ0KOTgJCWludCB0aW1lb3V0
ID0gLTE7DQ0KKGdkYikgDQ0KOTkJCXRpbWVfdCBub3cgPSB0aW1lKE5VTEwp
Ow0NCihnZGIpIA0NCjExMAkJCWZvcihmZF9wID0gJmItPmZpbGVzOyAoZmQg
PSAqZmRfcCk7ICkgew0NCihnZGIpIA0NCjExMQkJCQlpZiAoZmQtPnN1cGVy
LmFsaXZlKSB7DQ0KKGdkYikgDQ0KMTEyCQkJCQlpZiAoZmQtPnByZXBhcmUp
IHsNDQooZ2RiKSANDQoxMTMJCQkJCQlQUkVQQVJFX0ZEKGZkKTsNDQooZ2Ri
KSBzDQ0KcHJlcGFyZSAoZmQ9MHg4MDY0YTkwKSBhdCBpby5jOjU2Mw0NCjU2
MwkJQ0FTVChpb19mZCwgc2VsZiwgZmQpOw0NCihnZGIpIHByaW50IGZkLT5m
DQ0KVGhlcmUgaXMgbm8gbWVtYmVyIG5hbWVkIGYuDQ0KKGdkYikgcHJpbnQg
ZmQtPmZkDQ0KJDI3ID0gNw0NCihnZGIpIG4NDQo1NjUJCWlmIChmZC0+c3Vw
ZXIuYWxpdmUgJiYgc2VsZi0+YnVmZmVyKQ0NCihnZGIpIA0NCjU2OAkJCWZk
LT53YW50X3dyaXRlID0gMDsNDQooZ2RiKSANDQo1NzAJCWlmIChmZC0+dG9f
YmVfY2xvc2VkKSB7DQ0KKGdkYikgDQ0KNTcxCQkJaWYgKGZkLT53YW50X3dy
aXRlKSB7DQ0KKGdkYikgDQ0KNTc4CQkJCWtpbGxfZmQoZmQpOw0NCihnZGIp
IHMNDQpraWxsX2ZkIChmZD0weDgwNjRhOTApIGF0IGlvLmM6MTM1MA0NCjEz
NTAJCWZkLT5zdXBlci5hbGl2ZSA9IDA7DQ0KKGdkYikgbg0NCjEzNTEJfQ0N
CihnZGIpIG4NDQpwcmVwYXJlIChmZD0weDgwNjRhOTApIGF0IGlvLmM6NTgy
DQ0KNTgyCX0NDQooZ2RiKSANDQppb19pdGVyIChiPTB4ODA1ZmUxOCkgYXQg
aW8uYzoxMTQNDQoxMTQJCQkJCX0gZWxzZSBpZiAoZmQtPnRvX2JlX2Nsb3Nl
ZCkgew0NCihnZGIpIG4NDQoxMTcJCQkJfQ0NCihnZGIpIA0NCjE0MgkJCQlm
ZF9wID0gJmZkLT5uZXh0Ow0NCihnZGIpIA0NCjExMAkJCWZvcihmZF9wID0g
JmItPmZpbGVzOyAoZmQgPSAqZmRfcCk7ICkgew0NCihnZGIpIA0NCjExMQkJ
CQlpZiAoZmQtPnN1cGVyLmFsaXZlKSB7DQ0KKGdkYikgDQ0KMTEyCQkJCQlp
ZiAoZmQtPnByZXBhcmUpIHsNDQooZ2RiKSANDQoxMTMJCQkJCQlQUkVQQVJF
X0ZEKGZkKTsNDQooZ2RiKSBzDQ0KcHJlcGFyZSAoZmQ9MHg4MDY0NGIwKSBh
dCBpby5jOjU2Mw0NCjU2MwkJQ0FTVChpb19mZCwgc2VsZiwgZmQpOw0NCihn
ZGIpIG4NDQo1NjUJCWlmIChmZC0+c3VwZXIuYWxpdmUgJiYgc2VsZi0+YnVm
ZmVyKQ0NCihnZGIpIHByaW50IGYtCCAIZC1mZA0NCiQyOCA9IDANDQooZ2Ri
KSAHB3ByaW50IGZkLWZkCAgbWzFAPwgbWzFQG1sxQD4NDQokMjkgPSA2DQ0K
KGdkYikgbg0NCjU2NgkJCWZkLT53YW50X3dyaXRlID0gQlVGX1BSRVBBUkUo
c2VsZi0+YnVmZmVyKTsNDQooZ2RiKSBuDQ0KNTcwCQlpZiAoZmQtPnRvX2Jl
X2Nsb3NlZCkgew0NCihnZGIpIA0NCjU4Mgl9DQ0KKGdkYikgDQ0KaW9faXRl
ciAoYj0weDgwNWZlMTgpIGF0IGlvLmM6MTE0DQ0KMTE0CQkJCQl9IGVsc2Ug
aWYgKGZkLT50b19iZV9jbG9zZWQpIHsNDQooZ2RiKSANDQoxMTcJCQkJfQ0N
CihnZGIpIA0NCjE0MgkJCQlmZF9wID0gJmZkLT5uZXh0Ow0NCihnZGIpIA0N
CjExMAkJCWZvcihmZF9wID0gJmItPmZpbGVzOyAoZmQgPSAqZmRfcCk7ICkg
ew0NCihnZGIpIA0NCjExMQkJCQlpZiAoZmQtPnN1cGVyLmFsaXZlKSB7DQ0K
KGdkYikgDQ0KMTEyCQkJCQlpZiAoZmQtPnByZXBhcmUpIHsNDQooZ2RiKSAN
DQoxMTcJCQkJfQ0NCihnZGIpIA0NCjE0MgkJCQlmZF9wID0gJmZkLT5uZXh0
Ow0NCihnZGIpIA0NCjExMAkJCWZvcihmZF9wID0gJmItPmZpbGVzOyAoZmQg
PSAqZmRfcCk7ICkgew0NCihnZGIpIA0NCjE0OAkJCUZPUl9RVUVVRSgmYi0+
Y2FsbG91dHMsIHN0cnVjdCBjYWxsb3V0ICosIG4pIHsNDQooZ2RiKSANDQox
NTgJCW5mZHMgPSAwOw0NCihnZGIpIA0NCjE2MQkJaWYgKCFiLT5yZWxvYWRp
bmcpIHsNDQooZ2RiKSANDQoxNjQJCQlmb3IoZmQgPSBiLT5maWxlczsgZmQ7
IGZkID0gZmQtPm5leHQpIHsNDQooZ2RiKSANDQoxNjUJCQkJbmZkcysrOw0N
CihnZGIpIA0NCjE2NAkJCWZvcihmZCA9IGItPmZpbGVzOyBmZDsgZmQgPSBm
ZC0+bmV4dCkgew0NCihnZGIpIA0NCjE2NQkJCQluZmRzKys7DQ0KKGdkYikg
DQ0KMTY0CQkJZm9yKGZkID0gYi0+ZmlsZXM7IGZkOyBmZCA9IGZkLT5uZXh0
KSB7DQ0KKGdkYikgDQ0KMTY1CQkJCW5mZHMrKzsNDQooZ2RiKSANDQoxNjQJ
CQlmb3IoZmQgPSBiLT5maWxlczsgZmQ7IGZkID0gZmQtPm5leHQpIHsNDQoo
Z2RiKSANDQoxNjkJCWlmIChuZmRzKSB7DQ0KKGdkYikgDQ0KMTcwCQkJaW50
IGFsbF9ldmVudHMgPSAwOw0NCihnZGIpIA0NCjE3MgkJCWZkcyA9IGFsbG9j
YShzaXplb2Yoc3RydWN0IHBvbGxmZCkgKiBuZmRzKTsNDQooZ2RiKSANDQox
NzgJCQkJZm9yIChmZCA9IGItPmZpbGVzLCBpID0gMDsgZmQ7IGZkID0gZmQt
Pm5leHQsIGkrKykNDQooZ2RiKSANDQoxODAJCQkJCWFzc2VydChpIDwgbmZk
cyk7DQ0KKGdkYikgDQ0KMTgyCQkJCQlmZHNbaV0uZmQgPSBmZC0+ZmQ7DQ0K
KGdkYikgDQ0KMTgzCQkJCQlmZHNbaV0uZXZlbnRzID0gMDsNDQooZ2RiKSAN
DQoxODQJCQkJCWZkc1tpXS5yZXZlbnRzID0gMDsNDQooZ2RiKSANDQoxODYJ
CQkJCWlmIChmZC0+d2FudF9yZWFkKQ0NCihnZGIpIA0NCjE4NwkJCQkJCWZk
c1tpXS5ldmVudHMgfD0gUE9MTElOOw0NCihnZGIpIA0NCjE4OQkJCQkJaWYg
KGZkLT53YW50X3dyaXRlKQ0NCihnZGIpIA0NCjE5MgkJCQkJYWxsX2V2ZW50
cyB8PSBmZHNbaV0uZXZlbnRzOw0NCihnZGIpIA0NCjE3OAkJCQlmb3IgKGZk
ID0gYi0+ZmlsZXMsIGkgPSAwOyBmZDsgZmQgPSBmZC0+bmV4dCwgaSsrKQ0N
CihnZGIpIA0NCjE4MAkJCQkJYXNzZXJ0KGkgPCBuZmRzKTsNDQooZ2RiKSAN
DQoxODIJCQkJCWZkc1tpXS5mZCA9IGZkLT5mZDsNDQooZ2RiKSANDQoxODMJ
CQkJCWZkc1tpXS5ldmVudHMgPSAwOw0NCihnZGIpIA0NCjE4NAkJCQkJZmRz
W2ldLnJldmVudHMgPSAwOw0NCihnZGIpIA0NCjE4NgkJCQkJaWYgKGZkLT53
YW50X3JlYWQpDQ0KKGdkYikgDQ0KMTg5CQkJCQlpZiAoZmQtPndhbnRfd3Jp
dGUpDQ0KKGdkYikgDQ0KMTkyCQkJCQlhbGxfZXZlbnRzIHw9IGZkc1tpXS5l
dmVudHM7DQ0KKGdkYikgDQ0KMTc4CQkJCWZvciAoZmQgPSBiLT5maWxlcywg
aSA9IDA7IGZkOyBmZCA9IGZkLT5uZXh0LCBpKyspDQ0KKGdkYikgDQ0KMTgw
CQkJCQlhc3NlcnQoaSA8IG5mZHMpOw0NCihnZGIpIA0NCjE4MgkJCQkJZmRz
W2ldLmZkID0gZmQtPmZkOw0NCihnZGIpIA0NCjE4MwkJCQkJZmRzW2ldLmV2
ZW50cyA9IDA7DQ0KKGdkYikgDQ0KMTg0CQkJCQlmZHNbaV0ucmV2ZW50cyA9
IDA7DQ0KKGdkYikgDQ0KMTg2CQkJCQlpZiAoZmQtPndhbnRfcmVhZCkNDQoo
Z2RiKSANDQoxODcJCQkJCQlmZHNbaV0uZXZlbnRzIHw9IFBPTExJTjsNDQoo
Z2RiKSANDQoxODkJCQkJCWlmIChmZC0+d2FudF93cml0ZSkNDQooZ2RiKSAN
DQoxOTIJCQkJCWFsbF9ldmVudHMgfD0gZmRzW2ldLmV2ZW50czsNDQooZ2Ri
KSANDQoxNzgJCQkJZm9yIChmZCA9IGItPmZpbGVzLCBpID0gMDsgZmQ7IGZk
ID0gZmQtPm5leHQsIGkrKykNDQooZ2RiKSANDQoxOTQJCQkJYXNzZXJ0KGkg
PT0gbmZkcyk7DQ0KKGdkYikgDQ0KMTk2CQkJaWYgKGFsbF9ldmVudHMpDQ0K
KGdkYikgDQ0KMTk3CQkJCXJlcyA9IHBvbGwoZmRzLCBuZmRzLCBJRExFX1RJ
TUUpOw0NCihnZGIpIHByaW50IHJlcw0NCiQzMCA9IDANDQooZ2RiKSBuDQ0K
MjAwCSAgICAgICAgaWYgKCFyZXMgJiYgbmZkcykgew0NCihnZGIpIHByaW50
IHJlcw0NCiQzMSA9IDENDQooZ2RiKSBuDQ0KMjA1CSAgICAgICAgICAgICAg
ICBnY19tYXliZSgmYi0+c3VwZXIsIDEpOw0NCihnZGIpIG4NDQoyMDcJCWlm
IChyZXMgPCAwKQ0NCihnZGIpIA0NCjIxNwkJaWYgKG5mZHMgJiYgcmVzID4g
MCkgew0NCihnZGIpIA0NCjIyNAkJCWZvcihmZCA9IGItPmZpbGVzLCBpPTA7
IGZkOyBmZCA9IGZkLT5uZXh0LCBpKyspDQ0KKGdkYikgbg0NCjIzMQkJCQlp
ZiAoIWZkLT5zdXBlci5hbGl2ZSkNDQooZ2RiKSBwcmludCBmZC0+ZmQNDQok
MzIgPSA3DQ0KKGdkYikgcHJpbnQgKmZkDQ0KJDMzID0ge3N1cGVyID0ge3N1
cGVyID0ge25leHQgPSAweDgwNjRiMzAsIGlzYSA9IDB4ODA1ZjQ2MCwgDQ0K
ICAgICAgYWxsb2NfbWV0aG9kID0gMCAnXDAwMCcsIG1hcmtlZCA9IDAgJ1ww
MDAnLCBkZWFkID0gMCAnXDAwMCd9LCANDQogICAgYWxpdmUgPSAwLCBraWxs
ID0gMHg4MDU1N2M0IDxkb19raWxsX2ZkPn0sIG5leHQgPSAweDgwNjQ0YjAs
IGZkID0gNywgDQ0KICBmbmFtZSA9IDB4MCwgdG9fYmVfY2xvc2VkID0gMSwg
Y2xvc2VfcmVhc29uID0gMSwgDQ0KICBjbG9zZV9jYWxsYmFjayA9IDB4ODA2
NGI2MCwgcHJlcGFyZSA9IDB4ODA1NTY1YyA8cHJlcGFyZT4sIHdhbnRfcmVh
ZCA9IDEsIA0NCiAgcmVhZCA9IDB4ODA1NTEzOCA8cmVhZF9jYWxsYmFjaz4s
IHdhbnRfd3JpdGUgPSAwLCB3cml0ZSA9IDAsIA0NCiAgcmVhbGx5X2Nsb3Nl
ID0gMH0NDQooZ2RiKSBuDQ0KMjMyCQkJCQljb250aW51ZTsNDQooZ2RiKSAN
DQoyMjQJCQlmb3IoZmQgPSBiLT5maWxlcywgaT0wOyBmZDsgZmQgPSBmZC0+
bmV4dCwgaSsrKQ0NCihnZGIpIG4NDQoyMzEJCQkJaWYgKCFmZC0+c3VwZXIu
YWxpdmUpDQ0KKGdkYikgDQ0KMjM0CQkJCWlmIChmZHNbaV0ucmV2ZW50cyAm
IFBPTExIVVApIHsNDQooZ2RiKSANDQoyNDUJCQkJaWYgKGZkc1tpXS5yZXZl
bnRzICYgUE9MTFBSSSkgew0NCihnZGIpIA0NCjI0OQkJCQlpZiAoZmRzW2ld
LnJldmVudHMgJiAoUE9MTE5WQUwgfCBQT0xMRVJSKSkgew0NCihnZGIpIA0N
CjI1MwkJCQlpZiAoZmRzW2ldLnJldmVudHMgJiBQT0xMT1VUKQ0NCihnZGIp
IA0NCjI1NwkJCQlpZiAoZmRzW2ldLnJldmVudHMgJiBQT0xMSU4pIHsNDQoo
Z2RiKSANDQoyMjQJCQlmb3IoZmQgPSBiLT5maWxlcywgaT0wOyBmZDsgZmQg
PSBmZC0+bmV4dCwgaSsrKQ0NCihnZGIpIA0NCjIzMQkJCQlpZiAoIWZkLT5z
dXBlci5hbGl2ZSkNDQooZ2RiKSANDQoyMzQJCQkJaWYgKGZkc1tpXS5yZXZl
bnRzICYgUE9MTEhVUCkgew0NCihnZGIpIA0NCjI0NQkJCQlpZiAoZmRzW2ld
LnJldmVudHMgJiBQT0xMUFJJKSB7DQ0KKGdkYikgDQ0KMjQ5CQkJCWlmIChm
ZHNbaV0ucmV2ZW50cyAmIChQT0xMTlZBTCB8IFBPTExFUlIpKSB7DQ0KKGdk
YikgDQ0KMjUzCQkJCWlmIChmZHNbaV0ucmV2ZW50cyAmIFBPTExPVVQpDQ0K
KGdkYikgDQ0KMjU3CQkJCWlmIChmZHNbaV0ucmV2ZW50cyAmIFBPTExJTikg
ew0NCihnZGIpIA0NCjIyNAkJCWZvcihmZCA9IGItPmZpbGVzLCBpPTA7IGZk
OyBmZCA9IGZkLT5uZXh0LCBpKyspDQ0KKGdkYikgDQ0KMjYzCQkJYXNzZXJ0
KGkgPT0gbmZkcyk7DQ0KKGdkYikgDQ0KMjY2CQluY28gPSAwOw0NCihnZGIp
IA0NCjI2OAkJCUZPUl9RVUVVRSgmYi0+Y2FsbG91dHMsIHN0cnVjdCBjYWxs
b3V0ICosIG4pIHsNDQooZ2RiKSANDQoyNzcJCWlmICghbmZkcyAmJiAhbmNv
ICYmICFiLT5yZWxvYWRpbmcpIHsNDQooZ2RiKSANDQoyODEJCXJldHVybiAx
Ow0NCihnZGIpIA0NCjB4ODA1NGVlMAkyODIJfQ0NCihnZGIpIA0NCm1haW5f
bG9vcCAoYmFja2VuZD0weDgwNWZlMTgpIGF0IG1haW4uYzoxNDkNDQoxNDkJ
CQlpZiAoZXhpdF9tYWluX2xvb3ApDQ0KKGdkYikgDQ0KMTUxCQkJaWYgKHNp
Z2h1cHJlY3ZkICYmICFyZXN0YXJ0aW5nKSB7DQ0KKGdkYikgDQ0KMTcyCQkJ
aWYgKHNpZ3Rlcm1yZWN2ZCkgew0NCihnZGIpIA0NCjE3NwkJfQ0NCihnZGIp
IA0NCjE0OAkJd2hpbGUgKGlvX2l0ZXIoJmJhY2tlbmQtPnN1cGVyKSkgew0N
CihnZGIpIA0NCg0NCkJyZWFrcG9pbnQgMSwgaW9faXRlciAoYj0weDgwNWZl
MTgpIGF0IGlvLmM6OTYNDQo5NgkJc3RydWN0IHBvbGxmZCAqZmRzID0gTlVM
TDsNDQooZ2RiKSBuDQ0KOTcJCWludCByZXMgPSAwOw0NCihnZGIpIA0NCjk4
CQlpbnQgdGltZW91dCA9IC0xOw0NCihnZGIpIA0NCjk5CQl0aW1lX3Qgbm93
ID0gdGltZShOVUxMKTsNDQooZ2RiKSANDQoxMTAJCQlmb3IoZmRfcCA9ICZi
LT5maWxlczsgKGZkID0gKmZkX3ApOyApIHsNDQooZ2RiKSANDQoxMTEJCQkJ
aWYgKGZkLT5zdXBlci5hbGl2ZSkgew0NCihnZGIpIA0NCjExOQkJCQkJaWYg
KGZkLT5mZCA8IDApDQ0KKGdkYikgcw0NCjEyNgkJCQkJCWlmIChmZC0+cmVh
bGx5X2Nsb3NlKQ0NCihnZGIpIHByaW50IGZkCCAICCAIKmZkDQ0KJDM0ID0g
e3N1cGVyID0ge3N1cGVyID0ge25leHQgPSAweDgwNjRiMzAsIGlzYSA9IDB4
ODA1ZjQ2MCwgDQ0KICAgICAgYWxsb2NfbWV0aG9kID0gMCAnXDAwMCcsIG1h
cmtlZCA9IDAgJ1wwMDAnLCBkZWFkID0gMCAnXDAwMCd9LCANDQogICAgYWxp
dmUgPSAwLCBraWxsID0gMHg4MDU1N2M0IDxkb19raWxsX2ZkPn0sIG5leHQg
PSAweDgwNjQ0YjAsIGZkID0gNywgDQ0KICBmbmFtZSA9IDB4MCwgdG9fYmVf
Y2xvc2VkID0gMSwgY2xvc2VfcmVhc29uID0gMSwgDQ0KICBjbG9zZV9jYWxs
YmFjayA9IDB4ODA2NGI2MCwgcHJlcGFyZSA9IDB4ODA1NTY1YyA8cHJlcGFy
ZT4sIHdhbnRfcmVhZCA9IDEsIA0NCiAgcmVhZCA9IDB4ODA1NTEzOCA8cmVh
ZF9jYWxsYmFjaz4sIHdhbnRfd3JpdGUgPSAwLCB3cml0ZSA9IDAsIA0NCiAg
cmVhbGx5X2Nsb3NlID0gMH0NDQooZ2RiKSBuDQ0KMTMxCQkJCQkJaWYgKGZk
LT5jbG9zZV9jYWxsYmFjayAmJiBmZC0+Y2xvc2VfcmVhc29uKQ0NCihnZGIp
IG4NDQoxMzIJCQkJCQkJKHZvaWQpIENMT1NFX0NBTExCQUNLKGZkLT5jbG9z
ZV9jYWxsYmFjaywgZmQtPmNsb3NlX3JlYXNvbik7DQ0KKGdkYikgcw0NCmRv
X2Fmc29ja2V0X3NyY19jbG9zZSAoYz0weDgwNjRiNjAsIGNsb3NlX3JlYXNv
bj0xKSBhdCBhZnNvY2tldC5jOjU4DQ0KNTgJCUNBU1QoYWZzb2NrZXRfc291
cmNlX2Nsb3NlX2NhbGxiYWNrLCBzZWxmLCBjKTsNDQooZ2RiKSBuDQ0KNjAJ
CXJldHVybiBDTE9TRV9DT05ORUNUSU9OKHNlbGYtPmNvbm5lY3Rpb24sIGNs
b3NlX3JlYXNvbik7DQ0KKGdkYikgbgggCHMNDQpkb19jbG9zZV9hZnVuaXhf
Y29ubmVjdGlvbiAoYz0weDgwNjRiZTgsIGNsb3NlX3JlYXNvbj0xKSBhdCBh
ZnVuaXguYzo3Nw0NCjc3CQlhc3NlcnQoYy0+b3duZXIpOw0NCihnZGIpIG4N
DQo3OAkJYy0+b3duZXItPm51bV9jb25uZWN0aW9ucy0tOw0NCihnZGIpIA0N
Cjc5CQlvYmplY3RfcXVldWVfcmVtb3ZlKGMtPnF1ZXVlX25vZGUpOw0NCihn
ZGIpIA0NCjgwCQlyZXR1cm4gU1RfT0sgfCBTVF9HT09OOw0NCihnZGIpIA0N
CjB4ODA1MTcxMAk4MQl9DQ0KKGdkYikgDQ0KMHg4MDUxM2EwIGluIGRvX2Fm
c29ja2V0X3NyY19jbG9zZSAoYz0weDgwNjRiNjAsIGNsb3NlX3JlYXNvbj0x
KQ0NCiAgICBhdCBhZnNvY2tldC5jOjYxDQ0KNjEJfQ0NCihnZGIpIA0NCmlv
X2l0ZXIgKGI9MHg4MDVmZTE4KSBhdCBpby5jOjEzNA0NCjEzNAkJCQkJCWRl
YnVnKCJDbG9zaW5nIGZkICVpLlxuIiwgZmQtPmZkKTsNDQooZ2RiKSANDQpD
bG9zaW5nIGZkIDcuDQ0KMTM2CQkJCQkJY2xvc2UoZmQtPmZkKTsNDQooZ2Ri
KSANDQoxMzkJCQkJCSpmZF9wID0gZmQtPm5leHQ7DQ0KKGdkYikgDQ0KMTQw
CQkJCQljb250aW51ZTsNDQooZ2RiKSANDQoxMTAJCQlmb3IoZmRfcCA9ICZi
LT5maWxlczsgKGZkID0gKmZkX3ApOyApIHsNDQooZ2RiKSANDQoxMTEJCQkJ
aWYgKGZkLT5zdXBlci5hbGl2ZSkgew0NCihnZGIpIA0NCjExMgkJCQkJaWYg
KGZkLT5wcmVwYXJlKSB7DQ0KKGdkYikgDQ0KMTEzCQkJCQkJUFJFUEFSRV9G
RChmZCk7DQ0KKGdkYikgDQ0KMTE0CQkJCQl9IGVsc2UgaWYgKGZkLT50b19i
ZV9jbG9zZWQpIHsNDQooZ2RiKSANDQoxMTcJCQkJfQ0NCihnZGIpIA0NCjE0
MgkJCQlmZF9wID0gJmZkLT5uZXh0Ow0NCihnZGIpIA0NCjExMAkJCWZvcihm
ZF9wID0gJmItPmZpbGVzOyAoZmQgPSAqZmRfcCk7ICkgew0NCihnZGIpIA0N
CjExMQkJCQlpZiAoZmQtPnN1cGVyLmFsaXZlKSB7DQ0KKGdkYikgDQ0KMTEy
CQkJCQlpZiAoZmQtPnByZXBhcmUpIHsNDQooZ2RiKSANDQoxMTcJCQkJfQ0N
CihnZGIpIA0NCjE0MgkJCQlmZF9wID0gJmZkLT5uZXh0Ow0NCihnZGIpIA0N
CjExMAkJCWZvcihmZF9wID0gJmItPmZpbGVzOyAoZmQgPSAqZmRfcCk7ICkg
ew0NCihnZGIpIA0NCjE0OAkJCUZPUl9RVUVVRSgmYi0+Y2FsbG91dHMsIHN0
cnVjdCBjYWxsb3V0ICosIG4pIHsNDQooZ2RiKSANDQoxNTgJCW5mZHMgPSAw
Ow0NCihnZGIpIA0NCjE2MQkJaWYgKCFiLT5yZWxvYWRpbmcpIHsNDQooZ2Ri
KSANDQoxNjQJCQlmb3IoZmQgPSBiLT5maWxlczsgZmQ7IGZkID0gZmQtPm5l
eHQpIHsNDQooZ2RiKSANDQoxNjUJCQkJbmZkcysrOw0NCihnZGIpIA0NCjE2
NAkJCWZvcihmZCA9IGItPmZpbGVzOyBmZDsgZmQgPSBmZC0+bmV4dCkgew0N
CihnZGIpIA0NCjE2NQkJCQluZmRzKys7DQ0KKGdkYikgDQ0KMTY0CQkJZm9y
KGZkID0gYi0+ZmlsZXM7IGZkOyBmZCA9IGZkLT5uZXh0KSB7DQ0KKGdkYikg
DQ0KMTY5CQlpZiAobmZkcykgew0NCihnZGIpIA0NCjE3MAkJCWludCBhbGxf
ZXZlbnRzID0gMDsNDQooZ2RiKSANDQoxNzIJCQlmZHMgPSBhbGxvY2Eoc2l6
ZW9mKHN0cnVjdCBwb2xsZmQpICogbmZkcyk7DQ0KKGdkYikgDQ0KMTc4CQkJ
CWZvciAoZmQgPSBiLT5maWxlcywgaSA9IDA7IGZkOyBmZCA9IGZkLT5uZXh0
LCBpKyspDQ0KKGdkYikgDQ0KMTgwCQkJCQlhc3NlcnQoaSA8IG5mZHMpOw0N
CihnZGIpIA0NCjE4MgkJCQkJZmRzW2ldLmZkID0gZmQtPmZkOw0NCihnZGIp
IA0NCjE4MwkJCQkJZmRzW2ldLmV2ZW50cyA9IDA7DQ0KKGdkYikgDQ0KMTg0
CQkJCQlmZHNbaV0ucmV2ZW50cyA9IDA7DQ0KKGdkYikgDQ0KMTg2CQkJCQlp
ZiAoZmQtPndhbnRfcmVhZCkNDQooZ2RiKSANDQoxODkJCQkJCWlmIChmZC0+
d2FudF93cml0ZSkNDQooZ2RiKSANDQoxOTIJCQkJCWFsbF9ldmVudHMgfD0g
ZmRzW2ldLmV2ZW50czsNDQooZ2RiKSANDQoxNzgJCQkJZm9yIChmZCA9IGIt
PmZpbGVzLCBpID0gMDsgZmQ7IGZkID0gZmQtPm5leHQsIGkrKykNDQooZ2Ri
KSANDQoxODAJCQkJCWFzc2VydChpIDwgbmZkcyk7DQ0KKGdkYikgDQ0KMTgy
CQkJCQlmZHNbaV0uZmQgPSBmZC0+ZmQ7DQ0KKGdkYikgDQ0KMTgzCQkJCQlm
ZHNbaV0uZXZlbnRzID0gMDsNDQooZ2RiKSANDQoxODQJCQkJCWZkc1tpXS5y
ZXZlbnRzID0gMDsNDQooZ2RiKSANDQoxODYJCQkJCWlmIChmZC0+d2FudF9y
ZWFkKQ0NCihnZGIpIA0NCjE4NwkJCQkJCWZkc1tpXS5ldmVudHMgfD0gUE9M
TElOOw0NCihnZGIpIA0NCjE4OQkJCQkJaWYgKGZkLT53YW50X3dyaXRlKQ0N
CihnZGIpIA0NCjE5MgkJCQkJYWxsX2V2ZW50cyB8PSBmZHNbaV0uZXZlbnRz
Ow0NCihnZGIpIA0NCjE3OAkJCQlmb3IgKGZkID0gYi0+ZmlsZXMsIGkgPSAw
OyBmZDsgZmQgPSBmZC0+bmV4dCwgaSsrKQ0NCihnZGIpIA0NCjE5NAkJCQlh
c3NlcnQoaSA9PSBuZmRzKTsNDQooZ2RiKSANDQoxOTYJCQlpZiAoYWxsX2V2
ZW50cykNDQooZ2RiKSANDQoxOTcJCQkJcmVzID0gcG9sbChmZHMsIG5mZHMs
IElETEVfVElNRSk7DQ0KKGdkYikgDQ0KMjAwCSAgICAgICAgaWYgKCFyZXMg
JiYgbmZkcykgew0NCihnZGIpIHByaW50IHJlcw0NCiQzNSA9IDANDQooZ2Ri
KSBuDQ0KMjAxCSAgICAgICAgICAgICAgICBnY19tYXliZSgmYi0+c3VwZXIs
IDApOw0NCihnZGIpIA0NCjIwMgkgICAgICAgICAgICAgICAgcmVzID0gcG9s
bChmZHMsIG5mZHMsIHRpbWVvdXQgPCAwID8gNjAwMDAgOiB0aW1lb3V0ICog
MTAwMCk7DQ0KKGdkYikgDQ0KMjAzCSAgICAgICAgfQ0NCihnZGIpIHByaW50
IHJlcw0NCiQzNiA9IDENDQooZ2RiKSBuDQ0KMjA3CQlpZiAocmVzIDwgMCkN
DQooZ2RiKSANDQoyMTcJCWlmIChuZmRzICYmIHJlcyA+IDApIHsNDQooZ2Ri
KSANDQoyMjQJCQlmb3IoZmQgPSBiLT5maWxlcywgaT0wOyBmZDsgZmQgPSBm
ZC0+bmV4dCwgaSsrKQ0NCihnZGIpIA0NCjIzMQkJCQlpZiAoIWZkLT5zdXBl
ci5hbGl2ZSkNDQooZ2RiKSANDQoyMzQJCQkJaWYgKGZkc1tpXS5yZXZlbnRz
ICYgUE9MTEhVUCkgew0NCihnZGIpIA0NCjI0NQkJCQlpZiAoZmRzW2ldLnJl
dmVudHMgJiBQT0xMUFJJKSB7DQ0KKGdkYikgDQ0KMjQ5CQkJCWlmIChmZHNb
aV0ucmV2ZW50cyAmIChQT0xMTlZBTCB8IFBPTExFUlIpKSB7DQ0KKGdkYikg
DQ0KMjUzCQkJCWlmIChmZHNbaV0ucmV2ZW50cyAmIFBPTExPVVQpDQ0KKGdk
YikgDQ0KMjU3CQkJCWlmIChmZHNbaV0ucmV2ZW50cyAmIFBPTExJTikgew0N
CihnZGIpIA0NCjIyNAkJCWZvcihmZCA9IGItPmZpbGVzLCBpPTA7IGZkOyBm
ZCA9IGZkLT5uZXh0LCBpKyspDQ0KKGdkYikgDQ0KMjMxCQkJCWlmICghZmQt
PnN1cGVyLmFsaXZlKQ0NCihnZGIpIA0NCjIzNAkJCQlpZiAoZmRzW2ldLnJl
dmVudHMgJiBQT0xMSFVQKSB7DQ0KKGdkYikgDQ0KMjQ1CQkJCWlmIChmZHNb
aV0ucmV2ZW50cyAmIFBPTExQUkkpIHsNDQooZ2RiKSANDQoyNDkJCQkJaWYg
KGZkc1tpXS5yZXZlbnRzICYgKFBPTExOVkFMIHwgUE9MTEVSUikpIHsNDQoo
Z2RiKSANDQoyNTMJCQkJaWYgKGZkc1tpXS5yZXZlbnRzICYgUE9MTE9VVCkN
DQooZ2RiKSANDQoyNTcJCQkJaWYgKGZkc1tpXS5yZXZlbnRzICYgUE9MTElO
KSB7DQ0KKGdkYikgDQ0KMjU4CQkJCQlpZiAoZmQtPndhbnRfcmVhZCAmJiBm
ZC0+cmVhZCkNDQooZ2RiKSANDQoyNTkJCQkJCQlSRUFEX0ZEKGZkKTsNDQoo
Z2RiKSBwcmludCBmZC0+ZmQNDQokMzcgPSA1DQ0KKGdkYikgcw0NCmxpc3Rl
bl9jYWxsYmFjayAoZmQ9MHg4MDY0M2IwKSBhdCBpby5jOjUwMA0NCjUwMAkJ
Q0FTVChsaXN0ZW5fZmQsIHNlbGYsIGZkKTsNDQooZ2RiKSBuDQ0KNTAyCQlz
dHJ1Y3Qgc29ja2FkZHIgKnBlZXIgPSAoc3RydWN0IHNvY2thZGRyICopICZz
b2NrYWRkcl9idWY7DQ0KKGdkYikgDQ0KNTAzCQlzb2NrbGVuX3QgYWRkcl9s
ZW4gPSBzaXplb2Yoc29ja2FkZHJfYnVmKTsNDQooZ2RiKSANDQo1MDcJCWNv
bm4gPSBhY2NlcHQoZmQtPmZkLA0NCihnZGIpIA0NCjUwOQkJaWYgKGNvbm4g
PCAwKQ0NCihnZGIpIA0NCjUxNAkJaWYgKGFkZHJfbGVuKSB7DQ0KKGdkYikg
DQ0KNTE1CQkJcmVzID0gRkRfTElTVEVOX0NBTExCQUNLKHNlbGYtPmNhbGxi
YWNrLCBjb25uLA0NCihnZGIpIHMNDQpzb2NrYWRkcjJhZGRyZXNzX2luZm8g
KGFkZHJfbGVuPTExLCBhZGRyPTB4YmZmZmY4NmMpIGF0IGlvLmM6OTg0DQ0K
OTg0CQlzd2l0Y2goYWRkci0+c2FfZmFtaWx5KQ0NCihnZGIpIG4NDQoxMDAz
CQkJc3RydWN0IHNvY2thZGRyX3VuICp1biA9IChzdHJ1Y3Qgc29ja2FkZHJf
dW4gKikgYWRkcjsNDQooZ2RiKSANDQoxMDA0CQkJcmV0dXJuICZtYWtlX3Vu
aXhfYWRkcmVzcyhjX2Zvcm1hdCgiJXoiLCB1bi0+c3VuX3BhdGgpKS0+c3Vw
ZXI7DQ0KKGdkYikgDQ0KMTAxMwl9DQ0KKGdkYikgDQ0KaW8uYzogUHJlcGFy
aW5nIGZkIDcgZm9yIHJlYWRpbmcNDQpsaXN0ZW5fY2FsbGJhY2sgKGZkPTB4
ODA2NDNiMCkgYXQgaW8uYzo1MTcNDQo1MTcJCQlpZiAoU1RfQ0xPU0VEUChy
ZXMpKQ0NCihnZGIpIA0NCjUyMwkJfQ0NCihnZGIpIA0NCjUyNwl9DQ0KKGdk
YikgDQ0KaW9faXRlciAoYj0weDgwNWZlMTgpIGF0IGlvLmM6MjI0DQ0KMjI0
CQkJZm9yKGZkID0gYi0+ZmlsZXMsIGk9MDsgZmQ7IGZkID0gZmQtPm5leHQs
IGkrKykNDQooZ2RiKSANDQoyNjMJCQlhc3NlcnQoaSA9PSBuZmRzKTsNDQoo
Z2RiKSANDQoyNjYJCW5jbyA9IDA7DQ0KKGdkYikgDQ0KMjY4CQkJRk9SX1FV
RVVFKCZiLT5jYWxsb3V0cywgc3RydWN0IGNhbGxvdXQgKiwgbikgew0NCihn
ZGIpIA0NCjI3NwkJaWYgKCFuZmRzICYmICFuY28gJiYgIWItPnJlbG9hZGlu
Zykgew0NCihnZGIpIA0NCjI4MQkJcmV0dXJuIDE7DQ0KKGdkYikgDQ0KMHg4
MDU0ZWUwCTI4Mgl9DQ0KKGdkYikgDQ0KbWFpbl9sb29wIChiYWNrZW5kPTB4
ODA1ZmUxOCkgYXQgbWFpbi5jOjE0OQ0NCjE0OQkJCWlmIChleGl0X21haW5f
bG9vcCkNDQooZ2RiKSANDQoxNTEJCQlpZiAoc2lnaHVwcmVjdmQgJiYgIXJl
c3RhcnRpbmcpIHsNDQooZ2RiKSANDQoxNzIJCQlpZiAoc2lndGVybXJlY3Zk
KSB7DQ0KKGdkYikgDQ0KMTc3CQl9DQ0KKGdkYikgDQ0KMTQ4CQl3aGlsZSAo
aW9faXRlcigmYmFja2VuZC0+c3VwZXIpKSB7DQ0KKGdkYikgDQ0KDQ0KQnJl
YWtwb2ludCAxLCBpb19pdGVyIChiPTB4ODA1ZmUxOCkgYXQgaW8uYzo5Ng0N
Cjk2CQlzdHJ1Y3QgcG9sbGZkICpmZHMgPSBOVUxMOw0NCihnZGIpIA0NCjk3
CQlpbnQgcmVzID0gMDsNDQooZ2RiKSANDQo5OAkJaW50IHRpbWVvdXQgPSAt
MTsNDQooZ2RiKSANDQo5OQkJdGltZV90IG5vdyA9IHRpbWUoTlVMTCk7DQ0K
KGdkYikgDQ0KMTEwCQkJZm9yKGZkX3AgPSAmYi0+ZmlsZXM7IChmZCA9ICpm
ZF9wKTsgKSB7DQ0KKGdkYikgDQ0KMTExCQkJCWlmIChmZC0+c3VwZXIuYWxp
dmUpIHsNDQooZ2RiKSANDQoxMTIJCQkJCWlmIChmZC0+cHJlcGFyZSkgew0N
CihnZGIpIA0NCjExMwkJCQkJCVBSRVBBUkVfRkQoZmQpOw0NCihnZGIpIHBy
aW50IGYtPmZkDQ0KTm8gc3ltYm9sICJmIiBpbiBjdXJyZW50IGNvbnRleHQu
DQ0KKGdkYikgcHJpbnQgZi0+ZmQNKGdkYikgG1tLB3ByaW50IGYtPmZkCAgI
CBtbMUBkDQ0KJDM4ID0gNw0NCihnZGIpIHMNDQpwcmVwYXJlIChmZD0weDgw
NjUwOTApIGF0IGlvLmM6NTYzDQ0KNTYzCQlDQVNUKGlvX2ZkLCBzZWxmLCBm
ZCk7DQ0KKGdkYikgbg0NCjU2NQkJaWYgKGZkLT5zdXBlci5hbGl2ZSAmJiBz
ZWxmLT5idWZmZXIpDQ0KKGdkYikgDQ0KNTY4CQkJZmQtPndhbnRfd3JpdGUg
PSAwOw0NCihnZGIpIA0NCjU3MAkJaWYgKGZkLT50b19iZV9jbG9zZWQpIHsN
DQooZ2RiKSANDQo1ODIJfQ0NCihnZGIpIA0NCmlvX2l0ZXIgKGI9MHg4MDVm
ZTE4KSBhdCBpby5jOjExNA0NCjExNAkJCQkJfSBlbHNlIGlmIChmZC0+dG9f
YmVfY2xvc2VkKSB7DQ0KKGdkYikgDQ0KMTE3CQkJCX0NDQooZ2RiKSANDQox
NDIJCQkJZmRfcCA9ICZmZC0+bmV4dDsNDQooZ2RiKSANDQoxMTAJCQlmb3Io
ZmRfcCA9ICZiLT5maWxlczsgKGZkID0gKmZkX3ApOyApIHsNDQooZ2RiKSAN
DQoxMTEJCQkJaWYgKGZkLT5zdXBlci5hbGl2ZSkgew0NCihnZGIpIA0NCjEx
MgkJCQkJaWYgKGZkLT5wcmVwYXJlKSB7DQ0KKGdkYikgDQ0KMTEzCQkJCQkJ
UFJFUEFSRV9GRChmZCk7DQ0KKGdkYikgDQ0KMTE0CQkJCQl9IGVsc2UgaWYg
KGZkLT50b19iZV9jbG9zZWQpIHsNDQooZ2RiKSANDQoxMTcJCQkJfQ0NCihn
ZGIpIA0NCjE0MgkJCQlmZF9wID0gJmZkLT5uZXh0Ow0NCihnZGIpIA0NCjEx
MAkJCWZvcihmZF9wID0gJmItPmZpbGVzOyAoZmQgPSAqZmRfcCk7ICkgew0N
CihnZGIpIA0NCjExMQkJCQlpZiAoZmQtPnN1cGVyLmFsaXZlKSB7DQ0KKGdk
YikgDQ0KMTEyCQkJCQlpZiAoZmQtPnByZXBhcmUpIHsNDQooZ2RiKSANDQox
MTcJCQkJfQ0NCihnZGIpIA0NCjE0MgkJCQlmZF9wID0gJmZkLT5uZXh0Ow0N
CihnZGIpIA0NCjExMAkJCWZvcihmZF9wID0gJmItPmZpbGVzOyAoZmQgPSAq
ZmRfcCk7ICkgew0NCihnZGIpIA0NCjE0OAkJCUZPUl9RVUVVRSgmYi0+Y2Fs
bG91dHMsIHN0cnVjdCBjYWxsb3V0ICosIG4pIHsNDQooZ2RiKSANDQoxNTgJ
CW5mZHMgPSAwOw0NCihnZGIpIA0NCjE2MQkJaWYgKCFiLT5yZWxvYWRpbmcp
IHsNDQooZ2RiKSANDQoxNjQJCQlmb3IoZmQgPSBiLT5maWxlczsgZmQ7IGZk
ID0gZmQtPm5leHQpIHsNDQooZ2RiKSANDQoxNjUJCQkJbmZkcysrOw0NCihn
ZGIpIA0NCjE2NAkJCWZvcihmZCA9IGItPmZpbGVzOyBmZDsgZmQgPSBmZC0+
bmV4dCkgew0NCihnZGIpIA0NCjE2NQkJCQluZmRzKys7DQ0KKGdkYikgDQ0K
MTY0CQkJZm9yKGZkID0gYi0+ZmlsZXM7IGZkOyBmZCA9IGZkLT5uZXh0KSB7
DQ0KKGdkYikgDQ0KMTY1CQkJCW5mZHMrKzsNDQooZ2RiKSANDQoxNjQJCQlm
b3IoZmQgPSBiLT5maWxlczsgZmQ7IGZkID0gZmQtPm5leHQpIHsNDQooZ2Ri
KSANDQoxNjkJCWlmIChuZmRzKSB7DQ0KKGdkYikgDQ0KMTcwCQkJaW50IGFs
bF9ldmVudHMgPSAwOw0NCihnZGIpIA0NCjE3MgkJCWZkcyA9IGFsbG9jYShz
aXplb2Yoc3RydWN0IHBvbGxmZCkgKiBuZmRzKTsNDQooZ2RiKSANDQoxNzgJ
CQkJZm9yIChmZCA9IGItPmZpbGVzLCBpID0gMDsgZmQ7IGZkID0gZmQtPm5l
eHQsIGkrKykNDQooZ2RiKSANDQoxODAJCQkJCWFzc2VydChpIDwgbmZkcyk7
DQ0KKGdkYikgDQ0KMTgyCQkJCQlmZHNbaV0uZmQgPSBmZC0+ZmQ7DQ0KKGdk
YikgDQ0KMTgzCQkJCQlmZHNbaV0uZXZlbnRzID0gMDsNDQooZ2RiKSANDQox
ODQJCQkJCWZkc1tpXS5yZXZlbnRzID0gMDsNDQooZ2RiKSANDQoxODYJCQkJ
CWlmIChmZC0+d2FudF9yZWFkKQ0NCihnZGIpIA0NCjE4NwkJCQkJCWZkc1tp
XS5ldmVudHMgfD0gUE9MTElOOw0NCihnZGIpIA0NCjE4OQkJCQkJaWYgKGZk
LT53YW50X3dyaXRlKQ0NCihnZGIpIA0NCjE5MgkJCQkJYWxsX2V2ZW50cyB8
PSBmZHNbaV0uZXZlbnRzOw0NCihnZGIpIA0NCjE3OAkJCQlmb3IgKGZkID0g
Yi0+ZmlsZXMsIGkgPSAwOyBmZDsgZmQgPSBmZC0+bmV4dCwgaSsrKQ0NCihn
ZGIpIA0NCjE4MAkJCQkJYXNzZXJ0KGkgPCBuZmRzKTsNDQooZ2RiKSANDQox
ODIJCQkJCWZkc1tpXS5mZCA9IGZkLT5mZDsNDQooZ2RiKSANDQoxODMJCQkJ
CWZkc1tpXS5ldmVudHMgPSAwOw0NCihnZGIpIA0NCjE4NAkJCQkJZmRzW2ld
LnJldmVudHMgPSAwOw0NCihnZGIpIA0NCjE4NgkJCQkJaWYgKGZkLT53YW50
X3JlYWQpDQ0KKGdkYikgDQ0KMTg5CQkJCQlpZiAoZmQtPndhbnRfd3JpdGUp
DQ0KKGdkYikgDQ0KMTkyCQkJCQlhbGxfZXZlbnRzIHw9IGZkc1tpXS5ldmVu
dHM7DQ0KKGdkYikgDQ0KMTc4CQkJCWZvciAoZmQgPSBiLT5maWxlcywgaSA9
IDA7IGZkOyBmZCA9IGZkLT5uZXh0LCBpKyspDQ0KKGdkYikgDQ0KMTgwCQkJ
CQlhc3NlcnQoaSA8IG5mZHMpOw0NCihnZGIpIA0NCjE4MgkJCQkJZmRzW2ld
LmZkID0gZmQtPmZkOw0NCihnZGIpIA0NCjE4MwkJCQkJZmRzW2ldLmV2ZW50
cyA9IDA7DQ0KKGdkYikgDQ0KMTg0CQkJCQlmZHNbaV0ucmV2ZW50cyA9IDA7
DQ0KKGdkYikgDQ0KMTg2CQkJCQlpZiAoZmQtPndhbnRfcmVhZCkNDQooZ2Ri
KSANDQoxODcJCQkJCQlmZHNbaV0uZXZlbnRzIHw9IFBPTExJTjsNDQooZ2Ri
KSANDQoxODkJCQkJCWlmIChmZC0+d2FudF93cml0ZSkNDQooZ2RiKSANDQox
OTIJCQkJCWFsbF9ldmVudHMgfD0gZmRzW2ldLmV2ZW50czsNDQooZ2RiKSAN
DQoxNzgJCQkJZm9yIChmZCA9IGItPmZpbGVzLCBpID0gMDsgZmQ7IGZkID0g
ZmQtPm5leHQsIGkrKykNDQooZ2RiKSANDQoxOTQJCQkJYXNzZXJ0KGkgPT0g
bmZkcyk7DQ0KKGdkYikgDQ0KMTk2CQkJaWYgKGFsbF9ldmVudHMpDQ0KKGdk
YikgDQ0KMTk3CQkJCXJlcyA9IHBvbGwoZmRzLCBuZmRzLCBJRExFX1RJTUUp
Ow0NCihnZGIpIHAIIAgNDQoyMDAJICAgICAgICBpZiAoIXJlcyAmJiBuZmRz
KSB7DQ0KKGdkYikgcHJpdCByZQggCAggCAggCAggCG50IHJlcw0NCiQzOSA9
IDENDQooZ2RiKSBwcmludCBmZHNbMF0NDQokNDAgPSB7ZmQgPSA3LCBldmVu
dHMgPSAxLCByZXZlbnRzID0gMTd9DQ0KKGdkYikgcHJpbnQgZmRzWzBdCAgb
WzFQXQgxXQgNDQokNDEgPSB7ZmQgPSA2LCBldmVudHMgPSAwLCByZXZlbnRz
ID0gMH0NDQooZ2RiKSBwcmludCBmZHNbMV0ICBtbMVBdCDJdCA0NCiQ0MiA9
IHtmZCA9IDUsIGV2ZW50cyA9IDEsIHJldmVudHMgPSAwfQ0NCihnZGIpIHBy
aW50IG5mZHMNDQokNDMgPSAzDQ0KKGdkYikgbg0NCjIwNQkgICAgICAgICAg
ICAgICAgZ2NfbWF5YmUoJmItPnN1cGVyLCAxKTsNDQooZ2RiKSBuDQ0KMjA3
CQlpZiAocmVzIDwgMCkNDQooZ2RiKSBuDQ0KMjE3CQlpZiAobmZkcyAmJiBy
ZXMgPiAwKSB7DQ0KKGdkYikgbg0NCjIyNAkJCWZvcihmZCA9IGItPmZpbGVz
LCBpPTA7IGZkOyBmZCA9IGZkLT5uZXh0LCBpKyspDQ0KKGdkYikgbg0NCjIz
MQkJCQlpZiAoIWZkLT5zdXBlci5hbGl2ZSkNDQooZ2RiKSBwcmludCBmZAgg
CAggCCpmZA0NCiQ0NCA9IHtzdXBlciA9IHtzdXBlciA9IHtuZXh0ID0gMHg4
MDY1MDYwLCBpc2EgPSAweDgwNWY0NjAsIA0NCiAgICAgIGFsbG9jX21ldGhv
ZCA9IDAgJ1wwMDAnLCBtYXJrZWQgPSAwICdcMDAwJywgZGVhZCA9IDAgJ1ww
MDAnfSwgDQ0KICAgIGFsaXZlID0gMSwga2lsbCA9IDB4ODA1NTdjNCA8ZG9f
a2lsbF9mZD59LCBuZXh0ID0gMHg4MDY0NGIwLCBmZCA9IDcsIA0NCiAgZm5h
bWUgPSAweDAsIHRvX2JlX2Nsb3NlZCA9IDAsIGNsb3NlX3JlYXNvbiA9IC0x
LCANDQogIGNsb3NlX2NhbGxiYWNrID0gMHg4MDY1MTM4LCBwcmVwYXJlID0g
MHg4MDU1NjVjIDxwcmVwYXJlPiwgd2FudF9yZWFkID0gMSwgDQ0KICByZWFk
ID0gMHg4MDU1MTM4IDxyZWFkX2NhbGxiYWNrPiwgd2FudF93cml0ZSA9IDAs
IHdyaXRlID0gMCwgDQ0KICByZWFsbHlfY2xvc2UgPSAwfQ0NCihnZGIpIG4N
DQoyMzQJCQkJaWYgKGZkc1tpXS5yZXZlbnRzICYgUE9MTEhVUCkgew0NCihn
ZGIpIA0NCjIzNQkJCQkJaWYgKGZkLT53YW50X3JlYWQgJiYgZmQtPnJlYWQp
DQ0KKGdkYikgDQ0KMjM2CQkJCQkJUkVBRF9GRChmZCk7DQ0KKGdkYikgcw0N
CnJlYWRfY2FsbGJhY2sgKGZkPTB4ODA2NTA5MCkgYXQgaW8uYzozOTkNDQoz
OTkJCUNBU1QoaW9fZmQsIHNlbGYsIGZkKTsNDQooZ2RiKSBuDQ0KNDAyCQlz
dHJ1Y3QgZmRfcmVhZCByID0NDQooZ2RiKSBuDQ0KNDA2CQlyZXMgPSBSRUFE
X0hBTkRMRVIoc2VsZi0+aGFuZGxlciwNDQooZ2RiKSBzDQ0KZG9fcmVhZF9s
aW5lIChoPTB4ODA2NTBkNCwgcmVhZD0weGJmZmZmOTQ4KSBhdCBzb3VyY2Vz
LmM6NzUNDQo3NQkJQ0FTVChsb2dfcmVhZGVyLCBjbG9zdXJlLCAqaCk7DQ0K
KGdkYikgbg0NCjgwCQlzaXplX3Qgc2FsZW4gPSBzaXplb2Yoc2FidWYpOw0N
CihnZGIpIA0NCjgyCQlpZiAoIWNsb3N1cmUtPmRncmFtKSB7DQ0KKGdkYikg
DQ0KODMJCQluID0gQV9SRUFEKHJlYWQsIE1BWF9MSU5FIC0gY2xvc3VyZS0+
cG9zLCBjbG9zdXJlLT5idWZmZXIgKyBjbG9zdXJlLT5wb3MpOw0NCihnZGIp
IA0NCjg0CQkJc2FsZW4gPSAwOw0NCihnZGIpIA0NCjg1CQl9DQ0KKGdkYikg
DQ0KODkJCXN3aXRjaChuKSB7DQ0KKGdkYikgDQ0KOTgJCWNsb3N1cmUtPnBv
cyArPSBuOw0NCihnZGIpIA0NCjEwMAkJZW9sID0gbWVtY2hyKGNsb3N1cmUt
PmJ1ZmZlciwgJ1wwJywgY2xvc3VyZS0+cG9zKTsNDQooZ2RiKSANDQoxMDEJ
CWlmIChlb2wgPT0gTlVMTCkNDQooZ2RiKSANDQoxMDMJCWlmICghZW9sICYm
IGNsb3N1cmUtPnBvcykgew0NCihnZGIpIA0NCjEwOQkJc3RhcnQgPSBjbG9z
dXJlLT5idWZmZXI7DQ0KKGdkYikgDQ0KMTEwCQl3aGlsZSAoZW9sKSB7DQ0K
KGdkYikgDQ0KMTE0CQkJVUlOVDggKmVuZCA9IGVvbDsNDQooZ2RiKSANDQox
MTYJCQl3aGlsZSAoKGVuZCA+IHN0YXJ0KSAmJiAoZW5kWy0xXSA9PSAnXHIn
IHx8IGVuZFstMV0gPT0gJ1xuJyB8fCBlbmRbLTFdID09IDApKQ0NCihnZGIp
IA0NCjExOQkJCWxlbmd0aCA9IGVuZCAtIHN0YXJ0Ow0NCihnZGIpIA0NCjEy
MQkJCWlmIChsZW5ndGgpDQ0KKGdkYikgDQ0KMTIyCQkJCWRvX2hhbmRsZV9s
aW5lKGNsb3N1cmUsIGxlbmd0aCwgc3RhcnQsIHNhbGVuID8gKGFic3RyYWN0
X2FkZHIgKikgJnNhYnVmIDogTlVMTCAsIHNhbGVuKTsNDQooZ2RiKSANDQox
MjQJCQlzdGFydCA9IGVuZCArIDE7DQ0KKGdkYikgDQ0KMTI2CQkJZW9sID0g
bWVtY2hyKHN0YXJ0LCAnXDAnLCAmY2xvc3VyZS0+YnVmZmVyW2Nsb3N1cmUt
PnBvc10gLSBzdGFydCk7DQ0KKGdkYikgDQ0KMTI3CQkJaWYgKGVvbCA9PSBO
VUxMKQ0NCihnZGIpIA0NCjEyOAkJCQllb2wgPSBtZW1jaHIoc3RhcnQsICdc
bicsICZjbG9zdXJlLT5idWZmZXJbY2xvc3VyZS0+cG9zXSAtIHN0YXJ0KTsN
DQooZ2RiKSANDQoxMzAJCX0NDQooZ2RiKSANDQoxMzEJCW1lbW1vdmUoY2xv
c3VyZS0+YnVmZmVyLCBzdGFydCwgJmNsb3N1cmUtPmJ1ZmZlcltjbG9zdXJl
LT5wb3NdIC0gc3RhcnQpOw0NCihnZGIpIA0NCjEzMgkJY2xvc3VyZS0+cG9z
ID0gJmNsb3N1cmUtPmJ1ZmZlcltjbG9zdXJlLT5wb3NdIC0gc3RhcnQ7DQ0K
KGdkYikgDQ0KMTMzCQlyZXR1cm4gU1RfT0sgfCBTVF9HT09OOw0NCihnZGIp
IA0NCjB4ODA0YTYzMAkxMzQJfQ0NCihnZGIpIA0NCnJlYWRfY2FsbGJhY2sg
KGZkPTB4ODA2NTA5MCkgYXQgaW8uYzo0MjUNDQo0MjUJCWlmIChyZXMgJiBT
VF9IT0xEKQ0NCihnZGIpIA0NCjQzMQkJaWYgKHJlcyAmIFNUX0RJRSkNDQoo
Z2RiKSANDQo0MzYJCWVsc2UgaWYgKHJlcyAmIFNUX0NMT1NFKQ0NCihnZGIp
IA0NCjQ0MAl9DQ0KKGdkYikgDQ0KaW9faXRlciAoYj0weDgwNWZlMTgpIGF0
IGlvLmM6MjQzDQ0KMjQzCQkJCQljb250aW51ZTsNDQooZ2RiKSANDQoyMjQJ
CQlmb3IoZmQgPSBiLT5maWxlcywgaT0wOyBmZDsgZmQgPSBmZC0+bmV4dCwg
aSsrKQ0NCihnZGIpIG4NDQoyMzEJCQkJaWYgKCFmZC0+c3VwZXIuYWxpdmUp
DQ0KKGdkYikgDQ0KMjM0CQkJCWlmIChmZHNbaV0ucmV2ZW50cyAmIFBPTExI
VVApIHsNDQooZ2RiKSANDQoyNDUJCQkJaWYgKGZkc1tpXS5yZXZlbnRzICYg
UE9MTFBSSSkgew0NCihnZGIpIA0NCjI0OQkJCQlpZiAoZmRzW2ldLnJldmVu
dHMgJiAoUE9MTE5WQUwgfCBQT0xMRVJSKSkgew0NCihnZGIpIA0NCjI1MwkJ
CQlpZiAoZmRzW2ldLnJldmVudHMgJiBQT0xMT1VUKQ0NCihnZGIpIA0NCjI1
NwkJCQlpZiAoZmRzW2ldLnJldmVudHMgJiBQT0xMSU4pIHsNDQooZ2RiKSAN
DQoyMjQJCQlmb3IoZmQgPSBiLT5maWxlcywgaT0wOyBmZDsgZmQgPSBmZC0+
bmV4dCwgaSsrKQ0NCihnZGIpIA0NCjIzMQkJCQlpZiAoIWZkLT5zdXBlci5h
bGl2ZSkNDQooZ2RiKSANDQoyMzQJCQkJaWYgKGZkc1tpXS5yZXZlbnRzICYg
UE9MTEhVUCkgew0NCihnZGIpIA0NCjI0NQkJCQlpZiAoZmRzW2ldLnJldmVu
dHMgJiBQT0xMUFJJKSB7DQ0KKGdkYikgDQ0KMjQ5CQkJCWlmIChmZHNbaV0u
cmV2ZW50cyAmIChQT0xMTlZBTCB8IFBPTExFUlIpKSB7DQ0KKGdkYikgDQ0K
MjUzCQkJCWlmIChmZHNbaV0ucmV2ZW50cyAmIFBPTExPVVQpDQ0KKGdkYikg
DQ0KMjU3CQkJCWlmIChmZHNbaV0ucmV2ZW50cyAmIFBPTExJTikgew0NCihn
ZGIpIA0NCjIyNAkJCWZvcihmZCA9IGItPmZpbGVzLCBpPTA7IGZkOyBmZCA9
IGZkLT5uZXh0LCBpKyspDQ0KKGdkYikgDQ0KMjYzCQkJYXNzZXJ0KGkgPT0g
bmZkcyk7DQ0KKGdkYikgDQ0KMjY2CQluY28gPSAwOw0NCihnZGIpIA0NCjI2
OAkJCUZPUl9RVUVVRSgmYi0+Y2FsbG91dHMsIHN0cnVjdCBjYWxsb3V0ICos
IG4pIHsNDQooZ2RiKSBzDQ0KMjc3CQlpZiAoIW5mZHMgJiYgIW5jbyAmJiAh
Yi0+cmVsb2FkaW5nKSB7DQ0KKGdkYikgDQ0KMjgxCQlyZXR1cm4gMTsNDQoo
Z2RiKSANDQoweDgwNTRlZTAJMjgyCX0NDQooZ2RiKSANDQptYWluX2xvb3Ag
KGJhY2tlbmQ9MHg4MDVmZTE4KSBhdCBtYWluLmM6MTQ5DQ0KMTQ5CQkJaWYg
KGV4aXRfbWFpbl9sb29wKQ0NCihnZGIpIG4NDQoxNTEJCQlpZiAoc2lnaHVw
cmVjdmQgJiYgIXJlc3RhcnRpbmcpIHsNDQooZ2RiKSANDQoxNzIJCQlpZiAo
c2lndGVybXJlY3ZkKSB7DQ0KKGdkYikgDQ0KMTc3CQl9DQ0KKGdkYikgDQ0K
MTQ4CQl3aGlsZSAoaW9faXRlcigmYmFja2VuZC0+c3VwZXIpKSB7DQ0KKGdk
YikgDQ0KDQ0KQnJlYWtwb2ludCAxLCBpb19pdGVyIChiPTB4ODA1ZmUxOCkg
YXQgaW8uYzo5Ng0NCjk2CQlzdHJ1Y3QgcG9sbGZkICpmZHMgPSBOVUxMOw0N
CihnZGIpIA0NCjk3CQlpbnQgcmVzID0gMDsNDQooZ2RiKSANDQo5OAkJaW50
IHRpbWVvdXQgPSAtMTsNDQooZ2RiKSANDQo5OQkJdGltZV90IG5vdyA9IHRp
bWUoTlVMTCk7DQ0KKGdkYikgDQ0KMTEwCQkJZm9yKGZkX3AgPSAmYi0+Zmls
ZXM7IChmZCA9ICpmZF9wKTsgKSB7DQ0KKGdkYikgDQ0KMTExCQkJCWlmIChm
ZC0+c3VwZXIuYWxpdmUpIHsNDQooZ2RiKSANDQoxMTIJCQkJCWlmIChmZC0+
cHJlcGFyZSkgew0NCihnZGIpIA0NCjExMwkJCQkJCVBSRVBBUkVfRkQoZmQp
Ow0NCihnZGIpIA0NCjExNAkJCQkJfSBlbHNlIGlmIChmZC0+dG9fYmVfY2xv
c2VkKSB7DQ0KKGdkYikgDQ0KMTE3CQkJCX0NDQooZ2RiKSANDQoxNDIJCQkJ
ZmRfcCA9ICZmZC0+bmV4dDsNDQooZ2RiKSANDQoxMTAJCQlmb3IoZmRfcCA9
ICZiLT5maWxlczsgKGZkID0gKmZkX3ApOyApIHsNDQooZ2RiKSANDQoxMTEJ
CQkJaWYgKGZkLT5zdXBlci5hbGl2ZSkgew0NCihnZGIpIA0NCjExMgkJCQkJ
aWYgKGZkLT5wcmVwYXJlKSB7DQ0KKGdkYikgDQ0KMTEzCQkJCQkJUFJFUEFS
RV9GRChmZCk7DQ0KKGdkYikgDQ0KMTE0CQkJCQl9IGVsc2UgaWYgKGZkLT50
b19iZV9jbG9zZWQpIHsNDQooZ2RiKSANDQoxMTcJCQkJfQ0NCihnZGIpIA0N
CjE0MgkJCQlmZF9wID0gJmZkLT5uZXh0Ow0NCihnZGIpIA0NCjExMAkJCWZv
cihmZF9wID0gJmItPmZpbGVzOyAoZmQgPSAqZmRfcCk7ICkgew0NCihnZGIp
IA0NCjExMQkJCQlpZiAoZmQtPnN1cGVyLmFsaXZlKSB7DQ0KKGdkYikgDQ0K
MTEyCQkJCQlpZiAoZmQtPnByZXBhcmUpIHsNDQooZ2RiKSANDQoxMTcJCQkJ
fQ0NCihnZGIpIA0NCjE0MgkJCQlmZF9wID0gJmZkLT5uZXh0Ow0NCihnZGIp
IA0NCjExMAkJCWZvcihmZF9wID0gJmItPmZpbGVzOyAoZmQgPSAqZmRfcCk7
ICkgew0NCihnZGIpIA0NCjE0OAkJCUZPUl9RVUVVRSgmYi0+Y2FsbG91dHMs
IHN0cnVjdCBjYWxsb3V0ICosIG4pIHsNDQooZ2RiKSANDQoxNTgJCW5mZHMg
PSAwOw0NCihnZGIpIA0NCjE2MQkJaWYgKCFiLT5yZWxvYWRpbmcpIHsNDQoo
Z2RiKSANDQoxNjQJCQlmb3IoZmQgPSBiLT5maWxlczsgZmQ7IGZkID0gZmQt
Pm5leHQpIHsNDQooZ2RiKSANDQoxNjUJCQkJbmZkcysrOw0NCihnZGIpIA0N
CjE2NAkJCWZvcihmZCA9IGItPmZpbGVzOyBmZDsgZmQgPSBmZC0+bmV4dCkg
ew0NCihnZGIpIA0NCjE2NQkJCQluZmRzKys7DQ0KKGdkYikgDQ0KMTY0CQkJ
Zm9yKGZkID0gYi0+ZmlsZXM7IGZkOyBmZCA9IGZkLT5uZXh0KSB7DQ0KKGdk
YikgDQ0KMTY1CQkJCW5mZHMrKzsNDQooZ2RiKSANDQoxNjQJCQlmb3IoZmQg
PSBiLT5maWxlczsgZmQ7IGZkID0gZmQtPm5leHQpIHsNDQooZ2RiKSANDQox
NjkJCWlmIChuZmRzKSB7DQ0KKGdkYikgDQ0KMTcwCQkJaW50IGFsbF9ldmVu
dHMgPSAwOw0NCihnZGIpIA0NCjE3MgkJCWZkcyA9IGFsbG9jYShzaXplb2Yo
c3RydWN0IHBvbGxmZCkgKiBuZmRzKTsNDQooZ2RiKSANDQoxNzgJCQkJZm9y
IChmZCA9IGItPmZpbGVzLCBpID0gMDsgZmQ7IGZkID0gZmQtPm5leHQsIGkr
KykNDQooZ2RiKSANDQoxODAJCQkJCWFzc2VydChpIDwgbmZkcyk7DQ0KKGdk
YikgDQ0KMTgyCQkJCQlmZHNbaV0uZmQgPSBmZC0+ZmQ7DQ0KKGdkYikgDQ0K
MTgzCQkJCQlmZHNbaV0uZXZlbnRzID0gMDsNDQooZ2RiKSANDQoxODQJCQkJ
CWZkc1tpXS5yZXZlbnRzID0gMDsNDQooZ2RiKSANDQoxODYJCQkJCWlmIChm
ZC0+d2FudF9yZWFkKQ0NCihnZGIpIA0NCjE4NwkJCQkJCWZkc1tpXS5ldmVu
dHMgfD0gUE9MTElOOw0NCihnZGIpIA0NCjE4OQkJCQkJaWYgKGZkLT53YW50
X3dyaXRlKQ0NCihnZGIpIA0NCjE5MgkJCQkJYWxsX2V2ZW50cyB8PSBmZHNb
aV0uZXZlbnRzOw0NCihnZGIpIA0NCjE3OAkJCQlmb3IgKGZkID0gYi0+Zmls
ZXMsIGkgPSAwOyBmZDsgZmQgPSBmZC0+bmV4dCwgaSsrKQ0NCihnZGIpIA0N
CjE4MAkJCQkJYXNzZXJ0KGkgPCBuZmRzKTsNDQooZ2RiKSANDQoxODIJCQkJ
CWZkc1tpXS5mZCA9IGZkLT5mZDsNDQooZ2RiKSANDQoxODMJCQkJCWZkc1tp
XS5ldmVudHMgPSAwOw0NCihnZGIpIA0NCjE4NAkJCQkJZmRzW2ldLnJldmVu
dHMgPSAwOw0NCihnZGIpIA0NCjE4NgkJCQkJaWYgKGZkLT53YW50X3JlYWQp
DQ0KKGdkYikgDQ0KMTg5CQkJCQlpZiAoZmQtPndhbnRfd3JpdGUpDQ0KKGdk
YikgDQ0KMTkwCQkJCQkJZmRzW2ldLmV2ZW50cyB8PSBQT0xMT1VUOw0NCihn
ZGIpIA0NCjE5MgkJCQkJYWxsX2V2ZW50cyB8PSBmZHNbaV0uZXZlbnRzOw0N
CihnZGIpIA0NCjE3OAkJCQlmb3IgKGZkID0gYi0+ZmlsZXMsIGkgPSAwOyBm
ZDsgZmQgPSBmZC0+bmV4dCwgaSsrKQ0NCihnZGIpIA0NCjE4MAkJCQkJYXNz
ZXJ0KGkgPCBuZmRzKTsNDQooZ2RiKSANDQoxODIJCQkJCWZkc1tpXS5mZCA9
IGZkLT5mZDsNDQooZ2RiKSANDQoxODMJCQkJCWZkc1tpXS5ldmVudHMgPSAw
Ow0NCihnZGIpIA0NCjE4NAkJCQkJZmRzW2ldLnJldmVudHMgPSAwOw0NCihn
ZGIpIA0NCjE4NgkJCQkJaWYgKGZkLT53YW50X3JlYWQpDQ0KKGdkYikgDQ0K
MTg3CQkJCQkJZmRzW2ldLmV2ZW50cyB8PSBQT0xMSU47DQ0KKGdkYikgDQ0K
MTg5CQkJCQlpZiAoZmQtPndhbnRfd3JpdGUpDQ0KKGdkYikgDQ0KMTkyCQkJ
CQlhbGxfZXZlbnRzIHw9IGZkc1tpXS5ldmVudHM7DQ0KKGdkYikgDQ0KMTc4
CQkJCWZvciAoZmQgPSBiLT5maWxlcywgaSA9IDA7IGZkOyBmZCA9IGZkLT5u
ZXh0LCBpKyspDQ0KKGdkYikgDQ0KMTk0CQkJCWFzc2VydChpID09IG5mZHMp
Ow0NCihnZGIpIA0NCjE5NgkJCWlmIChhbGxfZXZlbnRzKQ0NCihnZGIpIA0N
CjE5NwkJCQlyZXMgPSBwb2xsKGZkcywgbmZkcywgSURMRV9USU1FKTsNDQoo
Z2RiKSANDQoyMDAJICAgICAgICBpZiAoIXJlcyAmJiBuZmRzKSB7DQ0KKGdk
YikgcHJpbnQgcmVzDQ0KJDQ1ID0gMg0NCihnZGIpIHByaW50IGZkc1swXQ0N
CiQ0NiA9IHtmZCA9IDcsIGV2ZW50cyA9IDEsIHJldmVudHMgPSAxNn0NDQoo
Z2RiKSBwcmludCBmZHNbMF0ICBtbMVBdCDFdCA0NCiQ0NyA9IHtmZCA9IDYs
IGV2ZW50cyA9IDQsIHJldmVudHMgPSA0fQ0NCihnZGIpIHByaW50IGZkc1sx
XQgIG1sxUF0IMl0IDQ0KJDQ4ID0ge2ZkID0gNSwgZXZlbnRzID0gMSwgcmV2
ZW50cyA9IDB9DQ0KKGdkYikgbg0NCjIwNQkgICAgICAgICAgICAgICAgZ2Nf
bWF5YmUoJmItPnN1cGVyLCAxKTsNDQooZ2RiKSBuDQ0KMjA3CQlpZiAocmVz
IDwgMCkNDQooZ2RiKSBuDQ0KMjE3CQlpZiAobmZkcyAmJiByZXMgPiAwKSB7
DQ0KKGdkYikgbg0NCjIyNAkJCWZvcihmZCA9IGItPmZpbGVzLCBpPTA7IGZk
OyBmZCA9IGZkLT5uZXh0LCBpKyspDQ0KKGdkYikgbg0NCjIzMQkJCQlpZiAo
IWZkLT5zdXBlci5hbGl2ZSkNDQooZ2RiKSBwcmludCAqZmQNDQokNDkgPSB7
c3VwZXIgPSB7c3VwZXIgPSB7bmV4dCA9IDB4ODA2NTA2MCwgaXNhID0gMHg4
MDVmNDYwLCANDQogICAgICBhbGxvY19tZXRob2QgPSAwICdcMDAwJywgbWFy
a2VkID0gMCAnXDAwMCcsIGRlYWQgPSAwICdcMDAwJ30sIA0NCiAgICBhbGl2
ZSA9IDEsIGtpbGwgPSAweDgwNTU3YzQgPGRvX2tpbGxfZmQ+fSwgbmV4dCA9
IDB4ODA2NDRiMCwgZmQgPSA3LCANDQogIGZuYW1lID0gMHgwLCB0b19iZV9j
bG9zZWQgPSAwLCBjbG9zZV9yZWFzb24gPSAtMSwgDQ0KICBjbG9zZV9jYWxs
YmFjayA9IDB4ODA2NTEzOCwgcHJlcGFyZSA9IDB4ODA1NTY1YyA8cHJlcGFy
ZT4sIHdhbnRfcmVhZCA9IDEsIA0NCiAgcmVhZCA9IDB4ODA1NTEzOCA8cmVh
ZF9jYWxsYmFjaz4sIHdhbnRfd3JpdGUgPSAwLCB3cml0ZSA9IDAsIA0NCiAg
cmVhbGx5X2Nsb3NlID0gMH0NDQooZ2RiKSBuDQ0KMjM0CQkJCWlmIChmZHNb
aV0ucmV2ZW50cyAmIFBPTExIVVApIHsNDQooZ2RiKSANDQoyMzUJCQkJCWlm
IChmZC0+d2FudF9yZWFkICYmIGZkLT5yZWFkKQ0NCihnZGIpIA0NCjIzNgkJ
CQkJCVJFQURfRkQoZmQpOw0NCihnZGIpIHMNDQpyZWFkX2NhbGxiYWNrIChm
ZD0weDgwNjUwOTApIGF0IGlvLmM6Mzk5DQ0KMzk5CQlDQVNUKGlvX2ZkLCBz
ZWxmLCBmZCk7DQ0KKGdkYikgbg0NCjQwMgkJc3RydWN0IGZkX3JlYWQgciA9
DQ0KKGdkYikgDQ0KNDA2CQlyZXMgPSBSRUFEX0hBTkRMRVIoc2VsZi0+aGFu
ZGxlciwNDQooZ2RiKSANDQpSZWFkIEVPRiBvbiBmZCA3Lg0NCjQyNQkJaWYg
KHJlcyAmIFNUX0hPTEQpDQ0KKGdkYikgDQ0KNDMxCQlpZiAocmVzICYgU1Rf
RElFKQ0NCihnZGIpIA0NCjQzNgkJZWxzZSBpZiAocmVzICYgU1RfQ0xPU0Up
DQ0KKGdkYikgDQ0KNDM4CQkJY2xvc2VfZmQoZmQsIFNUX0ZBSUxVUkVQKHJl
cykgPyBDTE9TRV9QUk9UT0NPTF9GQUlMVVJFIDogQ0xPU0VfRU9GKTsNDQoo
Z2RiKSBzDQ0KY2xvc2VfZmQgKGZkPTB4ODA2NTA5MCwgcmVhc29uPTEpIGF0
IGlvLmM6MTM1Ng0NCjEzNTYJCWRlYnVnKCJNYXJraW5nIGZkICVpIGZvciBj
bG9zaW5nLlxuIiwgZmQtPmZkKTsNDQooZ2RiKSBuDQ0KTWFya2luZyBmZCA3
IGZvciBjbG9zaW5nLg0NCjEzNTgJCWZkLT5jbG9zZV9yZWFzb24gPSByZWFz
b247DQ0KKGdkYikgbg0NCjEzNTkJCWlmICghZmQtPnRvX2JlX2Nsb3NlZCkN
DQooZ2RiKSBwcmludCByZWFzb24NDQokNTAgPSAxDQ0KKGdkYikgaAggCG4N
DQoxMzYwCQkJZmQtPnRvX2JlX2Nsb3NlZCA9IDE7DQ0KKGdkYikgbg0NCjEz
NjEJfQ0NCihnZGIpIG4NDQpyZWFkX2NhbGxiYWNrIChmZD0weDgwNjUwOTAp
IGF0IGlvLmM6NDQwDQ0KNDQwCX0NDQooZ2RiKSBuDQ0KaW9faXRlciAoYj0w
eDgwNWZlMTgpIGF0IGlvLmM6MjQzDQ0KMjQzCQkJCQljb250aW51ZTsNDQoo
Z2RiKSBuDQ0KMjI0CQkJZm9yKGZkID0gYi0+ZmlsZXMsIGk9MDsgZmQ7IGZk
ID0gZmQtPm5leHQsIGkrKykNDQooZ2RiKSBuDQ0KMjMxCQkJCWlmICghZmQt
PnN1cGVyLmFsaXZlKQ0NCihnZGIpIA0NCjIzNAkJCQlpZiAoZmRzW2ldLnJl
dmVudHMgJiBQT0xMSFVQKSB7DQ0KKGdkYikgDQ0KMjQ1CQkJCWlmIChmZHNb
aV0ucmV2ZW50cyAmIFBPTExQUkkpIHsNDQooZ2RiKSANDQoyNDkJCQkJaWYg
KGZkc1tpXS5yZXZlbnRzICYgKFBPTExOVkFMIHwgUE9MTEVSUikpIHsNDQoo
Z2RiKSANDQoyNTMJCQkJaWYgKGZkc1tpXS5yZXZlbnRzICYgUE9MTE9VVCkN
DQooZ2RiKSANDQoyNTQJCQkJCWlmIChmZC0+d2FudF93cml0ZSAmJiBmZC0+
d3JpdGUpDQ0KKGdkYikgDQ0KMjU1CQkJCQkJV1JJVEVfRkQoZmQpOw0NCihn
ZGIpIHMNDQp3cml0ZV9jYWxsYmFjayAoZmQ9MHg4MDY0NGIwKSBhdCBpby5j
OjQ4MQ0NCjQ4MQkJQ0FTVChpb19mZCwgc2VsZiwgZmQpOw0NCihnZGIpIG4N
DQo0ODQJCXN0cnVjdCBmZF93cml0ZSB3ID0NDQooZ2RiKSANDQo0ODcJCWFz
c2VydChzZWxmLT5idWZmZXIpOw0NCihnZGIpIA0NCjQ4OQkJcmVzID0gQlVG
X0ZMVVNIKHNlbGYtPmJ1ZmZlciwgJncuc3VwZXIpOw0NCihnZGIpIA0NCjQ5
MAkJaWYgKHJlcyAmIFNUX0NMT1NFKQ0NCihnZGIpIA0NCjQ5Ngl9ICANDQoo
Z2RiKSANDQppb19pdGVyIChiPTB4ODA1ZmUxOCkgYXQgaW8uYzoyNTcNDQoy
NTcJCQkJaWYgKGZkc1tpXS5yZXZlbnRzICYgUE9MTElOKSB7DQ0KKGdkYikg
DQ0KMjI0CQkJZm9yKGZkID0gYi0+ZmlsZXMsIGk9MDsgZmQ7IGZkID0gZmQt
Pm5leHQsIGkrKykNDQooZ2RiKSANDQoyMzEJCQkJaWYgKCFmZC0+c3VwZXIu
YWxpdmUpDQ0KKGdkYikgDQ0KMjM0CQkJCWlmIChmZHNbaV0ucmV2ZW50cyAm
IFBPTExIVVApIHsNDQooZ2RiKSANDQoyNDUJCQkJaWYgKGZkc1tpXS5yZXZl
bnRzICYgUE9MTFBSSSkgew0NCihnZGIpIA0NCjI0OQkJCQlpZiAoZmRzW2ld
LnJldmVudHMgJiAoUE9MTE5WQUwgfCBQT0xMRVJSKSkgew0NCihnZGIpIA0N
CjI1MwkJCQlpZiAoZmRzW2ldLnJldmVudHMgJiBQT0xMT1VUKQ0NCihnZGIp
IA0NCjI1NwkJCQlpZiAoZmRzW2ldLnJldmVudHMgJiBQT0xMSU4pIHsNDQoo
Z2RiKSANDQoyMjQJCQlmb3IoZmQgPSBiLT5maWxlcywgaT0wOyBmZDsgZmQg
PSBmZC0+bmV4dCwgaSsrKQ0NCihnZGIpIA0NCjI2MwkJCWFzc2VydChpID09
IG5mZHMpOw0NCihnZGIpIA0NCjI2NgkJbmNvID0gMDsNDQooZ2RiKSANDQoy
NjgJCQlGT1JfUVVFVUUoJmItPmNhbGxvdXRzLCBzdHJ1Y3QgY2FsbG91dCAq
LCBuKSB7DQ0KKGdkYikgDQ0KMjc3CQlpZiAoIW5mZHMgJiYgIW5jbyAmJiAh
Yi0+cmVsb2FkaW5nKSB7DQ0KKGdkYikgDQ0KMjgxCQlyZXR1cm4gMTsNDQoo
Z2RiKSANDQoweDgwNTRlZTAJMjgyCX0NDQooZ2RiKSANDQptYWluX2xvb3Ag
KGJhY2tlbmQ9MHg4MDVmZTE4KSBhdCBtYWluLmM6MTQ5DQ0KMTQ5CQkJaWYg
KGV4aXRfbWFpbl9sb29wKQ0NCihnZGIpIA0NCjE1MQkJCWlmIChzaWdodXBy
ZWN2ZCAmJiAhcmVzdGFydGluZykgew0NCihnZGIpIA0NCjE3MgkJCWlmIChz
aWd0ZXJtcmVjdmQpIHsNDQooZ2RiKSANDQoxNzcJCX0NDQooZ2RiKSANDQox
NDgJCXdoaWxlIChpb19pdGVyKCZiYWNrZW5kLT5zdXBlcikpIHsNDQooZ2Ri
KSANDQoNDQpCcmVha3BvaW50IDEsIGlvX2l0ZXIgKGI9MHg4MDVmZTE4KSBh
dCBpby5jOjk2DQ0KOTYJCXN0cnVjdCBwb2xsZmQgKmZkcyA9IE5VTEw7DQ0K
KGdkYikgDQ0KOTcJCWludCByZXMgPSAwOw0NCihnZGIpIA0NCjk4CQlpbnQg
dGltZW91dCA9IC0xOw0NCihnZGIpIA0NCjk5CQl0aW1lX3Qgbm93ID0gdGlt
ZShOVUxMKTsNDQooZ2RiKSANDQoxMTAJCQlmb3IoZmRfcCA9ICZiLT5maWxl
czsgKGZkID0gKmZkX3ApOyApIHsNDQooZ2RiKSANDQoxMTEJCQkJaWYgKGZk
LT5zdXBlci5hbGl2ZSkgew0NCihnZGIpIA0NCjExMgkJCQkJaWYgKGZkLT5w
cmVwYXJlKSB7DQ0KKGdkYikgDQ0KMTEzCQkJCQkJUFJFUEFSRV9GRChmZCk7
DQ0KKGdkYikgcHJpbnQgZmQtPmZkDQ0KJDUxID0gNw0NCihnZGIpIG4IIAhz
DQ0KcHJlcGFyZSAoZmQ9MHg4MDY1MDkwKSBhdCBpby5jOjU2Mw0NCjU2MwkJ
Q0FTVChpb19mZCwgc2VsZiwgZmQpOw0NCihnZGIpIG4NDQo1NjUJCWlmIChm
ZC0+c3VwZXIuYWxpdmUgJiYgc2VsZi0+YnVmZmVyKQ0NCihnZGIpIA0NCjU2
OAkJCWZkLT53YW50X3dyaXRlID0gMDsNDQooZ2RiKSANDQo1NzAJCWlmIChm
ZC0+dG9fYmVfY2xvc2VkKSB7DQ0KKGdkYikgDQ0KNTcxCQkJaWYgKGZkLT53
YW50X3dyaXRlKSB7DQ0KKGdkYikgDQ0KNTc4CQkJCWtpbGxfZmQoZmQpOw0N
CihnZGIpIHMgDQ0Ka2lsbF9mZCAoZmQ9MHg4MDY1MDkwKSBhdCBpby5jOjEz
NTANDQoxMzUwCQlmZC0+c3VwZXIuYWxpdmUgPSAwOw0NCihnZGIpIG4NDQox
MzUxCX0NDQooZ2RiKSANDQpwcmVwYXJlIChmZD0weDgwNjUwOTApIGF0IGlv
LmM6NTgyDQ0KNTgyCX0NDQooZ2RiKSANDQppb19pdGVyIChiPTB4ODA1ZmUx
OCkgYXQgaW8uYzoxMTQNDQoxMTQJCQkJCX0gZWxzZSBpZiAoZmQtPnRvX2Jl
X2Nsb3NlZCkgew0NCihnZGIpIA0NCjExNwkJCQl9DQ0KKGdkYikgDQ0KMTQy
CQkJCWZkX3AgPSAmZmQtPm5leHQ7DQ0KKGdkYikgDQ0KMTEwCQkJZm9yKGZk
X3AgPSAmYi0+ZmlsZXM7IChmZCA9ICpmZF9wKTsgKSB7DQ0KKGdkYikgDQ0K
MTExCQkJCWlmIChmZC0+c3VwZXIuYWxpdmUpIHsNDQooZ2RiKSANDQoxMTIJ
CQkJCWlmIChmZC0+cHJlcGFyZSkgew0NCihnZGIpIA0NCjExMwkJCQkJCVBS
RVBBUkVfRkQoZmQpOw0NCihnZGIpIA0NCjExNAkJCQkJfSBlbHNlIGlmIChm
ZC0+dG9fYmVfY2xvc2VkKSB7DQ0KKGdkYikgDQ0KMTE3CQkJCX0NDQooZ2Ri
KSANDQoxNDIJCQkJZmRfcCA9ICZmZC0+bmV4dDsNDQooZ2RiKSANDQoxMTAJ
CQlmb3IoZmRfcCA9ICZiLT5maWxlczsgKGZkID0gKmZkX3ApOyApIHsNDQoo
Z2RiKSANDQoxMTEJCQkJaWYgKGZkLT5zdXBlci5hbGl2ZSkgew0NCihnZGIp
IA0NCjExMgkJCQkJaWYgKGZkLT5wcmVwYXJlKSB7DQ0KKGdkYikgDQ0KMTE3
CQkJCX0NDQooZ2RiKSANDQoxNDIJCQkJZmRfcCA9ICZmZC0+bmV4dDsNDQoo
Z2RiKSANDQoxMTAJCQlmb3IoZmRfcCA9ICZiLT5maWxlczsgKGZkID0gKmZk
X3ApOyApIHsNDQooZ2RiKSANDQoxNDgJCQlGT1JfUVVFVUUoJmItPmNhbGxv
dXRzLCBzdHJ1Y3QgY2FsbG91dCAqLCBuKSB7DQ0KKGdkYikgDQ0KMTU4CQlu
ZmRzID0gMDsNDQooZ2RiKSANDQoxNjEJCWlmICghYi0+cmVsb2FkaW5nKSB7
DQ0KKGdkYikgDQ0KMTY0CQkJZm9yKGZkID0gYi0+ZmlsZXM7IGZkOyBmZCA9
IGZkLT5uZXh0KSB7DQ0KKGdkYikgDQ0KMTY1CQkJCW5mZHMrKzsNDQooZ2Ri
KSANDQoxNjQJCQlmb3IoZmQgPSBiLT5maWxlczsgZmQ7IGZkID0gZmQtPm5l
eHQpIHsNDQooZ2RiKSANDQoxNjUJCQkJbmZkcysrOw0NCihnZGIpIA0NCjE2
NAkJCWZvcihmZCA9IGItPmZpbGVzOyBmZDsgZmQgPSBmZC0+bmV4dCkgew0N
CihnZGIpIA0NCjE2NQkJCQluZmRzKys7DQ0KKGdkYikgDQ0KMTY0CQkJZm9y
KGZkID0gYi0+ZmlsZXM7IGZkOyBmZCA9IGZkLT5uZXh0KSB7DQ0KKGdkYikg
DQ0KMTY5CQlpZiAobmZkcykgew0NCihnZGIpIA0NCjE3MAkJCWludCBhbGxf
ZXZlbnRzID0gMDsNDQooZ2RiKSANDQoxNzIJCQlmZHMgPSBhbGxvY2Eoc2l6
ZW9mKHN0cnVjdCBwb2xsZmQpICogbmZkcyk7DQ0KKGdkYikgDQ0KMTc4CQkJ
CWZvciAoZmQgPSBiLT5maWxlcywgaSA9IDA7IGZkOyBmZCA9IGZkLT5uZXh0
LCBpKyspDQ0KKGdkYikgDQ0KMTgwCQkJCQlhc3NlcnQoaSA8IG5mZHMpOw0N
CihnZGIpIA0NCjE4MgkJCQkJZmRzW2ldLmZkID0gZmQtPmZkOw0NCihnZGIp
IA0NCjE4MwkJCQkJZmRzW2ldLmV2ZW50cyA9IDA7DQ0KKGdkYikgDQ0KMTg0
CQkJCQlmZHNbaV0ucmV2ZW50cyA9IDA7DQ0KKGdkYikgDQ0KMTg2CQkJCQlp
ZiAoZmQtPndhbnRfcmVhZCkNDQooZ2RiKSANDQoxODcJCQkJCQlmZHNbaV0u
ZXZlbnRzIHw9IFBPTExJTjsNDQooZ2RiKSANDQoxODkJCQkJCWlmIChmZC0+
d2FudF93cml0ZSkNDQooZ2RiKSANDQoxOTIJCQkJCWFsbF9ldmVudHMgfD0g
ZmRzW2ldLmV2ZW50czsNDQooZ2RiKSANDQoxNzgJCQkJZm9yIChmZCA9IGIt
PmZpbGVzLCBpID0gMDsgZmQ7IGZkID0gZmQtPm5leHQsIGkrKykNDQooZ2Ri
KSANDQoxODAJCQkJCWFzc2VydChpIDwgbmZkcyk7DQ0KKGdkYikgDQ0KMTgy
CQkJCQlmZHNbaV0uZmQgPSBmZC0+ZmQ7DQ0KKGdkYikgDQ0KMTgzCQkJCQlm
ZHNbaV0uZXZlbnRzID0gMDsNDQooZ2RiKSANDQoxODQJCQkJCWZkc1tpXS5y
ZXZlbnRzID0gMDsNDQooZ2RiKSANDQoxODYJCQkJCWlmIChmZC0+d2FudF9y
ZWFkKQ0NCihnZGIpIA0NCjE4OQkJCQkJaWYgKGZkLT53YW50X3dyaXRlKQ0N
CihnZGIpIA0NCjE5MgkJCQkJYWxsX2V2ZW50cyB8PSBmZHNbaV0uZXZlbnRz
Ow0NCihnZGIpIA0NCjE3OAkJCQlmb3IgKGZkID0gYi0+ZmlsZXMsIGkgPSAw
OyBmZDsgZmQgPSBmZC0+bmV4dCwgaSsrKQ0NCihnZGIpIA0NCjE4MAkJCQkJ
YXNzZXJ0KGkgPCBuZmRzKTsNDQooZ2RiKSANDQoxODIJCQkJCWZkc1tpXS5m
ZCA9IGZkLT5mZDsNDQooZ2RiKSANDQoxODMJCQkJCWZkc1tpXS5ldmVudHMg
PSAwOw0NCihnZGIpIA0NCjE4NAkJCQkJZmRzW2ldLnJldmVudHMgPSAwOw0N
CihnZGIpIA0NCjE4NgkJCQkJaWYgKGZkLT53YW50X3JlYWQpDQ0KKGdkYikg
DQ0KMTg3CQkJCQkJZmRzW2ldLmV2ZW50cyB8PSBQT0xMSU47DQ0KKGdkYikg
DQ0KMTg5CQkJCQlpZiAoZmQtPndhbnRfd3JpdGUpDQ0KKGdkYikgDQ0KMTky
CQkJCQlhbGxfZXZlbnRzIHw9IGZkc1tpXS5ldmVudHM7DQ0KKGdkYikgDQ0K
MTc4CQkJCWZvciAoZmQgPSBiLT5maWxlcywgaSA9IDA7IGZkOyBmZCA9IGZk
LT5uZXh0LCBpKyspDQ0KKGdkYikgDQ0KMTk0CQkJCWFzc2VydChpID09IG5m
ZHMpOw0NCihnZGIpIA0NCjE5NgkJCWlmIChhbGxfZXZlbnRzKQ0NCihnZGIp
IA0NCjE5NwkJCQlyZXMgPSBwb2xsKGZkcywgbmZkcywgSURMRV9USU1FKTsN
DQooZ2RiKSANDQoyMDAJICAgICAgICBpZiAoIXJlcyAmJiBuZmRzKSB7DQ0K
KGdkYikgcHJpbnQgcmVzDQ0KJDUyID0gMQ0NCihnZGIpIHByaW50IGZkc1sw
XQ0NCiQ1MyA9IHtmZCA9IDcsIGV2ZW50cyA9IDEsIHJldmVudHMgPSAxNn0N
DQooZ2RiKSBwcmludCBmZHNbMF1cCCAICAgbWzFQXQgxXQgNDQokNTQgPSB7
ZmQgPSA2LCBldmVudHMgPSAwLCByZXZlbnRzID0gMH0NDQooZ2RiKSBwcmlu
dCBmZHNbMV0ICBtbMVBdCDJdCA0NCiQ1NSA9IHtmZCA9IDUsIGV2ZW50cyA9
IDEsIHJldmVudHMgPSAwfQ0NCihnZGIpIG4NDQoyMDUJICAgICAgICAgICAg
ICAgIGdjX21heWJlKCZiLT5zdXBlciwgMSk7DQ0KKGdkYikgDQ0KMjA3CQlp
ZiAocmVzIDwgMCkNDQooZ2RiKSANDQoyMTcJCWlmIChuZmRzICYmIHJlcyA+
IDApIHsNDQooZ2RiKSANDQoyMjQJCQlmb3IoZmQgPSBiLT5maWxlcywgaT0w
OyBmZDsgZmQgPSBmZC0+bmV4dCwgaSsrKQ0NCihnZGIpIA0NCjIzMQkJCQlp
ZiAoIWZkLT5zdXBlci5hbGl2ZSkNDQooZ2RiKSANDQoyMzIJCQkJCWNvbnRp
bnVlOw0NCihnZGIpIA0NCjIyNAkJCWZvcihmZCA9IGItPmZpbGVzLCBpPTA7
IGZkOyBmZCA9IGZkLT5uZXh0LCBpKyspDQ0KKGdkYikgDQ0KMjMxCQkJCWlm
ICghZmQtPnN1cGVyLmFsaXZlKQ0NCihnZGIpIA0NCjIzNAkJCQlpZiAoZmRz
W2ldLnJldmVudHMgJiBQT0xMSFVQKSB7DQ0KKGdkYikgDQ0KMjQ1CQkJCWlm
IChmZHNbaV0ucmV2ZW50cyAmIFBPTExQUkkpIHsNDQooZ2RiKSANDQoyNDkJ
CQkJaWYgKGZkc1tpXS5yZXZlbnRzICYgKFBPTExOVkFMIHwgUE9MTEVSUikp
IHsNDQooZ2RiKSANDQoyNTMJCQkJaWYgKGZkc1tpXS5yZXZlbnRzICYgUE9M
TE9VVCkNDQooZ2RiKSANDQoyNTcJCQkJaWYgKGZkc1tpXS5yZXZlbnRzICYg
UE9MTElOKSB7DQ0KKGdkYikgDQ0KMjI0CQkJZm9yKGZkID0gYi0+ZmlsZXMs
IGk9MDsgZmQ7IGZkID0gZmQtPm5leHQsIGkrKykNDQooZ2RiKSANDQoyMzEJ
CQkJaWYgKCFmZC0+c3VwZXIuYWxpdmUpDQ0KKGdkYikgDQ0KMjM0CQkJCWlm
IChmZHNbaV0ucmV2ZW50cyAmIFBPTExIVVApIHsNDQooZ2RiKSANDQoyNDUJ
CQkJaWYgKGZkc1tpXS5yZXZlbnRzICYgUE9MTFBSSSkgew0NCihnZGIpIA0N
CjI0OQkJCQlpZiAoZmRzW2ldLnJldmVudHMgJiAoUE9MTE5WQUwgfCBQT0xM
RVJSKSkgew0NCihnZGIpIA0NCjI1MwkJCQlpZiAoZmRzW2ldLnJldmVudHMg
JiBQT0xMT1VUKQ0NCihnZGIpIA0NCjI1NwkJCQlpZiAoZmRzW2ldLnJldmVu
dHMgJiBQT0xMSU4pIHsNDQooZ2RiKSANDQoyMjQJCQlmb3IoZmQgPSBiLT5m
aWxlcywgaT0wOyBmZDsgZmQgPSBmZC0+bmV4dCwgaSsrKQ0NCihnZGIpIA0N
CjI2MwkJCWFzc2VydChpID09IG5mZHMpOw0NCihnZGIpIA0NCjI2NgkJbmNv
ID0gMDsNDQooZ2RiKSANDQoyNjgJCQlGT1JfUVVFVUUoJmItPmNhbGxvdXRz
LCBzdHJ1Y3QgY2FsbG91dCAqLCBuKSB7DQ0KKGdkYikgDQ0KMjc3CQlpZiAo
IW5mZHMgJiYgIW5jbyAmJiAhYi0+cmVsb2FkaW5nKSB7DQ0KKGdkYikgDQ0K
MjgxCQlyZXR1cm4gMTsNDQooZ2RiKSANDQoweDgwNTRlZTAJMjgyCX0NDQoo
Z2RiKSANDQptYWluX2xvb3AgKGJhY2tlbmQ9MHg4MDVmZTE4KSBhdCBtYWlu
LmM6MTQ5DQ0KMTQ5CQkJaWYgKGV4aXRfbWFpbl9sb29wKQ0NCihnZGIpIA0N
CjE1MQkJCWlmIChzaWdodXByZWN2ZCAmJiAhcmVzdGFydGluZykgew0NCihn
ZGIpIA0NCjE3MgkJCWlmIChzaWd0ZXJtcmVjdmQpIHsNDQooZ2RiKSANDQox
NzcJCX0NDQooZ2RiKSANDQoxNDgJCXdoaWxlIChpb19pdGVyKCZiYWNrZW5k
LT5zdXBlcikpIHsNDQooZ2RiKSANDQoNDQpCcmVha3BvaW50IDEsIGlvX2l0
ZXIgKGI9MHg4MDVmZTE4KSBhdCBpby5jOjk2DQ0KOTYJCXN0cnVjdCBwb2xs
ZmQgKmZkcyA9IE5VTEw7DQ0KKGdkYikgDQ0KOTcJCWludCByZXMgPSAwOw0N
CihnZGIpIA0NCjk4CQlpbnQgdGltZW91dCA9IC0xOw0NCihnZGIpIA0NCjk5
CQl0aW1lX3Qgbm93ID0gdGltZShOVUxMKTsNDQooZ2RiKSANDQoxMTAJCQlm
b3IoZmRfcCA9ICZiLT5maWxlczsgKGZkID0gKmZkX3ApOyApIHsNDQooZ2Ri
KSANDQoxMTEJCQkJaWYgKGZkLT5zdXBlci5hbGl2ZSkgew0NCihnZGIpIHBy
aW50IGZkDQ0KJDU2ID0gKHN0cnVjdCBub25ibG9ja2luZ19mZCAqKSAweDgw
NjUwOTANDQooZ2RiKSBwcmludCAqZmQNDQokNTcgPSB7c3VwZXIgPSB7c3Vw
ZXIgPSB7bmV4dCA9IDB4ODA2NTA2MCwgaXNhID0gMHg4MDVmNDYwLCANDQog
ICAgICBhbGxvY19tZXRob2QgPSAwICdcMDAwJywgbWFya2VkID0gMCAnXDAw
MCcsIGRlYWQgPSAwICdcMDAwJ30sIA0NCiAgICBhbGl2ZSA9IDAsIGtpbGwg
PSAweDgwNTU3YzQgPGRvX2tpbGxfZmQ+fSwgbmV4dCA9IDB4ODA2NDRiMCwg
ZmQgPSA3LCANDQogIGZuYW1lID0gMHgwLCB0b19iZV9jbG9zZWQgPSAxLCBj
bG9zZV9yZWFzb24gPSAxLCANDQogIGNsb3NlX2NhbGxiYWNrID0gMHg4MDY1
MTM4LCBwcmVwYXJlID0gMHg4MDU1NjVjIDxwcmVwYXJlPiwgd2FudF9yZWFk
ID0gMSwgDQ0KICByZWFkID0gMHg4MDU1MTM4IDxyZWFkX2NhbGxiYWNrPiwg
d2FudF93cml0ZSA9IDAsIHdyaXRlID0gMCwgDQ0KICByZWFsbHlfY2xvc2Ug
PSAwfQ0NCihnZGIpIG4NDQoxMTkJCQkJCWlmIChmZC0+ZmQgPCAwKQ0NCihn
ZGIpIG4NDQoxMjYJCQkJCQlpZiAoZmQtPnJlYWxseV9jbG9zZSkNDQooZ2Ri
KSBuDQ0KMTMxCQkJCQkJaWYgKGZkLT5jbG9zZV9jYWxsYmFjayAmJiBmZC0+
Y2xvc2VfcmVhc29uKQ0NCihnZGIpIG4NDQoxMzIJCQkJCQkJKHZvaWQpIENM
T1NFX0NBTExCQUNLKGZkLT5jbG9zZV9jYWxsYmFjaywgZmQtPmNsb3NlX3Jl
YXNvbik7DQ0KKGdkYikgcw0NCmRvX2Fmc29ja2V0X3NyY19jbG9zZSAoYz0w
eDgwNjUxMzgsIGNsb3NlX3JlYXNvbj0xKSBhdCBhZnNvY2tldC5jOjU4DQ0K
NTgJCUNBU1QoYWZzb2NrZXRfc291cmNlX2Nsb3NlX2NhbGxiYWNrLCBzZWxm
LCBjKTsNDQooZ2RiKSBuDQ0KNjAJCXJldHVybiBDTE9TRV9DT05ORUNUSU9O
KHNlbGYtPmNvbm5lY3Rpb24sIGNsb3NlX3JlYXNvbik7DQ0KKGdkYikgbggg
CHMNDQpkb19jbG9zZV9hZnVuaXhfY29ubmVjdGlvbiAoYz0weDgwNjUwZjAs
IGNsb3NlX3JlYXNvbj0xKSBhdCBhZnVuaXguYzo3Nw0NCjc3CQlhc3NlcnQo
Yy0+b3duZXIpOw0NCihnZGIpIG4NDQo3OAkJYy0+b3duZXItPm51bV9jb25u
ZWN0aW9ucy0tOw0NCihnZGIpIA0NCjc5CQlvYmplY3RfcXVldWVfcmVtb3Zl
KGMtPnF1ZXVlX25vZGUpOw0NCihnZGIpIA0NCjgwCQlyZXR1cm4gU1RfT0sg
fCBTVF9HT09OOw0NCihnZGIpIA0NCjB4ODA1MTcxMAk4MQl9DQ0KKGdkYikg
DQ0KMHg4MDUxM2EwIGluIGRvX2Fmc29ja2V0X3NyY19jbG9zZSAoYz0weDgw
NjUxMzgsIGNsb3NlX3JlYXNvbj0xKQ0NCiAgICBhdCBhZnNvY2tldC5jOjYx
DQ0KNjEJfQ0NCihnZGIpIA0NCmlvX2l0ZXIgKGI9MHg4MDVmZTE4KSBhdCBp
by5jOjEzNA0NCjEzNAkJCQkJCWRlYnVnKCJDbG9zaW5nIGZkICVpLlxuIiwg
ZmQtPmZkKTsNDQooZ2RiKSANDQpDbG9zaW5nIGZkIDcuDQ0KMTM2CQkJCQkJ
Y2xvc2UoZmQtPmZkKTsNDQooZ2RiKSANDQoxMzkJCQkJCSpmZF9wID0gZmQt
Pm5leHQ7DQ0KKGdkYikgDQ0KMTQwCQkJCQljb250aW51ZTsNDQooZ2RiKSAN
DQoxMTAJCQlmb3IoZmRfcCA9ICZiLT5maWxlczsgKGZkID0gKmZkX3ApOyAp
IHsNDQooZ2RiKSANDQoxMTEJCQkJaWYgKGZkLT5zdXBlci5hbGl2ZSkgew0N
CihnZGIpIA0NCjExMgkJCQkJaWYgKGZkLT5wcmVwYXJlKSB7DQ0KKGdkYikg
DQ0KMTEzCQkJCQkJUFJFUEFSRV9GRChmZCk7DQ0KKGdkYikgDQ0KMTE0CQkJ
CQl9IGVsc2UgaWYgKGZkLT50b19iZV9jbG9zZWQpIHsNDQooZ2RiKSANDQox
MTcJCQkJfQ0NCihnZGIpIA0NCjE0MgkJCQlmZF9wID0gJmZkLT5uZXh0Ow0N
CihnZGIpIA0NCjExMAkJCWZvcihmZF9wID0gJmItPmZpbGVzOyAoZmQgPSAq
ZmRfcCk7ICkgew0NCihnZGIpIA0NCjExMQkJCQlpZiAoZmQtPnN1cGVyLmFs
aXZlKSB7DQ0KKGdkYikgDQ0KMTEyCQkJCQlpZiAoZmQtPnByZXBhcmUpIHsN
DQooZ2RiKSANDQoxMTcJCQkJfQ0NCihnZGIpIA0NCjE0MgkJCQlmZF9wID0g
JmZkLT5uZXh0Ow0NCihnZGIpIA0NCjExMAkJCWZvcihmZF9wID0gJmItPmZp
bGVzOyAoZmQgPSAqZmRfcCk7ICkgew0NCihnZGIpIA0NCjE0OAkJCUZPUl9R
VUVVRSgmYi0+Y2FsbG91dHMsIHN0cnVjdCBjYWxsb3V0ICosIG4pIHsNDQoo
Z2RiKSANDQoxNTgJCW5mZHMgPSAwOw0NCihnZGIpIA0NCjE2MQkJaWYgKCFi
LT5yZWxvYWRpbmcpIHsNDQooZ2RiKSANDQoxNjQJCQlmb3IoZmQgPSBiLT5m
aWxlczsgZmQ7IGZkID0gZmQtPm5leHQpIHsNDQooZ2RiKSANDQoxNjUJCQkJ
bmZkcysrOw0NCihnZGIpIA0NCjE2NAkJCWZvcihmZCA9IGItPmZpbGVzOyBm
ZDsgZmQgPSBmZC0+bmV4dCkgew0NCihnZGIpIA0NCjE2NQkJCQluZmRzKys7
DQ0KKGdkYikgDQ0KMTY0CQkJZm9yKGZkID0gYi0+ZmlsZXM7IGZkOyBmZCA9
IGZkLT5uZXh0KSB7DQ0KKGdkYikgDQ0KMTY5CQlpZiAobmZkcykgew0NCihn
ZGIpIA0NCjE3MAkJCWludCBhbGxfZXZlbnRzID0gMDsNDQooZ2RiKSANDQox
NzIJCQlmZHMgPSBhbGxvY2Eoc2l6ZW9mKHN0cnVjdCBwb2xsZmQpICogbmZk
cyk7DQ0KKGdkYikgDQ0KMTc4CQkJCWZvciAoZmQgPSBiLT5maWxlcywgaSA9
IDA7IGZkOyBmZCA9IGZkLT5uZXh0LCBpKyspDQ0KKGdkYikgDQ0KMTgwCQkJ
CQlhc3NlcnQoaSA8IG5mZHMpOw0NCihnZGIpIA0NCjE4MgkJCQkJZmRzW2ld
LmZkID0gZmQtPmZkOw0NCihnZGIpIA0NCjE4MwkJCQkJZmRzW2ldLmV2ZW50
cyA9IDA7DQ0KKGdkYikgDQ0KMTg0CQkJCQlmZHNbaV0ucmV2ZW50cyA9IDA7
DQ0KKGdkYikgDQ0KMTg2CQkJCQlpZiAoZmQtPndhbnRfcmVhZCkNDQooZ2Ri
KSANDQoxODkJCQkJCWlmIChmZC0+d2FudF93cml0ZSkNDQooZ2RiKSANDQox
OTIJCQkJCWFsbF9ldmVudHMgfD0gZmRzW2ldLmV2ZW50czsNDQooZ2RiKSAN
DQoxNzgJCQkJZm9yIChmZCA9IGItPmZpbGVzLCBpID0gMDsgZmQ7IGZkID0g
ZmQtPm5leHQsIGkrKykNDQooZ2RiKSANDQoxODAJCQkJCWFzc2VydChpIDwg
bmZkcyk7DQ0KKGdkYikgDQ0KMTgyCQkJCQlmZHNbaV0uZmQgPSBmZC0+ZmQ7
DQ0KKGdkYikgDQ0KMTgzCQkJCQlmZHNbaV0uZXZlbnRzID0gMDsNDQooZ2Ri
KSANDQoxODQJCQkJCWZkc1tpXS5yZXZlbnRzID0gMDsNDQooZ2RiKSANDQox
ODYJCQkJCWlmIChmZC0+d2FudF9yZWFkKQ0NCihnZGIpIA0NCjE4NwkJCQkJ
CWZkc1tpXS5ldmVudHMgfD0gUE9MTElOOw0NCihnZGIpIA0NCjE4OQkJCQkJ
aWYgKGZkLT53YW50X3dyaXRlKQ0NCihnZGIpIA0NCjE5MgkJCQkJYWxsX2V2
ZW50cyB8PSBmZHNbaV0uZXZlbnRzOw0NCihnZGIpIA0NCjE3OAkJCQlmb3Ig
KGZkID0gYi0+ZmlsZXMsIGkgPSAwOyBmZDsgZmQgPSBmZC0+bmV4dCwgaSsr
KQ0NCihnZGIpIA0NCjE5NAkJCQlhc3NlcnQoaSA9PSBuZmRzKTsNDQooZ2Ri
KSANDQoxOTYJCQlpZiAoYWxsX2V2ZW50cykNDQooZ2RiKSANDQoxOTcJCQkJ
cmVzID0gcG9sbChmZHMsIG5mZHMsIElETEVfVElNRSk7DQ0KKGdkYikgDQ0K
MjAwCSAgICAgICAgaWYgKCFyZXMgJiYgbmZkcykgew0NCihnZGIpIHByZWlu
CCAICCAICCAIaW50IHJlcw0NCiQ1OCA9IDANDQooZ2RiKSBuDQ0KMjAxCSAg
ICAgICAgICAgICAgICBnY19tYXliZSgmYi0+c3VwZXIsIDApOw0NCihnZGIp
IA0NCjIwMgkgICAgICAgICAgICAgICAgcmVzID0gcG9sbChmZHMsIG5mZHMs
IHRpbWVvdXQgPCAwID8gNjAwMDAgOiB0aW1lb3V0ICogMTAwMCk7DQ0KKGdk
YikgDQ0KMjAzCSAgICAgICAgfQ0NCihnZGIpIG4IIAhwcmludCByZXMNDQok
NTkgPSAwDQ0KKGdkYikgbg0NCjIwNwkJaWYgKHJlcyA8IDApDQ0KKGdkYikg
DQ0KMjE3CQlpZiAobmZkcyAmJiByZXMgPiAwKSB7DQ0KKGdkYikgDQ0KMjY2
CQluY28gPSAwOw0NCihnZGIpIA0NCjI2OAkJCUZPUl9RVUVVRSgmYi0+Y2Fs
bG91dHMsIHN0cnVjdCBjYWxsb3V0ICosIG4pIHsNDQooZ2RiKSANDQoyNzcJ
CWlmICghbmZkcyAmJiAhbmNvICYmICFiLT5yZWxvYWRpbmcpIHsNDQooZ2Ri
KSANDQoyODEJCXJldHVybiAxOw0NCihnZGIpIA0NCjB4ODA1NGVlMAkyODIJ
fQ0NCihnZGIpIA0NCm1haW5fbG9vcCAoYmFja2VuZD0weDgwNWZlMTgpIGF0
IG1haW4uYzoxNDkNDQoxNDkJCQlpZiAoZXhpdF9tYWluX2xvb3ApDQ0KKGdk
YikgDQ0KMTUxCQkJaWYgKHNpZ2h1cHJlY3ZkICYmICFyZXN0YXJ0aW5nKSB7
DQ0KKGdkYikgDQ0KMTcyCQkJaWYgKHNpZ3Rlcm1yZWN2ZCkgew0NCihnZGIp
IA0NCjE3NwkJfQ0NCihnZGIpIA0NCjE0OAkJd2hpbGUgKGlvX2l0ZXIoJmJh
Y2tlbmQtPnN1cGVyKSkgew0NCihnZGIpIA0NCg0NCkJyZWFrcG9pbnQgMSwg
aW9faXRlciAoYj0weDgwNWZlMTgpIGF0IGlvLmM6OTYNDQo5NgkJc3RydWN0
IHBvbGxmZCAqZmRzID0gTlVMTDsNDQooZ2RiKSANDQo5NwkJaW50IHJlcyA9
IDA7DQ0KKGdkYikgDQ0KOTgJCWludCB0aW1lb3V0ID0gLTE7DQ0KKGdkYikg
DQ0KOTkJCXRpbWVfdCBub3cgPSB0aW1lKE5VTEwpOw0NCihnZGIpIA0NCjEx
MAkJCWZvcihmZF9wID0gJmItPmZpbGVzOyAoZmQgPSAqZmRfcCk7ICkgew0N
CihnZGIpIA0NCjExMQkJCQlpZiAoZmQtPnN1cGVyLmFsaXZlKSB7DQ0KKGdk
YikgDQ0KMTEyCQkJCQlpZiAoZmQtPnByZXBhcmUpIHsNDQooZ2RiKSANDQox
MTMJCQkJCQlQUkVQQVJFX0ZEKGZkKTsNDQooZ2RiKSANDQoxMTQJCQkJCX0g
ZWxzZSBpZiAoZmQtPnRvX2JlX2Nsb3NlZCkgew0NCihnZGIpIA0NCjExNwkJ
CQl9DQ0KKGdkYikgDQ0KMTQyCQkJCWZkX3AgPSAmZmQtPm5leHQ7DQ0KKGdk
YikgDQ0KMTEwCQkJZm9yKGZkX3AgPSAmYi0+ZmlsZXM7IChmZCA9ICpmZF9w
KTsgKSB7DQ0KKGdkYikgDQ0KMTExCQkJCWlmIChmZC0+c3VwZXIuYWxpdmUp
IHsNDQooZ2RiKSANDQoxMTIJCQkJCWlmIChmZC0+cHJlcGFyZSkgew0NCihn
ZGIpIA0NCjExNwkJCQl9DQ0KKGdkYikgDQ0KMTQyCQkJCWZkX3AgPSAmZmQt
Pm5leHQ7DQ0KKGdkYikgDQ0KMTEwCQkJZm9yKGZkX3AgPSAmYi0+ZmlsZXM7
IChmZCA9ICpmZF9wKTsgKSB7DQ0KKGdkYikgDQ0KMTQ4CQkJRk9SX1FVRVVF
KCZiLT5jYWxsb3V0cywgc3RydWN0IGNhbGxvdXQgKiwgbikgew0NCihnZGIp
IA0NCjE1OAkJbmZkcyA9IDA7DQ0KKGdkYikgDQ0KMTYxCQlpZiAoIWItPnJl
bG9hZGluZykgew0NCihnZGIpIA0NCjE2NAkJCWZvcihmZCA9IGItPmZpbGVz
OyBmZDsgZmQgPSBmZC0+bmV4dCkgew0NCihnZGIpIA0NCjE2NQkJCQluZmRz
Kys7DQ0KKGdkYikgDQ0KMTY0CQkJZm9yKGZkID0gYi0+ZmlsZXM7IGZkOyBm
ZCA9IGZkLT5uZXh0KSB7DQ0KKGdkYikgDQ0KMTY1CQkJCW5mZHMrKzsNDQoo
Z2RiKSANDQoxNjQJCQlmb3IoZmQgPSBiLT5maWxlczsgZmQ7IGZkID0gZmQt
Pm5leHQpIHsNDQooZ2RiKSANDQoxNjkJCWlmIChuZmRzKSB7DQ0KKGdkYikg
DQ0KMTcwCQkJaW50IGFsbF9ldmVudHMgPSAwOw0NCihnZGIpIA0NCjE3MgkJ
CWZkcyA9IGFsbG9jYShzaXplb2Yoc3RydWN0IHBvbGxmZCkgKiBuZmRzKTsN
DQooZ2RiKSANDQoxNzgJCQkJZm9yIChmZCA9IGItPmZpbGVzLCBpID0gMDsg
ZmQ7IGZkID0gZmQtPm5leHQsIGkrKykNDQooZ2RiKSANDQoxODAJCQkJCWFz
c2VydChpIDwgbmZkcyk7DQ0KKGdkYikgDQ0KMTgyCQkJCQlmZHNbaV0uZmQg
PSBmZC0+ZmQ7DQ0KKGdkYikgDQ0KMTgzCQkJCQlmZHNbaV0uZXZlbnRzID0g
MDsNDQooZ2RiKSANDQoxODQJCQkJCWZkc1tpXS5yZXZlbnRzID0gMDsNDQoo
Z2RiKSANDQoxODYJCQkJCWlmIChmZC0+d2FudF9yZWFkKQ0NCihnZGIpIA0N
CjE4OQkJCQkJaWYgKGZkLT53YW50X3dyaXRlKQ0NCihnZGIpIA0NCjE5MgkJ
CQkJYWxsX2V2ZW50cyB8PSBmZHNbaV0uZXZlbnRzOw0NCihnZGIpIA0NCjE3
OAkJCQlmb3IgKGZkID0gYi0+ZmlsZXMsIGkgPSAwOyBmZDsgZmQgPSBmZC0+
bmV4dCwgaSsrKQ0NCihnZGIpIA0NCjE4MAkJCQkJYXNzZXJ0KGkgPCBuZmRz
KTsNDQooZ2RiKSANDQoxODIJCQkJCWZkc1tpXS5mZCA9IGZkLT5mZDsNDQoo
Z2RiKSANDQoxODMJCQkJCWZkc1tpXS5ldmVudHMgPSAwOw0NCihnZGIpIA0N
CjE4NAkJCQkJZmRzW2ldLnJldmVudHMgPSAwOw0NCihnZGIpIA0NCjE4NgkJ
CQkJaWYgKGZkLT53YW50X3JlYWQpDQ0KKGdkYikgDQ0KMTg3CQkJCQkJZmRz
W2ldLmV2ZW50cyB8PSBQT0xMSU47DQ0KKGdkYikgDQ0KMTg5CQkJCQlpZiAo
ZmQtPndhbnRfd3JpdGUpDQ0KKGdkYikgDQ0KMTkyCQkJCQlhbGxfZXZlbnRz
IHw9IGZkc1tpXS5ldmVudHM7DQ0KKGdkYikgDQ0KMTc4CQkJCWZvciAoZmQg
PSBiLT5maWxlcywgaSA9IDA7IGZkOyBmZCA9IGZkLT5uZXh0LCBpKyspDQ0K
KGdkYikgDQ0KMTk0CQkJCWFzc2VydChpID09IG5mZHMpOw0NCihnZGIpIA0N
CjE5NgkJCWlmIChhbGxfZXZlbnRzKQ0NCihnZGIpIA0NCjE5NwkJCQlyZXMg
PSBwb2xsKGZkcywgbmZkcywgSURMRV9USU1FKTsNDQooZ2RiKSANDQoyMDAJ
ICAgICAgICBpZiAoIXJlcyAmJiBuZmRzKSB7DQ0KKGdkYikgcHJpbnQgcmVz
DQ0KJDYwID0gMA0NCihnZGIpIG4NDQoyMDEJICAgICAgICAgICAgICAgIGdj
X21heWJlKCZiLT5zdXBlciwgMCk7DQ0KKGdkYikgDQ0KMjAyCSAgICAgICAg
ICAgICAgICByZXMgPSBwb2xsKGZkcywgbmZkcywgdGltZW91dCA8IDAgPyA2
MDAwMCA6IHRpbWVvdXQgKiAxMDAwKTsNDQooZ2RiKSANDQoyMDMJICAgICAg
ICB9DQ0KKGdkYikgcHJpbnQgcmVzDQ0KJDYxID0gMQ0NCihnZGIpIHByaW50
IGZkc1swXQ0NCiQ2MiA9IHtmZCA9IDYsIGV2ZW50cyA9IDAsIHJldmVudHMg
PSAyNH0NDQooZ2RiKSBwcmludCBmZHNbMF0ICBtbMVBdCDFdCA0NCiQ2MyA9
IHtmZCA9IDUsIGV2ZW50cyA9IDEsIHJldmVudHMgPSAwfQ0NCihnZGIpIG4N
DQoyMDcJCWlmIChyZXMgPCAwKQ0NCihnZGIpIG4NDQoyMTcJCWlmIChuZmRz
ICYmIHJlcyA+IDApIHsNDQooZ2RiKSBuDQ0KMjI0CQkJZm9yKGZkID0gYi0+
ZmlsZXMsIGk9MDsgZmQ7IGZkID0gZmQtPm5leHQsIGkrKykNDQooZ2RiKSBu
DQ0KMjMxCQkJCWlmICghZmQtPnN1cGVyLmFsaXZlKQ0NCihnZGIpIA0NCjIz
NAkJCQlpZiAoZmRzW2ldLnJldmVudHMgJiBQT0xMSFVQKSB7DQ0KKGdkYikg
DQ0KMjM1CQkJCQlpZiAoZmQtPndhbnRfcmVhZCAmJiBmZC0+cmVhZCkNDQoo
Z2RiKSANDQoyMzcJCQkJCWVsc2UgaWYgKGZkLT53YW50X3dyaXRlICYmIGZk
LT53cml0ZSkNDQooZ2RiKSANDQoyNDAJCQkJCQl2ZXJib3NlKCJpb19pdGVy
KCk6IFBPTExIVVAgb24gaW5hY3RpdmUgZmQhXG4iKTsNDQooZ2RiKSANDQpp
b19pdGVyKCk6IFBPTExIVVAgb24gaW5hY3RpdmUgZmQhDQ0KMjQxCQkJCQkJ
Y2xvc2VfZmQoZmQsIENMT1NFX0VPRik7DQ0KKGdkYikgcw0NCmNsb3NlX2Zk
IChmZD0weDgwNjQ0YjAsIHJlYXNvbj0xKSBhdCBpby5jOjEzNTYNDQoxMzU2
CQlkZWJ1ZygiTWFya2luZyBmZCAlaSBmb3IgY2xvc2luZy5cbiIsIGZkLT5m
ZCk7DQ0KKGdkYikgbg0NCk1hcmtpbmcgZmQgNiBmb3IgY2xvc2luZy4NDQox
MzU4CQlmZC0+Y2xvc2VfcmVhc29uID0gcmVhc29uOw0NCihnZGIpIA0NCjEz
NTkJCWlmICghZmQtPnRvX2JlX2Nsb3NlZCkNDQooZ2RiKSBwcmludCByZWFz
b24NDQokNjQgPSAxDQ0KKGdkYikgbg0NCjEzNjAJCQlmZC0+dG9fYmVfY2xv
c2VkID0gMTsNDQooZ2RiKSBuDQ0KMTM2MQl9DQ0KKGdkYikgbg0NCmlvX2l0
ZXIgKGI9MHg4MDVmZTE4KSBhdCBpby5jOjI0Mw0NCjI0MwkJCQkJY29udGlu
dWU7DQ0KKGdkYikgDQ0KMjI0CQkJZm9yKGZkID0gYi0+ZmlsZXMsIGk9MDsg
ZmQ7IGZkID0gZmQtPm5leHQsIGkrKykNDQooZ2RiKSANDQoyMzEJCQkJaWYg
KCFmZC0+c3VwZXIuYWxpdmUpDQ0KKGdkYikgDQ0KMjM0CQkJCWlmIChmZHNb
aV0ucmV2ZW50cyAmIFBPTExIVVApIHsNDQooZ2RiKSANDQoyNDUJCQkJaWYg
KGZkc1tpXS5yZXZlbnRzICYgUE9MTFBSSSkgew0NCihnZGIpIA0NCjI0OQkJ
CQlpZiAoZmRzW2ldLnJldmVudHMgJiAoUE9MTE5WQUwgfCBQT0xMRVJSKSkg
ew0NCihnZGIpIA0NCjI1MwkJCQlpZiAoZmRzW2ldLnJldmVudHMgJiBQT0xM
T1VUKQ0NCihnZGIpIA0NCjI1NwkJCQlpZiAoZmRzW2ldLnJldmVudHMgJiBQ
T0xMSU4pIHsNDQooZ2RiKSANDQoyMjQJCQlmb3IoZmQgPSBiLT5maWxlcywg
aT0wOyBmZDsgZmQgPSBmZC0+bmV4dCwgaSsrKQ0NCihnZGIpIA0NCjI2MwkJ
CWFzc2VydChpID09IG5mZHMpOw0NCihnZGIpIA0NCjI2NgkJbmNvID0gMDsN
DQooZ2RiKSANDQoyNjgJCQlGT1JfUVVFVUUoJmItPmNhbGxvdXRzLCBzdHJ1
Y3QgY2FsbG91dCAqLCBuKSB7DQ0KKGdkYikgDQ0KMjc3CQlpZiAoIW5mZHMg
JiYgIW5jbyAmJiAhYi0+cmVsb2FkaW5nKSB7DQ0KKGdkYikgDQ0KMjgxCQly
ZXR1cm4gMTsNDQooZ2RiKSANDQoweDgwNTRlZTAJMjgyCX0NDQooZ2RiKSAN
DQptYWluX2xvb3AgKGJhY2tlbmQ9MHg4MDVmZTE4KSBhdCBtYWluLmM6MTQ5
DQ0KMTQ5CQkJaWYgKGV4aXRfbWFpbl9sb29wKQ0NCihnZGIpIA0NCjE1MQkJ
CWlmIChzaWdodXByZWN2ZCAmJiAhcmVzdGFydGluZykgew0NCihnZGIpIA0N
CjE3MgkJCWlmIChzaWd0ZXJtcmVjdmQpIHsNDQooZ2RiKSANDQoxNzcJCX0N
DQooZ2RiKSANDQoxNDgJCXdoaWxlIChpb19pdGVyKCZiYWNrZW5kLT5zdXBl
cikpIHsNDQooZ2RiKSANDQoNDQpCcmVha3BvaW50IDEsIGlvX2l0ZXIgKGI9
MHg4MDVmZTE4KSBhdCBpby5jOjk2DQ0KOTYJCXN0cnVjdCBwb2xsZmQgKmZk
cyA9IE5VTEw7DQ0KKGdkYikgDQ0KOTcJCWludCByZXMgPSAwOw0NCihnZGIp
IA0NCjk4CQlpbnQgdGltZW91dCA9IC0xOw0NCihnZGIpIA0NCjk5CQl0aW1l
X3Qgbm93ID0gdGltZShOVUxMKTsNDQooZ2RiKSANDQoxMTAJCQlmb3IoZmRf
cCA9ICZiLT5maWxlczsgKGZkID0gKmZkX3ApOyApIHsNDQooZ2RiKSANDQox
MTEJCQkJaWYgKGZkLT5zdXBlci5hbGl2ZSkgew0NCihnZGIpIA0NCjExMgkJ
CQkJaWYgKGZkLT5wcmVwYXJlKSB7DQ0KKGdkYikgDQ0KMTEzCQkJCQkJUFJF
UEFSRV9GRChmZCk7DQ0KKGdkYikgcw0NCnByZXBhcmUgKGZkPTB4ODA2NDRi
MCkgYXQgaW8uYzo1NjMNDQo1NjMJCUNBU1QoaW9fZmQsIHNlbGYsIGZkKTsN
DQooZ2RiKSBuDQ0KNTY1CQlpZiAoZmQtPnN1cGVyLmFsaXZlICYmIHNlbGYt
PmJ1ZmZlcikNDQooZ2RiKSANDQo1NjYJCQlmZC0+d2FudF93cml0ZSA9IEJV
Rl9QUkVQQVJFKHNlbGYtPmJ1ZmZlcik7DQ0KKGdkYikgDQ0KNTcwCQlpZiAo
ZmQtPnRvX2JlX2Nsb3NlZCkgew0NCihnZGIpIA0NCjU3MQkJCWlmIChmZC0+
d2FudF93cml0ZSkgew0NCihnZGIpIA0NCjU3OAkJCQlraWxsX2ZkKGZkKTsN
DQooZ2RiKSBzDQ0Ka2lsbF9mZCAoZmQ9MHg4MDY0NGIwKSBhdCBpby5jOjEz
NTANDQoxMzUwCQlmZC0+c3VwZXIuYWxpdmUgPSAwOw0NCihnZGIpIG4NDQox
MzUxCX0NDQooZ2RiKSANDQpwcmVwYXJlIChmZD0weDgwNjQ0YjApIGF0IGlv
LmM6NTgyDQ0KNTgyCX0NDQooZ2RiKSANDQppb19pdGVyIChiPTB4ODA1ZmUx
OCkgYXQgaW8uYzoxMTQNDQoxMTQJCQkJCX0gZWxzZSBpZiAoZmQtPnRvX2Jl
X2Nsb3NlZCkgew0NCihnZGIpIG4NDQoxMTcJCQkJfQ0NCihnZGIpIA0NCjE0
MgkJCQlmZF9wID0gJmZkLT5uZXh0Ow0NCihnZGIpIA0NCjExMAkJCWZvcihm
ZF9wID0gJmItPmZpbGVzOyAoZmQgPSAqZmRfcCk7ICkgew0NCihnZGIpIA0N
CjExMQkJCQlpZiAoZmQtPnN1cGVyLmFsaXZlKSB7DQ0KKGdkYikgDQ0KMTEy
CQkJCQlpZiAoZmQtPnByZXBhcmUpIHsNDQooZ2RiKSANDQoxMTcJCQkJfQ0N
CihnZGIpIA0NCjE0MgkJCQlmZF9wID0gJmZkLT5uZXh0Ow0NCihnZGIpIA0N
CjExMAkJCWZvcihmZF9wID0gJmItPmZpbGVzOyAoZmQgPSAqZmRfcCk7ICkg
ew0NCihnZGIpIA0NCjE0OAkJCUZPUl9RVUVVRSgmYi0+Y2FsbG91dHMsIHN0
cnVjdCBjYWxsb3V0ICosIG4pIHsNDQooZ2RiKSANDQoxNTgJCW5mZHMgPSAw
Ow0NCihnZGIpIA0NCjE2MQkJaWYgKCFiLT5yZWxvYWRpbmcpIHsNDQooZ2Ri
KSANDQoxNjQJCQlmb3IoZmQgPSBiLT5maWxlczsgZmQ7IGZkID0gZmQtPm5l
eHQpIHsNDQooZ2RiKSANDQoxNjUJCQkJbmZkcysrOw0NCihnZGIpIA0NCjE2
NAkJCWZvcihmZCA9IGItPmZpbGVzOyBmZDsgZmQgPSBmZC0+bmV4dCkgew0N
CihnZGIpIA0NCjE2NQkJCQluZmRzKys7DQ0KKGdkYikgDQ0KMTY0CQkJZm9y
KGZkID0gYi0+ZmlsZXM7IGZkOyBmZCA9IGZkLT5uZXh0KSB7DQ0KKGdkYikg
DQ0KMTY5CQlpZiAobmZkcykgew0NCihnZGIpIA0NCjE3MAkJCWludCBhbGxf
ZXZlbnRzID0gMDsNDQooZ2RiKSANDQoxNzIJCQlmZHMgPSBhbGxvY2Eoc2l6
ZW9mKHN0cnVjdCBwb2xsZmQpICogbmZkcyk7DQ0KKGdkYikgDQ0KMTc4CQkJ
CWZvciAoZmQgPSBiLT5maWxlcywgaSA9IDA7IGZkOyBmZCA9IGZkLT5uZXh0
LCBpKyspDQ0KKGdkYikgDQ0KMTgwCQkJCQlhc3NlcnQoaSA8IG5mZHMpOw0N
CihnZGIpIA0NCjE4MgkJCQkJZmRzW2ldLmZkID0gZmQtPmZkOw0NCihnZGIp
IA0NCjE4MwkJCQkJZmRzW2ldLmV2ZW50cyA9IDA7DQ0KKGdkYikgDQ0KMTg0
CQkJCQlmZHNbaV0ucmV2ZW50cyA9IDA7DQ0KKGdkYikgDQ0KMTg2CQkJCQlp
ZiAoZmQtPndhbnRfcmVhZCkNDQooZ2RiKSANDQoxODkJCQkJCWlmIChmZC0+
d2FudF93cml0ZSkNDQooZ2RiKSANDQoxOTIJCQkJCWFsbF9ldmVudHMgfD0g
ZmRzW2ldLmV2ZW50czsNDQooZ2RiKSANDQoxNzgJCQkJZm9yIChmZCA9IGIt
PmZpbGVzLCBpID0gMDsgZmQ7IGZkID0gZmQtPm5leHQsIGkrKykNDQooZ2Ri
KSANDQoxODAJCQkJCWFzc2VydChpIDwgbmZkcyk7DQ0KKGdkYikgDQ0KMTgy
CQkJCQlmZHNbaV0uZmQgPSBmZC0+ZmQ7DQ0KKGdkYikgDQ0KMTgzCQkJCQlm
ZHNbaV0uZXZlbnRzID0gMDsNDQooZ2RiKSANDQoxODQJCQkJCWZkc1tpXS5y
ZXZlbnRzID0gMDsNDQooZ2RiKSANDQoxODYJCQkJCWlmIChmZC0+d2FudF9y
ZWFkKQ0NCihnZGIpIA0NCjE4NwkJCQkJCWZkc1tpXS5ldmVudHMgfD0gUE9M
TElOOw0NCihnZGIpIA0NCjE4OQkJCQkJaWYgKGZkLT53YW50X3dyaXRlKQ0N
CihnZGIpIA0NCjE5MgkJCQkJYWxsX2V2ZW50cyB8PSBmZHNbaV0uZXZlbnRz
Ow0NCihnZGIpIA0NCjE3OAkJCQlmb3IgKGZkID0gYi0+ZmlsZXMsIGkgPSAw
OyBmZDsgZmQgPSBmZC0+bmV4dCwgaSsrKQ0NCihnZGIpIA0NCjE5NAkJCQlh
c3NlcnQoaSA9PSBuZmRzKTsNDQooZ2RiKSANDQoxOTYJCQlpZiAoYWxsX2V2
ZW50cykNDQooZ2RiKSANDQoxOTcJCQkJcmVzID0gcG9sbChmZHMsIG5mZHMs
IElETEVfVElNRSk7DQ0KKGdkYikgDQ0KMjAwCSAgICAgICAgaWYgKCFyZXMg
JiYgbmZkcykgew0NCihnZGIpIHByaW50IHJlcw0NCiQ2NSA9IDENDQooZ2Ri
KSBwcmludCBmZHNbMF0NDQokNjYgPSB7ZmQgPSA2LCBldmVudHMgPSAwLCBy
ZXZlbnRzID0gMjR9DQ0KKGdkYikgbg0NCjIwNQkgICAgICAgICAgICAgICAg
Z2NfbWF5YmUoJmItPnN1cGVyLCAxKTsNDQooZ2RiKSANDQoyMDcJCWlmIChy
ZXMgPCAwKQ0NCihnZGIpIA0NCjIxNwkJaWYgKG5mZHMgJiYgcmVzID4gMCkg
ew0NCihnZGIpIA0NCjIyNAkJCWZvcihmZCA9IGItPmZpbGVzLCBpPTA7IGZk
OyBmZCA9IGZkLT5uZXh0LCBpKyspDQ0KKGdkYikgDQ0KMjMxCQkJCWlmICgh
ZmQtPnN1cGVyLmFsaXZlKQ0NCihnZGIpIA0NCjIzMgkJCQkJY29udGludWU7
DQ0KKGdkYikgcHJpbnQgKmZkDQ0KJDY3ID0ge3N1cGVyID0ge3N1cGVyID0g
e25leHQgPSAweDgwNjQ0NTgsIGlzYSA9IDB4ODA1ZjQ2MCwgDQ0KICAgICAg
YWxsb2NfbWV0aG9kID0gMCAnXDAwMCcsIG1hcmtlZCA9IDAgJ1wwMDAnLCBk
ZWFkID0gMCAnXDAwMCd9LCANDQogICAgYWxpdmUgPSAwLCBraWxsID0gMHg4
MDU1N2M0IDxkb19raWxsX2ZkPn0sIG5leHQgPSAweDgwNjQzYjAsIGZkID0g
NiwgDQ0KICBmbmFtZSA9IDB4MCwgdG9fYmVfY2xvc2VkID0gMSwgY2xvc2Vf
cmVhc29uID0gMSwgDQ0KICBjbG9zZV9jYWxsYmFjayA9IDB4ODA2NDUxMCwg
cHJlcGFyZSA9IDB4ODA1NTY1YyA8cHJlcGFyZT4sIHdhbnRfcmVhZCA9IDAs
IA0NCiAgcmVhZCA9IDAsIHdhbnRfd3JpdGUgPSAwLCB3cml0ZSA9IDB4ODA1
NTJmNCA8d3JpdGVfY2FsbGJhY2s+LCANDQogIHJlYWxseV9jbG9zZSA9IDB9
DQ0KKGdkYikgbg0NCjIyNAkJCWZvcihmZCA9IGItPmZpbGVzLCBpPTA7IGZk
OyBmZCA9IGZkLT5uZXh0LCBpKyspDQ0KKGdkYikgDQ0KMjMxCQkJCWlmICgh
ZmQtPnN1cGVyLmFsaXZlKQ0NCihnZGIpIA0NCjIzNAkJCQlpZiAoZmRzW2ld
LnJldmVudHMgJiBQT0xMSFVQKSB7DQ0KKGdkYikgDQ0KMjQ1CQkJCWlmIChm
ZHNbaV0ucmV2ZW50cyAmIFBPTExQUkkpIHsNDQooZ2RiKSANDQoyNDkJCQkJ
aWYgKGZkc1tpXS5yZXZlbnRzICYgKFBPTExOVkFMIHwgUE9MTEVSUikpIHsN
DQooZ2RiKSANDQoyNTMJCQkJaWYgKGZkc1tpXS5yZXZlbnRzICYgUE9MTE9V
VCkNDQooZ2RiKSANDQoyNTcJCQkJaWYgKGZkc1tpXS5yZXZlbnRzICYgUE9M
TElOKSB7DQ0KKGdkYikgDQ0KMjI0CQkJZm9yKGZkID0gYi0+ZmlsZXMsIGk9
MDsgZmQ7IGZkID0gZmQtPm5leHQsIGkrKykNDQooZ2RiKSANDQoyNjMJCQlh
c3NlcnQoaSA9PSBuZmRzKTsNDQooZ2RiKSANDQoyNjYJCW5jbyA9IDA7DQ0K
KGdkYikgDQ0KMjY4CQkJRk9SX1FVRVVFKCZiLT5jYWxsb3V0cywgc3RydWN0
IGNhbGxvdXQgKiwgbikgew0NCihnZGIpIA0NCjI3NwkJaWYgKCFuZmRzICYm
ICFuY28gJiYgIWItPnJlbG9hZGluZykgew0NCihnZGIpIA0NCjI4MQkJcmV0
dXJuIDE7DQ0KKGdkYikgDQ0KMHg4MDU0ZWUwCTI4Mgl9DQ0KKGdkYikgDQ0K
bWFpbl9sb29wIChiYWNrZW5kPTB4ODA1ZmUxOCkgYXQgbWFpbi5jOjE0OQ0N
CjE0OQkJCWlmIChleGl0X21haW5fbG9vcCkNDQooZ2RiKSANDQoxNTEJCQlp
ZiAoc2lnaHVwcmVjdmQgJiYgIXJlc3RhcnRpbmcpIHsNDQooZ2RiKSANDQox
NzIJCQlpZiAoc2lndGVybXJlY3ZkKSB7DQ0KKGdkYikgDQ0KMTc3CQl9DQ0K
KGdkYikgDQ0KMTQ4CQl3aGlsZSAoaW9faXRlcigmYmFja2VuZC0+c3VwZXIp
KSB7DQ0KKGdkYikgDQ0KDQ0KQnJlYWtwb2ludCAxLCBpb19pdGVyIChiPTB4
ODA1ZmUxOCkgYXQgaW8uYzo5Ng0NCjk2CQlzdHJ1Y3QgcG9sbGZkICpmZHMg
PSBOVUxMOw0NCihnZGIpIA0NCjk3CQlpbnQgcmVzID0gMDsNDQooZ2RiKSAN
DQo5OAkJaW50IHRpbWVvdXQgPSAtMTsNDQooZ2RiKSANDQo5OQkJdGltZV90
IG5vdyA9IHRpbWUoTlVMTCk7DQ0KKGdkYikgDQ0KMTEwCQkJZm9yKGZkX3Ag
PSAmYi0+ZmlsZXM7IChmZCA9ICpmZF9wKTsgKSB7DQ0KKGdkYikgDQ0KMTEx
CQkJCWlmIChmZC0+c3VwZXIuYWxpdmUpIHsNDQooZ2RiKSANDQoxMTkJCQkJ
CWlmIChmZC0+ZmQgPCAwKQ0NCihnZGIpIA0NCjEyNgkJCQkJCWlmIChmZC0+
cmVhbGx5X2Nsb3NlKQ0NCihnZGIpIA0NCjEzMQkJCQkJCWlmIChmZC0+Y2xv
c2VfY2FsbGJhY2sgJiYgZmQtPmNsb3NlX3JlYXNvbikNDQooZ2RiKSANDQox
MzIJCQkJCQkJKHZvaWQpIENMT1NFX0NBTExCQUNLKGZkLT5jbG9zZV9jYWxs
YmFjaywgZmQtPmNsb3NlX3JlYXNvbik7DQ0KKGdkYikgcw0NCmRvX2RyaXZl
cl9vbl9jbG9zZSAoYz0weDgwNjQ1MTAsIHJlYXNvbj0xKSBhdCBjZW50ZXIu
YzoxNzANDQoxNzAJCUNBU1QoZHJpdmVyX3JlaW5pdF9vbl9jbG9zZSwgc2Vs
ZiwgYyk7DQ0KKGdkYikgbg0NCjE3MwkJaWYgKHNlbGYtPnRpbWVfcmVvcGVu
KQ0NCihnZGIpIA0NCjE3NAkJCXdlcnJvcigiQ29ubmVjdGlvbiBicm9rZW4s
IHJlb3BlbmluZyBpbiAlaSBzZWNvbmRzXG4iLCBzZWxmLT50aW1lX3Jlb3Bl
bik7DQ0KKGdkYikgbg0NCkNvbm5lY3Rpb24gYnJva2VuLCByZW9wZW5pbmcg
aW4gMTAgc2Vjb25kcw0NCjE3NQkJaWYgKHNlbGYtPnJlcykNDQooZ2RiKSAN
DQoxNzYJCQlLSUxMX1JFU09VUkNFX05PREUoc2VsZi0+Y2ZnLT5yZXNvdXJj
ZXMsIHNlbGYtPnJlcyk7DQ0KKGdkYikgcw0NCmRvX2tpbGxfcmVzb3VyY2Ug
KHNlbGY9MHg4MDVmZWU4LCBuPTB4ODA2M2ZkYykgYXQgcmVzb3VyY2UuYzo4
NQ0NCjg1CQlLSUxMX1JFU09VUkNFKG4tPnJlc291cmNlKTsNDQooZ2RiKSBz
DQ0KZG9fa2lsbF9mZCAocj0weDgwNjQ0YjApIGF0IGlvLmM6NjE2DQ0KNjE2
CQlDQVNUX1NVQlRZUEUobm9uYmxvY2tpbmdfZmQsIGZkLCByKTsNDQooZ2Ri
KSBuDQ0KNjIxCQlpZiAoci0+YWxpdmUpDQ0KKGdkYikgbg0NCjYyMwl9DQ0K
KGdkYikgbg0NCmRvX2tpbGxfcmVzb3VyY2UgKHNlbGY9MHg4MDVmZWU4LCBu
PTB4ODA2M2ZkYykgYXQgcmVzb3VyY2UuYzo4Ng0NCjg2CQlvbF9xdWV1ZV9y
ZW1vdmUoJm4tPmhlYWRlcik7DQ0KKGdkYikgbgggCHByaW50ICpuDQ0KJDY4
ID0ge2hlYWRlciA9IHtucF9saW5rcyA9IHsweDgwNWZlZjgsIDB4ODA1ZmVm
NH19LCByZXNvdXJjZSA9IDB4ODA2NDRiMH0NDQooZ2RiKSBwcmludCBuLWhl
YWRlcggICAgICBtbMUA+DQ0KJDY5ID0ge25wX2xpbmtzID0gezB4ODA1ZmVm
OCwgMHg4MDVmZWY0fX0NDQooZ2RiKSBuDQ0KODcJCW9sX3NwYWNlX2ZyZWUo
bik7DQ0KKGdkYikgDQ0KODgJfQ0NCihnZGIpIA0NCmRvX2RyaXZlcl9vbl9j
bG9zZSAoYz0weDgwNjQ1MTAsIHJlYXNvbj0xKSBhdCBjZW50ZXIuYzoxNzcN
DQoxNzcJCWlvX2NhbGxvdXQoc2VsZi0+Y2ZnLT5iYWNrZW5kLCBzZWxmLT50
aW1lX3Jlb3BlbiwgDQ0KKGdkYikgcw0NCm1ha2VfZHJpdmVyX3JlaW5pdCAo
aGFuZGxlcj0weDgwNjQyMTgsIGNmZz0weDgwNWZlNTgpIGF0IGNlbnRlci5j
OjE1MA0NCjE1MAkJTkVXKGRyaXZlcl9yZWluaXQsIHNlbGYpOw0NCihnZGIp
IG4NDQoxNTEJCXNlbGYtPnN1cGVyLmYgPSBkb19yZWluaXQ7DQ0KKGdkYikg
DQ0KMTUyCQlzZWxmLT5oYW5kbGVyID0gaGFuZGxlcjsNDQooZ2RiKSANDQox
NTMJCXNlbGYtPmNmZyA9IGNmZzsNDQooZ2RiKSANDQoxNTQJCXJldHVybiAm
c2VsZi0+c3VwZXI7DQ0KKGdkYikgDQ0KMTU1CX0NDQooZ2RiKSANDQpkb19k
cml2ZXJfb25fY2xvc2UgKGM9MHg4MDY0NTEwLCByZWFzb249MSkgYXQgY2Vu
dGVyLmM6MTgwDQ0KMTgwCQlyZXR1cm4gU1RfT0sgfCBTVF9HT09OOw0NCihn
ZGIpIA0NCjB4ODA0YWZjMAkxODEJfQ0NCihnZGIpIA0NCmlvX2l0ZXIgKGI9
MHg4MDVmZTE4KSBhdCBpby5jOjEzNA0NCjEzNAkJCQkJCWRlYnVnKCJDbG9z
aW5nIGZkICVpLlxuIiwgZmQtPmZkKTsNDQooZ2RiKSBuDQ0KQ2xvc2luZyBm
ZCA2Lg0NCjEzNgkJCQkJCWNsb3NlKGZkLT5mZCk7DQ0KKGdkYikgbg0NCjEz
OQkJCQkJKmZkX3AgPSBmZC0+bmV4dDsNDQooZ2RiKSBidA0NCiMwICBpb19p
dGVyIChiPTB4ODA1ZmUxOCkgYXQgaW8uYzoxMzkNDQojMSAgMHg4MDQ5ZGJj
IGluIG1haW5fbG9vcCAoYmFja2VuZD0weDgwNWZlMTgpIGF0IG1haW4uYzox
NDgNDQojMiAgMHg4MDRhMjIwIGluIG1haW4gKGFyZ2M9NSwgYXJndj0weGJm
ZmZmYWM0KSBhdCBtYWluLmM6MzEzDQ0KKGdkYikgbg0NCjE0MAkJCQkJY29u
dGludWU7DQ0KKGdkYikgDQ0KMTEwCQkJZm9yKGZkX3AgPSAmYi0+ZmlsZXM7
IChmZCA9ICpmZF9wKTsgKSB7DQ0KKGdkYikgDQ0KMTExCQkJCWlmIChmZC0+
c3VwZXIuYWxpdmUpIHsNDQooZ2RiKSANDQoxMTIJCQkJCWlmIChmZC0+cHJl
cGFyZSkgew0NCihnZGIpIA0NCjExNwkJCQl9DQ0KKGdkYikgDQ0KMTQyCQkJ
CWZkX3AgPSAmZmQtPm5leHQ7DQ0KKGdkYikgDQ0KMTEwCQkJZm9yKGZkX3Ag
PSAmYi0+ZmlsZXM7IChmZCA9ICpmZF9wKTsgKSB7DQ0KKGdkYikgDQ0KMTQ4
CQkJRk9SX1FVRVVFKCZiLT5jYWxsb3V0cywgc3RydWN0IGNhbGxvdXQgKiwg
bikgew0NCihnZGIpIA0NCjE0OQkJCQlpZiAobi0+d2hlbiA8IG5vdykgew0N
CihnZGIpIA0NCjE1MwkJCQlpZiAodGltZW91dCA9PSAtMSB8fCAobi0+d2hl
biAtIG5vdyA8IHRpbWVvdXQpKSB7DQ0KKGdkYikgDQ0KMTU0CQkJCQl0aW1l
b3V0ID0gbi0+d2hlbiAtIG5vdzsNDQooZ2RiKSANDQoxNDgJCQlGT1JfUVVF
VUUoJmItPmNhbGxvdXRzLCBzdHJ1Y3QgY2FsbG91dCAqLCBuKSB7DQ0KKGdk
YikgcHJpbnQgdGltZW91dA0NCiQ3MCA9IDY2DQ0KKGdkYikgbg0NCjE1OAkJ
bmZkcyA9IDA7DQ0KKGdkYikgDQ0KMTYxCQlpZiAoIWItPnJlbG9hZGluZykg
ew0NCihnZGIpIA0NCjE2NAkJCWZvcihmZCA9IGItPmZpbGVzOyBmZDsgZmQg
PSBmZC0+bmV4dCkgew0NCihnZGIpIA0NCjE2NQkJCQluZmRzKys7DQ0KKGdk
YikgDQ0KMTY0CQkJZm9yKGZkID0gYi0+ZmlsZXM7IGZkOyBmZCA9IGZkLT5u
ZXh0KSB7DQ0KKGdkYikgDQ0KMTY5CQlpZiAobmZkcykgew0NCihnZGIpIA0N
CjE3MAkJCWludCBhbGxfZXZlbnRzID0gMDsNDQooZ2RiKSANDQoxNzIJCQlm
ZHMgPSBhbGxvY2Eoc2l6ZW9mKHN0cnVjdCBwb2xsZmQpICogbmZkcyk7DQ0K
KGdkYikgDQ0KMTc4CQkJCWZvciAoZmQgPSBiLT5maWxlcywgaSA9IDA7IGZk
OyBmZCA9IGZkLT5uZXh0LCBpKyspDQ0KKGdkYikgDQ0KMTgwCQkJCQlhc3Nl
cnQoaSA8IG5mZHMpOw0NCihnZGIpIA0NCjE4MgkJCQkJZmRzW2ldLmZkID0g
ZmQtPmZkOw0NCihnZGIpIA0NCjE4MwkJCQkJZmRzW2ldLmV2ZW50cyA9IDA7
DQ0KKGdkYikgDQ0KMTg0CQkJCQlmZHNbaV0ucmV2ZW50cyA9IDA7DQ0KKGdk
YikgDQ0KMTg2CQkJCQlpZiAoZmQtPndhbnRfcmVhZCkNDQooZ2RiKSANDQox
ODcJCQkJCQlmZHNbaV0uZXZlbnRzIHw9IFBPTExJTjsNDQooZ2RiKSANDQox
ODkJCQkJCWlmIChmZC0+d2FudF93cml0ZSkNDQooZ2RiKSANDQoxOTIJCQkJ
CWFsbF9ldmVudHMgfD0gZmRzW2ldLmV2ZW50czsNDQooZ2RiKSANDQoxNzgJ
CQkJZm9yIChmZCA9IGItPmZpbGVzLCBpID0gMDsgZmQ7IGZkID0gZmQtPm5l
eHQsIGkrKykNDQooZ2RiKSANDQoxOTQJCQkJYXNzZXJ0KGkgPT0gbmZkcyk7
DQ0KKGdkYikgDQ0KMTk2CQkJaWYgKGFsbF9ldmVudHMpDQ0KKGdkYikgDQ0K
MTk3CQkJCXJlcyA9IHBvbGwoZmRzLCBuZmRzLCBJRExFX1RJTUUpOw0NCihn
ZGIpIA0NCjIwMAkgICAgICAgIGlmICghcmVzICYmIG5mZHMpIHsNDQooZ2Ri
KSBwcmludCByZXMNDQokNzEgPSAwDQ0KKGdkYikgbg0NCjIwMQkgICAgICAg
ICAgICAgICAgZ2NfbWF5YmUoJmItPnN1cGVyLCAwKTsNDQooZ2RiKSANDQoy
MDIJICAgICAgICAgICAgICAgIHJlcyA9IHBvbGwoZmRzLCBuZmRzLCB0aW1l
b3V0IDwgMCA/IDYwMDAwIDogdGltZW91dCAqIDEwMDApOw0NCihnZGIpIG4N
DQoyMDMJICAgICAgICB9DQ0KKGdkYikgcHJpbnQgcmVzDQ0KJDcyID0gMA0N
CihnZGIpIG4NDQoyMDcJCWlmIChyZXMgPCAwKQ0NCihnZGIpIA0NCjIxNwkJ
aWYgKG5mZHMgJiYgcmVzID4gMCkgew0NCihnZGIpIA0NCjI2NgkJbmNvID0g
MDsNDQooZ2RiKSANDQoyNjgJCQlGT1JfUVVFVUUoJmItPmNhbGxvdXRzLCBz
dHJ1Y3QgY2FsbG91dCAqLCBuKSB7DQ0KKGdkYikgDQ0KMjY5CQkJCWlmIChu
b3cgPj0gbi0+d2hlbikgew0NCihnZGIpIA0NCjI3NAkJCQluY28rKzsNDQoo
Z2RiKSANDQoyNjgJCQlGT1JfUVVFVUUoJmItPmNhbGxvdXRzLCBzdHJ1Y3Qg
Y2FsbG91dCAqLCBuKSB7DQ0KKGdkYikgDQ0KMjc3CQlpZiAoIW5mZHMgJiYg
IW5jbyAmJiAhYi0+cmVsb2FkaW5nKSB7DQ0KKGdkYikgDQ0KMjgxCQlyZXR1
cm4gMTsNDQooZ2RiKSANDQoweDgwNTRlZTAJMjgyCX0NDQooZ2RiKSANDQpt
YWluX2xvb3AgKGJhY2tlbmQ9MHg4MDVmZTE4KSBhdCBtYWluLmM6MTQ5DQ0K
MTQ5CQkJaWYgKGV4aXRfbWFpbl9sb29wKQ0NCihnZGIpIA0NCjE1MQkJCWlm
IChzaWdodXByZWN2ZCAmJiAhcmVzdGFydGluZykgew0NCihnZGIpIA0NCjE3
MgkJCWlmIChzaWd0ZXJtcmVjdmQpIHsNDQooZ2RiKSANDQoxNzcJCX0NDQoo
Z2RiKSANDQoxNDgJCXdoaWxlIChpb19pdGVyKCZiYWNrZW5kLT5zdXBlcikp
IHsNDQooZ2RiKSANDQoNDQpCcmVha3BvaW50IDEsIGlvX2l0ZXIgKGI9MHg4
MDVmZTE4KSBhdCBpby5jOjk2DQ0KOTYJCXN0cnVjdCBwb2xsZmQgKmZkcyA9
IE5VTEw7DQ0KKGdkYikgDQ0KOTcJCWludCByZXMgPSAwOw0NCihnZGIpIA0N
Cjk4CQlpbnQgdGltZW91dCA9IC0xOw0NCihnZGIpIA0NCjk5CQl0aW1lX3Qg
bm93ID0gdGltZShOVUxMKTsNDQooZ2RiKSANDQoxMTAJCQlmb3IoZmRfcCA9
ICZiLT5maWxlczsgKGZkID0gKmZkX3ApOyApIHsNDQooZ2RiKSANDQoxMTEJ
CQkJaWYgKGZkLT5zdXBlci5hbGl2ZSkgew0NCihnZGIpIA0NCjExMgkJCQkJ
aWYgKGZkLT5wcmVwYXJlKSB7DQ0KKGdkYikgDQ0KMTE3CQkJCX0NDQooZ2Ri
KSANDQoxNDIJCQkJZmRfcCA9ICZmZC0+bmV4dDsNDQooZ2RiKSANDQoxMTAJ
CQlmb3IoZmRfcCA9ICZiLT5maWxlczsgKGZkID0gKmZkX3ApOyApIHsNDQoo
Z2RiKSANDQoxNDgJCQlGT1JfUVVFVUUoJmItPmNhbGxvdXRzLCBzdHJ1Y3Qg
Y2FsbG91dCAqLCBuKSB7DQ0KKGdkYikgDQ0KMTQ5CQkJCWlmIChuLT53aGVu
IDwgbm93KSB7DQ0KKGdkYikgDQ0KMTUwCQkJCQl0aW1lb3V0ID0gMDsNDQoo
Z2RiKSANDQoxNTEJCQkJCWNvbnRpbnVlOw0NCihnZGIpIA0NCjE0OAkJCUZP
Ul9RVUVVRSgmYi0+Y2FsbG91dHMsIHN0cnVjdCBjYWxsb3V0ICosIG4pIHsN
DQooZ2RiKSBuDQ0KMTU4CQluZmRzID0gMDsNDQooZ2RiKSBuDQ0KMTYxCQlp
ZiAoIWItPnJlbG9hZGluZykgew0NCihnZGIpIG4NDQoxNjQJCQlmb3IoZmQg
PSBiLT5maWxlczsgZmQ7IGZkID0gZmQtPm5leHQpIHsNDQooZ2RiKSANDQox
NjUJCQkJbmZkcysrOw0NCihnZGIpIA0NCjE2NAkJCWZvcihmZCA9IGItPmZp
bGVzOyBmZDsgZmQgPSBmZC0+bmV4dCkgew0NCihnZGIpIA0NCjE2OQkJaWYg
KG5mZHMpIHsNDQooZ2RiKSANDQoxNzAJCQlpbnQgYWxsX2V2ZW50cyA9IDA7
DQ0KKGdkYikgDQ0KMTcyCQkJZmRzID0gYWxsb2NhKHNpemVvZihzdHJ1Y3Qg
cG9sbGZkKSAqIG5mZHMpOw0NCihnZGIpIA0NCjE3OAkJCQlmb3IgKGZkID0g
Yi0+ZmlsZXMsIGkgPSAwOyBmZDsgZmQgPSBmZC0+bmV4dCwgaSsrKQ0NCihn
ZGIpIA0NCjE4MAkJCQkJYXNzZXJ0KGkgPCBuZmRzKTsNDQooZ2RiKSANDQox
ODIJCQkJCWZkc1tpXS5mZCA9IGZkLT5mZDsNDQooZ2RiKSANDQoxODMJCQkJ
CWZkc1tpXS5ldmVudHMgPSAwOw0NCihnZGIpIA0NCjE4NAkJCQkJZmRzW2ld
LnJldmVudHMgPSAwOw0NCihnZGIpIA0NCjE4NgkJCQkJaWYgKGZkLT53YW50
X3JlYWQpDQ0KKGdkYikgDQ0KMTg3CQkJCQkJZmRzW2ldLmV2ZW50cyB8PSBQ
T0xMSU47DQ0KKGdkYikgDQ0KMTg5CQkJCQlpZiAoZmQtPndhbnRfd3JpdGUp
DQ0KKGdkYikgDQ0KMTkyCQkJCQlhbGxfZXZlbnRzIHw9IGZkc1tpXS5ldmVu
dHM7DQ0KKGdkYikgDQ0KMTc4CQkJCWZvciAoZmQgPSBiLT5maWxlcywgaSA9
IDA7IGZkOyBmZCA9IGZkLT5uZXh0LCBpKyspDQ0KKGdkYikgDQ0KMTk0CQkJ
CWFzc2VydChpID09IG5mZHMpOw0NCihnZGIpIA0NCjE5NgkJCWlmIChhbGxf
ZXZlbnRzKQ0NCihnZGIpIA0NCjE5NwkJCQlyZXMgPSBwb2xsKGZkcywgbmZk
cywgSURMRV9USU1FKTsNDQooZ2RiKSANDQoyMDAJICAgICAgICBpZiAoIXJl
cyAmJiBuZmRzKSB7DQ0KKGdkYikgDQ0KMjAxCSAgICAgICAgICAgICAgICBn
Y19tYXliZSgmYi0+c3VwZXIsIDApOw0NCihnZGIpIHByaW50IHJlcw0NCiQ3
MyA9IDANDQooZ2RiKSBuDQ0KMjAyCSAgICAgICAgICAgICAgICByZXMgPSBw
b2xsKGZkcywgbmZkcywgdGltZW91dCA8IDAgPyA2MDAwMCA6IHRpbWVvdXQg
KiAxMDAwKTsNDQooZ2RiKSBwcmludCB0aW1lb3V0DQ0KJDc0ID0gMA0NCihn
ZGIpIG4NDQoyMDMJICAgICAgICB9DQ0KKGdkYikgcHJpbnQgcmVzDQ0KJDc1
ID0gMA0NCihnZGIpIG4NDQoyMDcJCWlmIChyZXMgPCAwKQ0NCihnZGIpIA0N
CjIxNwkJaWYgKG5mZHMgJiYgcmVzID4gMCkgew0NCihnZGIpIA0NCjI2NgkJ
bmNvID0gMDsNDQooZ2RiKSANDQoyNjgJCQlGT1JfUVVFVUUoJmItPmNhbGxv
dXRzLCBzdHJ1Y3QgY2FsbG91dCAqLCBuKSB7DQ0KKGdkYikgcw0NCjI2OQkJ
CQlpZiAobm93ID49IG4tPndoZW4pIHsNDQooZ2RiKSBuDQ0KMjcwCQkJCQlD
QUxMQkFDSyhuLT5jYWxsb3V0KTsNDQooZ2RiKSBzDQ0KZG9fcmVpbml0IChj
PTB4ODA2NTU5MCkgYXQgY2VudGVyLmM6MTQyDQ0KMTQyCQlDQVNUKGRyaXZl
cl9yZWluaXQsIHNlbGYsIGMpOw0NCihnZGIpIG4NDQoxNDQJCUxPR19IQU5E
TEVSX0lOSVQoc2VsZi0+aGFuZGxlciwgc2VsZi0+Y2ZnLCBOVUxMKTsNDQoo
Z2RiKSBzDQ0KZG9faW5pdF9hZmluZXRfZGVzdCAoYz0weDgwNjQyMTgsIGNm
Zz0weDgwNWZlNTgsIHBlcnNpc3RlbnQ9MHgwKQ0NCiAgICBhdCBhZmluZXQu
Yzo0MDANDQo0MDAJCUNBU1QoYWZpbmV0X2Rlc3QsIHNlbGYsIGMpOw0NCihn
ZGIpIG4NDQo0MDMJCXNlbGYtPmNmZyA9IGNmZzsNDQooZ2RiKSANDQo0MDQJ
CWlmIChzZWxmLT5zdXBlci5zdXBlci5sb2dfZmlmb19zaXplID09IC0xKQ0N
CihnZGIpIA0NCjQwNwkJZmQgPSBpb19vcGVuX3NvY2tldChzZWxmLT5zdXBl
ci5kZXN0X2FkZHItPmZhbWlseSwgDQ0KKGdkYikgcw0NCmlvX29wZW5fc29j
a2V0IChmYW1pbHk9Miwgc29ja3R5cGU9MSwgcHJvdG89NiwgbG9jYWw9MHgw
KSBhdCBpby5jOjExNDANDQoxMTQwCQlzID0gc29ja2V0KGZhbWlseSwgc29j
a3R5cGUsIHByb3RvKTsNDQooZ2RiKSBuDQ0KMTE0MQkJaWYgKHMgPCAwKQ0N
CihnZGIpIA0NCjExNDMJICAJaW9faW5pdF9mZChzKTsNDQooZ2RiKSANDQox
MTQ0CQlpZiAobG9jYWwgJiYgQUREUkVTU19CSU5EKGxvY2FsLCBzKSkNDQoo
Z2RiKSANDQoxMTQ3CQkJaWYgKCFsb2NhbCkNDQooZ2RiKSBidA0NCiMwICBp
b19vcGVuX3NvY2tldCAoZmFtaWx5PTIsIHNvY2t0eXBlPTEsIHByb3RvPTYs
IGxvY2FsPTB4MCkgYXQgaW8uYzoxMTQ3DQ0KIzEgIDB4ODA1MmQ0NSBpbiBk
b19pbml0X2FmaW5ldF9kZXN0IChjPTB4ODA2NDIxOCwgY2ZnPTB4ODA1ZmU1
OCwgDQ0KICAgIHBlcnNpc3RlbnQ9MHgwKSBhdCBhZmluZXQuYzo0MDcNDQoj
MiAgMHg4MDRhZWRlIGluIGRvX3JlaW5pdCAoYz0weDgwNjU1OTApIGF0IGNl
bnRlci5jOjE0NA0NCiMzICAweDgwNTRlODMgaW4gaW9faXRlciAoYj0weDgw
NWZlMTgpIGF0IGlvLmM6MjcwDQ0KIzQgIDB4ODA0OWRiYyBpbiBtYWluX2xv
b3AgKGJhY2tlbmQ9MHg4MDVmZTE4KSBhdCBtYWluLmM6MTQ4DQ0KIzUgIDB4
ODA0YTIyMCBpbiBtYWluIChhcmdjPTUsIGFyZ3Y9MHhiZmZmZmFjNCkgYXQg
bWFpbi5jOjMxMw0NCihnZGIpIG4NDQoxMTQ4CQkJCXJldHVybiBzOw0NCihn
ZGIpIA0NCjExNTEJfQ0NCihnZGIpIG4NDQpkb19pbml0X2FmaW5ldF9kZXN0
IChjPTB4ODA2NDIxOCwgY2ZnPTB4ODA1ZmU1OCwgcGVyc2lzdGVudD0weDAp
DQ0KICAgIGF0IGFmaW5ldC5jOjQxNA0NCjQxNAkJaWYgKGZkIDwgMCkgew0N
CihnZGIpIGJ0DQ0KIzAgIGRvX2luaXRfYWZpbmV0X2Rlc3QgKGM9MHg4MDY0
MjE4LCBjZmc9MHg4MDVmZTU4LCBwZXJzaXN0ZW50PTB4MCkNDQogICAgYXQg
YWZpbmV0LmM6NDE0DQ0KIzEgIDB4ODA0YWVkZSBpbiBkb19yZWluaXQgKGM9
MHg4MDY1NTkwKSBhdCBjZW50ZXIuYzoxNDQNDQojMiAgMHg4MDU0ZTgzIGlu
IGlvX2l0ZXIgKGI9MHg4MDVmZTE4KSBhdCBpby5jOjI3MA0NCiMzICAweDgw
NDlkYmMgaW4gbWFpbl9sb29wIChiYWNrZW5kPTB4ODA1ZmUxOCkgYXQgbWFp
bi5jOjE0OA0NCiM0ICAweDgwNGEyMjAgaW4gbWFpbiAoYXJnYz01LCBhcmd2
PTB4YmZmZmZhYzQpIGF0IG1haW4uYzozMTMNDQooZ2RiKSBuDQ0KNDE3CQlp
ZiAoIXNlbGYtPmRlc3RfYnVmKQ0NCihnZGIpIA0NCjQyMAkJc2VsZi0+Y29u
bl9mZCA9IGlvX2Nvbm5lY3QoY2ZnLT5iYWNrZW5kLCANDQooZ2RiKSBpIGxv
Y2Fscw0NCnNlbGYgPSAoc3RydWN0IGFmaW5ldF9kZXN0ICopIDB4ODA2NDIx
OA0NCmZkID0gNg0NCihnZGIpIHByaW50ICpzZWxmDQ0KJDc2ID0ge3N1cGVy
ID0ge3N1cGVyID0ge3N1cGVyID0ge3N1cGVyID0ge25leHQgPSAweDgwNjQx
YTAsIGlzYSA9IDB4ODA1ZjFlMCwgDQ0KICAgICAgICAgIGFsbG9jX21ldGhv
ZCA9IDAgJ1wwMDAnLCBtYXJrZWQgPSAwICdcMDAwJywgZGVhZCA9IDAgJ1ww
MDAnfSwgDQ0KICAgICAgICBwYXJhbXMgPSAweDAsIGhhbmRsZXIgPSAweDgw
NTJmNGMgPGRvX2hhbmRsZV9hZmluZXRfZGVzdD4sIA0NCiAgICAgICAgaW5p
dCA9IDB4ODA1MmNiYyA8ZG9faW5pdF9hZmluZXRfZGVzdD4sIA0NCiAgICAg
ICAgZGVzdHJveSA9IDB4ODA1MmZjNCA8ZG9fZGVzdHJveV9hZmluZXRfZGVz
dD59LCBsb2dfZmlmb19zaXplID0gMTAwMCwgDQ0KICAgICAgbmV4dF9kcml2
ZXIgPSAweDB9LCBmbGFncyA9IDIsIGJpbmRfYWRkciA9IDB4MCwgZGVzdF9h
ZGRyID0gMHg4MDY0MWEwLCANDQogICAgY29ubmVjdGVkID0gMHg4MDUyZGY0
IDxkb19hZmluZXRfZGVzdF9jb25uZWN0ZWQ+fSwgZGVzdCA9IDB4ODA2NDRi
MCwgDQ0KICBkZXN0X2J1ZiA9IDB4ODA2NDQwOCwgY29ubl9mZCA9IDB4MCwg
Y2ZnID0gMHg4MDVmZTU4fQ0NCihnZGIpIHMNDQptYWtlX2Fmc29ja2V0X2Rl
c3RfY29ubmVjdGVkIChiYWNrZW5kPTB4ODA1ZmUxOCwgZGVzdD0weDgwNjQy
MTgpDQ0KICAgIGF0IGFmc29ja2V0LmM6MTQ1DQ0KMTQ1CQlORVcoYWZzb2Nr
ZXRfZGVzdF9jb25uZWN0ZWQsIHNlbGYpOw0NCihnZGIpIG4NDQoxNDYJCXNl
bGYtPnN1cGVyLmYgPSBkb19hZnNvY2tldF9kZXN0X2Nvbm5lY3RlZDsNDQoo
Z2RiKSANDQoxNDcJCXNlbGYtPmRlc3QgPSBkZXN0Ow0NCihnZGIpIA0NCjE0
OAkJc2VsZi0+YmFja2VuZCA9IGJhY2tlbmQ7DQ0KKGdkYikgDQ0KMTQ5CQly
ZXR1cm4gJnNlbGYtPnN1cGVyOw0NCihnZGIpIA0NCjE1MAl9DQ0KKGdkYikg
DQ0KaW8uYzogY29ubmVjdGluZyB1c2luZyBmZCA2DQ0KY29ubmVjdGluZyBm
ZCA2IHRvIGluZXRhZGRyIDE1MS4xNTAuMzIuMTM1LCBwb3J0IDk5OQ0NCmRv
X2luaXRfYWZpbmV0X2Rlc3QgKGM9MHg4MDY0MjE4LCBjZmc9MHg4MDVmZTU4
LCBwZXJzaXN0ZW50PTB4MCkNDQogICAgYXQgYWZpbmV0LmM6NDI1DQ0KNDI1
CQlpZiAoc2VsZi0+Y29ubl9mZCkgew0NCihnZGIpIA0NCjQyNgkJCXJldHVy
biBTVF9PSyB8IFNUX0dPT047DQ0KKGdkYikgYnQNDQojMCAgZG9faW5pdF9h
ZmluZXRfZGVzdCAoYz0weDgwNjQyMTgsIGNmZz0weDgwNWZlNTgsIHBlcnNp
c3RlbnQ9MHgwKQ0NCiAgICBhdCBhZmluZXQuYzo0MjYNDQojMSAgMHg4MDRh
ZWRlIGluIGRvX3JlaW5pdCAoYz0weDgwNjU1OTApIGF0IGNlbnRlci5jOjE0
NA0NCiMyICAweDgwNTRlODMgaW4gaW9faXRlciAoYj0weDgwNWZlMTgpIGF0
IGlvLmM6MjcwDQ0KIzMgIDB4ODA0OWRiYyBpbiBtYWluX2xvb3AgKGJhY2tl
bmQ9MHg4MDVmZTE4KSBhdCBtYWluLmM6MTQ4DQ0KIzQgIDB4ODA0YTIyMCBp
biBtYWluIChhcmdjPTUsIGFyZ3Y9MHhiZmZmZmFjNCkgYXQgbWFpbi5jOjMx
Mw0NCihnZGIpIHByaW50ICpzZWxmDQ0KJDc3ID0ge3N1cGVyID0ge3N1cGVy
ID0ge3N1cGVyID0ge3N1cGVyID0ge25leHQgPSAweDgwNjQxYTAsIGlzYSA9
IDB4ODA1ZjFlMCwgDQ0KICAgICAgICAgIGFsbG9jX21ldGhvZCA9IDAgJ1ww
MDAnLCBtYXJrZWQgPSAwICdcMDAwJywgZGVhZCA9IDAgJ1wwMDAnfSwgDQ0K
ICAgICAgICBwYXJhbXMgPSAweDAsIGhhbmRsZXIgPSAweDgwNTJmNGMgPGRv
X2hhbmRsZV9hZmluZXRfZGVzdD4sIA0NCiAgICAgICAgaW5pdCA9IDB4ODA1
MmNiYyA8ZG9faW5pdF9hZmluZXRfZGVzdD4sIA0NCiAgICAgICAgZGVzdHJv
eSA9IDB4ODA1MmZjNCA8ZG9fZGVzdHJveV9hZmluZXRfZGVzdD59LCBsb2df
Zmlmb19zaXplID0gMTAwMCwgDQ0KICAgICAgbmV4dF9kcml2ZXIgPSAweDB9
LCBmbGFncyA9IDIsIGJpbmRfYWRkciA9IDB4MCwgZGVzdF9hZGRyID0gMHg4
MDY0MWEwLCANDQogICAgY29ubmVjdGVkID0gMHg4MDUyZGY0IDxkb19hZmlu
ZXRfZGVzdF9jb25uZWN0ZWQ+fSwgZGVzdCA9IDB4ODA2NDRiMCwgDQ0KICBk
ZXN0X2J1ZiA9IDB4ODA2NDQwOCwgY29ubl9mZCA9IDB4ODA2NTYwOCwgY2Zn
ID0gMHg4MDVmZTU4fQ0NCihnZGIpIG4NDQo0MzIJfQ0NCihnZGIpIG4NDQpk
b19yZWluaXQgKGM9MHg4MDY1NTkwKSBhdCBjZW50ZXIuYzoxNDUNDQoxNDUJ
fQ0NCihnZGIpIGJ0DQ0KIzAgIGRvX3JlaW5pdCAoYz0weDgwNjU1OTApIGF0
IGNlbnRlci5jOjE0NQ0NCiMxICAweDgwNTRlODMgaW4gaW9faXRlciAoYj0w
eDgwNWZlMTgpIGF0IGlvLmM6MjcwDQ0KIzIgIDB4ODA0OWRiYyBpbiBtYWlu
X2xvb3AgKGJhY2tlbmQ9MHg4MDVmZTE4KSBhdCBtYWluLmM6MTQ4DQ0KIzMg
IDB4ODA0YTIyMCBpbiBtYWluIChhcmdjPTUsIGFyZ3Y9MHhiZmZmZmFjNCkg
YXQgbWFpbi5jOjMxMw0NCihnZGIpIG4NDQppb19pdGVyIChiPTB4ODA1ZmUx
OCkgYXQgaW8uYzoyNzENDQoyNzEJCQkJCW9sX3F1ZXVlX3JlbW92ZSgmbi0+
aGVhZGVyKTsNDQooZ2RiKSBidA0NCiMwICBpb19pdGVyIChiPTB4ODA1ZmUx
OCkgYXQgaW8uYzoyNzENDQojMSAgMHg4MDQ5ZGJjIGluIG1haW5fbG9vcCAo
YmFja2VuZD0weDgwNWZlMTgpIGF0IG1haW4uYzoxNDgNDQojMiAgMHg4MDRh
MjIwIGluIG1haW4gKGFyZ2M9NSwgYXJndj0weGJmZmZmYWM0KSBhdCBtYWlu
LmM6MzEzDQ0KKGdkYikgbg0NCjI3MgkJCQkJb2xfc3BhY2VfZnJlZShuKTsN
DQooZ2RiKSBuDQ0KMjc0CQkJCW5jbysrOw0NCihnZGIpIG4NDQoyNjgJCQlG
T1JfUVVFVUUoJmItPmNhbGxvdXRzLCBzdHJ1Y3QgY2FsbG91dCAqLCBuKSB7
DQ0KKGdkYikgbg0NCjI3NwkJaWYgKCFuZmRzICYmICFuY28gJiYgIWItPnJl
bG9hZGluZykgew0NCihnZGIpIA0NCjI4MQkJcmV0dXJuIDE7DQ0KKGdkYikg
DQ0KMHg4MDU0ZWUwCTI4Mgl9DQ0KKGdkYikgDQ0KbWFpbl9sb29wIChiYWNr
ZW5kPTB4ODA1ZmUxOCkgYXQgbWFpbi5jOjE0OQ0NCjE0OQkJCWlmIChleGl0
X21haW5fbG9vcCkNDQooZ2RiKSANDQoxNTEJCQlpZiAoc2lnaHVwcmVjdmQg
JiYgIXJlc3RhcnRpbmcpIHsNDQooZ2RiKSANDQoxNzIJCQlpZiAoc2lndGVy
bXJlY3ZkKSB7DQ0KKGdkYikgDQ0KMTc3CQl9DQ0KKGdkYikgDQ0KMTQ4CQl3
aGlsZSAoaW9faXRlcigmYmFja2VuZC0+c3VwZXIpKSB7DQ0KKGdkYikgDQ0K
DQ0KQnJlYWtwb2ludCAxLCBpb19pdGVyIChiPTB4ODA1ZmUxOCkgYXQgaW8u
Yzo5Ng0NCjk2CQlzdHJ1Y3QgcG9sbGZkICpmZHMgPSBOVUxMOw0NCihnZGIp
IG4NDQo5NwkJaW50IHJlcyA9IDA7DQ0KKGdkYikgDQ0KOTgJCWludCB0aW1l
b3V0ID0gLTE7DQ0KKGdkYikgDQ0KOTkJCXRpbWVfdCBub3cgPSB0aW1lKE5V
TEwpOw0NCihnZGIpIA0NCjExMAkJCWZvcihmZF9wID0gJmItPmZpbGVzOyAo
ZmQgPSAqZmRfcCk7ICkgew0NCihnZGIpIA0NCjExMQkJCQlpZiAoZmQtPnN1
cGVyLmFsaXZlKSB7DQ0KKGdkYikgcHJpbnQgZmQIIAgIIAgqZmQNDQokNzgg
PSB7c3VwZXIgPSB7c3VwZXIgPSB7bmV4dCA9IDB4ODA2NTVlMCwgaXNhID0g
MHg4MDVmNTIwLCANDQogICAgICBhbGxvY19tZXRob2QgPSAwICdcMDAwJywg
bWFya2VkID0gMCAnXDAwMCcsIGRlYWQgPSAwICdcMDAwJ30sIA0NCiAgICBh
bGl2ZSA9IDEsIGtpbGwgPSAweDgwNTU3YzQgPGRvX2tpbGxfZmQ+fSwgbmV4
dCA9IDB4ODA2NDNiMCwgZmQgPSA2LCANDQogIGZuYW1lID0gMHgwLCB0b19i
ZV9jbG9zZWQgPSAwLCBjbG9zZV9yZWFzb24gPSAtMSwgY2xvc2VfY2FsbGJh
Y2sgPSAweDAsIA0NCiAgcHJlcGFyZSA9IDAsIHdhbnRfcmVhZCA9IDAsIHJl
YWQgPSAwLCB3YW50X3dyaXRlID0gMSwgDQ0KICB3cml0ZSA9IDB4ODA1NTU0
NCA8Y29ubmVjdF9jYWxsYmFjaz4sIHJlYWxseV9jbG9zZSA9IDB9DQ0KKGdk
Yikgbg0NCjExMgkJCQkJaWYgKGZkLT5wcmVwYXJlKSB7DQ0KKGdkYikgbg0N
CjExNwkJCQl9DQ0KKGdkYikgDQ0KMTQyCQkJCWZkX3AgPSAmZmQtPm5leHQ7
DQ0KKGdkYikgDQ0KMTEwCQkJZm9yKGZkX3AgPSAmYi0+ZmlsZXM7IChmZCA9
ICpmZF9wKTsgKSB7DQ0KKGdkYikgDQ0KMTExCQkJCWlmIChmZC0+c3VwZXIu
YWxpdmUpIHsNDQooZ2RiKSANDQoxMTIJCQkJCWlmIChmZC0+cHJlcGFyZSkg
ew0NCihnZGIpIA0NCjExNwkJCQl9DQ0KKGdkYikgDQ0KMTQyCQkJCWZkX3Ag
PSAmZmQtPm5leHQ7DQ0KKGdkYikgDQ0KMTEwCQkJZm9yKGZkX3AgPSAmYi0+
ZmlsZXM7IChmZCA9ICpmZF9wKTsgKSB7DQ0KKGdkYikgDQ0KMTQ4CQkJRk9S
X1FVRVVFKCZiLT5jYWxsb3V0cywgc3RydWN0IGNhbGxvdXQgKiwgbikgew0N
CihnZGIpIA0NCjE1OAkJbmZkcyA9IDA7DQ0KKGdkYikgDQ0KMTYxCQlpZiAo
IWItPnJlbG9hZGluZykgew0NCihnZGIpIA0NCjE2NAkJCWZvcihmZCA9IGIt
PmZpbGVzOyBmZDsgZmQgPSBmZC0+bmV4dCkgew0NCihnZGIpIA0NCjE2NQkJ
CQluZmRzKys7DQ0KKGdkYikgDQ0KMTY0CQkJZm9yKGZkID0gYi0+ZmlsZXM7
IGZkOyBmZCA9IGZkLT5uZXh0KSB7DQ0KKGdkYikgDQ0KMTY1CQkJCW5mZHMr
KzsNDQooZ2RiKSANDQoxNjQJCQlmb3IoZmQgPSBiLT5maWxlczsgZmQ7IGZk
ID0gZmQtPm5leHQpIHsNDQooZ2RiKSANDQoxNjkJCWlmIChuZmRzKSB7DQ0K
KGdkYikgDQ0KMTcwCQkJaW50IGFsbF9ldmVudHMgPSAwOw0NCihnZGIpIA0N
CjE3MgkJCWZkcyA9IGFsbG9jYShzaXplb2Yoc3RydWN0IHBvbGxmZCkgKiBu
ZmRzKTsNDQooZ2RiKSANDQoxNzgJCQkJZm9yIChmZCA9IGItPmZpbGVzLCBp
ID0gMDsgZmQ7IGZkID0gZmQtPm5leHQsIGkrKykNDQooZ2RiKSANDQoxODAJ
CQkJCWFzc2VydChpIDwgbmZkcyk7DQ0KKGdkYikgDQ0KMTgyCQkJCQlmZHNb
aV0uZmQgPSBmZC0+ZmQ7DQ0KKGdkYikgDQ0KMTgzCQkJCQlmZHNbaV0uZXZl
bnRzID0gMDsNDQooZ2RiKSANDQoxODQJCQkJCWZkc1tpXS5yZXZlbnRzID0g
MDsNDQooZ2RiKSANDQoxODYJCQkJCWlmIChmZC0+d2FudF9yZWFkKQ0NCihn
ZGIpIA0NCjE4OQkJCQkJaWYgKGZkLT53YW50X3dyaXRlKQ0NCihnZGIpIA0N
CjE5MAkJCQkJCWZkc1tpXS5ldmVudHMgfD0gUE9MTE9VVDsNDQooZ2RiKSAN
DQoxOTIJCQkJCWFsbF9ldmVudHMgfD0gZmRzW2ldLmV2ZW50czsNDQooZ2Ri
KSANDQoxNzgJCQkJZm9yIChmZCA9IGItPmZpbGVzLCBpID0gMDsgZmQ7IGZk
ID0gZmQtPm5leHQsIGkrKykNDQooZ2RiKSANDQoxODAJCQkJCWFzc2VydChp
IDwgbmZkcyk7DQ0KKGdkYikgDQ0KMTgyCQkJCQlmZHNbaV0uZmQgPSBmZC0+
ZmQ7DQ0KKGdkYikgDQ0KMTgzCQkJCQlmZHNbaV0uZXZlbnRzID0gMDsNDQoo
Z2RiKSANDQoxODQJCQkJCWZkc1tpXS5yZXZlbnRzID0gMDsNDQooZ2RiKSAN
DQoxODYJCQkJCWlmIChmZC0+d2FudF9yZWFkKQ0NCihnZGIpIA0NCjE4NwkJ
CQkJCWZkc1tpXS5ldmVudHMgfD0gUE9MTElOOw0NCihnZGIpIA0NCjE4OQkJ
CQkJaWYgKGZkLT53YW50X3dyaXRlKQ0NCihnZGIpIA0NCjE5MgkJCQkJYWxs
X2V2ZW50cyB8PSBmZHNbaV0uZXZlbnRzOw0NCihnZGIpIA0NCjE3OAkJCQlm
b3IgKGZkID0gYi0+ZmlsZXMsIGkgPSAwOyBmZDsgZmQgPSBmZC0+bmV4dCwg
aSsrKQ0NCihnZGIpIA0NCjE5NAkJCQlhc3NlcnQoaSA9PSBuZmRzKTsNDQoo
Z2RiKSANDQoxOTYJCQlpZiAoYWxsX2V2ZW50cykNDQooZ2RiKSANDQoxOTcJ
CQkJcmVzID0gcG9sbChmZHMsIG5mZHMsIElETEVfVElNRSk7DQ0KKGdkYikg
DQ0KMjAwCSAgICAgICAgaWYgKCFyZXMgJiYgbmZkcykgew0NCihnZGIpIHBy
aW50IHJlcw0NCiQ3OSA9IDENDQooZ2RiKSBwcmludCBmZHNbMF0NDQokODAg
PSB7ZmQgPSA2LCBldmVudHMgPSA0LCByZXZlbnRzID0gOH0NDQooZ2RiKSBw
cmludCBmZHNbMV0NDQokODEgPSB7ZmQgPSA1LCBldmVudHMgPSAxLCByZXZl
bnRzID0gMH0NDQooZ2RiKSBuDQ0KMjA1CSAgICAgICAgICAgICAgICBnY19t
YXliZSgmYi0+c3VwZXIsIDEpOw0NCihnZGIpIG4NDQoyMDcJCWlmIChyZXMg
PCAwKQ0NCihnZGIpIG4NDQoyMTcJCWlmIChuZmRzICYmIHJlcyA+IDApIHsN
DQooZ2RiKSANDQoyMjQJCQlmb3IoZmQgPSBiLT5maWxlcywgaT0wOyBmZDsg
ZmQgPSBmZC0+bmV4dCwgaSsrKQ0NCihnZGIpIA0NCjIzMQkJCQlpZiAoIWZk
LT5zdXBlci5hbGl2ZSkNDQooZ2RiKSANDQoyMzQJCQkJaWYgKGZkc1tpXS5y
ZXZlbnRzICYgUE9MTEhVUCkgew0NCihnZGIpIA0NCjI0NQkJCQlpZiAoZmRz
W2ldLnJldmVudHMgJiBQT0xMUFJJKSB7DQ0KKGdkYikgDQ0KMjQ5CQkJCWlm
IChmZHNbaV0ucmV2ZW50cyAmIChQT0xMTlZBTCB8IFBPTExFUlIpKSB7DQ0K
KGdkYikgDQ0KMjUwCQkJCQljbG9zZV9mZChmZCwgQ0xPU0VfUE9MTF9GQUlM
RUQpOw0NCihnZGIpIHMNDQpjbG9zZV9mZCAoZmQ9MHg4MDY1NjA4LCByZWFz
b249NSkgYXQgaW8uYzoxMzU2DQ0KMTM1NgkJZGVidWcoIk1hcmtpbmcgZmQg
JWkgZm9yIGNsb3NpbmcuXG4iLCBmZC0+ZmQpOw0NCihnZGIpIG4NDQpNYXJr
aW5nIGZkIDYgZm9yIGNsb3NpbmcuDQ0KMTM1OAkJZmQtPmNsb3NlX3JlYXNv
biA9IHJlYXNvbjsNDQooZ2RiKSBuDQ0KMTM1OQkJaWYgKCFmZC0+dG9fYmVf
Y2xvc2VkKQ0NCihnZGIpIHByaW50IHJlYXNvbg0NCiQ4MiA9IDUNDQooZ2Ri
KSBuDQ0KMTM2MAkJCWZkLT50b19iZV9jbG9zZWQgPSAxOw0NCihnZGIpIG4N
DQoxMzYxCX0NDQooZ2RiKSBuDQ0KaW9faXRlciAoYj0weDgwNWZlMTgpIGF0
IGlvLmM6MjUxDQ0KMjUxCQkJCQljb250aW51ZTsNDQooZ2RiKSBuDQ0KMjI0
CQkJZm9yKGZkID0gYi0+ZmlsZXMsIGk9MDsgZmQ7IGZkID0gZmQtPm5leHQs
IGkrKykNDQooZ2RiKSBuDQ0KMjMxCQkJCWlmICghZmQtPnN1cGVyLmFsaXZl
KQ0NCihnZGIpIA0NCjIzNAkJCQlpZiAoZmRzW2ldLnJldmVudHMgJiBQT0xM
SFVQKSB7DQ0KKGdkYikgDQ0KMjQ1CQkJCWlmIChmZHNbaV0ucmV2ZW50cyAm
IFBPTExQUkkpIHsNDQooZ2RiKSANDQoyNDkJCQkJaWYgKGZkc1tpXS5yZXZl
bnRzICYgKFBPTExOVkFMIHwgUE9MTEVSUikpIHsNDQooZ2RiKSANDQoyNTMJ
CQkJaWYgKGZkc1tpXS5yZXZlbnRzICYgUE9MTE9VVCkNDQooZ2RiKSANDQoy
NTcJCQkJaWYgKGZkc1tpXS5yZXZlbnRzICYgUE9MTElOKSB7DQ0KKGdkYikg
DQ0KMjI0CQkJZm9yKGZkID0gYi0+ZmlsZXMsIGk9MDsgZmQ7IGZkID0gZmQt
Pm5leHQsIGkrKykNDQooZ2RiKSANDQoyNjMJCQlhc3NlcnQoaSA9PSBuZmRz
KTsNDQooZ2RiKSANDQoyNjYJCW5jbyA9IDA7DQ0KKGdkYikgDQ0KMjY4CQkJ
Rk9SX1FVRVVFKCZiLT5jYWxsb3V0cywgc3RydWN0IGNhbGxvdXQgKiwgbikg
ew0NCihnZGIpIA0NCjI3NwkJaWYgKCFuZmRzICYmICFuY28gJiYgIWItPnJl
bG9hZGluZykgew0NCihnZGIpIA0NCjI4MQkJcmV0dXJuIDE7DQ0KKGdkYikg
DQ0KMHg4MDU0ZWUwCTI4Mgl9DQ0KKGdkYikgDQ0KbWFpbl9sb29wIChiYWNr
ZW5kPTB4ODA1ZmUxOCkgYXQgbWFpbi5jOjE0OQ0NCjE0OQkJCWlmIChleGl0
X21haW5fbG9vcCkNDQooZ2RiKSANDQoxNTEJCQlpZiAoc2lnaHVwcmVjdmQg
JiYgIXJlc3RhcnRpbmcpIHsNDQooZ2RiKSANDQoxNzIJCQlpZiAoc2lndGVy
bXJlY3ZkKSB7DQ0KKGdkYikgDQ0KMTc3CQl9DQ0KKGdkYikgDQ0KMTQ4CQl3
aGlsZSAoaW9faXRlcigmYmFja2VuZC0+c3VwZXIpKSB7DQ0KKGdkYikgDQ0K
DQ0KQnJlYWtwb2ludCAxLCBpb19pdGVyIChiPTB4ODA1ZmUxOCkgYXQgaW8u
Yzo5Ng0NCjk2CQlzdHJ1Y3QgcG9sbGZkICpmZHMgPSBOVUxMOw0NCihnZGIp
IA0NCjk3CQlpbnQgcmVzID0gMDsNDQooZ2RiKSANDQo5OAkJaW50IHRpbWVv
dXQgPSAtMTsNDQooZ2RiKSANDQo5OQkJdGltZV90IG5vdyA9IHRpbWUoTlVM
TCk7DQ0KKGdkYikgDQ0KMTEwCQkJZm9yKGZkX3AgPSAmYi0+ZmlsZXM7IChm
ZCA9ICpmZF9wKTsgKSB7DQ0KKGdkYikgDQ0KMTExCQkJCWlmIChmZC0+c3Vw
ZXIuYWxpdmUpIHsNDQooZ2RiKSANDQoxMTIJCQkJCWlmIChmZC0+cHJlcGFy
ZSkgew0NCihnZGIpIHgIIAhwcmludCBmZC0+ZmQNDQokODMgPSA2DQ0KKGdk
YikgcHJpbnQgKmZkDQ0KJDg0ID0ge3N1cGVyID0ge3N1cGVyID0ge25leHQg
PSAweDgwNjU1ZTAsIGlzYSA9IDB4ODA1ZjUyMCwgDQ0KICAgICAgYWxsb2Nf
bWV0aG9kID0gMCAnXDAwMCcsIG1hcmtlZCA9IDAgJ1wwMDAnLCBkZWFkID0g
MCAnXDAwMCd9LCANDQogICAgYWxpdmUgPSAxLCBraWxsID0gMHg4MDU1N2M0
IDxkb19raWxsX2ZkPn0sIG5leHQgPSAweDgwNjQzYjAsIGZkID0gNiwgDQ0K
ICBmbmFtZSA9IDB4MCwgdG9fYmVfY2xvc2VkID0gMSwgY2xvc2VfcmVhc29u
ID0gNSwgY2xvc2VfY2FsbGJhY2sgPSAweDAsIA0NCiAgcHJlcGFyZSA9IDAs
IHdhbnRfcmVhZCA9IDAsIHJlYWQgPSAwLCB3YW50X3dyaXRlID0gMSwgDQ0K
ICB3cml0ZSA9IDB4ODA1NTU0NCA8Y29ubmVjdF9jYWxsYmFjaz4sIHJlYWxs
eV9jbG9zZSA9IDB9DQ0KKGdkYikgbg0NCjExNQkJCQkJCWtpbGxfZmQoZmQp
Ow0NCihnZGIpIG4NDQoxMTcJCQkJfQ0NCihnZGIpIA0NCjE0MgkJCQlmZF9w
ID0gJmZkLT5uZXh0Ow0NCihnZGIpIA0NCjExMAkJCWZvcihmZF9wID0gJmIt
PmZpbGVzOyAoZmQgPSAqZmRfcCk7ICkgew0NCihnZGIpIA0NCjExMQkJCQlp
ZiAoZmQtPnN1cGVyLmFsaXZlKSB7DQ0KKGdkYikgDQ0KMTEyCQkJCQlpZiAo
ZmQtPnByZXBhcmUpIHsNDQooZ2RiKSANDQoxMTcJCQkJfQ0NCihnZGIpIA0N
CjE0MgkJCQlmZF9wID0gJmZkLT5uZXh0Ow0NCihnZGIpIA0NCjExMAkJCWZv
cihmZF9wID0gJmItPmZpbGVzOyAoZmQgPSAqZmRfcCk7ICkgew0NCihnZGIp
IA0NCjE0OAkJCUZPUl9RVUVVRSgmYi0+Y2FsbG91dHMsIHN0cnVjdCBjYWxs
b3V0ICosIG4pIHsNDQooZ2RiKSANDQoxNTgJCW5mZHMgPSAwOw0NCihnZGIp
IA0NCjE2MQkJaWYgKCFiLT5yZWxvYWRpbmcpIHsNDQooZ2RiKSANDQoxNjQJ
CQlmb3IoZmQgPSBiLT5maWxlczsgZmQ7IGZkID0gZmQtPm5leHQpIHsNDQoo
Z2RiKSANDQoxNjUJCQkJbmZkcysrOw0NCihnZGIpIA0NCjE2NAkJCWZvcihm
ZCA9IGItPmZpbGVzOyBmZDsgZmQgPSBmZC0+bmV4dCkgew0NCihnZGIpIA0N
CjE2NQkJCQluZmRzKys7DQ0KKGdkYikgDQ0KMTY0CQkJZm9yKGZkID0gYi0+
ZmlsZXM7IGZkOyBmZCA9IGZkLT5uZXh0KSB7DQ0KKGdkYikgDQ0KMTY5CQlp
ZiAobmZkcykgew0NCihnZGIpIA0NCjE3MAkJCWludCBhbGxfZXZlbnRzID0g
MDsNDQooZ2RiKSANDQoxNzIJCQlmZHMgPSBhbGxvY2Eoc2l6ZW9mKHN0cnVj
dCBwb2xsZmQpICogbmZkcyk7DQ0KKGdkYikgDQ0KMTc4CQkJCWZvciAoZmQg
PSBiLT5maWxlcywgaSA9IDA7IGZkOyBmZCA9IGZkLT5uZXh0LCBpKyspDQ0K
KGdkYikgDQ0KMTgwCQkJCQlhc3NlcnQoaSA8IG5mZHMpOw0NCihnZGIpIA0N
CjE4MgkJCQkJZmRzW2ldLmZkID0gZmQtPmZkOw0NCihnZGIpIA0NCjE4MwkJ
CQkJZmRzW2ldLmV2ZW50cyA9IDA7DQ0KKGdkYikgDQ0KMTg0CQkJCQlmZHNb
aV0ucmV2ZW50cyA9IDA7DQ0KKGdkYikgDQ0KMTg2CQkJCQlpZiAoZmQtPndh
bnRfcmVhZCkNDQooZ2RiKSANDQoxODkJCQkJCWlmIChmZC0+d2FudF93cml0
ZSkNDQooZ2RiKSANDQoxOTAJCQkJCQlmZHNbaV0uZXZlbnRzIHw9IFBPTExP
VVQ7DQ0KKGdkYikgDQ0KMTkyCQkJCQlhbGxfZXZlbnRzIHw9IGZkc1tpXS5l
dmVudHM7DQ0KKGdkYikgDQ0KMTc4CQkJCWZvciAoZmQgPSBiLT5maWxlcywg
aSA9IDA7IGZkOyBmZCA9IGZkLT5uZXh0LCBpKyspDQ0KKGdkYikgDQ0KMTgw
CQkJCQlhc3NlcnQoaSA8IG5mZHMpOw0NCihnZGIpIA0NCjE4MgkJCQkJZmRz
W2ldLmZkID0gZmQtPmZkOw0NCihnZGIpIA0NCjE4MwkJCQkJZmRzW2ldLmV2
ZW50cyA9IDA7DQ0KKGdkYikgDQ0KMTg0CQkJCQlmZHNbaV0ucmV2ZW50cyA9
IDA7DQ0KKGdkYikgDQ0KMTg2CQkJCQlpZiAoZmQtPndhbnRfcmVhZCkNDQoo
Z2RiKSANDQoxODcJCQkJCQlmZHNbaV0uZXZlbnRzIHw9IFBPTExJTjsNDQoo
Z2RiKSANDQoxODkJCQkJCWlmIChmZC0+d2FudF93cml0ZSkNDQooZ2RiKSAN
DQoxOTIJCQkJCWFsbF9ldmVudHMgfD0gZmRzW2ldLmV2ZW50czsNDQooZ2Ri
KSANDQoxNzgJCQkJZm9yIChmZCA9IGItPmZpbGVzLCBpID0gMDsgZmQ7IGZk
ID0gZmQtPm5leHQsIGkrKykNDQooZ2RiKSANDQoxOTQJCQkJYXNzZXJ0KGkg
PT0gbmZkcyk7DQ0KKGdkYikgDQ0KMTk2CQkJaWYgKGFsbF9ldmVudHMpDQ0K
KGdkYikgDQ0KMTk3CQkJCXJlcyA9IHBvbGwoZmRzLCBuZmRzLCBJRExFX1RJ
TUUpOw0NCihnZGIpIA0NCjIwMAkgICAgICAgIGlmICghcmVzICYmIG5mZHMp
IHsNDQooZ2RiKSBwcmludCByZXMNDQokODUgPSAxDQ0KKGdkYikgcHJpbnQg
ZmRzWzBdDQ0KJDg2ID0ge2ZkID0gNiwgZXZlbnRzID0gNCwgcmV2ZW50cyA9
IDh9DQ0KKGdkYikgbg0NCjIwNQkgICAgICAgICAgICAgICAgZ2NfbWF5YmUo
JmItPnN1cGVyLCAxKTsNDQooZ2RiKSANDQoyMDcJCWlmIChyZXMgPCAwKQ0N
CihnZGIpIA0NCjIxNwkJaWYgKG5mZHMgJiYgcmVzID4gMCkgew0NCihnZGIp
IA0NCjIyNAkJCWZvcihmZCA9IGItPmZpbGVzLCBpPTA7IGZkOyBmZCA9IGZk
LT5uZXh0LCBpKyspDQ0KKGdkYikgDQ0KMjMxCQkJCWlmICghZmQtPnN1cGVy
LmFsaXZlKQ0NCihnZGIpIA0NCjIzMgkJCQkJY29udGludWU7DQ0KKGdkYikg
DQ0KMjI0CQkJZm9yKGZkID0gYi0+ZmlsZXMsIGk9MDsgZmQ7IGZkID0gZmQt
Pm5leHQsIGkrKykNDQooZ2RiKSANDQoyMzEJCQkJaWYgKCFmZC0+c3VwZXIu
YWxpdmUpDQ0KKGdkYikgDQ0KMjM0CQkJCWlmIChmZHNbaV0ucmV2ZW50cyAm
IFBPTExIVVApIHsNDQooZ2RiKSANDQoyNDUJCQkJaWYgKGZkc1tpXS5yZXZl
bnRzICYgUE9MTFBSSSkgew0NCihnZGIpIA0NCjI0OQkJCQlpZiAoZmRzW2ld
LnJldmVudHMgJiAoUE9MTE5WQUwgfCBQT0xMRVJSKSkgew0NCihnZGIpIA0N
CjI1MwkJCQlpZiAoZmRzW2ldLnJldmVudHMgJiBQT0xMT1VUKQ0NCihnZGIp
IA0NCjI1NwkJCQlpZiAoZmRzW2ldLnJldmVudHMgJiBQT0xMSU4pIHsNDQoo
Z2RiKSANDQoyMjQJCQlmb3IoZmQgPSBiLT5maWxlcywgaT0wOyBmZDsgZmQg
PSBmZC0+bmV4dCwgaSsrKQ0NCihnZGIpIA0NCjI2MwkJCWFzc2VydChpID09
IG5mZHMpOw0NCihnZGIpIA0NCjI2NgkJbmNvID0gMDsNDQooZ2RiKSANDQoy
NjgJCQlGT1JfUVVFVUUoJmItPmNhbGxvdXRzLCBzdHJ1Y3QgY2FsbG91dCAq
LCBuKSB7DQ0KKGdkYikgDQ0KMjc3CQlpZiAoIW5mZHMgJiYgIW5jbyAmJiAh
Yi0+cmVsb2FkaW5nKSB7DQ0KKGdkYikgDQ0KMjgxCQlyZXR1cm4gMTsNDQoo
Z2RiKSANDQoweDgwNTRlZTAJMjgyCX0NDQooZ2RiKSANDQptYWluX2xvb3Ag
KGJhY2tlbmQ9MHg4MDVmZTE4KSBhdCBtYWluLmM6MTQ5DQ0KMTQ5CQkJaWYg
KGV4aXRfbWFpbl9sb29wKQ0NCihnZGIpIA0NCjE1MQkJCWlmIChzaWdodXBy
ZWN2ZCAmJiAhcmVzdGFydGluZykgew0NCihnZGIpIA0NCjE3MgkJCWlmIChz
aWd0ZXJtcmVjdmQpIHsNDQooZ2RiKSANDQoxNzcJCX0NDQooZ2RiKSANDQox
NDgJCXdoaWxlIChpb19pdGVyKCZiYWNrZW5kLT5zdXBlcikpIHsNDQooZ2Ri
KSANDQoNDQpCcmVha3BvaW50IDEsIGlvX2l0ZXIgKGI9MHg4MDVmZTE4KSBh
dCBpby5jOjk2DQ0KOTYJCXN0cnVjdCBwb2xsZmQgKmZkcyA9IE5VTEw7DQ0K
KGdkYikgDQ0KOTcJCWludCByZXMgPSAwOw0NCihnZGIpIA0NCjk4CQlpbnQg
dGltZW91dCA9IC0xOw0NCihnZGIpIA0NCjk5CQl0aW1lX3Qgbm93ID0gdGlt
ZShOVUxMKTsNDQooZ2RiKSANDQoxMTAJCQlmb3IoZmRfcCA9ICZiLT5maWxl
czsgKGZkID0gKmZkX3ApOyApIHsNDQooZ2RiKSANDQoxMTEJCQkJaWYgKGZk
LT5zdXBlci5hbGl2ZSkgew0NCihnZGIpIA0NCjExOQkJCQkJaWYgKGZkLT5m
ZCA8IDApDQ0KKGdkYikgDQ0KMTI2CQkJCQkJaWYgKGZkLT5yZWFsbHlfY2xv
c2UpDQ0KKGdkYikgDQ0KMTMxCQkJCQkJaWYgKGZkLT5jbG9zZV9jYWxsYmFj
ayAmJiBmZC0+Y2xvc2VfcmVhc29uKQ0NCihnZGIpIA0NCjEzNAkJCQkJCWRl
YnVnKCJDbG9zaW5nIGZkICVpLlxuIiwgZmQtPmZkKTsNDQooZ2RiKSBwcmlu
dCAqZmQNDQokODcgPSB7c3VwZXIgPSB7c3VwZXIgPSB7bmV4dCA9IDB4ODA2
NTVlMCwgaXNhID0gMHg4MDVmNTIwLCANDQogICAgICBhbGxvY19tZXRob2Qg
PSAwICdcMDAwJywgbWFya2VkID0gMCAnXDAwMCcsIGRlYWQgPSAwICdcMDAw
J30sIA0NCiAgICBhbGl2ZSA9IDAsIGtpbGwgPSAweDgwNTU3YzQgPGRvX2tp
bGxfZmQ+fSwgbmV4dCA9IDB4ODA2NDNiMCwgZmQgPSA2LCANDQogIGZuYW1l
ID0gMHgwLCB0b19iZV9jbG9zZWQgPSAxLCBjbG9zZV9yZWFzb24gPSA1LCBj
bG9zZV9jYWxsYmFjayA9IDB4MCwgDQ0KICBwcmVwYXJlID0gMCwgd2FudF9y
ZWFkID0gMCwgcmVhZCA9IDAsIHdhbnRfd3JpdGUgPSAxLCANDQogIHdyaXRl
ID0gMHg4MDU1NTQ0IDxjb25uZWN0X2NhbGxiYWNrPiwgcmVhbGx5X2Nsb3Nl
ID0gMH0NDQooZ2RiKSBwcmludCBmZC0+CCAICCAICCAICCAICCAICCAICCAI
CCAICCAICCAIBwduDQ0KQ2xvc2luZyBmZCA2Lg0NCjEzNgkJCQkJCWNsb3Nl
KGZkLT5mZCk7DQ0KKGdkYikgDQ0KMTM5CQkJCQkqZmRfcCA9IGZkLT5uZXh0
Ow0NCihnZGIpIA0NCjE0MAkJCQkJY29udGludWU7DQ0KKGdkYikgDQ0KMTEw
CQkJZm9yKGZkX3AgPSAmYi0+ZmlsZXM7IChmZCA9ICpmZF9wKTsgKSB7DQ0K
KGdkYikgDQ0KMTExCQkJCWlmIChmZC0+c3VwZXIuYWxpdmUpIHsNDQooZ2Ri
KSANDQoxMTIJCQkJCWlmIChmZC0+cHJlcGFyZSkgew0NCihnZGIpIA0NCjEx
NwkJCQl9DQ0KKGdkYikgDQ0KMTQyCQkJCWZkX3AgPSAmZmQtPm5leHQ7DQ0K
KGdkYikgDQ0KMTEwCQkJZm9yKGZkX3AgPSAmYi0+ZmlsZXM7IChmZCA9ICpm
ZF9wKTsgKSB7DQ0KKGdkYikgDQ0KMTQ4CQkJRk9SX1FVRVVFKCZiLT5jYWxs
b3V0cywgc3RydWN0IGNhbGxvdXQgKiwgbikgew0NCihnZGIpIA0NCjE1OAkJ
bmZkcyA9IDA7DQ0KKGdkYikgDQ0KMTYxCQlpZiAoIWItPnJlbG9hZGluZykg
ew0NCihnZGIpIA0NCjE2NAkJCWZvcihmZCA9IGItPmZpbGVzOyBmZDsgZmQg
PSBmZC0+bmV4dCkgew0NCihnZGIpIA0NCjE2NQkJCQluZmRzKys7DQ0KKGdk
YikgDQ0KMTY0CQkJZm9yKGZkID0gYi0+ZmlsZXM7IGZkOyBmZCA9IGZkLT5u
ZXh0KSB7DQ0KKGdkYikgDQ0KMTY5CQlpZiAobmZkcykgew0NCihnZGIpIA0N
CjE3MAkJCWludCBhbGxfZXZlbnRzID0gMDsNDQooZ2RiKSANDQoxNzIJCQlm
ZHMgPSBhbGxvY2Eoc2l6ZW9mKHN0cnVjdCBwb2xsZmQpICogbmZkcyk7DQ0K
KGdkYikgDQ0KMTc4CQkJCWZvciAoZmQgPSBiLT5maWxlcywgaSA9IDA7IGZk
OyBmZCA9IGZkLT5uZXh0LCBpKyspDQ0KKGdkYikgDQ0KMTgwCQkJCQlhc3Nl
cnQoaSA8IG5mZHMpOw0NCihnZGIpIA0NCjE4MgkJCQkJZmRzW2ldLmZkID0g
ZmQtPmZkOw0NCihnZGIpIA0NCjE4MwkJCQkJZmRzW2ldLmV2ZW50cyA9IDA7
DQ0KKGdkYikgDQ0KMTg0CQkJCQlmZHNbaV0ucmV2ZW50cyA9IDA7DQ0KKGdk
YikgDQ0KMTg2CQkJCQlpZiAoZmQtPndhbnRfcmVhZCkNDQooZ2RiKSANDQox
ODcJCQkJCQlmZHNbaV0uZXZlbnRzIHw9IFBPTExJTjsNDQooZ2RiKSANDQox
ODkJCQkJCWlmIChmZC0+d2FudF93cml0ZSkNDQooZ2RiKSANDQoxOTIJCQkJ
CWFsbF9ldmVudHMgfD0gZmRzW2ldLmV2ZW50czsNDQooZ2RiKSANDQoxNzgJ
CQkJZm9yIChmZCA9IGItPmZpbGVzLCBpID0gMDsgZmQ7IGZkID0gZmQtPm5l
eHQsIGkrKykNDQooZ2RiKSANDQoxOTQJCQkJYXNzZXJ0KGkgPT0gbmZkcyk7
DQ0KKGdkYikgDQ0KMTk2CQkJaWYgKGFsbF9ldmVudHMpDQ0KKGdkYikgDQ0K
MTk3CQkJCXJlcyA9IHBvbGwoZmRzLCBuZmRzLCBJRExFX1RJTUUpOw0NCihn
ZGIpIA0NCjIwMAkgICAgICAgIGlmICghcmVzICYmIG5mZHMpIHsNDQooZ2Ri
KSANDQoyMDEJICAgICAgICAgICAgICAgIGdjX21heWJlKCZiLT5zdXBlciwg
MCk7DQ0KKGdkYikgDQ0KMjAyCSAgICAgICAgICAgICAgICByZXMgPSBwb2xs
KGZkcywgbmZkcywgdGltZW91dCA8IDAgPyA2MDAwMCA6IHRpbWVvdXQgKiAx
MDAwKTsNDQooZ2RiKSANDQoNDQoyMDMJICAgICAgICB9DQ0KKGdkYikgDQ0K
MjA3CQlpZiAocmVzIDwgMCkNDQooZ2RiKSBuDQ0KMjE3CQlpZiAobmZkcyAm
JiByZXMgPiAwKSB7DQ0KKGdkYikgDQ0KMjI0CQkJZm9yKGZkID0gYi0+Zmls
ZXMsIGk9MDsgZmQ7IGZkID0gZmQtPm5leHQsIGkrKykNDQooZ2RiKSANDQoy
MzEJCQkJaWYgKCFmZC0+c3VwZXIuYWxpdmUpDQ0KKGdkYikgDQ0KMjM0CQkJ
CWlmIChmZHNbaV0ucmV2ZW50cyAmIFBPTExIVVApIHsNDQooZ2RiKSANDQoy
NDUJCQkJaWYgKGZkc1tpXS5yZXZlbnRzICYgUE9MTFBSSSkgew0NCihnZGIp
IA0NCjI0OQkJCQlpZiAoZmRzW2ldLnJldmVudHMgJiAoUE9MTE5WQUwgfCBQ
T0xMRVJSKSkgew0NCihnZGIpIA0NCjI1MwkJCQlpZiAoZmRzW2ldLnJldmVu
dHMgJiBQT0xMT1VUKQ0NCihnZGIpIA0NCjI1NwkJCQlpZiAoZmRzW2ldLnJl
dmVudHMgJiBQT0xMSU4pIHsNDQooZ2RiKSANDQoyNTgJCQkJCWlmIChmZC0+
d2FudF9yZWFkICYmIGZkLT5yZWFkKQ0NCihnZGIpIA0NCjI1OQkJCQkJCVJF
QURfRkQoZmQpOw0NCihnZGIpIA0NCmlvLmM6IFByZXBhcmluZyBmZCA2IGZv
ciByZWFkaW5nDQ0KMjI0CQkJZm9yKGZkID0gYi0+ZmlsZXMsIGk9MDsgZmQ7
IGZkID0gZmQtPm5leHQsIGkrKykNDQooZ2RiKSANDQoyNjMJCQlhc3NlcnQo
aSA9PSBuZmRzKTsNDQooZ2RiKSANDQoyNjYJCW5jbyA9IDA7DQ0KKGdkYikg
DQ0KMjY4CQkJRk9SX1FVRVVFKCZiLT5jYWxsb3V0cywgc3RydWN0IGNhbGxv
dXQgKiwgbikgew0NCihnZGIpIA0NCjI3NwkJaWYgKCFuZmRzICYmICFuY28g
JiYgIWItPnJlbG9hZGluZykgew0NCihnZGIpIA0NCjI4MQkJcmV0dXJuIDE7
DQ0KKGdkYikgDQ0KMHg4MDU0ZWUwCTI4Mgl9DQ0KKGdkYikgDQ0KbWFpbl9s
b29wIChiYWNrZW5kPTB4ODA1ZmUxOCkgYXQgbWFpbi5jOjE0OQ0NCjE0OQkJ
CWlmIChleGl0X21haW5fbG9vcCkNDQooZ2RiKSANDQoxNTEJCQlpZiAoc2ln
aHVwcmVjdmQgJiYgIXJlc3RhcnRpbmcpIHsNDQooZ2RiKSANDQoxNzIJCQlp
ZiAoc2lndGVybXJlY3ZkKSB7DQ0KKGdkYikgDQ0KMTc3CQl9DQ0KKGdkYikg
DQ0KMTQ4CQl3aGlsZSAoaW9faXRlcigmYmFja2VuZC0+c3VwZXIpKSB7DQ0K
KGdkYikgDQ0KDQ0KQnJlYWtwb2ludCAxLCBpb19pdGVyIChiPTB4ODA1ZmUx
OCkgYXQgaW8uYzo5Ng0NCjk2CQlzdHJ1Y3QgcG9sbGZkICpmZHMgPSBOVUxM
Ow0NCihnZGIpIA0NCjk3CQlpbnQgcmVzID0gMDsNDQooZ2RiKSANDQo5OAkJ
aW50IHRpbWVvdXQgPSAtMTsNDQooZ2RiKSANDQo5OQkJdGltZV90IG5vdyA9
IHRpbWUoTlVMTCk7DQ0KKGdkYikgDQ0KMTEwCQkJZm9yKGZkX3AgPSAmYi0+
ZmlsZXM7IChmZCA9ICpmZF9wKTsgKSB7DQ0KKGdkYikgDQ0KMTExCQkJCWlm
IChmZC0+c3VwZXIuYWxpdmUpIHsNDQooZ2RiKSANDQoxMTIJCQkJCWlmIChm
ZC0+cHJlcGFyZSkgew0NCihnZGIpIA0NCjExMwkJCQkJCVBSRVBBUkVfRkQo
ZmQpOw0NCihnZGIpIA0NCjExNAkJCQkJfSBlbHNlIGlmIChmZC0+dG9fYmVf
Y2xvc2VkKSB7DQ0KKGdkYikgDQ0KMTE3CQkJCX0NDQooZ2RiKSANDQoxNDIJ
CQkJZmRfcCA9ICZmZC0+bmV4dDsNDQooZ2RiKSANDQoxMTAJCQlmb3IoZmRf
cCA9ICZiLT5maWxlczsgKGZkID0gKmZkX3ApOyApIHsNDQooZ2RiKSANDQox
MTEJCQkJaWYgKGZkLT5zdXBlci5hbGl2ZSkgew0NCihnZGIpIA0NCjExMgkJ
CQkJaWYgKGZkLT5wcmVwYXJlKSB7DQ0KKGdkYikgDQ0KMTE3CQkJCX0NDQoo
Z2RiKSANDQoxNDIJCQkJZmRfcCA9ICZmZC0+bmV4dDsNDQooZ2RiKSANDQox
MTAJCQlmb3IoZmRfcCA9ICZiLT5maWxlczsgKGZkID0gKmZkX3ApOyApIHsN
DQooZ2RiKSANDQoxNDgJCQlGT1JfUVVFVUUoJmItPmNhbGxvdXRzLCBzdHJ1
Y3QgY2FsbG91dCAqLCBuKSB7DQ0KKGdkYikgDQ0KMTU4CQluZmRzID0gMDsN
DQooZ2RiKSANDQoxNjEJCWlmICghYi0+cmVsb2FkaW5nKSB7DQ0KKGdkYikg
DQ0KMTY0CQkJZm9yKGZkID0gYi0+ZmlsZXM7IGZkOyBmZCA9IGZkLT5uZXh0
KSB7DQ0KKGdkYikgDQ0KMTY1CQkJCW5mZHMrKzsNDQooZ2RiKSANDQoxNjQJ
CQlmb3IoZmQgPSBiLT5maWxlczsgZmQ7IGZkID0gZmQtPm5leHQpIHsNDQoo
Z2RiKSANDQoxNjUJCQkJbmZkcysrOw0NCihnZGIpIA0NCjE2NAkJCWZvcihm
ZCA9IGItPmZpbGVzOyBmZDsgZmQgPSBmZC0+bmV4dCkgew0NCihnZGIpIA0N
CjE2OQkJaWYgKG5mZHMpIHsNDQooZ2RiKSANDQoxNzAJCQlpbnQgYWxsX2V2
ZW50cyA9IDA7DQ0KKGdkYikgDQ0KMTcyCQkJZmRzID0gYWxsb2NhKHNpemVv
ZihzdHJ1Y3QgcG9sbGZkKSAqIG5mZHMpOw0NCihnZGIpIA0NCjE3OAkJCQlm
b3IgKGZkID0gYi0+ZmlsZXMsIGkgPSAwOyBmZDsgZmQgPSBmZC0+bmV4dCwg
aSsrKQ0NCihnZGIpIA0NCjE4MAkJCQkJYXNzZXJ0KGkgPCBuZmRzKTsNDQoo
Z2RiKSANDQoxODIJCQkJCWZkc1tpXS5mZCA9IGZkLT5mZDsNDQooZ2RiKSAN
DQoxODMJCQkJCWZkc1tpXS5ldmVudHMgPSAwOw0NCihnZGIpIA0NCjE4NAkJ
CQkJZmRzW2ldLnJldmVudHMgPSAwOw0NCihnZGIpIA0NCjE4NgkJCQkJaWYg
KGZkLT53YW50X3JlYWQpDQ0KKGdkYikgDQ0KMTg3CQkJCQkJZmRzW2ldLmV2
ZW50cyB8PSBQT0xMSU47DQ0KKGdkYikgDQ0KMTg5CQkJCQlpZiAoZmQtPndh
bnRfd3JpdGUpDQ0KKGdkYikgDQ0KMTkyCQkJCQlhbGxfZXZlbnRzIHw9IGZk
c1tpXS5ldmVudHM7DQ0KKGdkYikgDQ0KMTc4CQkJCWZvciAoZmQgPSBiLT5m
aWxlcywgaSA9IDA7IGZkOyBmZCA9IGZkLT5uZXh0LCBpKyspDQ0KKGdkYikg
DQ0KMTgwCQkJCQlhc3NlcnQoaSA8IG5mZHMpOw0NCihnZGIpIA0NCjE4MgkJ
CQkJZmRzW2ldLmZkID0gZmQtPmZkOw0NCihnZGIpIA0NCjE4MwkJCQkJZmRz
W2ldLmV2ZW50cyA9IDA7DQ0KKGdkYikgDQ0KMTg0CQkJCQlmZHNbaV0ucmV2
ZW50cyA9IDA7DQ0KKGdkYikgDQ0KMTg2CQkJCQlpZiAoZmQtPndhbnRfcmVh
ZCkNDQooZ2RiKSANDQoxODcJCQkJCQlmZHNbaV0uZXZlbnRzIHw9IFBPTExJ
TjsNDQooZ2RiKSANDQoxODkJCQkJCWlmIChmZC0+d2FudF93cml0ZSkNDQoo
Z2RiKSANDQoxOTIJCQkJCWFsbF9ldmVudHMgfD0gZmRzW2ldLmV2ZW50czsN
DQooZ2RiKSANDQoxNzgJCQkJZm9yIChmZCA9IGItPmZpbGVzLCBpID0gMDsg
ZmQ7IGZkID0gZmQtPm5leHQsIGkrKykNDQooZ2RiKSANDQoxOTQJCQkJYXNz
ZXJ0KGkgPT0gbmZkcyk7DQ0KKGdkYikgDQ0KMTk2CQkJaWYgKGFsbF9ldmVu
dHMpDQ0KKGdkYikgDQ0KMTk3CQkJCXJlcyA9IHBvbGwoZmRzLCBuZmRzLCBJ
RExFX1RJTUUpOw0NCihnZGIpIA0NCjIwMAkgICAgICAgIGlmICghcmVzICYm
IG5mZHMpIHsNDQooZ2RiKSANDQoyMDUJICAgICAgICAgICAgICAgIGdjX21h
eWJlKCZiLT5zdXBlciwgMSk7DQ0KKGdkYikgDQ0KMjA3CQlpZiAocmVzIDwg
MCkNDQooZ2RiKSANDQoyMTcJCWlmIChuZmRzICYmIHJlcyA+IDApIHsNDQoo
Z2RiKSANDQoyMjQJCQlmb3IoZmQgPSBiLT5maWxlcywgaT0wOyBmZDsgZmQg
PSBmZC0+bmV4dCwgaSsrKQ0NCihnZGIpIA0NCjIzMQkJCQlpZiAoIWZkLT5z
dXBlci5hbGl2ZSkNDQooZ2RiKSANDQoyMzQJCQkJaWYgKGZkc1tpXS5yZXZl
bnRzICYgUE9MTEhVUCkgew0NCihnZGIpIA0NCjIzNQkJCQkJaWYgKGZkLT53
YW50X3JlYWQgJiYgZmQtPnJlYWQpDQ0KKGdkYikgDQ0KMjM2CQkJCQkJUkVB
RF9GRChmZCk7DQ0KKGdkYikgDQ0KMjQzCQkJCQljb250aW51ZTsNDQooZ2Ri
KSANDQoyMjQJCQlmb3IoZmQgPSBiLT5maWxlcywgaT0wOyBmZDsgZmQgPSBm
ZC0+bmV4dCwgaSsrKQ0NCihnZGIpIA0NCjIzMQkJCQlpZiAoIWZkLT5zdXBl
ci5hbGl2ZSkNDQooZ2RiKSANDQoyMzQJCQkJaWYgKGZkc1tpXS5yZXZlbnRz
ICYgUE9MTEhVUCkgew0NCihnZGIpIA0NCjI0NQkJCQlpZiAoZmRzW2ldLnJl
dmVudHMgJiBQT0xMUFJJKSB7DQ0KKGdkYikgDQ0KMjQ5CQkJCWlmIChmZHNb
aV0ucmV2ZW50cyAmIChQT0xMTlZBTCB8IFBPTExFUlIpKSB7DQ0KKGdkYikg
DQ0KMjUzCQkJCWlmIChmZHNbaV0ucmV2ZW50cyAmIFBPTExPVVQpDQ0KKGdk
YikgDQ0KMjU3CQkJCWlmIChmZHNbaV0ucmV2ZW50cyAmIFBPTExJTikgew0N
CihnZGIpIA0NCjI1OAkJCQkJaWYgKGZkLT53YW50X3JlYWQgJiYgZmQtPnJl
YWQpDQ0KKGdkYikgDQ0KMjU5CQkJCQkJUkVBRF9GRChmZCk7DQ0KKGdkYikg
DQ0KaW8uYzogUHJlcGFyaW5nIGZkIDcgZm9yIHJlYWRpbmcNDQoyMjQJCQlm
b3IoZmQgPSBiLT5maWxlcywgaT0wOyBmZDsgZmQgPSBmZC0+bmV4dCwgaSsr
KQ0NCihnZGIpIA0NCjI2MwkJCWFzc2VydChpID09IG5mZHMpOw0NCihnZGIp
IA0NCjI2NgkJbmNvID0gMDsNDQooZ2RiKSANDQoyNjgJCQlGT1JfUVVFVUUo
JmItPmNhbGxvdXRzLCBzdHJ1Y3QgY2FsbG91dCAqLCBuKSB7DQ0KKGdkYikg
DQ0KMjc3CQlpZiAoIW5mZHMgJiYgIW5jbyAmJiAhYi0+cmVsb2FkaW5nKSB7
DQ0KKGdkYikgDQ0KMjgxCQlyZXR1cm4gMTsNDQooZ2RiKSANDQoweDgwNTRl
ZTAJMjgyCX0NDQooZ2RiKSANDQptYWluX2xvb3AgKGJhY2tlbmQ9MHg4MDVm
ZTE4KSBhdCBtYWluLmM6MTQ5DQ0KMTQ5CQkJaWYgKGV4aXRfbWFpbl9sb29w
KQ0NCihnZGIpIA0NCjE1MQkJCWlmIChzaWdodXByZWN2ZCAmJiAhcmVzdGFy
dGluZykgew0NCihnZGIpIA0NCjE3MgkJCWlmIChzaWd0ZXJtcmVjdmQpIHsN
DQooZ2RiKSANDQoxNzcJCX0NDQooZ2RiKSANDQoxNDgJCXdoaWxlIChpb19p
dGVyKCZiYWNrZW5kLT5zdXBlcikpIHsNDQooZ2RiKSANDQoNDQpCcmVha3Bv
aW50IDEsIGlvX2l0ZXIgKGI9MHg4MDVmZTE4KSBhdCBpby5jOjk2DQ0KOTYJ
CXN0cnVjdCBwb2xsZmQgKmZkcyA9IE5VTEw7DQ0KKGdkYikgDQ0KOTcJCWlu
dCByZXMgPSAwOw0NCihnZGIpIA0NCjk4CQlpbnQgdGltZW91dCA9IC0xOw0N
CihnZGIpIA0NCjk5CQl0aW1lX3Qgbm93ID0gdGltZShOVUxMKTsNDQooZ2Ri
KSANDQoxMTAJCQlmb3IoZmRfcCA9ICZiLT5maWxlczsgKGZkID0gKmZkX3Ap
OyApIHsNDQooZ2RiKSANDQoxMTEJCQkJaWYgKGZkLT5zdXBlci5hbGl2ZSkg
ew0NCihnZGIpIA0NCjExMgkJCQkJaWYgKGZkLT5wcmVwYXJlKSB7DQ0KKGdk
YikgDQ0KMTEzCQkJCQkJUFJFUEFSRV9GRChmZCk7DQ0KKGdkYikgDQ0KMTE0
CQkJCQl9IGVsc2UgaWYgKGZkLT50b19iZV9jbG9zZWQpIHsNDQooZ2RiKSAN
DQoxMTcJCQkJfQ0NCihnZGIpIA0NCjE0MgkJCQlmZF9wID0gJmZkLT5uZXh0
Ow0NCihnZGIpIA0NCjExMAkJCWZvcihmZF9wID0gJmItPmZpbGVzOyAoZmQg
PSAqZmRfcCk7ICkgew0NCihnZGIpIA0NCjExMQkJCQlpZiAoZmQtPnN1cGVy
LmFsaXZlKSB7DQ0KKGdkYikgDQ0KMTEyCQkJCQlpZiAoZmQtPnByZXBhcmUp
IHsNDQooZ2RiKSANDQoxMTMJCQkJCQlQUkVQQVJFX0ZEKGZkKTsNDQooZ2Ri
KSANDQoxMTQJCQkJCX0gZWxzZSBpZiAoZmQtPnRvX2JlX2Nsb3NlZCkgew0N
CihnZGIpIA0NCjExNwkJCQl9DQ0KKGdkYikgDQ0KMTQyCQkJCWZkX3AgPSAm
ZmQtPm5leHQ7DQ0KKGdkYikgDQ0KMTEwCQkJZm9yKGZkX3AgPSAmYi0+Zmls
ZXM7IChmZCA9ICpmZF9wKTsgKSB7DQ0KKGdkYikgDQ0KMTExCQkJCWlmIChm
ZC0+c3VwZXIuYWxpdmUpIHsNDQooZ2RiKSANDQoxMTIJCQkJCWlmIChmZC0+
cHJlcGFyZSkgew0NCihnZGIpIA0NCjExNwkJCQl9DQ0KKGdkYikgDQ0KMTQy
CQkJCWZkX3AgPSAmZmQtPm5leHQ7DQ0KKGdkYikgDQ0KMTEwCQkJZm9yKGZk
X3AgPSAmYi0+ZmlsZXM7IChmZCA9ICpmZF9wKTsgKSB7DQ0KKGdkYikgDQ0K
MTQ4CQkJRk9SX1FVRVVFKCZiLT5jYWxsb3V0cywgc3RydWN0IGNhbGxvdXQg
Kiwgbikgew0NCihnZGIpIA0NCjE1OAkJbmZkcyA9IDA7DQ0KKGdkYikgDQ0K
MTYxCQlpZiAoIWItPnJlbG9hZGluZykgew0NCihnZGIpIA0NCjE2NAkJCWZv
cihmZCA9IGItPmZpbGVzOyBmZDsgZmQgPSBmZC0+bmV4dCkgew0NCihnZGIp
IA0NCjE2NQkJCQluZmRzKys7DQ0KKGdkYikgDQ0KMTY0CQkJZm9yKGZkID0g
Yi0+ZmlsZXM7IGZkOyBmZCA9IGZkLT5uZXh0KSB7DQ0KKGdkYikgDQ0KMTY1
CQkJCW5mZHMrKzsNDQooZ2RiKSANDQoxNjQJCQlmb3IoZmQgPSBiLT5maWxl
czsgZmQ7IGZkID0gZmQtPm5leHQpIHsNDQooZ2RiKSANDQoxNjUJCQkJbmZk
cysrOw0NCihnZGIpIA0NCjE2NAkJCWZvcihmZCA9IGItPmZpbGVzOyBmZDsg
ZmQgPSBmZC0+bmV4dCkgew0NCihnZGIpIA0NCjE2OQkJaWYgKG5mZHMpIHsN
DQooZ2RiKSANDQoxNzAJCQlpbnQgYWxsX2V2ZW50cyA9IDA7DQ0KKGdkYikg
DQ0KMTcyCQkJZmRzID0gYWxsb2NhKHNpemVvZihzdHJ1Y3QgcG9sbGZkKSAq
IG5mZHMpOw0NCihnZGIpIA0NCjE3OAkJCQlmb3IgKGZkID0gYi0+ZmlsZXMs
IGkgPSAwOyBmZDsgZmQgPSBmZC0+bmV4dCwgaSsrKQ0NCihnZGIpIA0NCjE4
MAkJCQkJYXNzZXJ0KGkgPCBuZmRzKTsNDQooZ2RiKSANDQoxODIJCQkJCWZk
c1tpXS5mZCA9IGZkLT5mZDsNDQooZ2RiKSANDQoxODMJCQkJCWZkc1tpXS5l
dmVudHMgPSAwOw0NCihnZGIpIA0NCjE4NAkJCQkJZmRzW2ldLnJldmVudHMg
PSAwOw0NCihnZGIpIA0NCjE4NgkJCQkJaWYgKGZkLT53YW50X3JlYWQpDQ0K
KGdkYikgDQ0KMTg3CQkJCQkJZmRzW2ldLmV2ZW50cyB8PSBQT0xMSU47DQ0K
KGdkYikgDQ0KMTg5CQkJCQlpZiAoZmQtPndhbnRfd3JpdGUpDQ0KKGdkYikg
DQ0KMTkyCQkJCQlhbGxfZXZlbnRzIHw9IGZkc1tpXS5ldmVudHM7DQ0KKGdk
YikgDQ0KMTc4CQkJCWZvciAoZmQgPSBiLT5maWxlcywgaSA9IDA7IGZkOyBm
ZCA9IGZkLT5uZXh0LCBpKyspDQ0KKGdkYikgDQ0KMTgwCQkJCQlhc3NlcnQo
aSA8IG5mZHMpOw0NCihnZGIpIA0NCjE4MgkJCQkJZmRzW2ldLmZkID0gZmQt
PmZkOw0NCihnZGIpIA0NCjE4MwkJCQkJZmRzW2ldLmV2ZW50cyA9IDA7DQ0K
KGdkYikgDQ0KMTg0CQkJCQlmZHNbaV0ucmV2ZW50cyA9IDA7DQ0KKGdkYikg
DQ0KMTg2CQkJCQlpZiAoZmQtPndhbnRfcmVhZCkNDQooZ2RiKSANDQoxODcJ
CQkJCQlmZHNbaV0uZXZlbnRzIHw9IFBPTExJTjsNDQooZ2RiKSANDQoxODkJ
CQkJCWlmIChmZC0+d2FudF93cml0ZSkNDQooZ2RiKSANDQoxOTIJCQkJCWFs
bF9ldmVudHMgfD0gZmRzW2ldLmV2ZW50czsNDQooZ2RiKSANDQoxNzgJCQkJ
Zm9yIChmZCA9IGItPmZpbGVzLCBpID0gMDsgZmQ7IGZkID0gZmQtPm5leHQs
IGkrKykNDQooZ2RiKSANDQoxODAJCQkJCWFzc2VydChpIDwgbmZkcyk7DQ0K
KGdkYikgDQ0KMTgyCQkJCQlmZHNbaV0uZmQgPSBmZC0+ZmQ7DQ0KKGdkYikg
DQ0KMTgzCQkJCQlmZHNbaV0uZXZlbnRzID0gMDsNDQooZ2RiKSANDQoxODQJ
CQkJCWZkc1tpXS5yZXZlbnRzID0gMDsNDQooZ2RiKSANDQoxODYJCQkJCWlm
IChmZC0+d2FudF9yZWFkKQ0NCihnZGIpIA0NCjE4NwkJCQkJCWZkc1tpXS5l
dmVudHMgfD0gUE9MTElOOw0NCihnZGIpIA0NCjE4OQkJCQkJaWYgKGZkLT53
YW50X3dyaXRlKQ0NCihnZGIpIA0NCjE5MgkJCQkJYWxsX2V2ZW50cyB8PSBm
ZHNbaV0uZXZlbnRzOw0NCihnZGIpIA0NCjE3OAkJCQlmb3IgKGZkID0gYi0+
ZmlsZXMsIGkgPSAwOyBmZDsgZmQgPSBmZC0+bmV4dCwgaSsrKQ0NCihnZGIp
IA0NCjE5NAkJCQlhc3NlcnQoaSA9PSBuZmRzKTsNDQooZ2RiKSANDQoxOTYJ
CQlpZiAoYWxsX2V2ZW50cykNDQooZ2RiKSANDQoxOTcJCQkJcmVzID0gcG9s
bChmZHMsIG5mZHMsIElETEVfVElNRSk7DQ0KKGdkYikgDQ0KMjAwCSAgICAg
ICAgaWYgKCFyZXMgJiYgbmZkcykgew0NCihnZGIpIA0NCjIwNQkgICAgICAg
ICAgICAgICAgZ2NfbWF5YmUoJmItPnN1cGVyLCAxKTsNDQooZ2RiKSANDQoy
MDcJCWlmIChyZXMgPCAwKQ0NCihnZGIpIA0NCjIxNwkJaWYgKG5mZHMgJiYg
cmVzID4gMCkgew0NCihnZGIpIA0NCjIyNAkJCWZvcihmZCA9IGItPmZpbGVz
LCBpPTA7IGZkOyBmZCA9IGZkLT5uZXh0LCBpKyspDQ0KKGdkYikgDQ0KMjMx
CQkJCWlmICghZmQtPnN1cGVyLmFsaXZlKQ0NCihnZGIpIA0NCjIzNAkJCQlp
ZiAoZmRzW2ldLnJldmVudHMgJiBQT0xMSFVQKSB7DQ0KKGdkYikgDQ0KMjM1
CQkJCQlpZiAoZmQtPndhbnRfcmVhZCAmJiBmZC0+cmVhZCkNDQooZ2RiKSAN
DQoyMzYJCQkJCQlSRUFEX0ZEKGZkKTsNDQooZ2RiKSANDQoyNDMJCQkJCWNv
bnRpbnVlOw0NCihnZGIpIA0NCjIyNAkJCWZvcihmZCA9IGItPmZpbGVzLCBp
PTA7IGZkOyBmZCA9IGZkLT5uZXh0LCBpKyspDQ0KKGdkYikgDQ0KMjMxCQkJ
CWlmICghZmQtPnN1cGVyLmFsaXZlKQ0NCihnZGIpIA0NCjIzNAkJCQlpZiAo
ZmRzW2ldLnJldmVudHMgJiBQT0xMSFVQKSB7DQ0KKGdkYikgDQ0KMjM1CQkJ
CQlpZiAoZmQtPndhbnRfcmVhZCAmJiBmZC0+cmVhZCkNDQooZ2RiKSANDQoy
MzYJCQkJCQlSRUFEX0ZEKGZkKTsNDQooZ2RiKSANDQpSZWFkIEVPRiBvbiBm
ZCA2Lg0NCk1hcmtpbmcgZmQgNiBmb3IgY2xvc2luZy4NDQoyNDMJCQkJCWNv
bnRpbnVlOw0NCihnZGIpIA0NCjIyNAkJCWZvcihmZCA9IGItPmZpbGVzLCBp
PTA7IGZkOyBmZCA9IGZkLT5uZXh0LCBpKyspDQ0KKGdkYikgDQ0KMjMxCQkJ
CWlmICghZmQtPnN1cGVyLmFsaXZlKQ0NCihnZGIpIA0NCjIzNAkJCQlpZiAo
ZmRzW2ldLnJldmVudHMgJiBQT0xMSFVQKSB7DQ0KKGdkYikgDQ0KMjQ1CQkJ
CWlmIChmZHNbaV0ucmV2ZW50cyAmIFBPTExQUkkpIHsNDQooZ2RiKSANDQoy
NDkJCQkJaWYgKGZkc1tpXS5yZXZlbnRzICYgKFBPTExOVkFMIHwgUE9MTEVS
UikpIHsNDQooZ2RiKSANDQoyNTMJCQkJaWYgKGZkc1tpXS5yZXZlbnRzICYg
UE9MTE9VVCkNDQooZ2RiKSANDQoyNTcJCQkJaWYgKGZkc1tpXS5yZXZlbnRz
ICYgUE9MTElOKSB7DQ0KKGdkYikgDQ0KMjU4CQkJCQlpZiAoZmQtPndhbnRf
cmVhZCAmJiBmZC0+cmVhZCkNDQooZ2RiKSANDQoyNTkJCQkJCQlSRUFEX0ZE
KGZkKTsNDQooZ2RiKSANDQppby5jOiBQcmVwYXJpbmcgZmQgOCBmb3IgcmVh
ZGluZw0NCjIyNAkJCWZvcihmZCA9IGItPmZpbGVzLCBpPTA7IGZkOyBmZCA9
IGZkLT5uZXh0LCBpKyspDQ0KKGdkYikgDQ0KMjYzCQkJYXNzZXJ0KGkgPT0g
bmZkcyk7DQ0KKGdkYikgDQ0KMjY2CQluY28gPSAwOw0NCihnZGIpIA0NCjI2
OAkJCUZPUl9RVUVVRSgmYi0+Y2FsbG91dHMsIHN0cnVjdCBjYWxsb3V0ICos
IG4pIHsNDQooZ2RiKSANDQoyNzcJCWlmICghbmZkcyAmJiAhbmNvICYmICFi
LT5yZWxvYWRpbmcpIHsNDQooZ2RiKSANDQoyODEJCXJldHVybiAxOw0NCihn
ZGIpIA0NCjB4ODA1NGVlMAkyODIJfQ0NCihnZGIpIA0NCm1haW5fbG9vcCAo
YmFja2VuZD0weDgwNWZlMTgpIGF0IG1haW4uYzoxNDkNDQoxNDkJCQlpZiAo
ZXhpdF9tYWluX2xvb3ApDQ0KKGdkYikgDQ0KMTUxCQkJaWYgKHNpZ2h1cHJl
Y3ZkICYmICFyZXN0YXJ0aW5nKSB7DQ0KKGdkYikgDQ0KMTcyCQkJaWYgKHNp
Z3Rlcm1yZWN2ZCkgew0NCihnZGIpIA0NCjE3NwkJfQ0NCihnZGIpIGtpbGwN
DQpLaWxsIHRoZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2VkPyAoeSBvciBuKSB5
DQ0KKGdkYikgZQggCHF1aXQNDQobXTA7cm9vdEBmaXNiOiAvdXNyL2xvY2Fs
L3N5c2xvZy9zYmluB1tyb290QGZpc2Igc2Jpbl0jIGV4aXQNClNjcmlwdCBk
b25lIG9uIFdlZCBTZXAgIDUgMjM6MDU6NDIgMjAwMQ0K
---1768452832-1985525895-999797133=:16138--