[Box Backup-dev] [PATCH] Win32 merge [05] bbackupd

Chris Wilson boxbackup-dev@fluffy.co.uk
Sun, 23 Jul 2006 02:11:15 +0100 (BST)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

--8323328-1254894265-1153616538=:9244
Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed
Content-ID: <Pine.LNX.4.64.0607230202551.9244@localhost>

Hi all,

The attached patch contains a few changes:

* Reformat code in bin/bbackupd/Win32ServiceFunctions.cpp to better match
   the Box coding standards (not claiming it's perfect yet)
* Allow passing a configuration file name to InstallService, and include
   that name in the service command line
* Pass the configuration file name from the command line when calling
   OurService() and InstallService() from main()
* Set a non-zero exit code if InstallService or RemoveService fails
* Detect some common error cases in InstallService() and show better
   debugging messages on the console
* Stop the Box Backup service before trying to delete it
* Fixed a trivial memory leak reported by DebugMemleakFinder
* Removed WSAStartup() and WSACleanup() from bbackupd.cpp (moved to
   Daemon.cpp) - temporarily breaks Win32 builds, pending the patch to
   Daemon.cpp!

Cheers, Chris.
-- 
_ ___ __     _
  / __/ / ,__(_)_  | Chris Wilson <0000 at qwirx.com> - Cambs UK |
/ (_/ ,\/ _/ /_ \ | Security/C/C++/Java/Perl/SQL/HTML Developer |
\ _/_/_/_//_/___/ | We are GNU-free your mind-and your software |
--8323328-1254894265-1153616538=:9244
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=bb-win32-merge-6-service-config-path.patch
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.64.0607230202180.9244@localhost>
Content-Description: 
Content-Disposition: attachment; filename=bb-win32-merge-6-service-config-path.patch

SW5kZXg6IGJpbi9iYmFja3VwZC9XaW4zMlNlcnZpY2VGdW5jdGlvbnMuY3Bw
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gYmluL2JiYWNrdXBkL1dp
bjMyU2VydmljZUZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDU2OCkNCisrKyBi
aW4vYmJhY2t1cGQvV2luMzJTZXJ2aWNlRnVuY3Rpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQ0KQEAgLTkzLDI4ICs5MywzMCBAQA0KIC8vIEl0IGFsc28gcmV0
dXJucyBvbiBhbnkgZXJyb3IgYmVjYXVzZSB0aGUNCiAvLyBzZXJ2aWNlIGNh
bm5vdCBzdGFydCBpZiB0aGVyZSBpcyBhbiBlcm9yLg0KIA0KK3N0YXRpYyBj
aGFyKiBzcENvbmZpZ0ZpbGVOYW1lOw0KKw0KIFZPSUQgU2VydmljZU1haW4o
RFdPUkQgYXJnYywgTFBUU1RSICphcmd2KSANCiB7DQotICAgIC8vIGluaXRp
YWxpc2Ugc2VydmljZSBzdGF0dXMNCi0gICAgZ1NlcnZpY2VTdGF0dXMuZHdT
ZXJ2aWNlVHlwZSA9IFNFUlZJQ0VfV0lOMzI7DQotICAgIGdTZXJ2aWNlU3Rh
dHVzLmR3Q3VycmVudFN0YXRlID0gU0VSVklDRV9TVE9QUEVEOw0KLSAgICBn
U2VydmljZVN0YXR1cy5kd0NvbnRyb2xzQWNjZXB0ZWQgPSAwOw0KLSAgICBn
U2VydmljZVN0YXR1cy5kd1dpbjMyRXhpdENvZGUgPSBOT19FUlJPUjsNCi0g
ICAgZ1NlcnZpY2VTdGF0dXMuZHdTZXJ2aWNlU3BlY2lmaWNFeGl0Q29kZSA9
IE5PX0VSUk9SOw0KLSAgICBnU2VydmljZVN0YXR1cy5kd0NoZWNrUG9pbnQg
PSAwOw0KLSAgICBnU2VydmljZVN0YXR1cy5kd1dhaXRIaW50ID0gMDsNCisJ
Ly8gaW5pdGlhbGlzZSBzZXJ2aWNlIHN0YXR1cw0KKwlnU2VydmljZVN0YXR1
cy5kd1NlcnZpY2VUeXBlID0gU0VSVklDRV9XSU4zMjsNCisJZ1NlcnZpY2VT
dGF0dXMuZHdDdXJyZW50U3RhdGUgPSBTRVJWSUNFX1NUT1BQRUQ7DQorCWdT
ZXJ2aWNlU3RhdHVzLmR3Q29udHJvbHNBY2NlcHRlZCA9IDA7DQorCWdTZXJ2
aWNlU3RhdHVzLmR3V2luMzJFeGl0Q29kZSA9IE5PX0VSUk9SOw0KKwlnU2Vy
dmljZVN0YXR1cy5kd1NlcnZpY2VTcGVjaWZpY0V4aXRDb2RlID0gTk9fRVJS
T1I7DQorCWdTZXJ2aWNlU3RhdHVzLmR3Q2hlY2tQb2ludCA9IDA7DQorCWdT
ZXJ2aWNlU3RhdHVzLmR3V2FpdEhpbnQgPSAwOw0KIA0KLSAgICBnU2Vydmlj
ZVN0YXR1c0hhbmRsZSA9IFJlZ2lzdGVyU2VydmljZUN0cmxIYW5kbGVyKGdT
ZXJ2aWNlTmFtZSwgDQotCVNlcnZpY2VDb250cm9sSGFuZGxlcik7DQorCWdT
ZXJ2aWNlU3RhdHVzSGFuZGxlID0gUmVnaXN0ZXJTZXJ2aWNlQ3RybEhhbmRs
ZXIoZ1NlcnZpY2VOYW1lLCANCisJCVNlcnZpY2VDb250cm9sSGFuZGxlcik7
DQogDQotICAgIGlmIChnU2VydmljZVN0YXR1c0hhbmRsZSkNCi0gICAgew0K
LSAgICAgICAgLy8gc2VydmljZSBpcyBzdGFydGluZw0KLSAgICAgICAgZ1Nl
cnZpY2VTdGF0dXMuZHdDdXJyZW50U3RhdGUgPSBTRVJWSUNFX1NUQVJUX1BF
TkRJTkc7DQotICAgICAgICBTZXRTZXJ2aWNlU3RhdHVzKGdTZXJ2aWNlU3Rh
dHVzSGFuZGxlLCAmZ1NlcnZpY2VTdGF0dXMpOw0KKwlpZiAoZ1NlcnZpY2VT
dGF0dXNIYW5kbGUpDQorCXsNCisJCS8vIHNlcnZpY2UgaXMgc3RhcnRpbmcN
CisJCWdTZXJ2aWNlU3RhdHVzLmR3Q3VycmVudFN0YXRlID0gU0VSVklDRV9T
VEFSVF9QRU5ESU5HOw0KKwkJU2V0U2VydmljZVN0YXR1cyhnU2VydmljZVN0
YXR1c0hhbmRsZSwgJmdTZXJ2aWNlU3RhdHVzKTsNCiANCi0gICAgICAgIC8v
IGRvIGluaXRpYWxpc2F0aW9uIGhlcmUNCi0gICAgICAgIGdTdG9wU2Vydmlj
ZUV2ZW50ID0gQ3JlYXRlRXZlbnQoIDAsIFRSVUUsIEZBTFNFLCAwICk7DQor
CQkvLyBkbyBpbml0aWFsaXNhdGlvbiBoZXJlDQorCQlnU3RvcFNlcnZpY2VF
dmVudCA9IENyZWF0ZUV2ZW50KDAsIFRSVUUsIEZBTFNFLCAwKTsNCiAJCWlm
ICghZ1N0b3BTZXJ2aWNlRXZlbnQpDQogCQl7DQogCQkJZ1NlcnZpY2VTdGF0
dXMuZHdDb250cm9sc0FjY2VwdGVkICY9IA0KQEAgLTEyOSw3ICsxMzEsNyBA
QA0KIAkJCU5VTEwsDQogCQkJMCwNCiAJCQlSdW5TZXJ2aWNlLA0KLQkJCTAs
DQorCQkJc3BDb25maWdGaWxlTmFtZSwNCiAJCQlDUkVBVEVfU1VTUEVOREVE
LA0KIAkJCU5VTEwpOw0KIA0KQEAgLTEzOCw3ICsxNDAsNyBAQA0KIA0KIAkJ
Ly8gd2UgYXJlIG5vdyBydW5uaW5nIHNvIHRlbGwgdGhlIFNDTQ0KIAkJZ1Nl
cnZpY2VTdGF0dXMuZHdDb250cm9sc0FjY2VwdGVkIHw9IA0KLQkJKFNFUlZJ
Q0VfQUNDRVBUX1NUT1AgfCBTRVJWSUNFX0FDQ0VQVF9TSFVURE9XTik7DQor
CQkJKFNFUlZJQ0VfQUNDRVBUX1NUT1AgfCBTRVJWSUNFX0FDQ0VQVF9TSFVU
RE9XTik7DQogCQlnU2VydmljZVN0YXR1cy5kd0N1cnJlbnRTdGF0ZSA9IFNF
UlZJQ0VfUlVOTklORzsNCiAJCVNldFNlcnZpY2VTdGF0dXMoZ1NlcnZpY2VT
dGF0dXNIYW5kbGUsICZnU2VydmljZVN0YXR1cyk7DQogDQpAQCAtMTU2LDEx
ICsxNTgsMTMgQEANCiAJCQl+KFNFUlZJQ0VfQUNDRVBUX1NUT1AgfCBTRVJW
SUNFX0FDQ0VQVF9TSFVURE9XTik7DQogCQlnU2VydmljZVN0YXR1cy5kd0N1
cnJlbnRTdGF0ZSA9IFNFUlZJQ0VfU1RPUFBFRDsNCiAJCVNldFNlcnZpY2VT
dGF0dXMoZ1NlcnZpY2VTdGF0dXNIYW5kbGUsICZnU2VydmljZVN0YXR1cyk7
DQotICAgIH0NCisJfQ0KIH0NCiANCi12b2lkIE91clNlcnZpY2Uodm9pZCkN
Cit2b2lkIE91clNlcnZpY2UoY2hhciogcENvbmZpZ0ZpbGVOYW1lKQ0KIHsN
CisJc3BDb25maWdGaWxlTmFtZSA9IHBDb25maWdGaWxlTmFtZTsNCisNCiAJ
U0VSVklDRV9UQUJMRV9FTlRSWSBzZXJ2aWNlVGFibGVbXSA9IA0KIAl7IA0K
IAkJeyBTRVJWSUNFX05BTUUsIChMUFNFUlZJQ0VfTUFJTl9GVU5DVElPTikg
U2VydmljZU1haW4gfSwNCkBAIC0xNzksMjggKzE4Myw1MiBAQA0KIAl9DQog
fQ0KIA0KLXZvaWQgSW5zdGFsbFNlcnZpY2Uodm9pZCkNCitpbnQgSW5zdGFs
bFNlcnZpY2UoY29uc3QgY2hhciogcENvbmZpZ0ZpbGVOYW1lKQ0KIHsNCi0J
U0NfSEFORExFIG5ld1NlcnZpY2UsIHNjbTsNCisJaWYgKHBDb25maWdGaWxl
TmFtZSAhPSBOVUxMKQ0KKwl7DQorCQlzdHJ1Y3Qgc3RhdCBzdDsNCiANCi0J
c2NtID0gT3BlblNDTWFuYWdlcigwLDAsU0NfTUFOQUdFUl9DUkVBVEVfU0VS
VklDRSk7DQorCQlpZiAoZW11X3N0YXQocENvbmZpZ0ZpbGVOYW1lLCAmc3Qp
ICE9IDApDQorCQl7DQorCQkJc3lzbG9nKExPR19FUlIsICJGYWlsZWQgdG8g
b3BlbiBjb25maWd1cmF0aW9uIGZpbGU6ICINCisJCQkJIiVzOiAlcyIsIHBD
b25maWdGaWxlTmFtZSwgc3RyZXJyb3IoZXJybm8pKTsNCisJCQlyZXR1cm4g
MTsNCisJCX0NCiANCisJCWlmICghIHN0LnN0X21vZGUgJiBTX0lGUkVHKQ0K
KwkJew0KKwkNCisJCQlzeXNsb2coTE9HX0VSUiwgIkZhaWxlZCB0byBvcGVu
IGNvbmZpZ3VyYXRpb24gZmlsZTogIg0KKwkJCQkiJXM6IG5vdCBhIGZpbGUi
LCBwQ29uZmlnRmlsZU5hbWUpOw0KKwkJCXJldHVybiAxOw0KKwkJfQ0KKwl9
DQorDQorCVNDX0hBTkRMRSBzY20gPSBPcGVuU0NNYW5hZ2VyKDAsMCxTQ19N
QU5BR0VSX0NSRUFURV9TRVJWSUNFKTsNCisNCiAJaWYgKCFzY20pIA0KIAl7
DQogCQlzeXNsb2coTE9HX0VSUiwgIkZhaWxlZCB0byBvcGVuIHNlcnZpY2Ug
Y29udHJvbCBtYW5hZ2VyOiAiDQogCQkJImVycm9yICVkIiwgR2V0TGFzdEVy
cm9yKCkpOw0KLQkJcmV0dXJuOw0KKwkJcmV0dXJuIDE7DQogCX0NCiANCiAJ
Y2hhciBjbWRbTUFYX1BBVEhdOw0KIAlHZXRNb2R1bGVGaWxlTmFtZShOVUxM
LCBjbWQsIHNpemVvZihjbWQpLTEpOw0KIAljbWRbc2l6ZW9mKGNtZCktMV0g
PSAwOw0KIA0KLQljaGFyIGNtZF9hcmdzW01BWF9QQVRIXTsNCi0JX3NucHJp
bnRmKGNtZF9hcmdzLCBzaXplb2YoY21kX2FyZ3MpLTEsICIlcyAtLXNlcnZp
Y2UiLCBjbWQpOw0KLQljbWRfYXJnc1tzaXplb2YoY21kX2FyZ3MpLTFdID0g
MDsNCisJc3RkOjpzdHJpbmcgY21kV2l0aEFyZ3MoY21kKTsNCisJY21kV2l0
aEFyZ3MgKz0gIiAtLXNlcnZpY2UiOw0KIA0KLQluZXdTZXJ2aWNlID0gQ3Jl
YXRlU2VydmljZSgNCisJaWYgKHBDb25maWdGaWxlTmFtZSAhPSBOVUxMKQ0K
Kwl7DQorCQljbWRXaXRoQXJncyArPSAiIFwiIjsNCisJCWNtZFdpdGhBcmdz
ICs9IHBDb25maWdGaWxlTmFtZTsNCisJCWNtZFdpdGhBcmdzICs9ICJcIiI7
DQorCX0NCisNCisJU0NfSEFORExFIG5ld1NlcnZpY2UgPSBDcmVhdGVTZXJ2
aWNlKA0KIAkJc2NtLCANCiAJCVNFUlZJQ0VfTkFNRSwgDQogCQkiQm94IEJh
Y2t1cCIsIA0KQEAgLTIwOCwxNCArMjM2LDM2IEBADQogCQlTRVJWSUNFX1dJ
TjMyX09XTl9QUk9DRVNTLCANCiAJCVNFUlZJQ0VfQVVUT19TVEFSVCwgDQog
CQlTRVJWSUNFX0VSUk9SX05PUk1BTCwgDQotCQljbWRfYXJncywgDQorCQlj
bWRXaXRoQXJncy5jX3N0cigpLA0KIAkJMCwwLDAsMCwwKTsNCiANCisJRFdP
UkQgZXJyID0gR2V0TGFzdEVycm9yKCk7DQorCUNsb3NlU2VydmljZUhhbmRs
ZShzY20pOw0KKw0KIAlpZiAoIW5ld1NlcnZpY2UpIA0KIAl7DQotCQk6OnN5
c2xvZyhMT0dfRVJSLCAiRmFpbGVkIHRvIGNyZWF0ZSBCb3ggQmFja3VwIHNl
cnZpY2U6ICINCi0JCQkiZXJyb3IgJWQiLCBHZXRMYXN0RXJyb3IoKSk7DQot
CQlyZXR1cm47DQorCQlpZiAoZXJyID09IEVSUk9SX1NFUlZJQ0VfRVhJU1RT
KQ0KKwkJew0KKwkJCTo6c3lzbG9nKExPR19FUlIsICJGYWlsZWQgdG8gY3Jl
YXRlIEJveCBCYWNrdXAgIg0KKwkJCQkic2VydmljZTogaXQgYWxyZWFkeSBl
eGlzdHMiKTsNCisJCX0NCisJCWVsc2UgaWYgKGVyciA9PSBFUlJPUl9TRVJW
SUNFX01BUktFRF9GT1JfREVMRVRFKQ0KKwkJew0KKwkJCTo6c3lzbG9nKExP
R19FUlIsICJGYWlsZWQgdG8gY3JlYXRlIEJveCBCYWNrdXAgIg0KKwkJCQki
c2VydmljZTogaXQgaXMgd2FpdGluZyB0byBiZSBkZWxldGVkIik7DQorCQl9
DQorCQllbHNlIGlmIChlcnIgPT0gRVJST1JfRFVQTElDQVRFX1NFUlZJQ0Vf
TkFNRSkNCisJCXsNCisJCQk6OnN5c2xvZyhMT0dfRVJSLCAiRmFpbGVkIHRv
IGNyZWF0ZSBCb3ggQmFja3VwICINCisJCQkJInNlcnZpY2U6IGEgc2Vydmlj
ZSB3aXRoIHRoaXMgbmFtZSAiDQorCQkJCSJhbHJlYWR5IGV4aXN0cyIpOw0K
KwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCTo6c3lzbG9nKExPR19FUlIsICJG
YWlsZWQgdG8gY3JlYXRlIEJveCBCYWNrdXAgIg0KKwkJCQkic2VydmljZTog
ZXJyb3IgJWQiLCBlcnIpOw0KKwkJfQ0KKwkJcmV0dXJuIDE7DQogCX0NCiAN
CiAJOjpzeXNsb2coTE9HX0lORk8sICJDcmVhdGVkIEJveCBCYWNrdXAgc2Vy
dmljZSIpOw0KQEAgLTIzMSw0NSArMjgxLDc1IEBADQogCX0NCiANCiAJQ2xv
c2VTZXJ2aWNlSGFuZGxlKG5ld1NlcnZpY2UpOw0KLQlDbG9zZVNlcnZpY2VI
YW5kbGUoc2NtKTsNCisNCisJcmV0dXJuIDA7DQogfQ0KIA0KLXZvaWQgUmVt
b3ZlU2VydmljZSh2b2lkKQ0KK2ludCBSZW1vdmVTZXJ2aWNlKHZvaWQpDQog
ew0KLQlTQ19IQU5ETEUgc2VydmljZSwgc2NtOw0KLQlTRVJWSUNFX1NUQVRV
UyBzdGF0dXM7DQorCVNDX0hBTkRMRSBzY20gPSBPcGVuU0NNYW5hZ2VyKDAs
MCxTQ19NQU5BR0VSX0NSRUFURV9TRVJWSUNFKTsNCiANCi0Jc2NtID0gT3Bl
blNDTWFuYWdlcigwLDAsU0NfTUFOQUdFUl9DUkVBVEVfU0VSVklDRSk7DQot
DQogCWlmICghc2NtKSANCiAJew0KIAkJc3lzbG9nKExPR19FUlIsICJGYWls
ZWQgdG8gb3BlbiBzZXJ2aWNlIGNvbnRyb2wgbWFuYWdlcjogIg0KIAkJCSJl
cnJvciAlZCIsIEdldExhc3RFcnJvcigpKTsNCi0JCXJldHVybjsNCisJCXJl
dHVybiAxOw0KIAl9DQogDQotCXNlcnZpY2UgPSBPcGVuU2VydmljZShzY20s
IFNFUlZJQ0VfTkFNRSwgU0VSVklDRV9BTExfQUNDRVNTfERFTEVURSk7DQot
CUNvbnRyb2xTZXJ2aWNlKHNlcnZpY2UsIFNFUlZJQ0VfQ09OVFJPTF9TVE9Q
LCAmc3RhdHVzKTsNCisJU0NfSEFORExFIHNlcnZpY2UgPSBPcGVuU2Vydmlj
ZShzY20sIFNFUlZJQ0VfTkFNRSwgDQorCQlTRVJWSUNFX0FMTF9BQ0NFU1N8
REVMRVRFKTsNCisJRFdPUkQgZXJyID0gR2V0TGFzdEVycm9yKCk7DQorCUNs
b3NlU2VydmljZUhhbmRsZShzY20pOw0KIA0KIAlpZiAoIXNlcnZpY2UpDQog
CXsNCi0JCXN5c2xvZyhMT0dfRVJSLCAiRmFpbGVkIHRvIG9wZW4gQm94IEJh
Y2t1cCBzZXJ2aWNlOiAiDQotCQkJImVycm9yICVkIiwgR2V0TGFzdEVycm9y
KCkpOw0KLQkJcmV0dXJuOw0KKwkJaWYgKGVyciA9PSBFUlJPUl9TRVJWSUNF
X0RPRVNfTk9UX0VYSVNUIHx8DQorCQkJZXJyID09IEVSUk9SX0lPX1BFTkRJ
TkcpIA0KKwkJCS8vIGhlbGxvIG1pY3Jvc29mdD8gYW55b25lIGhvbWU/DQor
CQl7DQorCQkJc3lzbG9nKExPR19FUlIsICJGYWlsZWQgdG8gb3BlbiBCb3gg
QmFja3VwIHNlcnZpY2U6ICINCisJCQkJIm5vdCBpbnN0YWxsZWQgb3Igbm90
IGZvdW5kIik7DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJc3lzbG9nKExP
R19FUlIsICJGYWlsZWQgdG8gb3BlbiBCb3ggQmFja3VwIHNlcnZpY2U6ICIN
CisJCQkJImVycm9yICVkIiwgZXJyKTsNCisJCX0NCisJCXJldHVybiAxOw0K
IAl9DQogDQotCWlmIChEZWxldGVTZXJ2aWNlKHNlcnZpY2UpKQ0KKwlTRVJW
SUNFX1NUQVRVUyBzdGF0dXM7DQorCWlmICghQ29udHJvbFNlcnZpY2Uoc2Vy
dmljZSwgU0VSVklDRV9DT05UUk9MX1NUT1AsICZzdGF0dXMpKQ0KIAl7DQor
CQllcnIgPSBHZXRMYXN0RXJyb3IoKTsNCisJCWlmIChlcnIgIT0gRVJST1Jf
U0VSVklDRV9OT1RfQUNUSVZFKQ0KKwkJew0KKwkJCXN5c2xvZyhMT0dfV0FS
TklORywgIkZhaWxlZCB0byBzdG9wIEJveCBCYWNrdXAgIg0KKwkJCQkic2Vy
dmljZTogZXJyb3IgJWQiLCBlcnIpOw0KKwkJfQ0KKwl9DQorDQorCUJPT0wg
ZGVsZXRlZCA9IERlbGV0ZVNlcnZpY2Uoc2VydmljZSk7DQorCWVyciA9IEdl
dExhc3RFcnJvcigpOw0KKwlDbG9zZVNlcnZpY2VIYW5kbGUoc2VydmljZSk7
DQorDQorCWlmIChkZWxldGVkKQ0KKwl7DQogCQlzeXNsb2coTE9HX0lORk8s
ICJCb3ggQmFja3VwIHNlcnZpY2UgZGVsZXRlZCIpOw0KKwkJcmV0dXJuIDA7
DQogCX0NCisJZWxzZSBpZiAoZXJyID09IEVSUk9SX1NFUlZJQ0VfTUFSS0VE
X0ZPUl9ERUxFVEUpDQorCXsNCisJCXN5c2xvZyhMT0dfRVJSLCAiRmFpbGVk
IHRvIHJlbW92ZSBCb3ggQmFja3VwIHNlcnZpY2U6ICINCisJCQkiaXQgaXMg
YWxyZWFkeSBiZWluZyBkZWxldGVkIik7DQorCX0NCiAJZWxzZQ0KIAl7DQog
CQlzeXNsb2coTE9HX0VSUiwgIkZhaWxlZCB0byByZW1vdmUgQm94IEJhY2t1
cCBzZXJ2aWNlOiAiDQotCQkJImVycm9yICVkIiwgR2V0TGFzdEVycm9yKCkp
Ow0KKwkJCSJlcnJvciAlZCIsIGVycik7DQogCX0NCiANCi0JQ2xvc2VTZXJ2
aWNlSGFuZGxlKHNlcnZpY2UpOw0KLQlDbG9zZVNlcnZpY2VIYW5kbGUoc2Nt
KTsNCisJcmV0dXJuIDE7DQogfQ0KIA0KICNlbmRpZiAvLyBXSU4zMg0KSW5k
ZXg6IGJpbi9iYmFja3VwZC9XaW4zMlNlcnZpY2VGdW5jdGlvbnMuaA0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLS0tIGJpbi9iYmFja3VwZC9XaW4zMlNl
cnZpY2VGdW5jdGlvbnMuaAkocmV2aXNpb24gNTY4KQ0KKysrIGJpbi9iYmFj
a3VwZC9XaW4zMlNlcnZpY2VGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQ0K
QEAgLTEyLDggKzEyLDggQEANCiAjaWZuZGVmIFdJTjMyU0VSVklDRUZVTkNU
SU9OU19IDQogI2RlZmluZSBXSU4zMlNFUlZJQ0VGVU5DVElPTlNfSA0KIA0K
LXZvaWQgUmVtb3ZlU2VydmljZSh2b2lkKTsNCi12b2lkIEluc3RhbGxTZXJ2
aWNlKHZvaWQpOw0KLXZvaWQgT3VyU2VydmljZSh2b2lkKTsNCitpbnQgIFJl
bW92ZVNlcnZpY2Uodm9pZCk7DQoraW50ICBJbnN0YWxsU2VydmljZShjb25z
dCBjaGFyKiBwQ29uZmlnRmlsZVBhdGgpOw0KK3ZvaWQgT3VyU2VydmljZShj
aGFyKiBwQ29uZmlnRmlsZU5hbWUpOw0KIA0KICNlbmRpZg0KSW5kZXg6IGJp
bi9iYmFja3VwZC9XaW4zMkJhY2t1cFNlcnZpY2UuY3BwDQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQotLS0gYmluL2JiYWNrdXBkL1dpbjMyQmFja3VwU2Vy
dmljZS5jcHAJKHJldmlzaW9uIDU2OCkNCisrKyBiaW4vYmJhY2t1cGQvV2lu
MzJCYWNrdXBTZXJ2aWNlLmNwcAkod29ya2luZyBjb3B5KQ0KQEAgLTEyLDQw
ICsxMiw1MSBAQA0KIA0KICNpbmNsdWRlICJXaW4zMkJhY2t1cFNlcnZpY2Uu
aCINCiANCi1XaW4zMkJhY2t1cFNlcnZpY2UgZ0RhZW1vblNlcnZpY2U7DQor
V2luMzJCYWNrdXBTZXJ2aWNlKiBncERhZW1vblNlcnZpY2UgPSBOVUxMOw0K
IGV4dGVybiBIQU5ETEUgZ1N0b3BTZXJ2aWNlRXZlbnQ7DQogDQogdW5zaWdu
ZWQgaW50IFdJTkFQSSBSdW5TZXJ2aWNlKExQVk9JRCBscFBhcmFtZXRlcikN
CiB7DQotCURXT1JEIHJldFZhbCA9IGdEYWVtb25TZXJ2aWNlLldpblNlcnZp
Y2UoKTsNCi0JU2V0RXZlbnQoIGdTdG9wU2VydmljZUV2ZW50ICk7DQorCURX
T1JEIHJldFZhbCA9IGdwRGFlbW9uU2VydmljZS0+V2luU2VydmljZSgoY29u
c3QgY2hhciopIGxwUGFyYW1ldGVyKTsNCisJU2V0RXZlbnQoZ1N0b3BTZXJ2
aWNlRXZlbnQpOw0KIAlyZXR1cm4gcmV0VmFsOw0KIH0NCiANCiB2b2lkIFRl
cm1pbmF0ZVNlcnZpY2Uodm9pZCkNCiB7DQotCWdEYWVtb25TZXJ2aWNlLlNl
dFRlcm1pbmF0ZVdhbnRlZCgpOw0KKwlncERhZW1vblNlcnZpY2UtPlNldFRl
cm1pbmF0ZVdhbnRlZCgpOw0KIH0NCiANCi1EV09SRCBXaW4zMkJhY2t1cFNl
cnZpY2U6OldpblNlcnZpY2Uodm9pZCkNCitEV09SRCBXaW4zMkJhY2t1cFNl
cnZpY2U6OldpblNlcnZpY2UoY29uc3QgY2hhciogcENvbmZpZ0ZpbGVOYW1l
KQ0KIHsNCi0JaW50IGFyZ2MgPSAyOw0KLQkvL2ZpcnN0IG9mZiBnZXQgdGhl
IHBhdGggbmFtZSBmb3IgdGhlIGRlZmF1bHQgDQotCWNoYXIgYnVmW01BWF9Q
QVRIXTsNCisJY2hhciBleGVwYXRoW01BWF9QQVRIXTsNCisJR2V0TW9kdWxl
RmlsZU5hbWUoTlVMTCwgZXhlcGF0aCwgc2l6ZW9mKGV4ZXBhdGgpKTsNCisN
CisJc3RkOjpzdHJpbmcgY29uZmlnZmlsZTsNCiAJDQotCUdldE1vZHVsZUZp
bGVOYW1lKE5VTEwsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOw0KLQlzdGQ6OnN0cmlu
ZyBidWZmZXIoYnVmKTsNCi0Jc3RkOjpzdHJpbmcgY29uZiggIi1jIik7DQot
CXN0ZDo6c3RyaW5nIGNmaWxlKGJ1ZmZlci5zdWJzdHIoMCwoYnVmZmVyLmZp
bmQoImJiYWNrdXBkLmV4ZSIpKSkgDQotCQkJKyAiYmJhY2t1cGQuY29uZiIp
Ow0KKwlpZiAocENvbmZpZ0ZpbGVOYW1lICE9IE5VTEwpDQorCXsNCisJCWNv
bmZpZ2ZpbGUgPSBwQ29uZmlnRmlsZU5hbWU7DQorCX0NCisJZWxzZQ0KKwl7
DQorCQkvLyBtYWtlIHRoZSBkZWZhdWx0IGNvbmZpZyBmaWxlIG5hbWUsDQor
CQkvLyBiYXNlZCBvbiB0aGUgcHJvZ3JhbSBwYXRoDQorCQljb25maWdmaWxl
ID0gZXhlcGF0aDsNCisJCWNvbmZpZ2ZpbGUgPSBjb25maWdmaWxlLnN1YnN0
cigwLA0KKwkJCWNvbmZpZ2ZpbGUucmZpbmQoRElSRUNUT1JZX1NFUEFSQVRP
Ul9BU0NIQVIpKTsNCisJCWNvbmZpZ2ZpbGUgKz0gRElSRUNUT1JZX1NFUEFS
QVRPUiAiYmJhY2t1cGQuY29uZiI7DQorCX0NCiANCi0JY29uc3QgY2hhciAq
YXJndltdID0ge2NvbmYuY19zdHIoKSwgY2ZpbGUuY19zdHIoKX07DQorCWNv
bnN0IGNoYXIgKmFyZ3ZbXSA9IHtleGVwYXRoLCAiLWMiLCBjb25maWdmaWxl
LmNfc3RyKCl9Ow0KKwlpbnQgYXJnYyA9IHNpemVvZihhcmd2KSAvIHNpemVv
ZigqYXJndik7DQorCURXT1JEIHJldDsNCiANCiAJTUFJTkhFTFBFUl9TVEFS
VA0KKwlyZXQgPSB0aGlzLT5NYWluKEJPWF9GSUxFX0JCQUNLVVBEX0RFRkFV
TFRfQ09ORklHLCBhcmdjLCBhcmd2KTsNCisJTUFJTkhFTFBFUl9FTkQNCiAN
Ci0JcmV0dXJuIHRoaXMtPk1haW4oQk9YX0ZJTEVfQkJBQ0tVUERfREVGQVVM
VF9DT05GSUcsIGFyZ2MsIGFyZ3YpOw0KLQ0KLQlNQUlOSEVMUEVSX0VORA0K
KwlyZXR1cm4gcmV0Ow0KIH0NCiANCiAjZW5kaWYgLy8gV0lOMzINCkluZGV4
OiBiaW4vYmJhY2t1cGQvV2luMzJCYWNrdXBTZXJ2aWNlLmgNCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NCi0tLSBiaW4vYmJhY2t1cGQvV2luMzJCYWNrdXBT
ZXJ2aWNlLmgJKHJldmlzaW9uIDU2OCkNCisrKyBiaW4vYmJhY2t1cGQvV2lu
MzJCYWNrdXBTZXJ2aWNlLmgJKHdvcmtpbmcgY29weSkNCkBAIC0xMiw3ICsx
Miw3IEBADQogY2xhc3MgV2luMzJCYWNrdXBTZXJ2aWNlIDogcHVibGljIEJh
Y2t1cERhZW1vbg0KIHsNCiBwdWJsaWM6DQotCURXT1JEIFdpblNlcnZpY2Uo
dm9pZCk7DQorCURXT1JEIFdpblNlcnZpY2UoY29uc3QgY2hhciogcENvbmZp
Z0ZpbGVOYW1lKTsNCiB9Ow0KIA0KICNlbmRpZiAvLyBXSU4zMg0KSW5kZXg6
IGJpbi9iYmFja3VwZC9iYmFja3VwZC5jcHANCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCi0tLSBiaW4vYmJhY2t1cGQvYmJhY2t1cGQuY3BwCShyZXZpc2lv
biA1NjgpDQorKysgYmluL2JiYWNrdXBkL2JiYWNrdXBkLmNwcAkod29ya2lu
ZyBjb3B5KQ0KQEAgLTE5LDcgKzE5LDcgQEANCiAJI2luY2x1ZGUgIldpbjMy
U2VydmljZUZ1bmN0aW9ucy5oIg0KIAkjaW5jbHVkZSAiV2luMzJCYWNrdXBT
ZXJ2aWNlLmgiDQogDQotCWV4dGVybiBXaW4zMkJhY2t1cFNlcnZpY2UgZ0Rh
ZW1vblNlcnZpY2U7DQorCWV4dGVybiBXaW4zMkJhY2t1cFNlcnZpY2UqIGdw
RGFlbW9uU2VydmljZTsNCiAjZW5kaWYNCiANCiBpbnQgbWFpbihpbnQgYXJn
YywgY29uc3QgY2hhciAqYXJndltdKQ0KQEAgLTI4LDcgKzI4LDcgQEANCiAN
CiAjaWZkZWYgV0lOMzINCiANCi0JOjpvcGVubG9nKCJCb3ggQmFja3VwIChi
YmFja3VwZCkiLCAwLCAwKTsNCisJOjpvcGVubG9nKCJCb3ggQmFja3VwIChi
YmFja3VwZCkiLCBMT0dfUElELCBMT0dfTE9DQUw2KTsNCiANCiAJaWYoYXJn
YyA9PSAyICYmDQogCQkoOjpzdHJjbXAoYXJndlsxXSwgIi0taGVscCIpID09
IDAgfHwNCkBAIC00MCwzMiArNDAsMjUgQEANCiAJfQ0KIAlpZihhcmdjID09
IDIgJiYgOjpzdHJjbXAoYXJndlsxXSwgIi1yIikgPT0gMCkNCiAJew0KLQkJ
UmVtb3ZlU2VydmljZSgpOw0KLQkJcmV0dXJuIDA7DQorCQlyZXR1cm4gUmVt
b3ZlU2VydmljZSgpOw0KIAl9DQotCWlmKGFyZ2MgPT0gMiAmJiA6OnN0cmNt
cChhcmd2WzFdLCAiLWkiKSA9PSAwKQ0KKwlpZigoYXJnYyA9PSAyIHx8IGFy
Z2MgPT0gMykgJiYgOjpzdHJjbXAoYXJndlsxXSwgIi1pIikgPT0gMCkNCiAJ
ew0KLQkJSW5zdGFsbFNlcnZpY2UoKTsNCi0JCXJldHVybiAwOw0KKwkJY29u
c3QgY2hhciogY29uZmlnID0gTlVMTDsNCisJCWlmIChhcmdjID09IDMpDQor
CQl7DQorCQkJY29uZmlnID0gYXJndlsyXTsNCisJCX0NCisJCXJldHVybiBJ
bnN0YWxsU2VydmljZShjb25maWcpOw0KIAl9DQogDQogCWJvb2wgcnVuQXNX
aW4zMlNlcnZpY2UgPSBmYWxzZTsNCi0JaWYgKGFyZ2MgPT0gMiAmJiA6OnN0
cmNtcChhcmd2WzFdLCAiLS1zZXJ2aWNlIikgPT0gMCkNCisJaWYgKGFyZ2Mg
Pj0gMiAmJiA6OnN0cmNtcChhcmd2WzFdLCAiLS1zZXJ2aWNlIikgPT0gMCkN
CiAJew0KIAkJcnVuQXNXaW4zMlNlcnZpY2UgPSB0cnVlOw0KIAl9DQotCQ0K
LQkvLyBVbmRlciB3aW4zMiB3ZSBtdXN0IGluaXRpYWxpc2UgdGhlIFdpbnNv
Y2sgbGlicmFyeQ0KLQkvLyBiZWZvcmUgdXNpbmcgc29ja2V0cw0KLQkJDQot
CVdTQURBVEEgaW5mbzsNCiANCi0JaWYgKFdTQVN0YXJ0dXAoMHgwMTAxLCAm
aW5mbykgPT0gU09DS0VUX0VSUk9SKSANCi0Jew0KLQkJLy8gYm94IGJhY2t1
cCB3aWxsIG5vdCBydW4gd2l0aG91dCBzb2NrZXRzDQotCQk6OnN5c2xvZyhM
T0dfRVJSLCAiRmFpbGVkIHRvIGluaXRpYWxpc2UgV2luZG93cyBTb2NrZXRz
Iik7DQotCQlUSFJPV19FWENFUFRJT04oQmFja3VwU3RvcmVFeGNlcHRpb24s
IEludGVybmFsKQ0KLQl9DQorCWdwRGFlbW9uU2VydmljZSA9IG5ldyBXaW4z
MkJhY2t1cFNlcnZpY2UoKTsNCiANCiAJRW5hYmxlQmFja3VwUmlnaHRzKCk7
DQogDQpAQCAtNzMsMjAgKzY2LDMzIEBADQogDQogCWlmIChydW5Bc1dpbjMy
U2VydmljZSkNCiAJew0KLQkJc3lzbG9nKExPR19JTkZPLCJTdGFydGluZyBC
b3ggQmFja3VwIFNlcnZpY2UiKTsNCi0JCU91clNlcnZpY2UoKTsNCisJCXN5
c2xvZyhMT0dfSU5GTywgIkJveCBCYWNrdXAgc2VydmljZSBzdGFydGluZyIp
Ow0KKw0KKwkJY2hhciogY29uZmlnID0gTlVMTDsNCisJCWlmIChhcmdjID49
IDMpDQorCQl7DQorCQkJY29uZmlnID0gc3RyZHVwKGFyZ3ZbMl0pOw0KKwkJ
fQ0KKw0KKwkJT3VyU2VydmljZShjb25maWcpOw0KKw0KKwkJaWYgKGNvbmZp
ZykNCisJCXsNCisJCQlmcmVlKGNvbmZpZyk7DQorCQl9DQorDQorCQlzeXNs
b2coTE9HX0lORk8sICJCb3ggQmFja3VwIHNlcnZpY2Ugc2h1dCBkb3duIik7
DQogCX0NCiAJZWxzZQ0KIAl7DQotCQlFeGl0Q29kZSA9IGdEYWVtb25TZXJ2
aWNlLk1haW4oDQorCQlFeGl0Q29kZSA9IGdwRGFlbW9uU2VydmljZS0+TWFp
bigNCiAJCQlCT1hfRklMRV9CQkFDS1VQRF9ERUZBVUxUX0NPTkZJRywgYXJn
YywgYXJndik7DQogCX0NCiANCi0JLy8gQ2xlYW4gdXAgb3VyIHNvY2tldHMN
Ci0JV1NBQ2xlYW51cCgpOw0KLQ0KIAk6OmNsb3NlbG9nKCk7DQogDQorCWRl
bGV0ZSBncERhZW1vblNlcnZpY2U7DQorDQogCXJldHVybiBFeGl0Q29kZTsN
CiANCiAjZWxzZSAvLyAhV0lOMzINCg==

--8323328-1254894265-1153616538=:9244--