IyBUaGlzIGZpbGUgaXMgZGVyaXZlZCBmcm9tIAojCiMgICAgaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3Vjcy9leGFtcGxlcy9VVEYtOC10ZXN0LnR4dAojICAgIAojIFdoaWNoIHdhcyBjcmVhdGVkIGJ5ICAgTWFya3VzIEt1aG4gPG1rdWhuQGFjbS5vcmc+IC0gMjAwMC0wOS0wMiAKIwojIGxpbmVzIGJlZ2luaW5nIHdpdGggIyBhbmQgYmxhbmsgbGluZXMgYXJlIGlnbm9yZWQKIwojIEJleW9uZCB0aGF0LCB0aGlzIGZpbGUgY29uc2lzdHMgb2YgYSBzZXJpZXMgb2YgdGVzdCBjYXNlcy4gRWFjaCB0ZXN0IGNhc2UgY29uc2lzdHMgb2YKIyAyIG9yIDMgbGluZXM6CiMKIyAgMS4gQSBVVEYtOCBzdHJpbmcKIyAgMi4gQSBzdGF0dXMKIyAgICAgIFZBTElEICAgICAgOiBUaGUgc3RyaW5nIGlzIGEgdmFsaWQgVVRGLTggcmVwcmVzZW50YXRpb24gb2YgdmFsaWQgVW5pY29kZQojICAgICAgSU5DT01QTEVURSA6IFRoZSBzdHJpbmcgaGFzIGEgcGFydGlhbCBjaGFyYWN0ZXIgYXQgdGhlIGVuZAojICAgICAgTk9UVU5JQ09ERSA6IFRoZSBzdHJpbmcgaXMgdmFsaWQgVVRGLTgsIGJ1dCB0aGUgY2hhcmFjdGVycyByZXByZXNlbnRlZAojICAgICAgICAgICAgICAgICAgIGFyZSBub3QgdmFsaWQgdW5pY29kZSAoCiMgICAgICBPVkVSTE9ORyAgIDogVGhlIHN0cmluZyBpbmNsdWRlcyBvdmVybG9uZyBzZXF1ZW5jZXMKIyAgICAgIE1BTEZPUk1FRCAgOiBUaGUgc3RyaW5nIGlzIG5vdCB2YWxpZCBVVEYtOAojIDMuIElmIHRoZSBzdGF0dXMgaXMgVkFMSUQgb3IgTk9UVU5JQ09ERSwgdGhlIFVDUy00IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdHJpbmcsCiMgICAgYXMgYSBzZXJpZXMgb2YgaGV4IG51bWJlcnMuCgojIDEgIFNvbWUgY29ycmVjdCBVVEYtOCB0ZXh0Cs664b25z4POvM61ClZBTElECjAzYmEgMWY3OSAwM2MzIDAzYmMgMDNiNQoKIyAyLjEgIEZpcnN0IHBvc3NpYmxlIHNlcXVlbmNlIG9mIGEgY2VydGFpbiBsZW5ndGgKIwojIEZJWE1FIC0gaGFuZGxlIE5VTExTPwojCiMgWyBOVUxMIEJZVEUgXQojVkFMSUQKIzAwMDAKCsKAClZBTElECjAwODAKCuCggApWQUxJRAowODAwCgrwkICAClZBTElECjAwMDEwMDAwCgr4iICAgApOT1RVTklDT0RFCjAwMjAwMDAwCgr8hICAgIAKTk9UVU5JQ09ERQowNDAwMDAwMAoKfwpWQUxJRAowMDAwMDA3ZgoK378KVkFMSUQKMDAwMDA3ZmYKCu+/vwpOT1RVTklDT0RFCjAwMDBmZmZmCgr3v7+/Ck5PVFVOSUNPREUKMDAxZmZmZmYKCvu/v7+/Ck5PVFVOSUNPREUKMDNmZmZmZmYKCv2/v7+/vwpOT1RVTklDT0RFCjdmZmZmZmZmCgojIDIuMyAgT3RoZXIgYm91bmRhcnkgY29uZGl0aW9ucwoK7Z+/ClZBTElECmQ3ZmYKCu6AgApWQUxJRAplMDAwCgrvv70KVkFMSUQKZmZmZAoK9I+/vQpWQUxJRAowMDEwZmZmZAoK9I+/vwpOT1RVTklDT0RFCjAwMTBmZmZmCgr0kICACk5PVFVOSUNPREUKMDAxMTAwMDAKCiMgMy4xICBVbmV4cGVjdGVkIGNvbnRpbnVhdGlvbiBieXRlcwoKgApNQUxGT1JNRUQKvwpNQUxGT1JNRUQKgL8KTUFMRk9STUVECoC/gApNQUxGT1JNRUQKgL+AvwpNQUxGT1JNRUQKgL+Av4AKTUFMRk9STUVECoC/gL+AvwpNQUxGT1JNRUQKgL+Av4C/gApNQUxGT1JNRUQKgIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+hoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/Ck1BTEZPUk1FRAoKIyAzLjIgIExvbmVseSBzdGFydCBjaGFyYWN0ZXJzCgrAIMEgwiDDIMQgxSDGIMcgyCDJIMogyyDMIM0gziDPINAg0SDSINMg1CDVINYg1yDYINkg2iDbINwg3SDeIN8gCk1BTEZPUk1FRArgIOEg4iDjIOQg5SDmIOcg6CDpIOog6yDsIO0g7iDvIApNQUxGT1JNRUQK8CDxIPIg8yD0IPUg9iD3IApNQUxGT1JNRUQK+CD5IPog+yAKTUFMRk9STUVECvwg/SAKTUFMRk9STUVECgojIDMuMyAgU2VxdWVuY2VzIHdpdGggbGFzdCBjb250aW51YXRpb24gYnl0ZSBtaXNzaW5nCgrACklOQ09NUExFVEUK4IAKSU5DT01QTEVURQrwgIAKSU5DT01QTEVURQr4gICACklOQ09NUExFVEUK/ICAgIAKSU5DT01QTEVURQrfCklOQ09NUExFVEUK778KSU5DT01QTEVURQr3v78KSU5DT01QTEVURQr7v7+/CklOQ09NUExFVEUK/b+/v78KSU5DT01QTEVURQoKIyAzLjQgIENvbmNhdGVuYXRpb24gb2YgaW5jb21wbGV0ZSBzZXF1ZW5jZXMKCsDggPCAgPiAgID8gICAgN/vv/e/v/u/v7/9v7+/vwpNQUxGT1JNRUQKCiMgMy41ICBJbXBvc3NpYmxlIGJ5dGVzCgr+Ck1BTEZPUk1FRAr/Ck1BTEZPUk1FRAr+/v//Ck1BTEZPUk1FRAoKIyAgRXhhbXBsZXMgb2YgYW4gb3ZlcmxvbmcgQVNDSUkgY2hhcmFjdGVyCgrArwpPVkVSTE9ORwrggK8KT1ZFUkxPTkcK8ICArwpPVkVSTE9ORwr4gICArwpPVkVSTE9ORwr8gICAgK8KT1ZFUkxPTkcKCiMgIE1heGltdW0gb3Zlcmxvbmcgc2VxdWVuY2VzCgrBvwpPVkVSTE9ORwrgn78KT1ZFUkxPTkcK8I+/vwpPVkVSTE9ORwr4h7+/vwpPVkVSTE9ORwr8g7+/v78KT1ZFUkxPTkcKCiMgT3ZlcmxvbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIE5VTCBjaGFyYWN0ZXIKCsCACk9WRVJMT05HCuCAgApPVkVSTE9ORwrwgICACk9WRVJMT05HCviAgICACk9WRVJMT05HCvyAgICAgApPVkVSTE9ORwoKIyBJbGxlZ2FsIGNvZGUgcG9zaXRpb25zCgojIFNpbmdsZSBVVEYtMTYgc3Vycm9nYXRlcwoK7aCACk5PVFVOSUNPREUKZDgwMAoK7a2/Ck5PVFVOSUNPREUKZGI3ZgoK7a6ACk5PVFVOSUNPREUKZGI4MAoK7a+/Ck5PVFVOSUNPREUKZGJmZgoK7bCACk5PVFVOSUNPREUKZGMwMAoK7b6ACk5PVFVOSUNPREUKZGY4MAoK7b+/Ck5PVFVOSUNPREUKZGZmZgoKIyBQYWlyZWQgVVRGLTE2IHN1cnJvZ2F0ZXMKCu2ggO2wgApOT1RVTklDT0RFCmQ4MDAgZGMwMAoK7aCA7b+/Ck5PVFVOSUNPREUKZDgwMCBkZmZmCgrtrb/tsIAKTk9UVU5JQ09ERQpkYjdmIGRjMDAKCu2tv+2/vwpOT1RVTklDT0RFCmRiN2YgZGZmZgoK7a6A7bCACk5PVFVOSUNPREUKZGI4MCBkYzAwCgrtroDtv78KTk9UVU5JQ09ERQpkYjgwIGRmZmYKCu2vv+2wgApOT1RVTklDT0RFCmRiZmYgZGMwMAoK7a+/7b+/Ck5PVFVOSUNPREUKZGJmZiBkZmZmCgojIE90aGVyIGlsbGVnYWwgY29kZSBwb3NpdGlvbnMKCu+/vgpOT1RVTklDT0RFCmZmZmUKCu+/vwpOT1RVTklDT0RFCmZmZmYKCiMjIyMjIyMjIyMjIyMjIyMKIwojIFNvbWUgbW9yZSB0ZXN0cywgbm90IGZyb20gTWFya3VzIEt1aG4ncyBmaWxlCiMKCiMgTWl4ZWQgcGxhbmUgMCBhbmQgaGlnaGVyIHBsYW5lcwoKQfCQgIBC9I+/vUMKVkFMSUQKNDEgMDAwMTAwMDAgNDIgMTBmZmZkIDQzCg==