[Pythonmac-SIG] Programming Problem: comparing files with "known" differences

Robin Siebler Robin.Siebler@palmsource.com
Wed, 11 Sep 2002 15:48:37 -0700


This is a multi-part message in MIME format.

------_=_NextPart_001_01C259E5.5DB6E04D
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

I am trying to perform the following task (in an automated fashion):

1.  Launch CodeWarrior and disassemble a file
2.  Compare the output from this with a "known" file.

Now, the first 4-5 lines of each file are always going to be different, =
but after that, they should always be the same.  My current script uses =
AppleScript to launch CodeWarrior, disassemble the file and grab the =
output.  I then pass the output to Python (as a list of strings), strip =
the first couple of lines from the output and the "known" file and =
compare the two.  However, the output contains a backslash in places and =
somehow when I pass the output to Python it gets replaced with double =
backslashes, which causes the compare to fail.

I have 2 questions:

1.  Is there a better way to do this? =20
	a)  I tried to save the output file from CodeWarrior using AppleScript =
(which would alleviate the problem), but giving=20
                 CodeWarrior a save command brought up a Save dialog =
which I don't know how to deal with (I have minimal AppleScript
                 experience).
            b)  I looked at the man page for diff, but I couldn't see a =
way to have diff compare only the lines which should be the same (I=20
                 have minimal *nix experience)
2.  Is there a way to get rid of the double backslashes?  I tried =
string.replace("\\", "\") but I get a syntax error.

I have attached the scripts if anyone cares to look at them.

 <<cw_handler.py>>  <<disassemble_files.py>>=20

Robin L. Siebler
Software Test Engineer
Palm
---------------------------------------
Homer: Got any of that beer that has candy floating in it? You know, =
Skittlebrau?    Apu: Such a beer does not exist, sir. I think you must =
have dreamed it.    Homer: Oh. Well, then just give me a six-pack and a =
couple of bags of Skittles.


------_=_NextPart_001_01C259E5.5DB6E04D
Content-Type: application/octet-stream;
	name="cw_handler.py"
Content-Transfer-Encoding: base64
Content-Description: cw_handler.py
Content-Disposition: attachment;
	filename="cw_handler.py"

IiIiDQljd19oYW5kbGVyLnB5DQkNCVRoZSBwdXJwb3NlIG9mIHRoaXMgc2NyaXB0IGlzIHRvIGxh
dW5jaCBDb2RlV2FycmlvciBhbmQgdG8gc2V0IGl0IHRvIGEgYmFzZSBzdGF0ZSBieSBjbG9zaW5n
IA0JYW55IG9wZW4gd2luZG93cy4gIFNpbmNlIHRoZSBBcHBsZUV2ZW50cyBzdXBwb3J0IGZvciBD
b2RlV2FycmlvciBpbiBNYWNQeXRob24gbGVhdmVzICptdWNoKiANCXRvIGJlIGRlc2lyZWQsIEkg
YW0gdXNpbmcgQXBwbGVTY3JpcHQgKHdoZXJlIG5lY2Vzc2FyeSkgdG8gY29udHJvbCBDb2RlV2Fy
cmlvciBhbmQgUHl0aG9uIHRvIA0JdmFsaWRhdGUgdGhlIHJlc3VsdHMuDSIiIg0NX19hdXRob3Jf
XyAgPSAnUm9iaW4gTC4gU2llYmxlcicNX19kYXRlX18gICAgPSAnOC8yMC8wMicNX192ZXJzaW9u
X18gPSAnMS4wJw0NaW1wb3J0IE9TQW0sIGxvZ2dpbmcNDSNMb2cgTGV2ZWxzDSNMT0dfTEVWRUwg
PSBsb2dnaW5nLkRFQlVHDUxPR19MRVZFTCA9IGxvZ2dpbmcuSU5GTw0jTE9HX0xFVkVMID0gbG9n
Z2luZy5FUlJPUg0jTE9HX0xFVkVMID0gbG9nZ2luZy5DUklUSUNBTA0NbG9nID0gbG9nZ2luZy5n
ZXRMb2dnZXIoIkNXX0hhbmRsZXIiKQ0NZGVmIGNoZWNrX2N3KCk6DQkiIiJDaGVjayB0byBzZWUg
aWYgQ29kZVdhcnJpb3IgaXMgYWN0aXZlLiIiIg0JY2hlY2tfY3cgPSAiIiINCQlzZXQgYXBwbGlz
dCB0byB7fSAtLSB3aWxsIGNvbnRhaW4gbGlzdCBvZiBwcm9jZXNzIG9iamVjdHMNCQl0ZWxsIGFw
cGxpY2F0aW9uICJGaW5kZXIiDQkJCXNldCBhcHBsaXN0IHRvIGFwcGxpY2F0aW9uIHByb2Nlc3Nl
cw0JCWVuZCB0ZWxsDQkiIiINCWxvZy5zZXRMZXZlbChMT0dfTEVWRUwpDQlsb2cuZGVidWcoIkNo
ZWNraW5nIGZvciBDb2RlV2FycmlvciIpDQlyZXN1bHQgPSBPU0FtLkNvbXBpbGVBbmRFeGVjdXRl
KGNoZWNrX2N3KQ0JaWYgcmVzdWx0LmZpbmQoJ0NvZGVXYXJyaW9yIElERScpICE9IC0xOiANCQly
ZXN1bHQgPSAxDQkJbG9nLmRlYnVnKCJDb2RlV2FycmlvciBhY3RpdmUuIikNCWVsc2U6DQkJcmVz
dWx0ID0gMA0JcmV0dXJuIHJlc3VsdA0JDWRlZiBjbG9zZV93aW4oKToNCSIiIkNoZWNrIGZvciBv
cGVuIHdpbmRvd3MuICBJZiB0aGVyZSBhcmUgYW55LCBjbG9zZSB0aGVtLiIiIg0JY291bnRfd2lu
ZG93cyA9ICIiInRlbGwgYXBwbGljYXRpb24gIkNvZGVXYXJyaW9yIElERSIgdG8gY291bnQgd2lu
ZG93cyIiIg0JbG9nLnNldExldmVsKExPR19MRVZFTCkNCWxvZy5kZWJ1ZygiQ2hlY2tpbmcgZm9y
IG9wZW4gd2luZG93cy4iKQ0JcmVzdWx0ID0gT1NBbS5Db21waWxlQW5kRXhlY3V0ZShjb3VudF93
aW5kb3dzKQ0JaWYgaW50KHJlc3VsdCkgIT0gMDoNCQljbG9zZV93aW5kb3dzID0gIiIidGVsbCBh
cHBsaWNhdGlvbiAiQ29kZVdhcnJpb3IgSURFIiB0byBjbG9zZSB3aW5kb3dzIiIiDQkJbG9nLmRl
YnVnKHN0cihyZXN1bHQpICsgIiB3aW5kb3cocykgb3Blbi4gIENsb3Npbmcgb3BlbiB3aW5kb3co
cykuIikNCQlPU0FtLkNvbXBpbGVBbmRFeGVjdXRlKGNsb3NlX3dpbmRvd3MpDQkNZGVmIGRpc2Fz
c2VtYmxlX2ZpbGUocHJval9maWxlLCBzb3VyY2VfZmlsZSk6DQkiIiJEaXNhc3NlbWJsZSBnaXZl
biBmaWxlIGFuZCBjYXB0dXJlIHRoZSBvdXRwdXQuIiIiDQlkaXNhc3NlbWJsZV9maWxlID0gIiIi
DQlzZXQgZlNwZWMgdG8gInByb2pfZmlsZSINCXNldCBmU3BlYzIgdG8gImZpbGVfdG9fZGlzYXNz
ZW1ibGUiDQl0ZWxsIGFwcGxpY2F0aW9uICJDb2RlV2FycmlvciBJREUiDQkJb3BlbiBmaWxlIGZT
cGVjDQkJZGlzYXNzZW1ibGUgZmlsZSBmU3BlYzINCQlzZXQgeFRleHQgdG8gKGdldCB0ZXh0IG9m
IGRvY3VtZW50IDEpDQllbmQgdGVsbA0JIiIiDQlkX2ZpbGUgPSBkaXNhc3NlbWJsZV9maWxlLnJl
cGxhY2UoJ3Byb2pfZmlsZScsIHByb2pfZmlsZSkNCWRfZmlsZSA9IGRfZmlsZS5yZXBsYWNlKCdm
aWxlX3RvX2Rpc2Fzc2VtYmxlJywgc291cmNlX2ZpbGUpDQlyZXN1bHQgPSBPU0FtLkNvbXBpbGVB
bmRFeGVjdXRlKGRfZmlsZSkNCXRleHQgPSByZXN1bHRbMTotMV0uc3BsaXQoIlxyIikNCXJldHVy
biB0ZXh0DQ1kZWYgbGF1bmNoX2N3KCk6DQlsYXVuY2hfY3cgPSAiIiJ0ZWxsIGFwcGxpY2F0aW9u
ICJDb2RlV2FycmlvciBJREUiIHRvIGFjdGl2YXRlIiIiDQlPU0FtLkNvbXBpbGVBbmRFeGVjdXRl
KGxhdW5jaF9jdykNCQ1kZWYgc2V0X2Jhc2Vfc3RhdGUoKToNCSIiIkxhdW5jaCBDb2RlV2Fycmlv
ciBhbmQgY2xvc2UgYW55IG9wZW4gd2luZG93cy4iIiINCWxvZy5zZXRMZXZlbChMT0dfTEVWRUwp
DQlyZXN1bHQgPSBjaGVja19jdygpDQlpZiByZXN1bHQ6DQkJY2xvc2Vfd2luKCkNCWVsc2U6DQkJ
bG9nLmRlYnVnKCJMYXVuY2hpbmcgQ29kZVdhcnJpb3IiKQ0JCWxhdW5jaF9jdygpDQkJcmVzdWx0
ID0gY2hlY2tfY3coKQ0JCWlmIHJlc3VsdDoNCQkJY2xvc2Vfd2luKCkNCQllbHNlOg0JCQlsb2cu
Y3JpdGljYWwoIkNvZGVXYXJyaW9yIHdhcyBub3QgbGF1bmNoZWQuICBUZXN0aW5nIGFib3J0ZWQh
IikNCQkJcmV0dXJuIDENDWRlZiBxdWl0KCk6DQlsb2cuc2V0TGV2ZWwoTE9HX0xFVkVMKQ0JcmVz
dWx0ID0gY2hlY2tfY3coKQ0JaWYgcmVzdWx0Og0JCWxvZy5kZWJ1ZygiQ2xvc2luZyBDb2RlV2Fy
cmlvciIpDQkJcXVpdCA9ICIiInRlbGwgYXBwbGljYXRpb24gIkNvZGVXYXJyaW9yIElERSIgdG8g
cXVpdCIiIg0JCXJlc3VsdCA9IE9TQW0uQ29tcGlsZUFuZEV4ZWN1dGUocXVpdCkN

------_=_NextPart_001_01C259E5.5DB6E04D
Content-Type: application/octet-stream;
	name="disassemble_files.py"
Content-Transfer-Encoding: base64
Content-Description: disassemble_files.py
Content-Disposition: attachment;
	filename="disassemble_files.py"

IiIiDQlkaXNhc3NlbWJsZV9maWxlcy5weQ0NCVRoZSBwdXJwb3NlIG9mIHRoaXMgc2NyaXB0IGlz
IHRvIGxhdW5jaCBDb2RlV2FycmlvciBhbmQgYnVpbGQgb3IgZGlzYXNzZW1ibGUgdmFyaW91cyBm
aWxlcyBvciANCXByb2plY3RzLiAgU2luY2UgdGhlIEFwcGxlRXZlbnRzIHN1cHBvcnQgZm9yIENv
ZGVXYXJyaW9yIGluIE1hY1B5dGhvbiBsZWF2ZXMgKm11Y2gqIHRvIGJlIA0JZGVzaXJlZCwgSSBh
bSB1c2luZyBBcHBsZVNjcmlwdCAod2hlcmUgbmVjZXNzYXJ5KSB0byBjb250cm9sIENvZGVXYXJy
aW9yIGFuZCBQeXRob24gdG8gDQl2YWxpZGF0ZSB0aGUgcmVzdWx0cy4NDQ0JVGhlIGZpbGVzIHRv
IGJlIHRlc3RlZCBhcmUgY29udGFpbmVkIGluIGFuIElOSSBzdHlsZSBmaWxlIHdoaWNoIGNvbnRh
aW5zIHRoZSBmb2xsb3dpbmcgaW5mbzoNDQkJW2ZpbGUjXQ0JCXByb2plY3QgICAgICAgICAgID0g
VGhlIHByb2plY3QgdG8gb3Blbg0JCXNvdXJjZV9maWxlICAgICAgID0gVGhlIGZpbGUgdG8gZGlz
YXNzZW1ibGUNCQl2ZXJpZmljYXRpb25fZmlsZSA9IFRoZSBjb21wYXJpc29uIGZpbGUNDQlFeGFt
cGxlOg0NCQlbZmlsZTFdDQkJcHJvamVjdCAgICAgICAgICAgPSBTaW1wbGVNYWNDb2RlV2Fycmlv
ci5tY3ANCQlzb3VyY2VfZmlsZSAgICAgICA9IHNpbXBsZS5jDQkJdmVyaWZpY2F0aW9uX2ZpbGUg
PSBTaW1wbGVDRHVtcC5zDQkJW2ZpbGUyXQ0JCS4uLg0iIiINDV9fYXV0aG9yX18gID0gJ1JvYmlu
IEwuIFNpZWJsZXInDV9fZGF0ZV9fICAgID0gJzgvMjAvMDInDV9fdmVyc2lvbl9fID0gJzEuMCcN
DSMgVE9ETzogIENvbnZlcnQgKGlmIG5lY2Vzc2FyeSkgdG8gd29yayB3aXRoIE15cm9uJ3Mgc3Bl
YyBoYW5kbGVyPw0jIFRPRE86ICBDaGFuZ2UgdG8gbG9vayBmb3IgIix0ZXh0IiBhbmQgIkRBVEEi
Pw0jIFRPRE86ICBGaW5kIG91dCBpZiB0aHJlIGlzIGV2ZXIgbW9yZSB0aGFuIDEgZmlsZSBpbiBh
IHByb2plY3QgdG8gYmUgZGlzYXNzZW1ibGVkLg0NaW1wb3J0IENvbmZpZ1BhcnNlciwgY3dfaGFu
ZGxlciwgbG9nZ2luZywgT1NBbSwgc3RyaW5nLCBzeXMNDWNvbmZpZ19maWxlID0gInRlc3RfZmls
ZXMiCQkJI25hbWUgb2YgZmlsZSBjb250YWluaW5nIHRlc3QgZGF0YQ1sb2duYW1lID0gImRpc2Fz
c2VtYmxlX2ZpbGVzLmxvZyIJI25hbWUgb2YgZmlsZSB0byBsb2cgdG8NDSNMb2cgTGV2ZWxzDSNM
T0dfTEVWRUwgPSBsb2dnaW5nLkRFQlVHDUxPR19MRVZFTCA9IGxvZ2dpbmcuSU5GTw0jTE9HX0xF
VkVMID0gbG9nZ2luZy5FUlJPUg0jTE9HX0xFVkVMID0gbG9nZ2luZy5DUklUSUNBTA0NI2N3X2hh
bmRsZXIuTE9HX0xFVkVMID0gbG9nZ2luZy5ERUJVRwkjc2V0IGxvZyBsZXZlbCBmb3IgQ29kZVdh
cnJpb3IgaGFuZGxlciAoZGVmYXVsdCBpcyBJTkZPKQ0NZGVmIGNsZWFuX3VwKCk6DQkiIiJDbG9z
ZSBDb2RlV2FycmlvciBhbmQgbG9nIGZpbGUgYmVmb3JlIGV4aXRpbmcuIiIiDQlsb2cuaW5mbygi
Q2xvc2luZyBDb2RlV2Fycmlvci4iKQ0JY3dfaGFuZGxlci5xdWl0KCkNCWxvZy5pbmZvKCItIiAq
IDUgKyAiVGVzdCBwYXNzIGNvbXBsZXRlZCIgKyAiLSIgKiA1KQ0JaGRsci5jbG9zZSgpDQlsb2cu
cmVtb3ZlSGFuZGxlcihoZGxyKQ0NCQ1kZWYgbG9hZF9jb25maWdfZmlsZShjb25maWdfZmlsZSk6
DQkiIiJMb2FkIGEgY29uZmlnIGZpbGUgY29udGFpbmluZyB0aGUgbmFtZShzKSBvZiB0aGUgZmls
ZXMgdG8gYmUgdGVzdGVkLg0JDQlGaXJzdCBlYWNoIHNlY3Rpb24gb2YgdGhlIGNvbmZpZyBmaWxl
IGlzIGluc2VydGVkIGludG8gYSBkaWN0aW9uYXJ5IChpbiB0aGUgZm9ybSA8c2VjdGlvbj4uPG9w
dGlvbj4gDQlhbmQgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLiAgVGhlIGRpY3Rpb25hcnkgZm9y
IGVhY2ggc2VjdGlvbiBpcyBhcHBlbmQgdG8gYSBsaXN0LiAgVGhlIHZhbHVlcyANCW9mIGVhY2gg
ZGljdGlvbmFyeSBhcmUgdGhlbiBzb3J0ZWQgYW5kIHBsYWNlZCBiYWNrIGludG8gdGhlIGxpc3Qs
IHJlcGxhY2luZyB0aGUgZGljdGlvbmFyeS4iIiINCWNvbmZpZyA9IHt9DQl0ZXN0cyA9IFtdDQll
cnJvciA9ICIiDQljcCA9IENvbmZpZ1BhcnNlci5Db25maWdQYXJzZXIoKQ0JY3AucmVhZChjb25m
aWdfZmlsZSkNCWZvciBzZWMgaW4gY3Auc2VjdGlvbnMoKToNCQluYW1lID0gc2VjDQkJZm9yIG9w
dCBpbiBjcC5vcHRpb25zKHNlYyk6DQkJCWlmIGNwLmhhc19vcHRpb24oc2VjLCAic291cmNlX2Zp
bGUiKSBhbmQgY3AuaGFzX29wdGlvbihzZWMsICJ2ZXJpZmljYXRpb25fZmlsZSIpIFwNCQkJYW5k
IGNwLmhhc19vcHRpb24oc2VjLCAicHJvamVjdCIpOg0JCQkJY29uZmlnW25hbWUgKyAiLiIgKyBv
cHRdID0gc3RyaW5nLnN0cmlwKGNwLmdldChzZWMsIG9wdCkpICANCQkJZWxzZToNCQkJCWlmIG5v
dCBlcnJvciA9PSBzZWM6DQkJCQkJbG9nLndhcm4oIkFuIGVycm9yIHdhcyBmb3VuZCBpbiBzZWN0
aW9uIFsiICsgc2VjICsgIl0gb2YgdGhlIGNvbmZpZyBmaWxlLiIpDQkJCQkJbG9nLndhcm4oIlRo
aXMgc2VjdGlvbiB3aWxsIGJlIGlnbm9yZWQuIikNCQkJCQllcnJvciA9IHNlYw0JCQkJY3AucmVt
b3ZlX3NlY3Rpb24oc2VjKQ0JCQkJY29udGludWUNCQlpZiBjb25maWcgIT0ge306DQkJCXRlc3Rz
LmFwcGVuZChjb25maWcpCSNQbGFjZSBzZWN0aW9uIGludG8gbGlzdA0JCWNvbmZpZyA9IHt9DQlm
b3IgdGVzdCBpbiByYW5nZShsZW4odGVzdHMpKToNCQlpZiBsZW4odGVzdHNbdGVzdF0pICE9IDM6
DQkJCWlmIGxlbih0ZXN0c1t0ZXN0XSkgPCAzOg0JCQkJbG9nLmNyaXRpY2FsKCJTdHJhbmdlLiAg
WW91IHNob3VsZG4ndCBiZSBoZXJlLiAgVGVzdCBhYm9ydGluZy4iKQ0JCQkJY2xlYW5fdXAoKQ0J
CQkJc3lzLmV4aXQoLTEpIA0JCQllbGlmIGxlbih0ZXN0c1t0ZXN0XSkgPiAzOg0JCQkJbG9nLmVy
cm9yKCJBIHNlY3Rpb24gb2Z0aGUgY29uZmlnIGZpbGUgY29udGFpbnMgdG9vIG1hbnkgZW50cmll
cyIpDQkJCQlsb2cuZXJyb3IoIkVuc3VyZSB0aGUgY29uZmlnIGZpbGUgaXMgcHJvcGVybHkgZm9y
bWVkLiAgTm93IGV4aXRpbmcuLi4iKQ0JCQkJY2xlYW5fdXAoKQ0JCQkJc3lzLmV4aXQoLTEpIA0J
CWVsc2U6DQkJCWRpY3QgPSB0ZXN0c1t0ZXN0XQ0JCQlpdGVtcyA9IGRpY3QuaXRlbXMoKQ0JCQlp
dGVtcy5zb3J0KCkNCQkJdGVzdHNbdGVzdF0gPSBbdmFsdWUgZm9yIGtleSwgdmFsdWUgaW4gaXRl
bXNdCSNSZXBsYWNlIGRpY3Rpb25hcnkgaW4gbGlzdCB3aXRoIGp1c3QgdGhlIHNvcnRlZCB2YWx1
ZXMNCXJldHVybiB0ZXN0cw0JDWRlZiB2ZXJpZnlfZGF0YShkYXRhLCB2YWxpZF9maWxlKToNCSIi
IkNvbXBhcmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBkdW1wIGFnYWluc3QgYSAna25vd24nIGZpbGUu
IiIiDQl2YWxpZF9kYXRhID0gb3Blbih2YWxpZF9maWxlLCAiciIpLnJlYWRsaW5lcygpDQlkYXRh
ID0gZGF0YVs1Ol0NCXZhbGlkX2RhdGEgPSB2YWxpZF9kYXRhWzQ6XQ0JZm9yIGxpbmUgaW4gdmFs
aWRfZGF0YToNCQlpZiBsaW5lLmZpbmQoIlxuIik6DQkJCWluZGV4ID0gdmFsaWRfZGF0YS5pbmRl
eChsaW5lKQ0JCQl2YWxpZF9kYXRhW2luZGV4XSA9IGxpbmUucmVwbGFjZSgiXG4iLCAiIikNDQly
ZXN1bHQgPSBjbXAoZGF0YSwgdmFsaWRfZGF0YSkNCWlmIG5vdCByZXN1bHQgPT0gMDoNCQlkYXRh
X2xlbiA9IGxlbihkYXRhKQ0JCXZhbGlkX2xlbiA9IGxlbih2YWxpZF9kYXRhKQ0JCWxvZy5kZWJ1
ZygiTGVuZ3RoIG9mIGRhdGE6ICIgKyBzdHIoZGF0YV9sZW4pKQ0JCWxvZy5kZWJ1ZygiTGVuZ3Ro
IG9mIHZhbGlkIGRhdGE6ICIgKyBzdHIodmFsaWRfbGVuKSkNCQlpZiByZXN1bHQgPCAwOg0JCQlp
bmRleCA9IHJhbmdlKGxlbihkYXRhKSkNCQllbHNlOg0JCQlpbmRleCA9IHJhbmdlKGxlbih2YWxp
ZF9kYXRhKSkNCQlmb3IgbGluZSBpbiBpbmRleDoNCQkJI2xvZy5kZWJ1ZygiRGF0YSBsaW5lOiAg
IiArIGRhdGFbbGluZV0pDQkJCSNsb2cuZGVidWcoIlZhbGlkIExpbmU6ICIgKyB2YWxpZF9kYXRh
W2xpbmVdKQ0JCQlyZXN1bHQgPSBjbXAoZGF0YVtsaW5lXSwgdmFsaWRfZGF0YVtsaW5lXSkNCQkJ
aWYgbm90IHJlc3VsdCA9PSAwOg0JCQkJcHJpbnQgIkRhdGE6ICoiKyBkYXRhW2xpbmVdICsgIiog
OmVuZCINCQkJCXByaW50IHJlcHIoZGF0YVtsaW5lXSkNCQkJCWxvZy5lcnJvcigiVGhlIGZvbGxv
d2luZyBsaW5lcyBhcmUgbm90IGVxdWFsOiIpDQkJCQlsb2cuZXJyb3IoIkxpbmUgIiArIHN0cmlu
Zy5yanVzdChzdHIobGluZSArIDUpLCA0KSArICI6IiAgKyBkYXRhW2xpbmVdKQ0JCQkJbG9nLmVy
cm9yKCJMaW5lICIgKyBzdHJpbmcucmp1c3Qoc3RyKGxpbmUgKyA2KSwgNCkgKyAiOiIgKyB2YWxp
ZF9kYXRhW2xpbmVdKQ0JCQkJYnJlYWsNCQlsb2cuZXJyb3IoIlRlc3QgRmFpbGVkISIpDQllbHNl
Og0JCWxvZy5pbmZvKCJUZXN0IFBhc3NlZCEiKQ0NZGVmIG1haW4oKToNCWdsb2JhbCBsb2csIGhk
bHINCWxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkgICNyb290IGxvZw0JbG9nLnNldExldmVsKExP
R19MRVZFTCkNCWhkbHIgPSBsb2dnaW5nLkZpbGVIYW5kbGVyKGxvZ25hbWUpDSMJZm10ID0gbG9n
Z2luZy5Gb3JtYXR0ZXIoIiUoYXNjdGltZSlzICUobGV2ZWxuYW1lKS01cyAlKG1lc3NhZ2UpcyIs
ICIleCAlWCIpDQlmbXQgPSBsb2dnaW5nLkZvcm1hdHRlcigiJShhc2N0aW1lKXMgJShsZXZlbG5h
bWUpLTVzICUobWVzc2FnZSlzIiwgIiVtLSVkLSV5ICVIOiVNOiVTIikNCWhkbHIuc2V0Rm9ybWF0
dGVyKGZtdCkNCWxvZy5hZGRIYW5kbGVyKGhkbHIpDQlsb2cuaW5mbygiLSIgKiA1ICsgIlN0YXJ0
aW5nIHRlc3QgcGFzcyIgKyAiLSIgKiA1KQ0JbG9nLmluZm8oIkxvYWRpbmcgY29uZmlnIGZpbGUu
Li4iKQ0JdGVzdHMgPSBsb2FkX2NvbmZpZ19maWxlKGNvbmZpZ19maWxlKQkjR2V0IGRhdGEgZm9y
IHRlc3RzIHRvIGJlIHJhbg0JbG9nLmluZm8oIlN0YXJ0aW5nIENvZGVXYXJyaW9yLiIpDQlmb3Ig
dGVzdCBpbiByYW5nZShsZW4odGVzdHMpKToNCQlyZXN1bHQgPSBjd19oYW5kbGVyLnNldF9iYXNl
X3N0YXRlKCkNCQlpZiByZXN1bHQ6IA0JCQljbGVhbl91cCgpDQkJCXN5cy5leGl0KC0xKQ0JCWxv
Zy5pbmZvKCJEaXNhc3NlbWJsaW5nIGZpbGUgJyIgKyB0ZXN0c1t0ZXN0XVsxXSArICInIikNCQlk
YXRhID0gY3dfaGFuZGxlci5kaXNhc3NlbWJsZV9maWxlKHRlc3RzW3Rlc3RdWzBdLCB0ZXN0c1t0
ZXN0XVsxXSkNCQl2ZXJpZnlfZGF0YShkYXRhLCB0ZXN0c1t0ZXN0XVsyXSkNCWNsZWFuX3VwKCkN
DWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6DQltYWluKCkNDQ==

------_=_NextPart_001_01C259E5.5DB6E04D--