TmFtZQoKICAgIE5WX2FscGhhX3RvX2NvdmVyYWdlX2RpdGhlcl9jb250cm9sCgpOYW1lIFN0cmluZ3MKCiAgICBHTF9OVl9hbHBoYV90b19jb3ZlcmFnZV9kaXRoZXJfY29udHJvbAoKQ29udGFjdAogICBQaWVycmUgQm91ZGllciwgTlZJRElBIENvcnBvcmF0aW9uIChwYm91ZGllciAnYXQnIG52aWRpYS5jb20pCiAgICAKQ29udHJpYnV0b3JzCgogICAgVHJpc3RhbiBMb3JhY2gsIE5WSURJQSBDb3Jwb3JhdGlvbiAgICAKICAgIENocmlzdG9waGUgS1VMRVNaQSwgRGFzc2F1bHQgU3lzdGVtZXMKU3RhdHVzCgogICAgUGVuZGluZy4KClZlcnNpb24KCiAgICBMYXN0IE1vZGlmaWVkIERhdGU6ICAgICAgICAgQXByaWwgMjUsIDIwMTYKICAgIFJldmlzaW9uOiAgICAgICAgICAgICAgICAgICAxCgpOdW1iZXIKCiAgICA1MDAKCkRlcGVuZGVuY2llcwoKICAgIFRoaXMgZXh0ZW5zaW9uIGlzIHdyaXR0ZW4gYWdhaW5zdCB0aGUgT3BlbkdMIDQuNCBzcGVjaWZpY2F0aW9uIAogICAgKENvcmUgUHJvZmlsZSkgYnV0IG1heSBiZSB1c2VkIHdpdGggdGhlIENvbXBhdGliaWxpdHkgcHJvZmlsZSBvciBPcGVuR0wgRVMgCiAgICAyLjAgb3IgbGF0ZXIuCiAgICAKT3ZlcnZpZXcKCiAgICBOVl9hbHBoYV90b19jb3ZlcmFnZV9kaXRoZXJfY29udHJvbF90cmlhbmdsZXMgcHJvdmlkZXMgYSBuZXcgbWVjaGFuaXNtCiAgICB0byBjb250cm9sIHdoZXRoZXIgZGl0aGVyaW5nIGlzIGFwcGxpZWQgd2hlbiB0aGUgZXhpc3RpbmcgYWxwaGEgdG8gY292ZXJhZ2UKICAgIGZ1bmN0aW9uYWxpdHkgaXMgdXNlZC4KICAgIAoKTmV3IFByb2NlZHVyZXMgYW5kIEZ1bmN0aW9ucwoKICAgIEFscGhhVG9Db3ZlcmFnZURpdGhlckNvbnRyb2xOVihlbnVtIG1vZGUpOi4KICAgIApOZXcgVG9rZW5zCgogICAgQWNjZXB0ZWQgYnkgdGhlIDxwYXJhbT4gcGFyYW1ldGVyIG9mIEFscGhhVG9Db3ZlcmFnZURpdGhlckNvbnRyb2xOVigpOgogICAgICAgIEFMUEhBX1RPX0NPVkVSQUdFX0RJVEhFUl9ERUZBVUxUX05WICAgICAgICAgICAgIDB4OTM0RAogICAgICAgIEFMUEhBX1RPX0NPVkVSQUdFX0RJVEhFUl9FTkFCTEVfTlYgICAgICAgICAgICAgIDB4OTM0RQogICAgICAgIEFMUEhBX1RPX0NPVkVSQUdFX0RJVEhFUl9ESVNBQkxFX05WICAgICAgICAgICAgIDB4OTM0RgogICAgCiAgICBBY2NlcHRlZCBieSB0aGUgPHBhcmFtPiBvZiBHZXRJbnRlZ2VydigpOgogICAgICAgIEFMUEhBX1RPX0NPVkVSQUdFX0RJVEhFUl9NT0RFX05WICAgICAgICAgICAgICAgIDB4OTJCRgoKTW9kaWZpY2F0aW9uIHRvIENoYXB0ZXIgMTcuMy4zIG9mIHRoZSBPcGVuR0wgNC40IChDb3JlIFByb2ZpbGUpIFNwZWNpZmljYXRpb24KKE11bHRpc2FtcGxlIEZyYWdtZW50IE9wZXJhdGlvbnMpCgogICAgTW9kaWZ5IHRoZSBwYXJhZ3JhcGggZGVzY3JpYmluZyBTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0Ugd2l0aAoKICAgICAgICAuLi4gTm8gc3BlY2lmaWMgYWxnb3JpdGhtIGlzIHJlcXVpcmVkIGZvciBjb252ZXJ0aW5nIHRoZSBzYW1wbGUgYWxwaGEgdmFsdWVzIHRvIGEKICAgIHRlbXBvcmFyeSBjb3ZlcmFnZSB2YWx1ZS4gSXQgaXMgaW50ZW5kZWQgdGhhdCB0aGUgbnVtYmVyIG9mIDGScyBpbiB0aGUgdGVtcG9yYXJ5CiAgICBjb3ZlcmFnZSBiZSBwcm9wb3J0aW9uYWwgdG8gdGhlIHNldCBvZiBhbHBoYSB2YWx1ZXMgZm9yIHRoZSBmcmFnbWVudCwgd2l0aCBhbGwgMZJzCiAgICBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYXhpbXVtIG9mIGFsbCBhbHBoYSB2YWx1ZXMsIGFuZCBhbGwgMJJzIGNvcnJlc3BvbmRpbmcgdG8KICAgIGFsbCBhbHBoYSB2YWx1ZXMgYmVpbmcgMC4gVGhlIGFscGhhIHZhbHVlcyB1c2VkIHRvIGdlbmVyYXRlIGEgY292ZXJhZ2UgdmFsdWUgYXJlCiAgICBjbGFtcGVkIHRvIHRoZSByYW5nZSBbMDsgMV0uIEl0IGlzIGFsc28gaW50ZW5kZWQgdGhhdCB0aGUgYWxnb3JpdGhtIGJlIHBzZXVkby1yYW5kb20KICAgIGluIG5hdHVyZSwgdG8gYXZvaWQgaW1hZ2UgYXJ0aWZhY3RzIGR1ZSB0byByZWd1bGFyIGNvdmVyYWdlIHNhbXBsZSBsb2NhdGlvbnMuIAoKICAgIFRoZSBmdW5jdGlvbiBBbHBoYVRvQ292ZXJhZ2VEaXRoZXJDb250cm9sTlYoKSBhbGxvd3MgdG8gc3BlY2lmeSB0aGUga2luZCBvZiBhbGdvcml0aG06CiAgICBJZiB0aGUgbW9kZSBpcyBBTFBIQV9UT19DT1ZFUkFHRV9ESVRIRVJfRU5BQkxFLCB0aGUgYWxnb3JpdGhtIGlzIGRpZmZlcmVudCBhdCBkaWZmZXJlbnQgCiAgICBwaXhlbCBsb2NhdGlvbnMuIFRoZSBkaXRoZXJpbmcgc2hvdWxkIGJlIGRlZmluZWQgcmVsYXRpdmUgdG8gd2luZG93LCBub3Qgc2NyZWVuLCBjb29yZGluYXRlcywgCiAgICBzbyB0aGF0IHJlbmRlcmluZyByZXN1bHRzIGFyZSBpbnZhcmlhbnQgd2l0aCByZXNwZWN0IHRvIHdpbmRvdyBwb3NpdGlvbi4gCiAgICBJZiB0aGUgbW9kZSBpcyBBTFBIQV9UT19DT1ZFUkFHRV9ESVRIRVJfRU5BQkxFLCB0aGVuIG5vIGRpdGhlcmluZyBzaG91bGQgYmUgYXBwbGllZCBhbmQgdGhlIHNhbWUgCiAgICBjb252ZXJzaW9uIHNob3VsZCBoYXBwZW4gcmVnYXJkbGVzcyBvZiB0aGUgcGl4ZWwgY29vcmRpbmF0ZXMuCiAgICBJZiB0aGUgbW9kZSBpcyBBTFBIQV9UT19DT1ZFUkFHRV9ESVRIRVJfRElTQUJMRSwgdGhlbiB0aGUgYWxnb3JpdGhtIGlzIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4KCiAgICBBZGRpdGlvbiB0byB0aGUgVGFibGUgMjMuMTEuIE11bHRpc2FtcGxpbmc6CiAgICBBTFBIQV9UT19DT1ZFUkFHRV9ESVRIRVJfTU9ERSAgfCAgRSAgfCAgR2V0SW50ZWdlcnYgIHwgIEFMUEhBX1RPX0NPVkVSQUdFX0RJVEhFUl9ERUZBVUxUICB8IENvbnRyb2wgZGl0aGVyIGZvciBhbHBoYSB0byBjb3ZlcmFnZSB8ICAxNy4zLjMKCk5ldyBTdGF0ZQoKICAgIE5vbmUuCgpBZGRpdGlvbnMgdG8gdGhlIEFHTC9HTFgvV0dMIFNwZWNpZmljYXRpb25zCgogICAgTm9uZS4KCkdMWCBQcm90b2NvbAoKICAgIE5vbmUuCiAgICAKTW9kaWZpY2F0aW9ucyB0byB0aGUgT3BlbkdMIFNoYWRpbmcgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbiwgVmVyc2lvbiA0LjQwCgogICAgTm9uZS4KCkVycm9ycwoKICAgIE5vbmUKCklzc3VlcwoKICAgIChYWCkgCgpSZXZpc2lvbiBIaXN0b3J5CgogICAgUmV2aXNpb24gMQogICAgLSBJbnRlcm5hbCByZXZpc2lvbnMuCg==