IyMjIHVWaXNpb24yIFByb2plY3QsIChDKSBLZWlsIFNvZnR3YXJlDQojIyMgRG8gbm90IG1vZGlmeSAhDQoNClRhcmdldCAoRnJlZVJUT1NfRGVtbyksIDB4MDAwNCAvLyBUb29sczogJ0FSTS1BRFMnDQoNCkdyb3VwIChEZW1vX1NvdXJjZSkNCkdyb3VwIChMaWJyYXJpZXMpDQpHcm91cCAoUlRPU19Tb3VyY2UpDQpHcm91cCAodUlQX1NvdXJjZSkNCg0KRmlsZSAxLDEsPC4uXENvbW1vblxNaW5pbWFsXEJsb2NrUS5jPjxCbG9ja1EuYz4NCkZpbGUgMSwxLDwuLlxDb21tb25cTWluaW1hbFxibG9ja3RpbS5jPjxibG9ja3RpbS5jPg0KRmlsZSAxLDEsPC4uXENvbW1vblxNaW5pbWFsXGRlYXRoLmM+PGRlYXRoLmM+DQpGaWxlIDEsMSw8Li5cQ29tbW9uXE1pbmltYWxcaW50ZWdlci5jPjxpbnRlZ2VyLmM+DQpGaWxlIDEsMSw8LlxtYWluLmM+PG1haW4uYz4NCkZpbGUgMSwxLDwuXFBhclRlc3RcUGFyVGVzdC5jPjxQYXJUZXN0LmM+DQpGaWxlIDEsMSw8Li5cQ29tbW9uXE1pbmltYWxcUG9sbFEuYz48UG9sbFEuYz4NCkZpbGUgMSwxLDwuLlxDb21tb25cTWluaW1hbFxzZW10ZXN0LmM+PHNlbXRlc3QuYz4NCkZpbGUgMSwyLDwuXHN0YXJ0dXBfcnZtZGsuUz48c3RhcnR1cF9ydm1kay5TPg0KRmlsZSAxLDEsPC5cdGltZXJ0ZXN0LmM+PHRpbWVydGVzdC5jPg0KRmlsZSAxLDUsPC5cRnJlZVJUT1NDb25maWcuaD48RnJlZVJUT1NDb25maWcuaD4NCkZpbGUgMSwxLDwuLlxDb21tb25cTWluaW1hbFxHZW5RVGVzdC5jPjxHZW5RVGVzdC5jPg0KRmlsZSAxLDEsPC4uXENvbW1vblxNaW5pbWFsXFFQZWVrLmM+PFFQZWVrLmM+DQpGaWxlIDEsMSw8LlxJbnRRdWV1ZVRpbWVyLmM+PEludFF1ZXVlVGltZXIuYz4NCkZpbGUgMSwxLDwuLlxDb21tb25cTWluaW1hbFxJbnRRdWV1ZS5jPjxJbnRRdWV1ZS5jPg0KRmlsZSAxLDEsPC4uXENvbW1vblxNaW5pbWFsXHJlY211dGV4LmM+PHJlY211dGV4LmM+DQpGaWxlIDEsMSw8Li5cQ29tbW9uXE1pbmltYWxcUXVldWVTZXQuYz48UXVldWVTZXQuYz4NCkZpbGUgMiwxLDwuXHJpdDEyOHg5Nng0LmM+PHJpdDEyOHg5Nng0LmM+DQpGaWxlIDIsMSw8Llxvc3JhbTEyOHg2NHg0LmM+PG9zcmFtMTI4eDY0eDQuYz4NCkZpbGUgMiw0LDwuLlxDb21tb25cZHJpdmVyc1xMdW1pbmFyeU1pY3JvXEtlaWxcZHJpdmVybGliLmxpYj48ZHJpdmVybGliLmxpYj4NCkZpbGUgMiwxLDwuXGZvcm1pa2UxMjh4MTI4eDE2LmM+PGZvcm1pa2UxMjh4MTI4eDE2LmM+DQpGaWxlIDIsNCw8Li5cQ29tbW9uXGRyaXZlcnNcTHVtaW5hcnlNaWNyb1xLZWlsXGdybGliLmxpYj48Z3JsaWIubGliPg0KRmlsZSAzLDEsPC4uXC4uXFNvdXJjZVx0YXNrcy5jPjx0YXNrcy5jPg0KRmlsZSAzLDEsPC4uXC4uXFNvdXJjZVxsaXN0LmM+PGxpc3QuYz4NCkZpbGUgMywxLDwuLlwuLlxTb3VyY2VccXVldWUuYz48cXVldWUuYz4NCkZpbGUgMywxLDwuLlwuLlxTb3VyY2VccG9ydGFibGVcUlZEU1xBUk1fQ00zXHBvcnQuYz48cG9ydC5jPg0KRmlsZSAzLDEsPC4uXC4uXFNvdXJjZVxwb3J0YWJsZVxNZW1NYW5nXGhlYXBfMi5jPjxoZWFwXzIuYz4NCkZpbGUgNCwxLDwuXHdlYnNlcnZlclx1SVBfVGFzay5jPjx1SVBfVGFzay5jPg0KRmlsZSA0LDEsPC5cd2Vic2VydmVyXGVtYWMuYz48ZW1hYy5jPg0KRmlsZSA0LDEsPC5cd2Vic2VydmVyXGh0dHBkLmM+PGh0dHBkLmM+DQpGaWxlIDQsMSw8Llx3ZWJzZXJ2ZXJcaHR0cGQtY2dpLmM+PGh0dHBkLWNnaS5jPg0KRmlsZSA0LDEsPC5cd2Vic2VydmVyXGh0dHBkLWZzLmM+PGh0dHBkLWZzLmM+DQpGaWxlIDQsMSw8Llx3ZWJzZXJ2ZXJcaHR0cC1zdHJpbmdzLmM+PGh0dHAtc3RyaW5ncy5jPg0KRmlsZSA0LDEsPC4uXENvbW1vblxldGhlcm5ldFx1SVBcdWlwLTEuMFx1aXBcdWlwX2FycC5jPjx1aXBfYXJwLmM+DQpGaWxlIDQsMSw8Li5cQ29tbW9uXGV0aGVybmV0XHVJUFx1aXAtMS4wXHVpcFxwc29jay5jPjxwc29jay5jPg0KRmlsZSA0LDEsPC4uXENvbW1vblxldGhlcm5ldFx1SVBcdWlwLTEuMFx1aXBcdGltZXIuYz48dGltZXIuYz4NCkZpbGUgNCwxLDwuLlxDb21tb25cZXRoZXJuZXRcdUlQXHVpcC0xLjBcdWlwXHVpcC5jPjx1aXAuYz4NCg0KDQpPcHRpb25zIDEsMCwwICAvLyBUYXJnZXQgJ0ZyZWVSVE9TX0RlbW8nDQogRGV2aWNlIChMTTNTODk2MikNCiBWZW5kb3IgKEx1bWluYXJ5IE1pY3JvKQ0KIENwdSAoSVJBTSgweDIwMDAwMDAwLTB4MjAwMEZGRkYpIElST00oMC0weDNGRkZGKSBDTE9DSyg4MDAwMDAwKSBDUFVUWVBFKCJDb3J0ZXgtTTMiKSkNCiBGbGFzaFV0ICgpDQogU3R1cEYgKCJTVEFSVFVQXEx1bWluYXJ5XFN0YXJ0dXAucyIgKCJMdW1pbmFyeSBTdGFydHVwIENvZGUiKSkNCiBGbGFzaERSIChVTDJDTTMoLVVVMDEwMUw1RSAtTzE0IC1TMCAtQzAgLU4wMCgiQVJNIENvcnRleC1NMyIpIC1EMDAoMUJBMDA0NzcpIC1MMDAoNCkgLUZPNyAtRkQyMDAwMDAwMCAtRkM4MDAgLUZOMSAtRkYwTE0zU18yNTYgLUZTMDAgLUZMMDQwMDAwKSkNCiBEZXZJRCAoNDI4NSkNCiBSZ2YgKExNM1N4eHguSCkNCiBNZW0gKCkNCiBDICgpDQogQSAoKQ0KIFJMICgpDQogT0ggKCkNCiBEQkNfSUZYICgpDQogREJDX0NNUyAoKQ0KIERCQ19BTVMgKCkNCiBEQkNfTE1TICgpDQogVXNlRW52PTANCiBFbnZCaW4gKCkNCiBFbnZJbmMgKCkNCiBFbnZMaWIgKCkNCiBFbnZSZWcgKP9MdW1pbmFyeVwpDQogT3JnUmVnICj/THVtaW5hcnlcKQ0KIFRnU3RhdD0xNg0KIE91dERpciAoLlxydm1ka1wpDQogT3V0TmFtZSAoUlRPU0RlbW8pDQogR2VuQXBwPTENCiBHZW5MaWI9MA0KIEdlbkhleD0wDQogRGVidWc9MQ0KIEJyb3dzZT0xDQogTHN0RGlyICguXHJ2bWRrXCkNCiBIZXhTZWw9MQ0KIE1HMzJLPTANCiBUR01PUkU9MA0KIFJ1blVzciAwIDEgPGZyb21lbGYgLS1iaW4gLS1vdXRwdXQgLlxydm1ka1xSVE9TRGVtby5iaW4gLlxydm1ka1xSVE9TRGVtby5heGY+DQogUnVuVXNyIDEgMCA8Pg0KIEJydW5Vc3IgMCAwIDw+DQogQnJ1blVzciAxIDAgPD4NCiBDcnVuVXNyIDAgMCA8Pg0KIENydW5Vc3IgMSAwIDw+DQogU1ZDU0lEIDw+DQogR0xGTEFHUz0xNzkwDQogQURTRkxHQSB7IDE2LDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAgfQ0KIEFDUFVUWVAgKCJDb3J0ZXgtTTMiKQ0KIFJWREVWICgpDQogQURTVEZMR0EgeyAwLDEyLDAsMiw5OSwwLDAsNjYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAgfQ0KIE9DTUFEU09DTSB7IDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwIH0NCiBPQ01BRFNJUkFNIHsgMCwwLDAsMCwzMiwwLDAsMSwwIH0NCiBPQ01BRFNJUk9NIHsgMSwwLDAsMCwwLDAsMCw0LDAgfQ0KIE9DTUFEU1hSQU0geyAwLDAsMCwwLDAsMCwwLDAsMCB9DQogT0NSX1JWQ1QgeyAxLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDQsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMyLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAgfQ0KIFJWX1NUQVZFQyAoKQ0KIEFEU0NDRkxHIHsgNSwzMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCB9DQogQURTQ01JU0MgKC0tZGlhZ19zdXBwcmVzcyAxOTEsNTUwLDUxMywxNjcsMTc3LDE0NCkNCiBBRFNDREVGTiAoUlZEU19BUk1DTTNfTE0zUzEwMiwgIlBBQ0tfU1RSVUNUX0VORD0iLCJBTElHTl9TVFJVQ1RfRU5EPSIpDQogQURTQ1VERUYgKCkNCiBBRFNDSU5DRCAoLjsuXC4uXENvbW1vblxkcml2ZXJzXEx1bWluYXJ5TWljcm87Li5cLi5cU291cmNlXHBvcnRhYmxlXFJWRFNcQVJNX0NNMzsuLlwuLlxTb3VyY2VcaW5jbHVkZTsuLlxDb21tb25caW5jbHVkZTsuLlxDb21tb25cZXRoZXJuZXRcdUlQXHVpcC0xLjBcdWlwOy5cd2Vic2VydmVyKQ0KIEFEU0FTRkxHIHsgMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwIH0NCiBBRFNBTUlTQyAoKQ0KIEFEU0FERUZOICgpDQogQURTQVVERUYgKCkNCiBBRFNBSU5DRCAoKQ0KIFByb3BGbGQgeyAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAgfQ0KIEluY0JsZD0xDQogQWx3YXlzQnVpbGQ9MA0KIEdlbkFzbT0wDQogQXNtQXNtPTANCiBQdWJsaWNzT25seT0wDQogU3RvcENvZGU9Mw0KIEN1c3RBcmdzICgpDQogTGliTW9kcyAoKQ0KIEFEU0xERkcgeyAxNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwIH0NCiBBRFNMRFRBICgweDAwMDAwMDAwKQ0KIEFEU0xEREEgKDB4MjAwMDAwMDApDQogQURTTERTQyAoKQ0KIEFEU0xESUIgKCkNCiBBRFNMRElDICgpDQogQURTTERNQyAoLS1lbnRyeSBSZXNldF9IYW5kbGVyKQ0KIEFEU0xESUYgKCkNCiBBRFNMRERXICgpDQogIE9QVERMIChTQVJNQ00zLkRMTCkoKShETE0uRExMKSgtcExNM1M4OTYyKShTQVJNQ00zLkRMTCkoKShUTE0uRExMKSgtcExNM1M4OTYyKQ0KICBPUFREQkcgNDgxMjYsNCwoKSgpKCkoKSgpKCkoKSgpKCkoKSAoQklOXGxtaWRrLWFnZGkuZGxsKSgpKCkoKQ0KIEZMQVNIMSB7IDEsMCwwLDAsMSwwLDAsMCwzLDE2LDAsMCwwLDAsMCwwLDAsMCwwLDAgfQ0KIEZMQVNIMiAoQklOXGxtaWRrLWFnZGkuZGxsKQ0KIEZMQVNIMyAoIiIgKCkpDQogRkxBU0g0ICgpDQpFbmRPcHQNCg0K