[Python-Dev] DEBUG_SAVEALL feature for gc not in 2.0b1?

Skip Montanaro skip@mojam.com (Skip Montanaro)
Fri, 1 Sep 2000 10:03:30 -0500 (CDT)


--udFi5TfI4P
Content-Type: text/plain; charset=us-ascii
Content-Description: message body text
Content-Transfer-Encoding: 7bit


Neil sent me a patch a week or two ago that implemented a DEBUG_SAVEALL flag
for the gc module.  If set, it assigns all cyclic garbage to gc.garbage
instead of deleting it, thus resurrecting the garbage so you can inspect it.
This seems not to have made it into the CS repository.

I think this is good mojo and deserves to be in the distribution, if not for
the release, then for 2.1 at least.  I've attached the patch Neil sent me
(which includes code, doc and test updates).  It's helped me track down one
(stupid) cyclic trash bug in my own code.  Neil, unless there are strong
arguments to the contrary, I recommend you submit a patch to SF.

Skip


--udFi5TfI4P
Content-Type: application/octet-stream
Content-Description: patch to get gc to resurrect garbage instead of freeing it
Content-Disposition: attachment;
	filename="saveall.patch"
Content-Transfer-Encoding: base64

Ci0tVXVndldBZnNnaWVaUnFnawpDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9
dXMtYXNjaWkKCk9uIFN1biwgQXVnIDIwLCAyMDAwIGF0IDA5OjE4OjQ3UE0gLTA1MDAsIFNr
aXAgTW9udGFuYXJvIHdyb3RlOgo+IFllcywgSSB3b3VsZCBsb3ZlIGl0IGlmIHlvdSBjb3Vs
ZCAicmVpbmNhcm5hdGUiIGdhcmJhZ2UgdW5kZXIgZ2MgbW9kdWxlCj4gY29udHJvbC4KCk9r
YXksIGEgcGF0Y2ggaXMgYXR0YWNoZWQuICBJZiB0aGlzIHdvcmtzIG9rYXkgZm9yIHlvdSB0
aGVuIEkgd2lsbAp1cGxvYWQgaXQgdG8gc291cmNlZm9yZ2UuCgogIE5laWwKCi0tVXVndldB
ZnNnaWVaUnFnawpDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXMtYXNjaWkK
Q29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9InNhdmVfYWxsLmRp
ZmYiCgpJbmRleDogMC4xOC9Nb2R1bGVzL2djbW9kdWxlLmMKLS0tIDAuMTgvTW9kdWxlcy9n
Y21vZHVsZS5jIFNhdCwgMTIgQXVnIDIwMDAgMTE6NDc6NDQgLTA0MDAgbmFzIChweXRob24v
Ti8zOF9nY21vZHVsZS5jIDEuMyA2NDQpCisrKyAwLjE4KHcpL01vZHVsZXMvZ2Ntb2R1bGUu
YyBTdW4sIDIwIEF1ZyAyMDAwIDIzOjIwOjQxIC0wNDAwIG5hcyAocHl0aG9uL04vMzhfZ2Nt
b2R1bGUuYyAxLjMgNjQ0KQpAQCAtNTMsMTAgKzUzLDEyIEBACiAjZGVmaW5lIERFQlVHX1VO
Q09MTEVDVEFCTEUJKDE8PDIpIC8qIHByaW50IHVuY29sbGVjdGFibGUgb2JqZWN0cyAqLwog
I2RlZmluZSBERUJVR19JTlNUQU5DRVMJCSgxPDwzKSAvKiBwcmludCBpbnN0YW5jZXMgKi8K
ICNkZWZpbmUgREVCVUdfT0JKRUNUUwkJKDE8PDQpIC8qIHByaW50IG90aGVyIG9iamVjdHMg
Ki8KKyNkZWZpbmUgREVCVUdfU0FWRUFMTAkJKDE8PDUpIC8qIHNhdmUgYWxsIGdhcmJhZ2Ug
aW4gZ2MuZ2FyYmFnZSAqLwogI2RlZmluZSBERUJVR19MRUFLCQlERUJVR19DT0xMRUNUQUJM
RSB8IFwKIAkJCQlERUJVR19VTkNPTExFQ1RBQkxFIHwgXAogCQkJCURFQlVHX0lOU1RBTkNF
UyB8IFwKLQkJCQlERUJVR19PQkpFQ1RTCisJCQkJREVCVUdfT0JKRUNUUyB8IFwKKwkJCQlE
RUJVR19TQVZFQUxMCiBzdGF0aWMgaW50IGRlYnVnOwogCiAvKiBsaXN0IG9mIHVuY29sbGVj
dGFibGUgb2JqZWN0cyAqLwpAQCAtMzAwLDE5ICszMDIsMTcgQEAKIGhhbmRsZV9maW5hbGl6
ZXJzKFB5R0NfSGVhZCAqZmluYWxpemVycywgUHlHQ19IZWFkICpvbGQpCiB7CiAJUHlHQ19I
ZWFkICpnYzsKLQlpZiAoZ2FyYmFnZSA9PSBOVUxMKSB7Ci0JCWdhcmJhZ2UgPSBQeUxpc3Rf
TmV3KDApOwotCX0KIAlmb3IgKGdjID0gZmluYWxpemVycy0+Z2NfbmV4dDsgZ2MgIT0gZmlu
YWxpemVyczsKIAkJCWdjID0gZmluYWxpemVycy0+Z2NfbmV4dCkgewogCQlQeU9iamVjdCAq
b3AgPSBQeU9iamVjdF9GUk9NX0dDKGdjKTsKLQkJLyogQWRkIGFsbCBpbnN0YW5jZXMgdG8g
YSBQeXRob24gYWNjZXNzaWJsZSBsaXN0IG9mIGdhcmJhZ2UgKi8KLQkJaWYgKFB5SW5zdGFu
Y2VfQ2hlY2sob3ApKSB7CisJCWlmICgoZGVidWcgJiBERUJVR19TQVZFQUxMKSB8IFB5SW5z
dGFuY2VfQ2hlY2sob3ApKSB7CisJCQkvKiBJZiBTQVZFQUxMIGlzIG5vdCBzZXQgdGhlbiBq
dXN0IGFwcGVuZAorCQkJICogaW5zdGFuY2VzIHRvIHRoZSBsaXN0IG9mIGdhcmJhZ2UuICBX
ZSBhc3N1bWUKKwkJCSAqIHRoYXQgYWxsIG9iamVjdHMgaW4gdGhlIGZpbmFsaXplcnMgbGlz
dCBhcmUKKwkJCSAqIHJlYWNoYWJsZSBmcm9tIGluc3RhbmNlcy4gKi8KIAkJCVB5TGlzdF9B
cHBlbmQoZ2FyYmFnZSwgb3ApOwogCQl9Ci0JCS8qIFdlIGFzc3VtZSB0aGF0IGFsbCBvYmpl
Y3RzIGluIGZpbmFsaXplcnMgYXJlIHJlYWNoYWJsZSBmcm9tCi0JCSAqIGluc3RhbmNlcy4g
IE9uY2Ugd2UgYWRkIHRoZSBpbnN0YW5jZXMgdG8gdGhlIGdhcmJhZ2UgbGlzdAotCQkgKiBl
dmVyeXRoaW5nIGlzIHJlYWNoYWJsZSBmcm9tIFB5dGhvbiBhZ2Fpbi4gKi8KKwkJLyogb2Jq
ZWN0IGlzIG5vdyByZWFjaGFibGUgYWdhaW4gKi8gCiAJCWdjX2xpc3RfcmVtb3ZlKGdjKTsK
IAkJZ2NfbGlzdF9hcHBlbmQoZ2MsIG9sZCk7CiAJfQpAQCAtMzI5LDE3ICszMjksMTcgQEAK
IAl3aGlsZSAodW5yZWFjaGFibGUtPmdjX25leHQgIT0gdW5yZWFjaGFibGUpIHsKIAkJUHlH
Q19IZWFkICpnYyA9IHVucmVhY2hhYmxlLT5nY19uZXh0OwogCQlQeU9iamVjdCAqb3AgPSBQ
eU9iamVjdF9GUk9NX0dDKGdjKTsKLQkJLyoKLQkJUHlMaXN0X0FwcGVuZChnYXJiYWdlLCBv
cCk7Ci0JCSovCi0JCWlmICgoY2xlYXIgPSBvcC0+b2JfdHlwZS0+dHBfY2xlYXIpICE9IE5V
TEwpIHsKLQkJCVB5X0lOQ1JFRihvcCk7Ci0JCQljbGVhcigoUHlPYmplY3QgKilvcCk7Ci0J
CQlQeV9ERUNSRUYob3ApOworCQlpZiAoZGVidWcgJiBERUJVR19TQVZFQUxMKSB7CisJCQlQ
eUxpc3RfQXBwZW5kKGdhcmJhZ2UsIG9wKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoY2xlYXIg
PSBvcC0+b2JfdHlwZS0+dHBfY2xlYXIpICE9IE5VTEwpIHsKKwkJCQlQeV9JTkNSRUYob3Ap
OworCQkJCWNsZWFyKChQeU9iamVjdCAqKW9wKTsKKwkJCQlQeV9ERUNSRUYob3ApOworCQkJ
fQogCQl9Ci0JCS8qIG9ubHkgdHJ5IHRvIGNhbGwgdHBfY2xlYXIgb25jZSBmb3IgZWFjaCBv
YmplY3QgKi8KIAkJaWYgKHVucmVhY2hhYmxlLT5nY19uZXh0ID09IGdjKSB7Ci0JCQkvKiBz
dGlsbCBhbGl2ZSwgbW92ZSBpdCwgaXQgbWF5IGRpZSBsYXRlciAqLworCQkJLyogb2JqZWN0
IGlzIHN0aWxsIGFsaXZlLCBtb3ZlIGl0LCBpdCBtYXkgZGllIGxhdGVyICovCiAJCQlnY19s
aXN0X3JlbW92ZShnYyk7CiAJCQlnY19saXN0X2FwcGVuZChnYywgb2xkKTsKIAkJfQpAQCAt
NjA2LDYgKzYwNiw3IEBACiAiICBERUJVR19VTkNPTExFQ1RBQkxFIC0gUHJpbnQgdW5yZWFj
aGFibGUgYnV0IHVuY29sbGVjdGFibGUgb2JqZWN0cyBmb3VuZC5cbiIKICIgIERFQlVHX0lO
U1RBTkNFUyAtIFByaW50IGluc3RhbmNlIG9iamVjdHMuXG4iCiAiICBERUJVR19PQkpFQ1RT
IC0gUHJpbnQgb2JqZWN0cyBvdGhlciB0aGFuIGluc3RhbmNlcy5cbiIKKyIgIERFQlVHX1NB
VkVBTEwgLSBTYXZlIG9iamVjdHMgdG8gZ2MuZ2FyYmFnZSByYXRoZXIgdGhhbiBmcmVlaW5n
IHRoZW0uXG4iCiAiICBERUJVR19MRUFLIC0gRGVidWcgbGVha2luZyBwcm9ncmFtcyAoZXZl
cnl0aGluZyBidXQgU1RBVFMpLlxuIgogOwogCkBAIC03MDUsOSArNzA2LDcgQEAKIAkJCSAg
ICAgIE5VTEwsCiAJCQkgICAgICBQWVRIT05fQVBJX1ZFUlNJT04pOwogCWQgPSBQeU1vZHVs
ZV9HZXREaWN0KG0pOwotCWlmIChnYXJiYWdlID09IE5VTEwpIHsKLQkJZ2FyYmFnZSA9IFB5
TGlzdF9OZXcoMCk7Ci0JfQorCWdhcmJhZ2UgPSBQeUxpc3RfTmV3KDApOwogCVB5RGljdF9T
ZXRJdGVtU3RyaW5nKGQsICJnYXJiYWdlIiwgZ2FyYmFnZSk7CiAJUHlEaWN0X1NldEl0ZW1T
dHJpbmcoZCwgIkRFQlVHX1NUQVRTIiwKIAkJCVB5SW50X0Zyb21Mb25nKERFQlVHX1NUQVRT
KSk7CkBAIC03MTksNiArNzE4LDggQEAKIAkJCVB5SW50X0Zyb21Mb25nKERFQlVHX0lOU1RB
TkNFUykpOwogCVB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJERUJVR19PQkpFQ1RTIiwKIAkJ
CVB5SW50X0Zyb21Mb25nKERFQlVHX09CSkVDVFMpKTsKKwlQeURpY3RfU2V0SXRlbVN0cmlu
ZyhkLCAiREVCVUdfU0FWRUFMTCIsCisJCQlQeUludF9Gcm9tTG9uZyhERUJVR19TQVZFQUxM
KSk7CiAJUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkRFQlVHX0xFQUsiLAogCQkJUHlJbnRf
RnJvbUxvbmcoREVCVUdfTEVBSykpOwogfQpJbmRleDogMC4xOC9MaWIvdGVzdC90ZXN0X2dj
LnB5Ci0tLSAwLjE4L0xpYi90ZXN0L3Rlc3RfZ2MucHkgU2F0LCAxMiBBdWcgMjAwMCAxMTo0
Nzo0NCAtMDQwMCBuYXMgKHB5dGhvbi9PLzFfdGVzdF9nYy5weSAxLjIgNjQ0KQorKysgMC4x
OCh3KS9MaWIvdGVzdC90ZXN0X2djLnB5IFN1biwgMjAgQXVnIDIwMDAgMjM6MTc6MDUgLTA0
MDAgbmFzIChweXRob24vTy8xX3Rlc3RfZ2MucHkgMS4yIDY0NCkKQEAgLTEsMTggKzEsMzUg
QEAKK2Zyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBUZXN0RmFpbGVkCiBpbXBv
cnQgZ2MKIAorZGVmIHJ1bl90ZXN0KG5hbWUsIHRodW5rKToKKyAgICBpZiB2ZXJib3NlOgor
ICAgICAgICBwcmludCAidGVzdGluZyAlcy4uLiIgJSBuYW1lLAorICAgIHRyeToKKyAgICAg
ICAgdGh1bmsoKQorICAgIGV4Y2VwdCBUZXN0RmFpbGVkOgorICAgICAgICBpZiB2ZXJib3Nl
OgorICAgICAgICAgICAgcHJpbnQgImZhaWxlZCAoZXhwZWN0ZWQgJXMgYnV0IGdvdCAlcyki
ICUgKHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdCkKKyAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCwg
bmFtZQorICAgIGVsc2U6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmlu
dCAib2siCisKIGRlZiB0ZXN0X2xpc3QoKToKICAgICBsID0gW10KICAgICBsLmFwcGVuZChs
KQogICAgIGdjLmNvbGxlY3QoKQogICAgIGRlbCBsCi0gICAgYXNzZXJ0IGdjLmNvbGxlY3Qo
KSA9PSAxCisgICAgaWYgZ2MuY29sbGVjdCgpICE9IDE6CisgICAgICAgIHJhaXNlIFRlc3RG
YWlsZWQKIAogZGVmIHRlc3RfZGljdCgpOgogICAgIGQgPSB7fQogICAgIGRbMV0gPSBkCiAg
ICAgZ2MuY29sbGVjdCgpCiAgICAgZGVsIGQKLSAgICBhc3NlcnQgZ2MuY29sbGVjdCgpID09
IDEKKyAgICBpZiBnYy5jb2xsZWN0KCkgIT0gMToKKyAgICAgICAgcmFpc2UgVGVzdEZhaWxl
ZAogCiBkZWYgdGVzdF90dXBsZSgpOgogICAgIGwgPSBbXQpAQCAtMjEsNyArMzgsOCBAQAog
ICAgIGdjLmNvbGxlY3QoKQogICAgIGRlbCB0CiAgICAgZGVsIGwKLSAgICBhc3NlcnQgZ2Mu
Y29sbGVjdCgpID09IDIKKyAgICBpZiBnYy5jb2xsZWN0KCkgIT0gMjoKKyAgICAgICAgcmFp
c2UgVGVzdEZhaWxlZAogCiBkZWYgdGVzdF9jbGFzcygpOgogICAgIGNsYXNzIEE6CkBAIC0y
OSw3ICs0Nyw4IEBACiAgICAgQS5hID0gQQogICAgIGdjLmNvbGxlY3QoKQogICAgIGRlbCBB
Ci0gICAgYXNzZXJ0IGdjLmNvbGxlY3QoKSA+IDAKKyAgICBpZiBnYy5jb2xsZWN0KCkgPT0g
MDoKKyAgICAgICAgcmFpc2UgVGVzdEZhaWxlZAogCiBkZWYgdGVzdF9pbnN0YW5jZSgpOgog
ICAgIGNsYXNzIEE6CkBAIC0zOCw3ICs1Nyw4IEBACiAgICAgYS5hID0gYQogICAgIGdjLmNv
bGxlY3QoKQogICAgIGRlbCBhCi0gICAgYXNzZXJ0IGdjLmNvbGxlY3QoKSA+IDAKKyAgICBp
ZiBnYy5jb2xsZWN0KCkgPT0gMDoKKyAgICAgICAgcmFpc2UgVGVzdEZhaWxlZAogCiBkZWYg
dGVzdF9tZXRob2QoKToKICAgICBjbGFzcyBBOgpAQCAtNDcsNyArNjcsOCBAQAogICAgIGEg
PSBBKCkKICAgICBnYy5jb2xsZWN0KCkKICAgICBkZWwgYQotICAgIGFzc2VydCBnYy5jb2xs
ZWN0KCkgPiAwCisgICAgaWYgZ2MuY29sbGVjdCgpID09IDA6CisgICAgICAgIHJhaXNlIFRl
c3RGYWlsZWQKIAogZGVmIHRlc3RfZmluYWxpemVyKCk6CiAgICAgY2xhc3MgQToKQEAgLTYw
LDQwICs4MSw3MyBAQAogICAgIGIgPSBCKCkKICAgICBiLmIgPSBiCiAgICAgZ2MuY29sbGVj
dCgpCi0gICAgZ2MuZ2FyYmFnZVs6XSA9IFtdCiAgICAgZGVsIGEKICAgICBkZWwgYgotICAg
IGFzc2VydCBnYy5jb2xsZWN0KCkgPiAwCi0gICAgYXNzZXJ0IGlkKGdjLmdhcmJhZ2VbMF0p
ID09IGlkX2EKKyAgICBpZiBnYy5jb2xsZWN0KCkgPT0gMDoKKyAgICAgICAgcmFpc2UgVGVz
dEZhaWxlZAorICAgIGZvciBvYmogaW4gZ2MuZ2FyYmFnZToKKyAgICAgICAgaWYgaWQob2Jq
KSA9PSBpZF9hOgorICAgICAgICAgICAgZGVsIG9iai5hCisgICAgICAgICAgICBicmVhawor
ICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFRlc3RGYWlsZWQKIAogZGVmIHRlc3RfZnVuY3Rp
b24oKToKICAgICBkID0ge30KICAgICBleGVjKCJkZWYgZigpOiBwYXNzXG4iKSBpbiBkCiAg
ICAgZ2MuY29sbGVjdCgpCiAgICAgZGVsIGQKLSAgICBhc3NlcnQgZ2MuY29sbGVjdCgpID09
IDIKKyAgICBpZiBnYy5jb2xsZWN0KCkgIT0gMjoKKyAgICAgICAgcmFpc2UgVGVzdEZhaWxl
ZAogCitkZWYgdGVzdF9zYXZlYWxsKCk6CisgICAgZGVidWcgPSBnYy5nZXRfZGVidWcoKQor
ICAgIGdjLnNldF9kZWJ1ZygwKQorICAgIGdjLnNldF9kZWJ1ZyhnYy5ERUJVR19TQVZFQUxM
KQorICAgIGwgPSBbXQorICAgIGwuYXBwZW5kKGwpCisgICAgaWRfbCA9IGlkKGwpCisgICAg
ZGVsIGwKKyAgICBnYy5jb2xsZWN0KCkKKyAgICB0cnk6CisgICAgICAgIGZvciBvYmogaW4g
Z2MuZ2FyYmFnZToKKyAgICAgICAgICAgIGlmIGlkKG9iaikgPT0gaWRfbDoKKyAgICAgICAg
ICAgICAgICBvYmpbOl0gPSBbXQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICByYWlzZSBUZXN0RmFpbGVkCisgICAgZmluYWxseToKKyAgICAg
ICAgZ2Muc2V0X2RlYnVnKGRlYnVnKQogCi1kZWYgdGVzdF9hbGwoKToKKyAgICAKIAorZGVm
IHRlc3RfYWxsKCk6CisgICAgcnVuX3Rlc3QoImxpc3RzIiwgdGVzdF9saXN0KQorICAgIHJ1
bl90ZXN0KCJkaWN0cyIsIHRlc3RfZGljdCkKKyAgICBydW5fdGVzdCgidHVwbGVzIiwgdGVz
dF90dXBsZSkKKyAgICBydW5fdGVzdCgiY2xhc3NlcyIsIHRlc3RfY2xhc3MpCisgICAgcnVu
X3Rlc3QoImluc3RhbmNlcyIsIHRlc3RfaW5zdGFuY2UpCisgICAgcnVuX3Rlc3QoIm1ldGhv
ZHMiLCB0ZXN0X21ldGhvZCkKKyAgICBydW5fdGVzdCgiZnVuY3Rpb25zIiwgdGVzdF9mdW5j
dGlvbikKKyAgICBydW5fdGVzdCgiZmluYWxpemVycyIsIHRlc3RfZmluYWxpemVyKQorICAg
IHJ1bl90ZXN0KCJzYXZlYWxsIiwgdGVzdF9zYXZlYWxsKQorCitkZWYgdGVzdCgpOgorICAg
IGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICJkaXNhYmxpbmcgYXV0b21hdGljIGNvbGxl
Y3Rpb24iCiAgICAgZW5hYmxlZCA9IGdjLmlzZW5hYmxlZCgpCiAgICAgZ2MuZGlzYWJsZSgp
Ci0gICAgYXNzZXJ0IG5vdCBnYy5pc2VuYWJsZWQoKQorICAgIGFzc2VydCBub3QgZ2MuaXNl
bmFibGVkKCkgCiAKLSAgICB0ZXN0X2xpc3QoKQotICAgIHRlc3RfZGljdCgpCi0gICAgdGVz
dF90dXBsZSgpCi0gICAgdGVzdF9jbGFzcygpCi0gICAgdGVzdF9pbnN0YW5jZSgpCi0gICAg
dGVzdF9tZXRob2QoKQotICAgIHRlc3RfZmluYWxpemVyKCkKLSAgICB0ZXN0X2Z1bmN0aW9u
KCkKKyAgICB0ZXN0X2FsbCgpCiAKICAgICAjIHRlc3QgZ2MuZW5hYmxlKCkgZXZlbiBpZiBH
QyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0CisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJp
bnQgInJlc3RvcmluZyBhdXRvbWF0aWMgY29sbGVjdGlvbiIKICAgICBnYy5lbmFibGUoKQog
ICAgIGFzc2VydCBnYy5pc2VuYWJsZWQoKQogICAgIGlmIG5vdCBlbmFibGVkOgogICAgICAg
ICBnYy5kaXNhYmxlKCkKIAogCi10ZXN0X2FsbCgpCit0ZXN0KCkKSW5kZXg6IDAuMTgvRG9j
L2xpYi9saWJnYy50ZXgKLS0tIDAuMTgvRG9jL2xpYi9saWJnYy50ZXggU2F0LCAxMiBBdWcg
MjAwMCAxMTo0Nzo0NCAtMDQwMCBuYXMgKHB5dGhvbi9PLzQ1X2xpYmdjLnRleCAxLjIgNjQ0
KQorKysgMC4xOCh3KS9Eb2MvbGliL2xpYmdjLnRleCBTdW4sIDIwIEF1ZyAyMDAwIDIzOjI2
OjEyIC0wNDAwIG5hcyAocHl0aG9uL08vNDVfbGliZ2MudGV4IDEuMiA2NDQpCkBAIC0yLDgg
KzIsOCBAQAogICAgICAgICAgR2FyYmFnZSBDb2xsZWN0b3IgaW50ZXJmYWNlfQogCiBcZGVj
bGFyZW1vZHVsZXtleHRlbnNpb259e2djfQotXG1vZHVsZWF1dGhvcntOZWlsIFNjaGVtZW5h
dWVyfXtuYXNjaGVtZUBlbm1lLnVjYWxnYXJ5LmNhfQotXHNlY3Rpb25hdXRob3J7TmVpbCBT
Y2hlbWVuYXVlcn17bmFzY2hlbWVAZW5tZS51Y2FsZ2FyeS5jYX0KK1xtb2R1bGVhdXRob3J7
TmVpbCBTY2hlbWVuYXVlcn17bmFzQGFyY3RyaXguY29tfQorXHNlY3Rpb25hdXRob3J7TmVp
bCBTY2hlbWVuYXVlcn17bmFzQGFyY3RyaXguY29tfQogCiBUaGlzIG1vZHVsZSBwcm92aWRl
cyBhbiBpbnRlcmZhY2UgdG8gdGhlIG9wdGlvbmFsIGdhcmJhZ2UgY29sbGVjdG9yLiAgSXQK
IHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGRpc2FibGUgdGhlIGNvbGxlY3RvciwgdHVuZSB0
aGUgY29sbGVjdGlvbgpAQCAtNzksNyArNzksOSBAQAogQSBsaXN0IG9mIG9iamVjdHMgd2hp
Y2ggdGhlIGNvbGxlY3RvciBmb3VuZCB0byBiZSB1bnJlYWNoYWJsZQogYnV0IGNvdWxkIG5v
dCBiZSBmcmVlZCAodW5jb2xsZWN0YWJsZSBvYmplY3RzKS4gIE9iamVjdHMgdGhhdCBoYXZl
CiBcbWV0aG9ke19fZGVsX18oKX0gbWV0aG9kcyBhbmQgY3JlYXRlIHBhcnQgb2YgYSByZWZl
cmVuY2UgY3ljbGUgY2F1c2UKLXRoZSBlbnRpcmUgcmVmZXJlbmNlIGN5Y2xlIHRvIGJlIHVu
Y29sbGVjdGFibGUuICAKK3RoZSBlbnRpcmUgcmVmZXJlbmNlIGN5Y2xlIHRvIGJlIHVuY29s
bGVjdGFibGUuICBJZgorXGNvbnN0YW50e0RFQlVHX1NBVkVBTEx9IGlzIHNldCwgdGhlbiBh
bGwgdW5yZWFjaGFibGUgb2JqZWN0cyB3aWxsCitiZSBhZGRlZCB0byB0aGlzIGxpc3QgcmF0
aGVyIHRoYW4gZnJlZWQuCiBcZW5ke2RhdGFkZXNjfQogCiAKQEAgLTExMSw4ICsxMTMsMTQg
QEAKIHNldCwgcHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgb2JqZWN0cyBvdGhlciB0aGFuIGlu
c3RhbmNlIG9iamVjdHMgZm91bmQuCiBcZW5ke2RhdGFkZXNjfQogCitcYmVnaW57ZGF0YWRl
c2N9e0RFQlVHX1NBVkVBTEx9CitXaGVuIHNldCwgYWxsIHVucmVhY2hhYmxlIG9iamVjdHMg
Zm91bmQgd2lsbCBiZSBhcHBlbmRlZCB0bworXHZhcntnYXJiYWdlfSByYXRoZXIgdGhhbiBi
ZWluZyBmcmVlZC4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZGVidWdnaW5nCithIGxlYWtp
bmcgcHJvZ3JhbS4KK1xlbmR7ZGF0YWRlc2N9CisKIFxiZWdpbntkYXRhZGVzY317REVCVUdf
TEVBS30KIFRoZSBkZWJ1Z2dpbmcgZmxhZ3MgbmVjZXNzYXJ5IGZvciB0aGUgY29sbGVjdG9y
IHRvIHByaW50CiBpbmZvcm1hdGlvbiBhYm91dCBhIGxlYWtpbmcgcHJvZ3JhbSAoZXF1YWwg
dG8gXGNvZGV7REVCVUdfQ09MTEVDVEFCTEUgfAotREVCVUdfVU5DT0xMRUNUQUJMRSB8IERF
QlVHX0lOU1RBTkNFUyB8IERFQlVHX09CSkVDVFN9KS4gIAorREVCVUdfVU5DT0xMRUNUQUJM
RSB8IERFQlVHX0lOU1RBTkNFUyB8IERFQlVHX09CSkVDVFMgfCBERUJVR19TQVZFQUxMfSku
ICAKIFxlbmR7ZGF0YWRlc2N9CgotLVV1Z3ZXQWZzZ2llWlJxZ2stLQo=

--udFi5TfI4P--