Code update (numerous features)

Alex Leverington admin@networkessence.net
Sun, 11 Nov 2001 18:07:13 -0600


---------------------- multipart/mixed attachment


I have not seen whups_diff_111101-0431cst.txt applied to CVS for WHUPS. This 
patch includes the updates in the whups_diff_111101-0431cst.txt diff and then 
some.

This patch does the following:

Adds the file newuser.php and useradmin.php to ./whups. Also adds the 
file ./whups/lib/WhupsPublic.php.

Checks to see if Auth::getAuth is valid. If it isn't, then the user is assumed 
to be a public user and goes through the public interface. The public 
interface is configured with the added file file, WhupsPublic.php. The user 
sees 'Search Tickets', 'Create Ticket', and 'New User', and 'Help'. When the 
user goes into a ticket details, he/she can only add comments to the ticket 
and nothing more. Later, user authentication will be required to do anything 
to the tickets, but that won't be implemented till the newuser.php module is 
completed.

Changes have been made to /lib/Whups.php to add the User Administration module 
(useradmin.php).

These patches are focused towards seperating public users from authenticated 
users or users that are allowed to make changes in whups. Eventually, 
Whups.php will be replaced with WhupsUser.php, WhupsPublic.php, and 
WhupsAdmin.php. WhupsUser being for users of the ticketing system (eg, users 
that own, update, transfer tickets, etc), WhupsPublic being for public users 
to create new tickets and view updates to them or add comments - and later be 
able to close them (once public user backend is finished), and WhupsAdmin 
being for administrative users who can do anything to tickets and change 
access rights of users that utilize WhupsUser.php.

This patch also checks to see if $registry->registry['auth']['login'] is = to 
imp. If it is, then Auth:getAuth() calls are made as $backend->getUserFromEmail
(Auth::getAuth()) instead. This is done so that persons utilizing horde with 
[auth][login] set to imp can still utilize whups as authorized users. This was 
needed b/c users from imp are shown as user@example.com instead of just 
plain 'user'. This enables the authorized users from imp to be verified 
against the local whups whups_users table (users auth to use whups).

It's all rather complicated, but it all works as intended :)

Side Note: it is good that whups has been developed with form validation now 
that I look at it for security purposes. I just created WhupsPublic.php with 
no problems, and I don't have to worry about users modifying tickets by 
putting in custom post values b/c the form verification backend prevents that 
from happening :)

Attached is whups_diff_111101-1831cst.txt which is the cvs diff, 
useradmin.php, newuser.php, and WhupsPublic.php (new files to be added). I 
will be honest, I have no idea how I should have made the new files so they 
can be commited to CVS.

-Alex

---------------------- multipart/mixed attachment
W3Jvb3Qgd2h1cHNdIyBjdnMgLXozIGRpZmYNCj8gdXNlcmFkbWluLnBocA0KPyBuZXd1c2VyLnBo
cA0KPyBsaWIvV2h1cHNQdWJsaWMucGhwDQo/IGxpYi9XaHVwc1B1YmxpY1ZhcnMucGhwDQpjdnMg
c2VydmVyOiBEaWZmaW5nIC4NCkluZGV4OiBkZXRhaWxzLnBocA0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZp
bGU6IC9yZXBvc2l0b3J5L3dodXBzL2RldGFpbHMucGhwLHYNCnJldHJpZXZpbmcgcmV2aXNpb24g
MS45DQpkaWZmIC11IC1yMS45IGRldGFpbHMucGhwDQotLS0gZGV0YWlscy5waHAgMjAwMS8xMC8z
MSAwMjozMToxNCAgICAgMS45DQorKysgZGV0YWlscy5waHAgMjAwMS8xMS8xMSAyMzo0ODoxOQ0K
QEAgLTE5LDcgKzE5LDggQEANCiByZXF1aXJlICRyZWdpc3RyeS0+Z2V0VGVtcGxhdGVQYXRoKCkg
LiAnL2NvbW1lbnQuaW5jJzsNCiByZXF1aXJlICRyZWdpc3RyeS0+Z2V0VGVtcGxhdGVQYXRoKCkg
LiAnL3VzZXJhY3Rpb25zLmluYyc7DQogDQotdXNlRm9ybXMoYXJyYXkoDQoraWYgKEF1dGg6Omdl
dEF1dGgoKSkgew0KKyR1c2VGb3JtID0gYXJyYXkoDQogICAgICdUaWNrZXREZXRhaWxzRm9ybScs
DQogICAgICdBZGRDb21tZW50Rm9ybScsDQogICAgICdBc3NpZ25UaWNrZXRTdGVwMUZvcm0nLA0K
QEAgLTI3LDggKzI4LDE1IEBADQogICAgICdTZXRTdGF0ZVN0ZXAxRm9ybScsDQogICAgICdTZXRT
dGF0ZVN0ZXAyRm9ybScsDQogICAgICdTZXRQcmlvcml0eVN0ZXAxRm9ybScsDQotICAgICdTZXRQ
cmlvcml0eVN0ZXAyRm9ybScpKTsNCisgICAgJ1NldFByaW9yaXR5U3RlcDJGb3JtJyk7DQorfSBl
bHNlIHsNCiskdXNlRm9ybSA9IGFycmF5KA0KKyAgICAnVGlja2V0RGV0YWlsc0Zvcm0nLA0KKyAg
ICAnQWRkQ29tbWVudEZvcm0nKTsNCit9DQogDQordXNlRm9ybXMoJHVzZUZvcm0pOw0KKw0KICRQ
QUdFID0gbmV3IFBhZ2UoKTsNCiAkSEVBREVSQkFSID0gbmV3IEhlYWRlckJhcigpOw0KICRSRU5E
RVJFUiA9IG5ldyBGb3JtUmVuZGVyZXIoKTsNCkBAIC0yMjgsMzIgKzIzNiwzNCBAQA0KICAgICAk
UkVOREVSRVItPmVuZCgpOw0KICAgICAkYWRkZm9ybS0+Y2xvc2UoKTsNCiANCi0gICAgJGFzc2ln
bmZvcm0xID0gJmdldEFzc2lnblRpY2tldFN0ZXAxRm9ybSgkdmFycywgJGJhY2tlbmQpOw0KKyAg
ICBpZiAoQXV0aDo6Z2V0QXV0aCgpKSB7DQorICAgICAgICAkYXNzaWduZm9ybTEgPSAmZ2V0QXNz
aWduVGlja2V0U3RlcDFGb3JtKCR2YXJzLCAkYmFja2VuZCk7DQogDQotICAgICRhc3NpZ25mb3Jt
MS0+b3BlbigkdmFycywgJ2RldGFpbHMucGhwJywgJ3Bvc3QnKTsNCi0gICAgJFJFTkRFUkVSLT5i
ZWdpbkFjdGl2ZSgiQXNzaWduIFRpY2tldCIpOw0KLSAgICAkYXNzaWduZm9ybTEtPnJlbmRlcigk
UkVOREVSRVIsICR2YXJzLCBmYWxzZSk7DQotICAgICRhc3NpZ25mb3JtMS0+c3VibWl0KCRSRU5E
RVJFUiwgJ0Fzc2lnbicpOw0KLSAgICAkUkVOREVSRVItPmVuZCgpOw0KLSAgICAkYXNzaWduZm9y
bTEtPmNsb3NlKCk7DQorICAgICAgICAkYXNzaWduZm9ybTEtPm9wZW4oJHZhcnMsICdkZXRhaWxz
LnBocCcsICdwb3N0Jyk7DQorICAgICAgICAkUkVOREVSRVItPmJlZ2luQWN0aXZlKCJBc3NpZ24g
VGlja2V0Iik7DQorICAgICAgICAkYXNzaWduZm9ybTEtPnJlbmRlcigkUkVOREVSRVIsICR2YXJz
LCBmYWxzZSk7DQorICAgICAgICAkYXNzaWduZm9ybTEtPnN1Ym1pdCgkUkVOREVSRVIsICdBc3Np
Z24nKTsNCisgICAgICAgICRSRU5ERVJFUi0+ZW5kKCk7DQorICAgICAgICAkYXNzaWduZm9ybTEt
PmNsb3NlKCk7DQogDQotICAgICRzZXRzdGF0ZWZvcm0xID0gJmdldFNldFN0YXRlU3RlcDFGb3Jt
KCR2YXJzLCAkYmFja2VuZCk7DQorICAgICAgICAkc2V0c3RhdGVmb3JtMSA9ICZnZXRTZXRTdGF0
ZVN0ZXAxRm9ybSgkdmFycywgJGJhY2tlbmQpOw0KIA0KLSAgICAkc2V0c3RhdGVmb3JtMS0+b3Bl
bigkdmFycywgJ2RldGFpbHMucGhwJywgJ3Bvc3QnKTsNCi0gICAgJFJFTkRFUkVSLT5iZWdpbkFj
dGl2ZSgnU2V0IFRpY2tldCBTdGF0ZScpOw0KLSAgICAkc2V0c3RhdGVmb3JtMS0+cmVuZGVyKCRS
RU5ERVJFUiwgJHZhcnMsIGZhbHNlKTsNCi0gICAgJHNldHN0YXRlZm9ybTEtPnN1Ym1pdCgkUkVO
REVSRVIsICdTZXQgU3RhdGUnKTsNCi0gICAgJFJFTkRFUkVSLT5lbmQoKTsNCi0gICAgJHNldHN0
YXRlZm9ybTEtPmNsb3NlKCk7DQorICAgICAgICAkc2V0c3RhdGVmb3JtMS0+b3BlbigkdmFycywg
J2RldGFpbHMucGhwJywgJ3Bvc3QnKTsNCisgICAgICAgICRSRU5ERVJFUi0+YmVnaW5BY3RpdmUo
J1NldCBUaWNrZXQgU3RhdGUnKTsNCisgICAgICAgICRzZXRzdGF0ZWZvcm0xLT5yZW5kZXIoJFJF
TkRFUkVSLCAkdmFycywgZmFsc2UpOw0KKyAgICAgICAgJHNldHN0YXRlZm9ybTEtPnN1Ym1pdCgk
UkVOREVSRVIsICdTZXQgU3RhdGUnKTsNCisgICAgICAgICRSRU5ERVJFUi0+ZW5kKCk7DQorICAg
ICAgICAkc2V0c3RhdGVmb3JtMS0+Y2xvc2UoKTsNCiANCi0gICAgJHNldHByaW9yaXR5Zm9ybTEg
PSAmZ2V0U2V0UHJpb3JpdHlTdGVwMUZvcm0oJHZhcnMsICRiYWNrZW5kKTsNCisgICAgICAgICRz
ZXRwcmlvcml0eWZvcm0xID0gJmdldFNldFByaW9yaXR5U3RlcDFGb3JtKCR2YXJzLCAkYmFja2Vu
ZCk7DQogDQotICAgICRzZXRwcmlvcml0eWZvcm0xLT5vcGVuKCR2YXJzLCAnZGV0YWlscy5waHAn
LCAncG9zdCcpOw0KLSAgICAkUkVOREVSRVItPmJlZ2luQWN0aXZlKCdTZXQgVGlja2V0IFByaW9y
aXR5Jyk7DQotICAgICRzZXRwcmlvcml0eWZvcm0xLT5yZW5kZXIoJFJFTkRFUkVSLCAkdmFycywg
ZmFsc2UpOw0KLSAgICAkc2V0cHJpb3JpdHlmb3JtMS0+c3VibWl0KCRSRU5ERVJFUiwgJ1NldCBQ
cmlvcml0eScpOw0KLSAgICAkUkVOREVSRVItPmVuZCgpOw0KLSAgICAkc2V0cHJpb3JpdHlmb3Jt
MS0+Y2xvc2UoKTsNCisgICAgICAgICRzZXRwcmlvcml0eWZvcm0xLT5vcGVuKCR2YXJzLCAnZGV0
YWlscy5waHAnLCAncG9zdCcpOw0KKyAgICAgICAgJFJFTkRFUkVSLT5iZWdpbkFjdGl2ZSgnU2V0
IFRpY2tldCBQcmlvcml0eScpOw0KKyAgICAgICAgJHNldHByaW9yaXR5Zm9ybTEtPnJlbmRlcigk
UkVOREVSRVIsICR2YXJzLCBmYWxzZSk7DQorICAgICAgICAkc2V0cHJpb3JpdHlmb3JtMS0+c3Vi
bWl0KCRSRU5ERVJFUiwgJ1NldCBQcmlvcml0eScpOw0KKyAgICAgICAgJFJFTkRFUkVSLT5lbmQo
KTsNCisgICAgICAgICRzZXRwcmlvcml0eWZvcm0xLT5jbG9zZSgpOw0KKyAgICB9DQogfQ0KIA0K
ICRQQUdFLT5jbG9zZSgpOw0KY3ZzIHNlcnZlcjogRGlmZmluZyBjb25maWcNCmN2cyBzZXJ2ZXI6
IERpZmZpbmcgZG9jcw0KY3ZzIHNlcnZlcjogRGlmZmluZyBncmFwaGljcw0KY3ZzIHNlcnZlcjog
RGlmZmluZyBsaWINCkluZGV4OiBsaWIvQmFja2VuZC5waHANCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxl
OiAvcmVwb3NpdG9yeS93aHVwcy9saWIvQmFja2VuZC5waHAsdg0KcmV0cmlldmluZyByZXZpc2lv
biAxLjgNCmRpZmYgLXUgLXIxLjggQmFja2VuZC5waHANCi0tLSBsaWIvQmFja2VuZC5waHAgICAg
IDIwMDEvMTAvMzEgMTQ6MDQ6MzMgICAgIDEuOA0KKysrIGxpYi9CYWNrZW5kLnBocCAgICAgMjAw
MS8xMS8xMSAyMzo0ODoyMA0KQEAgLTY2LDcgKzY2LDYgQEANCiANCiAgICAgZnVuY3Rpb24gbm90
aWZ5QXNzaWdubWVudCgmJG9sZGRldGFpbHMsICYkY29tbWVudCwgJG93bmVybmFtZSwgJG93bmVy
ZW1haWwsICRuZXdzdGF0ZSkgew0KICAgICAgICAgJG15ZGV0YWlscyA9ICR0aGlzLT5nZXRVc2Vy
RGV0YWlsc0Zyb21FbWFpbChBdXRoOjpnZXRBdXRoKCkpOw0KLSAgICAgICAgJG15ZGV0YWlscyA9
ICRteWRldGFpbHNbMF07DQogDQogICAgICAgICAkbXluYW1lID0gJG15ZGV0YWlsc1sndXNlcl9u
YW1lJ107DQogICAgICAgICAkbXllbWFpbCA9ICRteWRldGFpbHNbJ3VzZXJfZW1haWwnXTsNCklu
ZGV4OiBsaWIvQ3JlYXRlLnBocA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9yZXBvc2l0b3J5L3do
dXBzL2xpYi9DcmVhdGUucGhwLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS44DQpkaWZmIC11IC1y
MS44IENyZWF0ZS5waHANCi0tLSBsaWIvQ3JlYXRlLnBocCAgICAgIDIwMDEvMTAvMDYgMTY6NDc6
MTYgICAgIDEuOA0KKysrIGxpYi9DcmVhdGUucGhwICAgICAgMjAwMS8xMS8xMSAyMzo0ODoyMA0K
QEAgLTI5LDkgKzI5LDExIEBADQogDQogICAgICAgICAkdmFyMSA9IG5ldyBWYXJpYWJsZSgnTW9k
dWxlIE5hbWUnLCAnbW9kdWxlJywgJG1vZHR5cGUsIHRydWUpOw0KICAgICAgICAgJHZhcjIgPSBu
ZXcgVmFyaWFibGUoJ1RpY2tldCBUeXBlJywgJ3R5cGUnLCAkdHlwZXR5cGUsIHRydWUpOw0KKyAg
ICAgICAgJHZhcjMgPSBuZXcgVmFyaWFibGUoJ1JlcXVlc3RvciBFbWFpbCBBZGRyZXNzJywgJ3Jl
cXVlc3RvcicsIGdldFVzZXJUeXBlKCRiYWNrZW5kKSwgdHJ1ZSk7DQogDQogICAgICAgICAkdGhp
cy0+YWRkVmFyaWFibGUoJHZhcjEpOw0KICAgICAgICAgJHRoaXMtPmFkZFZhcmlhYmxlKCR2YXIy
KTsNCisgICAgICAgICR0aGlzLT5hZGRWYXJpYWJsZSgkdmFyMyk7DQogICAgIH0NCiB9DQogDQpJ
bmRleDogbGliL0Zvcm1zLnBocA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9yZXBvc2l0b3J5L3do
dXBzL2xpYi9Gb3Jtcy5waHAsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjcNCmRpZmYgLXUgLXIx
LjcgRm9ybXMucGhwDQotLS0gbGliL0Zvcm1zLnBocCAgICAgICAyMDAxLzEwLzMxIDAyOjMxOjE1
ICAgICAxLjcNCisrKyBsaWIvRm9ybXMucGhwICAgICAgIDIwMDEvMTEvMTEgMjM6NDg6MjANCkBA
IC0xNDIsMTUgKzE0MiwyMCBAQA0KIA0KICAgICBmdW5jdGlvbiBpc1ZhbGlkKCYkdmFycywgJHZh
bHVlLCAmJG1lc3NhZ2UpIHsNCiAgICAgICAgICR1aWR0eXBlID0gJHZhcnMtPmdldFZhcigndXNl
cnR5cGUnKTsNCisNCiAgICAgICAgIGlmICgkdWlkdHlwZSA9PSAnMScpIHsNCiAgICAgICAgICAg
ICAkdWlkID0gJHRoaXMtPmJhY2tlbmQtPmdldFVzZXJGcm9tRW1haWwoJHZhbHVlKTsNCi0gICAg
ICAgIH0NCisgICAgICAgIH0gZWxzZQ0KICAgICAgICAgaWYgKCR1aWR0eXBlID09ICcyJykgew0K
ICAgICAgICAgICAgICR1aWQgPSAkdGhpcy0+YmFja2VuZC0+Z2V0VXNlckZyb21OYW1lKCR2YWx1
ZSk7DQorICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICR1aWQgPSAkdGhpcy0+YmFja2Vu
ZC0+Z2V0VXNlckZyb21FbWFpbCgkdmFsdWUpOw0KICAgICAgICAgfQ0KICAgICAgICAgDQogICAg
ICAgICBpZiAoIWlzc2V0KCR1aWQpKSB7DQogICAgICAgICAgICAgJG1lc3NhZ2UgPSAnbm8gc3Vj
aCB1c2VyICcgLiBodG1sc3BlY2lhbGNoYXJzKCR2YWx1ZSk7DQorICAgICAgICAgICAgJG1lc3Nh
Z2UgLj0gJy4gSWYgeW91IGFyZSBub3QgYSByZWdpc3RlcmVkIHVzZXIsJzsNCisgICAgICAgICAg
ICAkbWVzc2FnZSAuPSAneW91IG1heSByZWdpc3RlciBieSBnb2luZyB0byB0aGUgPGEgaHJlZj0i
bmV3dXNlci5waHAiPm5ldyB1c2VyIHBhZ2U8L2E+JzsNCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7DQogICAgICAgICB9DQogICAgICAgICANCkluZGV4OiBsaWIvU2VhcmNoLnBocA0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KUkNTIGZpbGU6IC9yZXBvc2l0b3J5L3dodXBzL2xpYi9TZWFyY2gucGhwLHYNCnJldHJp
ZXZpbmcgcmV2aXNpb24gMS42DQpkaWZmIC11IC1yMS42IFNlYXJjaC5waHANCi0tLSBsaWIvU2Vh
cmNoLnBocCAgICAgIDIwMDEvMTAvMDYgMTY6NDc6MTYgICAgIDEuNg0KKysrIGxpYi9TZWFyY2gu
cGhwICAgICAgMjAwMS8xMS8xMSAyMzo0ODoyMA0KQEAgLTExMiwxMyArMTEyLDE5IEBADQogICAg
IGZ1bmN0aW9uIEFzc2lnblRpY2tldFN0ZXAxRm9ybSgmJHZhcnMsICYkYmFja2VuZCkgew0KICAg
ICAgICAgJHRoaXMtPkZvcm0oJ2Fzc2lnbnRpY2tldHN0ZXAxZm9ybScpOw0KIA0KKyAgICAgICAg
JHR5cGUgPSAkdmFycy0+Z2V0VmFyKCd0eXBlJyk7DQorICAgICAgICAkdXNlcnR5cGVzID0gJGJh
Y2tlbmQtPmdldFVzZXJUeXBlcygkdHlwZSk7DQorICAgICAgICAkdXNlcnR5cGVzID0gbmV3IEVu
dW1UeXBlKCR1c2VydHlwZXMpOw0KKw0KICAgICAgICAgJHZhcjEgPSBuZXcgVmFyaWFibGUoJ1Rp
Y2tldCBUeXBlJywgJ3R5cGUnLCBnZXRJbnRUeXBlKCksIHRydWUsIHRydWUsIHRydWUpOw0KICAg
ICAgICAgJHZhcjIgPSBuZXcgVmFyaWFibGUoJ1RpY2tldCBJRCcsICdpZCcsIGdldEludFR5cGUo
KSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7DQogICAgICAgICAkdmFyMyA9IG5ldyBWYXJpYWJsZSgnQXNz
aWduZWUnLCAnYXNzaWduZWUnLCBnZXRVc2VyVHlwZSgkYmFja2VuZCksIHRydWUpOw0KKyAgICAg
ICAgJHZhcjQgPSBuZXcgVmFyaWFibGUoJ0Fzc2lnbmVlIFR5cGUnLCAndXNlcnR5cGUnLCAkdXNl
cnR5cGVzLCB0cnVlKTsNCiANCiAgICAgICAgICR0aGlzLT5hZGRWYXJpYWJsZSgkdmFyMSk7DQog
ICAgICAgICAkdGhpcy0+YWRkVmFyaWFibGUoJHZhcjIpOw0KICAgICAgICAgJHRoaXMtPmFkZFZh
cmlhYmxlKCR2YXIzKTsNCisgICAgICAgICR0aGlzLT5hZGRWYXJpYWJsZSgkdmFyNCk7DQogICAg
IH0NCiB9DQogDQpJbmRleDogbGliL1dodXBzLnBocA0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9y
ZXBvc2l0b3J5L3dodXBzL2xpYi9XaHVwcy5waHAsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjcN
CmRpZmYgLXUgLXIxLjcgV2h1cHMucGhwDQotLS0gbGliL1dodXBzLnBocCAgICAgICAyMDAxLzEx
LzA5IDIzOjM2OjQ3ICAgICAxLjcNCisrKyBsaWIvV2h1cHMucGhwICAgICAgIDIwMDEvMTEvMTEg
MjM6NDg6MjANCkBAIC0yOCw2ICsyOCwxMiBAQA0KICAgICAnbGluaycgICAgID0+ICdjcmVhdGUu
cGhwJw0KICk7DQogDQorJHVzZXJhZG1pbiA9IGFycmF5KA0KKyAgICAnZnVsbG5hbWUnID0+ICdV
c2VyIEFkbWluaXN0cmF0aW9uJywNCisgICAgJ3RpdGxlJyAgICA9PiAnVXNlciBBZG1pbicsDQor
ICAgICdsaW5rJyAgICAgPT4gJ3VzZXJhZG1pbi5waHAnDQorKTsNCisNCiAkaGVscCA9IGFycmF5
KA0KICAgICAnZnVsbG5hbWUnID0+ICdIZWxwJywNCiAgICAgJ3RpdGxlJyAgICA9PiAnSGVscCcs
DQpAQCAtMzcsNiArNDMsNyBAQA0KICRzZWN0aW9ucyA9IGFycmF5KA0KICAgICAnc2VhcmNoJyA9
PiAkc2VhcmNoLA0KICAgICAnY3JlYXRlJyA9PiAkY3JlYXRlLA0KKyAgICAndXNlcmFkbWluJz0+
ICR1c2VyYWRtaW4sDQogICAgICdoZWxwJyAgID0+ICRoZWxwDQogKTsNCiANCkluZGV4OiBsaWIv
YXBpLnBocA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9yZXBvc2l0b3J5L3dodXBzL2xpYi9hcGku
cGhwLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS40DQpkaWZmIC11IC1yMS40IGFwaS5waHANCi0t
LSBsaWIvYXBpLnBocCAyMDAxLzEwLzI1IDExOjI5OjUyICAgICAxLjQNCisrKyBsaWIvYXBpLnBo
cCAyMDAxLzExLzExIDIzOjQ4OjIwDQpAQCAtMjIsMTUgKzIyLDIyIEBADQogICAgICRodG1sIC49
ICc8L3RkPjwvdHI+PHRyPjx0ZCBjbGFzcz0idGV4dCI+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBh
ZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4nOw0KICAgICANCiAgICAgJGJhY2tlbmQgPSAmY3Jl
YXRlQmFja2VuZCgpOw0KLSAgICANCi0gICAgJGluZm8gPSBhcnJheSgnb3duZXInID0+IEF1dGg6
OmdldEF1dGgoKSk7DQorDQorICAgICRhdXRobWV0aG9kID0gJHJlZ2lzdHJ5LT5yZWdpc3RyeVsn
YXV0aCddWydsb2dpbiddOw0KKyAgICBpZiAoJGF1dGhtZXRob2QgPT0gJ2ltcCcpIHsNCisgICAg
ICAgICRjdXJyZW50X3VzZXIgPSAkYmFja2VuZC0+Z2V0VXNlckZyb21FbWFpbChBdXRoOjpnZXRB
dXRoKCkpOw0KKyAgICB9IGVsc2Ugew0KKyAgICAgICAgJGN1cnJlbnRfdXNlciA9IEF1dGg6Omdl
dEF1dGgoKTsNCisgICAgfQ0KKw0KKyAgICAkaW5mbyA9IGFycmF5KCdvd25lcicgPT4gJGN1cnJl
bnRfdXNlcik7DQogICAgICR0aWNrZXRzID0gJiRiYWNrZW5kLT5nZXRUaWNrZXRzQnlQcm9wZXJ0
aWVzKCRpbmZvKTsNCiAgICAgaWYgKGNvdW50KCR0aWNrZXRzKSA+IDApIHsNCiAgICAgICAgICRo
dG1sIC49ICc8dHI+PHRkIGNvbHNwYW49IjMiIGNsYXNzPSJ0ZXh0Ij48Yj4nIC4gXygiVGlja2V0
cyBhc3NpZ25lZCB0byB5b3UiKSAuICc8L2I+PC90ZD48L3RyPic7DQogICAgICAgICBfbGlzdFRp
Y2tldHMoJHRpY2tldHMsICRodG1sKTsNCiAgICAgfQ0KIA0KLSAgICAkaW5mbyA9IGFycmF5KCdy
ZXF1ZXN0ZXInID0+IEF1dGg6OmdldEF1dGgoKSk7DQorICAgICRpbmZvID0gYXJyYXkoJ3JlcXVl
c3RlcicgPT4gJGN1cnJlbnRfdXNlcik7DQogICAgICR0aWNrZXRzID0gJiRiYWNrZW5kLT5nZXRU
aWNrZXRzQnlQcm9wZXJ0aWVzKCRpbmZvKTsNCiAgICAgaWYgKGNvdW50KCR0aWNrZXRzKSA+IDAp
IHsNCiAgICAgICAgICRodG1sIC49ICc8dHI+PHRkIGNvbHNwYW49IjMiIGNsYXNzPSJ0ZXh0Ij48
Yj4nIC4gXygiVGlja2V0cyB5b3UgcmVxdWVzdGVkIikgLiAnPC9iPjwvdGQ+PC90cj4nOw0KSW5k
ZXg6IGxpYi9iYXNlLnBocA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9yZXBvc2l0b3J5L3dodXBz
L2xpYi9iYXNlLnBocCx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTENCmRpZmYgLXUgLXIxLjEx
IGJhc2UucGhwDQotLS0gbGliL2Jhc2UucGhwICAgICAgICAyMDAxLzExLzA3IDA5OjIxOjM4ICAg
ICAxLjExDQorKysgbGliL2Jhc2UucGhwICAgICAgICAyMDAxLzExLzExIDIzOjQ4OjIxDQpAQCAt
MzcsNyArMzcsMTIgQEANCiByZXF1aXJlX29uY2UgSE9SREVfQkFTRSAuICcvbGliL0F1dGgucGhw
JzsNCiANCiAvLyBXaHVwcyBiYXNlIGxpYnJhcmllcw0KKy8vIFVzZSBXaHVwcyBpbiBQdWJsaWMg
bW9kZSBpZiB1c2VyIGlzbid0IGF1dGhvcml6ZWQuDQoraWYgKEF1dGg6OmdldEF1dGgoKSkgew0K
IHJlcXVpcmVfb25jZSBXSFVQU19CQVNFIC4gJy9saWIvV2h1cHMucGhwJzsNCit9IGVsc2Ugew0K
K3JlcXVpcmVfb25jZSBXSFVQU19CQVNFIC4gJy9saWIvV2h1cHNQdWJsaWMucGhwJzsNCit9DQog
cmVxdWlyZV9vbmNlIFdIVVBTX0JBU0UgLiAnL2xpYi9XaHVwc1ZhcnMucGhwJzsNCiANCiAvLyBE
b24ndCBhbGxvdyBhY2Nlc3MgdW5sZXNzIHRoZXJlIGlzIGEgSG9yZGUgbG9naW4sIG9yIGd1ZXN0
cyBhcmUNCmN2cyBzZXJ2ZXI6IERpZmZpbmcgbGliL0JhY2tlbmQNCkluZGV4OiBsaWIvQmFja2Vu
ZC9zcWwucGhwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3JlcG9zaXRvcnkvd2h1cHMvbGliL0Jh
Y2tlbmQvc3FsLnBocCx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTINCmRpZmYgLXUgLXIxLjEy
IHNxbC5waHANCi0tLSBsaWIvQmFja2VuZC9zcWwucGhwIDIwMDEvMTEvMDYgMTY6NTA6NDMgICAg
IDEuMTINCisrKyBsaWIvQmFja2VuZC9zcWwucGhwIDIwMDEvMTEvMTEgMjM6NDg6MjENCkBAIC0z
OSw3ICszOSw4IEBADQogICAgIGZ1bmN0aW9uIGFkZFRpY2tldCgmJGluZm8pDQogICAgIHsNCiAg
ICAgICAgIC8vIGdldCBvdXIgdmFycw0KLSAgICAgICAgJHJlcXVlc3RlciA9IEF1dGg6OmdldEF1
dGgoKTsNCisjICAgICAgICAkcmVxdWVzdGVyID0gQXV0aDo6Z2V0QXV0aCgpOw0KKyAgICAgICAg
JHJlcXVlc3RlciA9IGdldFVzZXJGcm9tRW1haWwoJGluZm9bJ3JlcXVlc3RvciddKTsNCiAgICAg
ICAgICR0eXBlID0gJGluZm9bJ3R5cGUnXTsNCiAgICAgICAgICRzdGF0ZSA9ICRpbmZvWydzdGF0
ZSddOw0KICAgICAgICAgJHByaW9yaXR5ID0gJGluZm9bJ3ByaW9yaXR5J107DQpAQCAtOTksMjcg
KzEwMCwzNSBAQA0KIA0KICAgICBmdW5jdGlvbiBhc3NpZ25UaWNrZXQoJiRpbmZvKSB7DQogICAg
ICAgICAkdGlja2V0X2lkID0gJGluZm9bJ2lkJ107DQotICAgICAgICAkZW1haWwgPSAkaW5mb1sn
YXNzaWduZWUnXTsNCisgICAgICAgICRhc3NpZ25lZSA9ICRpbmZvWydhc3NpZ25lZSddOw0KKyAg
ICAgICAgJHVzZXJ0eXBlID0gJGluZm9bJ3VzZXJ0eXBlJ107DQogICAgICAgICAkc3RhdGUgPSAk
aW5mb1sndG9zdGF0ZSddOw0KICAgICAgICAgJG1vcmVjb21tZW50ID0gJGluZm9bJ25ld2NvbW1l
bnQnXTsNCiANCi0gICAgICAgICRkZXRhaWxzID0gJHRoaXMtPmdldFVzZXJEZXRhaWxzRnJvbUVt
YWlsKCRlbWFpbCk7DQotICAgICAgICAkYXNzaWduZWUgPSAkZGV0YWlsc1snaWQnXTsNCi0gICAg
ICAgICRuYW1lID0gJGRldGFpbHNbJ25hbWUnXTsNCisgICAgICAgIGlmICgkdXNlcnR5cGUgPT0g
JzEnKSB7DQorICAgICAgICAgICAgJGRldGFpbHMgPSAkdGhpcy0+Z2V0VXNlckRldGFpbHNGcm9t
RW1haWwoJGFzc2lnbmVlKTsNCisgICAgICAgIH0NCisgICAgICAgIGlmICgkdXNlcnR5cGUgPT0g
JzInKSB7DQorICAgICAgICAgICAgJGRldGFpbHMgPSAkdGhpcy0+Z2V0VXNlckRldGFpbHNGcm9t
TmFtZSgkYXNzaWduZWUpOw0KKyAgICAgICAgfQ0KIA0KLSAgICAgICAgJGNvbW1lbnQgPSAiQXNz
aWduZWQgdGlja2V0IHRvICRuYW1lIDwkZW1haWw+IjsNCisgICAgICAgICR1c2VyX2lkID0gJGRl
dGFpbHNbJ3VzZXJfaWQnXTsNCisgICAgICAgICR1c2VyX25hbWUgPSAkZGV0YWlsc1sndXNlcl9u
YW1lJ107DQorICAgICAgICAkdXNlcl9lbWFpbCA9ICRkZXRhaWxzWyd1c2VyX2VtYWlsJ107DQog
DQorICAgICAgICAkY29tbWVudCA9ICJBc3NpZ25lZCB0aWNrZXQgdG8gJHVzZXJfbmFtZSA8JHVz
ZXJfZW1haWw+IjsNCisNCiAgICAgICAgIGlmICghZW1wdHkoJG1vcmVjb21tZW50KSkgew0KICAg
ICAgICAgICAgICRjb21tZW50IC49ICJcblxuJG1vcmVjb21tZW50IjsNCiAgICAgICAgIH0NCiAN
Ci0gICAgICAgICRkZXRhaWxzID0gJHRoaXMtPmdldFRpY2tldERldGFpbHMoJHRpY2tldF9pZCk7
DQorICAgICAgICAkdGlja2V0X2RldGFpbHMgPSAkdGhpcy0+Z2V0VGlja2V0RGV0YWlscygkdGlj
a2V0X2lkKTsNCiANCi0gICAgICAgICR0aGlzLT5fcXVlcnkoIlVQREFURSB0aWNrZXQgU0VUIG93
bmVyID0gJGFzc2lnbmVlLCBzdGF0ZSA9ICRzdGF0ZSBXSEVSRSBpZCA9ICR0aWNrZXRfaWQiKTsN
CisgICAgICAgICR0aGlzLT5fcXVlcnkoIlVQREFURSB3aHVwc190aWNrZXRzIFNFVCB1c2VyX2lk
X293bmVyID0gJHVzZXJfaWQsIHN0YXRlX2lkID0gJHN0YXRlIFdIRVJFIHRpY2tldF9pZCA9ICR0
aWNrZXRfaWQiKTsNCiAgICAgICAgICRuZXdfY29tbWVudF9pZCA9ICR0aGlzLT5fYWRkQ29tbWVu
dCgkdGlja2V0X2lkLCAkY29tbWVudCwgQXV0aDo6Z2V0QXV0aCgpKTsNCi0gICAgICAgICR0aGlz
LT5fdXBkYXRlU3RhdGVMb2coJHRpY2tldF9pZCwgJGRldGFpbHNbJ3N0YXRlJ10sICRzdGF0ZSwg
QXV0aDo6Z2V0QXV0aCgpLCAkbmV3X2NvbW1lbnRfaWQpOw0KKyAgICAgICAgJHRoaXMtPl91cGRh
dGVTdGF0ZUxvZygkdGlja2V0X2lkLCAkdGlja2V0X2RldGFpbHNbJ3N0YXRlJ10sICRzdGF0ZSwg
QXV0aDo6Z2V0QXV0aCgpLCAkbmV3X2NvbW1lbnRfaWQpOw0KIA0KLSAgICAgICAgJHRoaXMtPm5v
dGlmeUFzc2lnbm1lbnQoJGRldGFpbHMsICRtb3JlY29tbWVudCwgJG5hbWUsICRlbWFpbCwgJHN0
YXRlKTsNCisgICAgICAgICR0aGlzLT5ub3RpZnlBc3NpZ25tZW50KCR0aWNrZXRfZGV0YWlscywg
JG1vcmVjb21tZW50LCAkdXNlcl9uYW1lLCAkdXNlcl9lbWFpbCwgJHN0YXRlKTsNCiAgICAgfQ0K
IA0KICAgICBmdW5jdGlvbiBzZXRUaWNrZXRTdGF0ZSgmJGluZm8pIHsNCkBAIC0xMjgsNyArMTM3
LDcgQEANCiAgICAgICAgICR0b3N0YXRlID0gJGluZm9bJ3N0YXRlJ107DQogICAgICAgICAkdHlw
ZSA9ICRpbmZvWyd0eXBlJ107DQogDQotICAgICAgICAkdGhpcy0+X3F1ZXJ5KCJVUERBVEUgd2h1
cHNfdGlja2V0cyBTRVQgc3RhdGVfaWQgPSAkdG9zdGF0ZSBXSEVSRSBpZCA9ICR0aWNrZXRfaWQi
KTsNCisgICAgICAgICR0aGlzLT5fcXVlcnkoIlVQREFURSB3aHVwc190aWNrZXRzIFNFVCBzdGF0
ZV9pZCA9ICR0b3N0YXRlIFdIRVJFIHRpY2tldF9pZCA9ICR0aWNrZXRfaWQiKTsNCiAgICAgICAg
ICRuZXdfY29tbWVudF9pZCA9ICR0aGlzLT5fYWRkQ29tbWVudCgkdGlja2V0X2lkLCAkbmV3Y29t
bWVudCwgQXV0aDo6Z2V0QXV0aCgpKTsNCiAgICAgICAgICR0aGlzLT5fdXBkYXRlU3RhdGVMb2co
JHRpY2tldF9pZCwgJycsICR0b3N0YXRlLCBBdXRoOjpnZXRBdXRoKCksICRuZXdfY29tbWVudF9p
ZCk7DQogDQpAQCAtMjM0LDggKzI0MywxMSBAQA0KICAgICAgICAgfQ0KIA0KICAgICAgICAgaWYg
KCFlbXB0eSgkcmVzdWx0Wyd1c2VyX2lkX293bmVyJ10pKSB7DQotICAgICAgICAgICAgJHJlc3Vs
dFsnX293bmVyX25hbWUnXSA9ICRyZXN1bHRbJ293bmVyJ107DQotICAgICAgICAgICAgJHJlc3Vs
dFsnX293bmVyJ10gPSAkcmVzdWx0Wydvd25lciddOw0KKyAgICAgICAgICAgICR0aWNrZXRfb3du
ZXJfZGV0YWlscyA9ICR0aGlzLT5nZXRVc2VyRGV0YWlscygkcmVzdWx0Wyd1c2VyX2lkX293bmVy
J10pOw0KKw0KKyAgICAgICAgICAgICRyZXN1bHRbJ19vd25lcl9uYW1lJ10gPSAkdGlja2V0X293
bmVyX2RldGFpbHNbJ3VzZXJfbmFtZSddOw0KKyAgICAgICAgICAgICRyZXN1bHRbJ19vd25lcl9l
bWFpbCddID0gJHRpY2tldF9vd25lcl9kZXRhaWxzWyd1c2VyX2VtYWlsJ107DQorICAgICAgICAg
ICAgJHJlc3VsdFsnX293bmVyJ10gPSAkcmVzdWx0Wydfb3duZXJfZW1haWwnXTsNCiAgICAgICAg
IH0NCiAgICAgICAgIA0KICAgICAgICAgcmV0dXJuICRyZXN1bHQ7DQpAQCAtMjk1LDIzICszMDcs
MzMgQEANCiAgICAgICAgIHJldHVybiAkdGhpcy0+X2dldE9uZSgiU0VMRUNUIHByaW9yaXR5X25h
bWUgRlJPTSB3aHVwc19wcmlvcml0aWVzIFdIRVJFIHR5cGVfaWQgPSAkdHlwZSBBTkQgcHJpb3Jp
dHlfaWQgPSAkcHJpb3JpdHkiKTsNCiAgICAgfQ0KIA0KLSAgICBmdW5jdGlvbiBnZXRVc2VyRnJv
bUVtYWlsKCRlbWFpbCkNCi0gICAgew0KKyAgICBmdW5jdGlvbiBnZXRVc2VyVHlwZXMoKSB7DQor
ICAgICAgICByZXR1cm4gYXJyYXkoJzEnID0+ICdFbWFpbCBBZGRyZXNzJywgJzInID0+ICdVc2Vy
IE5hbWUnKTsNCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBnZXRVc2VyRnJvbUVtYWlsKCRlbWFp
bCkgew0KICAgICAgICAgJGVtYWlsID0gJHRoaXMtPmRiLT5xdW90ZSgkZW1haWwpOw0KLSAgICAg
ICAgcmV0dXJuICR0aGlzLT5fZ2V0T25lKCJTRUxFQ1QgaWQgRlJPTSB1c2VyIFdIRVJFIGVtYWls
ID0gJGVtYWlsIik7DQorICAgICAgICByZXR1cm4gJHRoaXMtPl9nZXRPbmUoIlNFTEVDVCB1c2Vy
X2lkIEZST00gd2h1cHNfdXNlcnMgV0hFUkUgdXNlUl9lbWFpbCA9ICRlbWFpbCIpOw0KICAgICB9
DQogDQotICAgIGZ1bmN0aW9uIGdldFVzZXJEZXRhaWxzKCRpZCkNCi0gICAgew0KLSAgICAgICAg
JHJlc3VsdCA9ICR0aGlzLT5fZ2V0QWxsKCJTRUxFQ1QgbmFtZSwgZW1haWwgRlJPTSB1c2VyIFdI
RVJFIGlkID0gJGlkIik7DQotICAgICAgICByZXR1cm4gJHJlc3VsdFswXTsNCisgICAgZnVuY3Rp
b24gZ2V0VXNlckZyb21OYW1lKCRuYW1lKSB7DQorICAgICAgICAkbmFtZSA9ICR0aGlzLT5kYi0+
cXVvdGUoJG5hbWUpOw0KKyAgICAgICAgcmV0dXJuICR0aGlzLT5fZ2V0T25lKCJTRUxFQ1QgdXNl
cl9pZCBGUk9NIHdodXBzX3VzZXJzIFdIRVJFIHVzZXJfbmFtZSA9ICRuYW1lIik7DQogICAgIH0N
CiANCi0gICAgZnVuY3Rpb24gZ2V0VXNlckRldGFpbHNGcm9tRW1haWwoJGVtYWlsKQ0KLSAgICB7
DQotICAgICAgICAkZW1haWwgPSAkdGhpcy0+ZGItPnF1b3RlKCRlbWFpbCk7DQotICAgICAgICAk
cmVzdWx0ID0gJHRoaXMtPl9nZXRBbGwoIlNFTEVDVCBpZCwgbmFtZSBGUk9NIHVzZXIgV0hFUkUg
ZW1haWwgPSAkZW1haWwiKTsNCi0gICAgICAgIHJldHVybiAkcmVzdWx0WzBdOw0KKyAgICBmdW5j
dGlvbiBnZXRVc2VyRGV0YWlscygkaWQpIHsNCisgICAgICAgICRyZXN1bHRzID0gJHRoaXMtPl9n
ZXRBbGwoIlNFTEVDVCB1c2VyX2lkLCB1c2VyX25hbWUsIHVzZXJfZW1haWwgRlJPTSB3aHVwc191
c2VycyBXSEVSRSB1c2VyX2lkID0gJGlkIik7DQorICAgICAgICByZXR1cm4gJHJlc3VsdHNbMF07
DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gZ2V0VXNlckRldGFpbHNGcm9tRW1haWwoJGVtYWls
KSB7DQorICAgICAgICByZXR1cm4gJHRoaXMtPmdldFVzZXJEZXRhaWxzKCR0aGlzLT5nZXRVc2Vy
RnJvbUVtYWlsKCRlbWFpbCkpOw0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIGdldFVzZXJEZXRh
aWxzRnJvbU5hbWUoJG5hbWUpIHsNCisgICAgICAgICRuYW1lID0gJHRoaXMtPmRiLT5xdW90ZSgk
bmFtZSk7DQorICAgICAgICAkcmVzdWx0cyA9ICR0aGlzLT5fZ2V0QWxsKCJTRUxFQ1QgdXNlcl9p
ZCwgdXNlcl9uYW1lLCB1c2VyX2VtYWlsIEZST00gd2h1cHNfdXNlcnMgV0hFUkUgdXNlcl9uYW1l
ID0gJG5hbWUiKTsNCisgICAgICAgIHJldHVybiAkcmVzdWx0c1swXTsNCiAgICAgfQ0KIA0KICAg
ICBmdW5jdGlvbiBnZXRVc2VyU2VhcmNoZXMoJHVzZXIpDQpjdnMgc2VydmVyOiBEaWZmaW5nIHNj
cmlwdHMNCmN2cyBzZXJ2ZXI6IERpZmZpbmcgc2NyaXB0cy9iYWNrZW5kDQpJbmRleDogc2NyaXB0
cy9iYWNrZW5kL3NhbXBsZV93aHVwc19kYi5zcWwNCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvcmVw
b3NpdG9yeS93aHVwcy9zY3JpcHRzL2JhY2tlbmQvc2FtcGxlX3dodXBzX2RiLnNxbCx2DQpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNQ0KZGlmZiAtdSAtcjEuNSBzYW1wbGVfd2h1cHNfZGIuc3FsDQot
LS0gc2NyaXB0cy9iYWNrZW5kL3NhbXBsZV93aHVwc19kYi5zcWwgMjAwMS8xMC8wNSAyMjowNTow
NCAgICAgMS41DQorKysgc2NyaXB0cy9iYWNrZW5kL3NhbXBsZV93aHVwc19kYi5zcWwgMjAwMS8x
MS8xMSAyMzo0ODoyMQ0KQEAgLTk3LDMgKzk3LDE1IEBADQogICAgICdMb3cnLA0KICAgICAnVGhp
cyB3aWxsIGJlIGRlYWx0IHdpdGggYnV0IHdvblwndCBnZXQgcHJlY2VkZW5jZSBvdmVyIG90aGVy
IGRldmVsb3BtZW50IHdvcmsnDQogKTsNCisNCitJTlNFUlQgSU5UTyB3aHVwc191c2VycyBWQUxV
RVMgKA0KKyAgICAxLA0KKyAgICAnYWRtaW4nLA0KKyAgICAnYWRtaW5AZXhhbXBsZS5jb20nDQor
KTsNCisNCitJTlNFUlQgSU5UTyB3aHVwc191c2VycyBWQUxVRVMgKA0KKyAgICAyLA0KKyAgICAn
dXNlcicsDQorICAgICd1c2VyQGV4YW1wbGUuY29tJw0KKyk7DQpJbmRleDogc2NyaXB0cy9iYWNr
ZW5kL3dodXBzLnNxbA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9yZXBvc2l0b3J5L3dodXBzL3Nj
cmlwdHMvYmFja2VuZC93aHVwcy5zcWwsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjcNCmRpZmYg
LXUgLXIxLjcgd2h1cHMuc3FsDQotLS0gc2NyaXB0cy9iYWNrZW5kL3dodXBzLnNxbCAgIDIwMDEv
MTAvMDYgMTY6NDc6MTcgICAgIDEuNw0KKysrIHNjcmlwdHMvYmFja2VuZC93aHVwcy5zcWwgICAy
MDAxLzExLzExIDIzOjQ4OjIyDQpAQCAtOTcsMyArOTcsMTAgQEANCiAgICAgICAgdGlja2V0X2lk
ICAgICAgIElOVCBOT1QgTlVMTCwNCiAgICAgICAgdXNlcl9pZCAgICAgICAgIFZBUkNIQVIoMjU1
KSBOT1QgTlVMTA0KICk7DQorDQorQ1JFQVRFIFRBQkxFIHdodXBzX3VzZXJzIHsNCisgICAgICAg
dXNlcl9pZCAgICAgICAgIFZBUkNIQVIoMzIpIE5PVCBOVUxMLA0KKyAgICAgICB1c2VyX25hbWUg
ICAgICAgVkFSQ0hBUig2NCksDQorICAgICAgIHVzZXJfZW1haWwgICAgICBWQVJDSEFSKDk2KSwN
CisgICAgICAgcHJpbWFyeSBrZXkgKHVzZXJfaWQpDQorKTsNCmN2cyBzZXJ2ZXI6IERpZmZpbmcg
dGVtcGxhdGVzDQpjdnMgc2VydmVyOiBEaWZmaW5nIHRlbXBsYXRlcy9pbmRleA==

---------------------- multipart/mixed attachment
PD9waHANCi8qDQogKiAkSG9yZGU6IHdodXBzL25ld3VzZXIucGhwLHYgMC4wIDIwMDEvMDcvMTcg
MTA6MTM6NDAgYXZzbSBFeHAgJA0KICoNCiAqIENvcHlyaWdodCAyMDAxIEFsZXggUy4gTGV2ZXJp
bmd0b24gPGFsZXhAbmV0d29ya2Vzc2VuY2UuY29tPiAgICAgICAgICAgICAgICAgICAgICAgIA0K
ICoNCiAqIFNlZSB0aGUgZW5jbG9zZWQgZmlsZSBMSUNFTlNFIGZvciBsaWNlbnNlIGluZm9ybWF0
aW9uIChCU0QpLiBJZiB5b3UNCiAqIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRw
Oi8vd3d3LmhvcmRlLm9yZy9ic2RsLnBocCwNCiAqLw0KDQpkZWZpbmUoJ1dIVVBTX0JBU0UnLCBk
aXJuYW1lKF9fRklMRV9fKSk7DQpyZXF1aXJlX29uY2UgV0hVUFNfQkFTRSAuICcvbGliL2Jhc2Uu
cGhwJzsNCnJlcXVpcmVfb25jZSBXSFVQU19CQVNFIC4gJy9saWIvRm9ybXMucGhwJzsNCg0KcmVx
dWlyZSAkcmVnaXN0cnktPmdldFRlbXBsYXRlUGF0aCgpIC4gJy9wYWdlLmluYyc7DQpyZXF1aXJl
ICRyZWdpc3RyeS0+Z2V0VGVtcGxhdGVQYXRoKCkgLiAnL2hlYWRlcmJhci5pbmMnOw0KcmVxdWly
ZSAkcmVnaXN0cnktPmdldFRlbXBsYXRlUGF0aCgpIC4gJy9mb3JtcmVuZGVyZXIuaW5jJzsNCnJl
cXVpcmUgJHJlZ2lzdHJ5LT5nZXRUZW1wbGF0ZVBhdGgoKSAuICcvY29tbWVudC5pbmMnOw0KcmVx
dWlyZSAkcmVnaXN0cnktPmdldFRlbXBsYXRlUGF0aCgpIC4gJy91c2VyYWN0aW9ucy5pbmMnOw0K
DQokUEFHRSA9IG5ldyBQYWdlKCk7DQokSEVBREVSQkFSID0gbmV3IEhlYWRlckJhcigpOw0KJFJF
TkRFUkVSID0gbmV3IEZvcm1SZW5kZXJlcigpOw0KJENPTU1FTlQgPSBuZXcgQ29tbWVudCgpOw0K
DQovLyBzdGFydCB0aGUgcGFnZQ0KJFBBR0UtPm9wZW4oJ1dodXBzOiBOZXcgVXNlcicpOw0KJEhF
QURFUkJBUi0+YmFyKCRzZWN0aW9ucywgJ25ld3VzZXInKTsNCg0KJFJFTkRFUkVSLT5iZWdpbklu
YWN0aXZlKCJOZXcgVXNlciIpOw0KZWNobyAiPHRyIGNsYXNzPVwiaXRlbTBcIj48dGQgY29sc3Bh
bj1cIjJcIj5Tb29uLi4uPC90ZD48L3RyPlxuIjsNCiRSRU5ERVJFUi0+ZW5kKCk7DQoNCiRQQUdF
LT5jbG9zZSgpOw0KDQo/Pg0K

---------------------- multipart/mixed attachment
PD9waHANCi8qDQogKiAkSG9yZGU6IHdodXBzL3VzZXJhZG1pbi5waHAsdiAwLjAgMjAwMS8wNy8x
NyAxMDoxMzo0MCBhdnNtIEV4cCAkDQogKg0KICogQ29weXJpZ2h0IDIwMDEgQWxleCBTLiBMZXZl
cmluZ3RvbiA8YWxleEBuZXR3b3JrZXNzZW5jZS5jb20+DQogKiANCiAqIFNlZSB0aGUgZW5jbG9z
ZWQgZmlsZSBMSUNFTlNFIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChCU0QpLiBJZiB5b3UNCiAq
IGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmhvcmRlLm9yZy9ic2Rs
LnBocCwNCiAqLw0KICAgDQpkZWZpbmUoJ1dIVVBTX0JBU0UnLCBkaXJuYW1lKF9fRklMRV9fKSk7
DQpyZXF1aXJlX29uY2UgV0hVUFNfQkFTRSAuICcvbGliL2Jhc2UucGhwJzsgDQpyZXF1aXJlX29u
Y2UgV0hVUFNfQkFTRSAuICcvbGliL0Zvcm1zLnBocCc7DQoNCnJlcXVpcmUgJHJlZ2lzdHJ5LT5n
ZXRUZW1wbGF0ZVBhdGgoKSAuICcvcGFnZS5pbmMnOw0KcmVxdWlyZSAkcmVnaXN0cnktPmdldFRl
bXBsYXRlUGF0aCgpIC4gJy9oZWFkZXJiYXIuaW5jJzsNCnJlcXVpcmUgJHJlZ2lzdHJ5LT5nZXRU
ZW1wbGF0ZVBhdGgoKSAuICcvZm9ybXJlbmRlcmVyLmluYyc7DQpyZXF1aXJlICRyZWdpc3RyeS0+
Z2V0VGVtcGxhdGVQYXRoKCkgLiAnL2NvbW1lbnQuaW5jJzsNCnJlcXVpcmUgJHJlZ2lzdHJ5LT5n
ZXRUZW1wbGF0ZVBhdGgoKSAuICcvdXNlcmFjdGlvbnMuaW5jJzsNCg0KJFBBR0UgPSBuZXcgUGFn
ZSgpOw0KJEhFQURFUkJBUiA9IG5ldyBIZWFkZXJCYXIoKTsNCiRSRU5ERVJFUiA9IG5ldyBGb3Jt
UmVuZGVyZXIoKTsNCiRDT01NRU5UID0gbmV3IENvbW1lbnQoKTsNCg0KLy8gc3RhcnQgdGhlIHBh
Z2UNCiRQQUdFLT5vcGVuKCdXaHVwczogVXNlciBBZG1pbmlzdHJhdGlvbicpOw0KJEhFQURFUkJB
Ui0+YmFyKCRzZWN0aW9ucywgJ3VzZXJhZG1pbicpOyAgDQoNCiRSRU5ERVJFUi0+YmVnaW5JbmFj
dGl2ZSgiVXNlciBBZG1pbmlzdHJhdGlvbiIpOw0KZWNobyAiPHRyIGNsYXNzPVwiaXRlbTBcIj48
dGQgY29sc3Bhbj1cIjJcIj5Tb29uLi4uPC90ZD48L3RyPlxuIjsNCiRSRU5ERVJFUi0+ZW5kKCk7
DQoNCiRQQUdFLT5jbG9zZSgpOw0KDQo/Pg==

---------------------- multipart/mixed attachment--