PGh0bWw+CjxoZWFkPgoJPHRpdGxlPkJPT1NUX1BQX0xJU1RfQVBQRU5EX0Q8L3RpdGxlPgoJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vc3R5bGVzLmNzcyI+CQo8L2hlYWQ+Cjxib2R5PgoJPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6ICAwcHg7Ij4KCQlUaGUgPGI+Qk9PU1RfUFBfTElTVF9BUFBFTkRfRDwvYj4gbWFjcm8gYXBwZW5kcyB0d28gPGk+bGlzdHM8L2k+LiZuYnNwOwoJCUl0IHJlZW50ZXJzIDxiPkJPT1NUX1BQX1dISUxFPC9iPiB3aXRoIG1heGltdW0gZWZmaWNpZW5jeS4KCTwvZGl2PgoJPGg0PlVzYWdlPC9oND4KCQk8ZGl2IGNsYXNzPSJjb2RlIj4KCQkJPGI+Qk9PU1RfUFBfTElTVF9BUFBFTkRfRDwvYj4oPGk+ZDwvaT4sIDxpPmE8L2k+LCA8aT5iPC9pPikKCQk8L2Rpdj4KCTxoND5Bcmd1bWVudHM8L2g0PgoJCTxkbD4KCQkJPGR0PmQ8L2R0PgoJCQk8ZGQ+CgkJCQlUaGUgbmV4dCBhdmFpbGFibGUgPGI+Qk9PU1RfUFBfV0hJTEU8L2I+IGl0ZXJhdGlvbi4KCQkJPC9kZD4KCQkJPGR0PmE8L2R0PgoJCQk8ZGQ+CgkJCQlUaGUgZmlyc3QgPGk+bGlzdDwvaT4uCgkJCTwvZGQ+CgkJCTxkdD5iPC9kdD4KCQkJPGRkPgoJCQkJVGhlIHNlY29uZCA8aT5saXN0PC9pPi4KCQkJPC9kZD4KCQk8L2RsPgoJPGg0PlJlbWFya3M8L2g0PgoJCTxkaXY+CgkJCVRoaXMgbWFjcm8gYXBwZW5kcyB0d28gbGlzdHMuJm5ic3A7CgkJCUZvciBleGFtcGxlLCBpZiA8aT5hPC9pPiBpcyAoPGk+MTwvaT4sICg8aT4yPC9pPiwgKDxpPjM8L2k+LCA8Yj5CT09TVF9QUF9OSUw8L2I+KSkpIGFuZCA8aT5iPC9pPiBpcyAoPGk+NDwvaT4sICg8aT41PC9pPiwgPGI+Qk9PU1RfUFBfTklMPC9iPikpLAoJCQl0aGlzIG1hY3JvIHdpbGwgZXhwYW5kIHRvOgoJCQk8ZGl2PgoJCQkJKDxpPjE8L2k+LCAoPGk+MjwvaT4sICg8aT4zPC9pPiwgKDxpPjQ8L2k+LCAoPGk+NTwvaT4sIDxiPkJPT1NUX1BQX05JTDwvYj4pKSkpKQoJCQk8L2Rpdj4KCQk8L2Rpdj4KCTxoND5TZWUgQWxzbzwvaDQ+CgkJPHVsPgoJCQk8bGk+PGEgaHJlZj0ibGlzdF9hcHBlbmQuaHRtbCI+Qk9PU1RfUFBfTElTVF9BUFBFTkQ8L2E+PC9saT4KCQk8L3VsPgoJPGg0PlJlcXVpcmVtZW50czwvaDQ+CgkJPGRpdj4KCQkJPGI+SGVhZGVyOjwvYj4gJm5ic3A7PGEgaHJlZj0iLi4vaGVhZGVycy9saXN0L2FwcGVuZC5odG1sIj4mbHQ7Ym9vc3QvcHJlcHJvY2Vzc29yL2xpc3QvYXBwZW5kLmhwcCZndDs8L2E+CgkJPC9kaXY+Cgk8aDQ+U2FtcGxlIENvZGU8L2g0Pgo8ZGl2PjxwcmU+CiNpbmNsdWRlICZsdDs8YSBocmVmPSIuLi9oZWFkZXJzL2FyaXRobWV0aWMvZGVjLmh0bWwiPmJvb3N0L3ByZXByb2Nlc3Nvci9hcml0aG1ldGljL2RlYy5ocHA8L2E+Jmd0OwojaW5jbHVkZSAmbHQ7PGEgaHJlZj0iLi4vaGVhZGVycy9jb250cm9sL3doaWxlLmh0bWwiPmJvb3N0L3ByZXByb2Nlc3Nvci9jb250cm9sL3doaWxlLmhwcDwvYT4mZ3Q7CiNpbmNsdWRlICZsdDs8YSBocmVmPSIuLi9oZWFkZXJzL2xpc3QvYXBwZW5kLmh0bWwiPmJvb3N0L3ByZXByb2Nlc3Nvci9saXN0L2FwcGVuZC5ocHA8L2E+Jmd0OwojaW5jbHVkZSAmbHQ7PGEgaHJlZj0iLi4vaGVhZGVycy90dXBsZS9lbGVtLmh0bWwiPmJvb3N0L3ByZXByb2Nlc3Nvci90dXBsZS9lbGVtLmhwcDwvYT4mZ3Q7CgojZGVmaW5lIExJU1QgKDEsICgyLCAoMywgPGEgaHJlZj0ibmlsLmh0bWwiPkJPT1NUX1BQX05JTDwvYT4pKSkKCiNkZWZpbmUgUFJFRChkLCBzdGF0ZSkgPGEgaHJlZj0idHVwbGVfZWxlbS5odG1sIj5CT09TVF9QUF9UVVBMRV9FTEVNPC9hPigzLCAxLCBzdGF0ZSkKCiNkZWZpbmUgT1AoZCwgc3RhdGUpIFwKICAgKCBcCiAgICAgIDxhIGhyZWY9Imxpc3RfYXBwZW5kX2QuaHRtbCI+Qk9PU1RfUFBfTElTVF9BUFBFTkRfRDwvYT4oIFwKICAgICAgICAgZCwgPGEgaHJlZj0idHVwbGVfZWxlbS5odG1sIj5CT09TVF9QUF9UVVBMRV9FTEVNPC9hPigzLCAwLCBzdGF0ZSksIFwKICAgICAgICAgPGEgaHJlZj0idHVwbGVfZWxlbS5odG1sIj5CT09TVF9QUF9UVVBMRV9FTEVNPC9hPigzLCAyLCBzdGF0ZSkgXAogICAgICApLCBcCiAgICAgIDxhIGhyZWY9ImRlYy5odG1sIj5CT09TVF9QUF9ERUM8L2E+KCBcCiAgICAgICAgIDxhIGhyZWY9InR1cGxlX2VsZW0uaHRtbCI+Qk9PU1RfUFBfVFVQTEVfRUxFTTwvYT4oMywgMSwgc3RhdGUpIFwKICAgICAgKSwgXAogICAgICA8YSBocmVmPSJ0dXBsZV9lbGVtLmh0bWwiPkJPT1NUX1BQX1RVUExFX0VMRU08L2E+KDMsIDIsIHN0YXRlKSBcCiAgICkgXAogICAvKiovCgojZGVmaW5lIExJU1RfTVVMVElQTFkoYywgbGlzdCkgXAogICA8YSBocmVmPSJ0dXBsZV9lbGVtLmh0bWwiPkJPT1NUX1BQX1RVUExFX0VMRU08L2E+KCBcCiAgICAgIDMsIDAsIFwKICAgICAgPGEgaHJlZj0id2hpbGUuaHRtbCI+Qk9PU1RfUFBfV0hJTEU8L2E+KCBcCiAgICAgICAgIFBSRUQsIE9QLCBcCiAgICAgICAgICg8YSBocmVmPSJuaWwuaHRtbCI+Qk9PU1RfUFBfTklMPC9hPiwgYywgbGlzdCkgXAogICAgICApIFwKICAgKSBcCiAgIC8qKi8KCkxJU1RfTVVMVElQTFkoMywgTElTVCkKICAgLy8gZXhwYW5kcyB0byAoMSwgKDIsICgzLCAoMSwgKDIsICgzLCAoMSwgKDIsICgzLCA8YSBocmVmPSJuaWwuaHRtbCI+Qk9PU1RfUFBfTklMPC9hPikpKSkpKSkpKQo8L3ByZT48L2Rpdj4KCTxociBzaXplPSIxIj4KCTxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwcHg7Ij4KCQk8aT6pIENvcHlyaWdodCA8YSBocmVmPSJodHRwOi8vd3d3LmhvdXNlbWFycXVlLmNvbSIgdGFyZ2V0PSJfdG9wIj5Ib3VzZW1hcnF1ZSBPeTwvYT4gMjAwMjwvaT4KCQk8L2JyPjxpPqkgQ29weXJpZ2h0IFBhdWwgTWVuc29uaWRlcyAyMDAyPC9pPgoJPC9kaXY+Cgk8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogMHB4OyI+CgkJPHA+PHNtYWxsPkRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQoJCWFjY29tcGFueWluZyBmaWxlIDxhIGhyZWY9Ii4uLy4uLy4uLy4uL0xJQ0VOU0VfMV8wLnR4dCI+TElDRU5TRV8xXzAudHh0PC9hPiBvcgoJCWNvcHkgYXQgPGEgaHJlZj0KCQkiaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0Ij53d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pPC9zbWFsbD48L3A+Cgk8L2Rpdj4KPC9ib2R5Pgo8L2h0bWw+Cg==