PGh0bWw+CjxoZWFkPgoJPHRpdGxlPkJPT1NUX1BQX0ZPUl9yPC90aXRsZT4KCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL3N0eWxlcy5jc3MiPgo8L2hlYWQ+Cjxib2R5PgoJPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6ICAwcHg7Ij4KCQlUaGUgPGI+Qk9PU1RfUFBfRk9SXzxpPnI8L2k+PC9iPiBtYWNybyByZXByZXNlbnRzIGEgcmVlbnRyeSBpbnRvIHRoZSA8Yj5CT09TVF9QUF9GT1I8L2I+IHJlcGV0aXRpb24gY29uc3RydWN0LgoJPC9kaXY+Cgk8aDQ+VXNhZ2U8L2g0PgoJCTxkaXYgY2xhc3M9ImNvZGUiPgoJCQk8Yj5CT09TVF9QUF9GT1JfPC9iPiAjIyA8aT5yPC9pPig8aT5zdGF0ZTwvaT4sIDxpPnByZWQ8L2k+LCA8aT5vcDwvaT4sIDxpPm1hY3JvPC9pPikKCQk8L2Rpdj4KCTxoND5Bcmd1bWVudHM8L2g0PgoJCTxkbD4KCQkJPGR0PnI8L2R0PgoJCQk8ZGQ+CgkJCQlUaGUgbmV4dCBhdmFpbGFibGUgPGI+Qk9PU1RfUFBfRk9SPC9iPiByZXBldGl0aW9uLgoJCQk8L2RkPgoJCQk8ZHQ+c3RhdGU8L2R0PgoJCQk8ZGQ+CgkJCQlUaGUgaW5pdGlhbCBzdGF0ZS4KCQkJPC9kZD4KCQkJPGR0PnByZWQ8L2R0PgoJCQk8ZGQ+CgkJCQlBIGJpbmFyeSBwcmVkaWNhdGUgb2YgdGhlIGZvcm0gPGk+cHJlZDwvaT4oPGk+cjwvaT4sIDxpPnN0YXRlPC9pPikuJm5ic3A7CgkJCQlUaGlzIG1hY3JvIG11c3QgZXhwYW5kIHRvIGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIG9mIDxpPjA8L2k+IHRvIDxiPkJPT1NUX1BQX0xJTUlUX01BRzwvYj4uJm5ic3A7CgkJCQk8Yj5CT09TVF9QUF9GT1I8L2I+IHJlcGVhdGVkbHkgZXhwYW5kcyA8aT5tYWNybzwvaT4gd2hpbGUgdGhpcyBwcmVkaWNhdGUgcmV0dXJucyBub24temVyby4mbmJzcDsKCQkJCVRoaXMgbWFjcm8gaXMgY2FsbGVkIHdpdGggdGhlIG5leHQgYXZhaWxhYmxlIDxiPkJPT1NUX1BQX0ZPUjwvYj4gcmVwZXRpdGlvbiBhbmQgdGhlIGN1cnJlbnQgPGk+c3RhdGU8L2k+LgoJCQk8L2RkPgoJCQk8ZHQ+b3A8L2R0PgoJCQk8ZGQ+CgkJCQlBIGJpbmFyeSBvcGVyYXRpb24gb2YgdGhlIGZvcm0gPGk+b3A8L2k+KDxpPnI8L2k+LCA8aT5zdGF0ZTwvaT4pLiZuYnNwOwoJCQkJVGhpcyBvcGVyYXRpb24gaXMgZXhwYW5kZWQgYnkgPGI+Qk9PU1RfUFBfRk9SPC9iPiB3aXRoIHRoZSBuZXh0IGF2YWlsYWJsZSA8Yj5CT09TVF9QUF9GT1I8L2I+IHJlcGV0aXRpb24gYW5kIHRoZSBjdXJyZW50IDxpPnN0YXRlPC9pPi4mbmJzcDsKCQkJCVRoaXMgbWFjcm8gaXMgcmVwZWF0ZWRseSBhcHBsaWVkIHRvIHRoZSA8aT5zdGF0ZTwvaT4sIGVhY2ggdGltZSBwcm9kdWNpbmcgYSBuZXcgPGk+c3RhdGU8L2k+LCB1bnRpbCA8aT5wcmVkPC9pPiByZXR1cm5zIDxpPjA8L2k+LgoJCQk8L2RkPgoJCQk8ZHQ+bWFjcm88L2R0PgoJCQk8ZGQ+CgkJCQlBIGJpbmFyeSBtYWNybyBvZiB0aGUgZm9ybSA8aT5tYWNybzwvaT4oPGk+cjwvaT4sIDxpPnN0YXRlPC9pPikuJm5ic3A7CgkJCQlUaGlzIG1hY3JvIGlzIGV4cGFuZGVkIGJ5IDxiPkJPT1NUX1BQX0ZPUjwvYj4gd2l0aCB0aGUgbmV4dCBhdmFpbGFibGUgPGI+Qk9PU1RfUFBfRk9SPC9iPiByZXBldGl0aW9uIGFuZCB0aGUgY3VycmVudCA8aT5zdGF0ZTwvaT4uJm5ic3A7CgkJCQlUaGlzIG1hY3JvIGlzIGlzIHJlcGVhdGVkIGJ5IDxiPkJPT1NUX1BQX0ZPUjwvYj4gdW50aWwgPGk+cHJlZDwvaT4gcmV0dXJucyA8aT4wPC9pPi4KCQkJPC9kZD4KCQk8L2RsPgoJPGg0PlJlbWFya3M8L2g0PgoJCTxkaXY+CgkJCVRoaXMgbWFjcm8gZXhwYW5kcyB0byB0aGUgc2VxdWVuY2U6CgkJCTxkaXY+CgkJCQk8aT5tYWNybzwvaT4oPGk+cjwvaT4sIDxpPnN0YXRlPC9pPikgPGk+bWFjcm88L2k+KDxpPnI8L2k+LCA8aT5vcDwvaT4oPGk+cjwvaT4sIDxpPnN0YXRlPC9pPikpIC4uLiA8aT5tYWNybzwvaT4oPGk+cjwvaT4sIDxpPm9wPC9pPig8aT5yPC9pPiwgLi4uIDxpPm9wPC9pPig8aT5yPC9pPiwgPGk+c3RhdGU8L2k+KSAuLi4gKSkKCQkJPC9kaXY+CgkJPC9kaXY+CgkJPGRpdj4KCQkJQXQgY2VydGFpbiB0aW1lcywgaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBwZXJmb3JtIHRoZSBjb25jYXRlbmF0aW9uIHdpdGggPGI+Qk9PU1RfUFBfQ0FUPC9iPiByYXRoZXIgdGhhbiB0aGUgcHJlcHJvY2Vzc29yIHRva2VuLXBhc3Rpbmcgb3BlcmF0b3IuJm5ic3A7CgkJCVRoaXMgaGFwcGVucyB3aGVuIHRoZSA8aT5yPC9pPiB2YWx1ZSBpcyBhIG1hY3JvIGludm9jYXRpb24gaXRzZWxmLiZuYnNwOwoJCQlJdCBuZWVkcyBhIGRlbGF5IHRvIGFsbG93IGl0IHRvIGV4cGFuZC4mbmJzcDsKCQkJVGhlIHN5bnRheCBpbiBzdWNoIGEgc2NlbmFyaW8gYmVjb21lczoKCQkJPGRpdj4KCQkJCTxiPkJPT1NUX1BQX0NBVDwvYj4oPGI+Qk9PU1RfUFBfRk9SXzwvYj4sIDxpPnI8L2k+KSg8aT5zdGF0ZTwvaT4sIDxpPnByZWQ8L2k+LCA8aT5vcDwvaT4sIDxpPm1hY3JvPC9pPikKCQkJPC9kaXY+CgkJPC9kaXY+Cgk8aDQ+U2VlIEFsc288L2g0PgoJCTx1bD4KCQkJPGxpPjxhIGhyZWY9ImNhdC5odG1sIj5CT09TVF9QUF9DQVQ8L2E+PC9saT4KCQkJPGxpPjxhIGhyZWY9ImZvci5odG1sIj5CT09TVF9QUF9GT1I8L2E+PC9saT4KCQkJPGxpPjxhIGhyZWY9ImxpbWl0X21hZy5odG1sIj5CT09TVF9QUF9MSU1JVF9NQUc8L2E+PC9saT4KCQk8L3VsPgoJPGg0PlJlcXVpcmVtZW50czwvaDQ+CgkJPGRpdj4KCQkJPGI+SGVhZGVyOjwvYj4gJm5ic3A7PGEgaHJlZj0iLi4vaGVhZGVycy9yZXBldGl0aW9uL2Zvci5odG1sIj4mbHQ7Ym9vc3QvcHJlcHJvY2Vzc29yL3JlcGV0aXRpb24vZm9yLmhwcCZndDs8L2E+CgkJPC9kaXY+Cgk8aDQ+U2FtcGxlIENvZGU8L2g0Pgo8ZGl2PjxwcmU+CiNpbmNsdWRlICZsdDs8YSBocmVmPSIuLi9oZWFkZXJzL2FyaXRobWV0aWMvZGVjLmh0bWwiPmJvb3N0L3ByZXByb2Nlc3Nvci9hcml0aG1ldGljL2RlYy5ocHA8L2E+Jmd0OwojaW5jbHVkZSAmbHQ7PGEgaHJlZj0iLi4vaGVhZGVycy9hcml0aG1ldGljL2luYy5odG1sIj5ib29zdC9wcmVwcm9jZXNzb3IvYXJpdGhtZXRpYy9pbmMuaHBwPC9hPiZndDsKI2luY2x1ZGUgJmx0OzxhIGhyZWY9Ii4uL2hlYWRlcnMvY29tcGFyaXNvbi9ub3RfZXF1YWwuaHRtbCI+Ym9vc3QvcHJlcHJvY2Vzc29yL2NvbXBhcmlzb24vbm90X2VxdWFsLmhwcDwvYT4mZ3Q7CiNpbmNsdWRlICZsdDs8YSBocmVmPSIuLi9oZWFkZXJzL3B1bmN0dWF0aW9uL2NvbW1hX2lmLmh0bWwiPmJvb3N0L3ByZXByb2Nlc3Nvci9wdW5jdHVhdGlvbi9jb21tYV9pZi5ocHA8L2E+Jmd0OwojaW5jbHVkZSAmbHQ7PGEgaHJlZj0iLi4vaGVhZGVycy9yZXBldGl0aW9uL2Zvci5odG1sIj5ib29zdC9wcmVwcm9jZXNzb3IvcmVwZXRpdGlvbi9mb3IuaHBwPC9hPiZndDsKI2luY2x1ZGUgJmx0OzxhIGhyZWY9Ii4uL2hlYWRlcnMvdHVwbGUvZWxlbS5odG1sIj5ib29zdC9wcmVwcm9jZXNzb3IvdHVwbGUvZWxlbS5ocHA8L2E+Jmd0OwoKI2RlZmluZSBQUkVEKHIsIHN0YXRlKSBcCiAgIDxhIGhyZWY9Im5vdF9lcXVhbC5odG1sIj5CT09TVF9QUF9OT1RfRVFVQUw8L2E+KCBcCiAgICAgIDxhIGhyZWY9InR1cGxlX2VsZW0uaHRtbCI+Qk9PU1RfUFBfVFVQTEVfRUxFTTwvYT4oNCwgMCwgc3RhdGUpLCBcCiAgICAgIDxhIGhyZWY9ImluYy5odG1sIj5CT09TVF9QUF9JTkM8L2E+KCBcCiAgICAgICAgIDxhIGhyZWY9InR1cGxlX2VsZW0uaHRtbCI+Qk9PU1RfUFBfVFVQTEVfRUxFTTwvYT4oNCwgMSwgc3RhdGUpIFwKICAgICAgKSBcCiAgICkgXAogICAvKiovCgojZGVmaW5lIE9QKHIsIHN0YXRlKSBcCiAgICggXAogICAgICA8YSBocmVmPSJpbmMuaHRtbCI+Qk9PU1RfUFBfSU5DPC9hPiggXAogICAgICAgICA8YSBocmVmPSJ0dXBsZV9lbGVtLmh0bWwiPkJPT1NUX1BQX1RVUExFX0VMRU08L2E+KDQsIDAsIHN0YXRlKSBcCiAgICAgICksIFwKICAgICAgPGEgaHJlZj0idHVwbGVfZWxlbS5odG1sIj5CT09TVF9QUF9UVVBMRV9FTEVNPC9hPig0LCAxLCBzdGF0ZSksIFwKICAgICAgPGEgaHJlZj0idHVwbGVfZWxlbS5odG1sIj5CT09TVF9QUF9UVVBMRV9FTEVNPC9hPig0LCAyLCBzdGF0ZSksIFwKICAgICAgPGEgaHJlZj0iaW5jLmh0bWwiPkJPT1NUX1BQX0lOQzwvYT4oIFwKICAgICAgICAgPGEgaHJlZj0idHVwbGVfZWxlbS5odG1sIj5CT09TVF9QUF9UVVBMRV9FTEVNPC9hPig0LCAzLCBzdGF0ZSkgXAogICAgICApIFwKICAgKSBcCiAgIC8qKi8KCiNkZWZpbmUgTUFDUk8ociwgc3RhdGUpIFwKICAgPGEgaHJlZj0iY29tbWFfaWYuaHRtbCI+Qk9PU1RfUFBfQ09NTUFfSUY8L2E+KCBcCiAgICAgIDxhIGhyZWY9InR1cGxlX2VsZW0uaHRtbCI+Qk9PU1RfUFBfVFVQTEVfRUxFTTwvYT4oNCwgMywgc3RhdGUpIFwKICAgKSB0ZW1wbGF0ZSZsdDsgXAogICAgICA8YSBocmVmPSJmb3Jfci5odG1sIj5CT09TVF9QUF9GT1JfPC9hPiAjIyByKCBcCiAgICAgICAgICgwLCA8YSBocmVmPSJ0dXBsZV9lbGVtLmh0bWwiPkJPT1NUX1BQX1RVUExFX0VMRU08L2E+KDQsIDAsIHN0YXRlKSwgXywgMCksIFwKICAgICAgICAgUFJFRF8yLCBPUCwgTUFDUk9fMiBcCiAgICAgICkgXAogICAmZ3Q7IGNsYXNzIDxhIGhyZWY9ImNhdC5odG1sIj5CT09TVF9QUF9DQVQ8L2E+KCBcCiAgICAgIDxhIGhyZWY9InR1cGxlX2VsZW0uaHRtbCI+Qk9PU1RfUFBfVFVQTEVfRUxFTTwvYT4oNCwgMiwgc3RhdGUpLCBcCiAgICAgIDxhIGhyZWY9InR1cGxlX2VsZW0uaHRtbCI+Qk9PU1RfUFBfVFVQTEVfRUxFTTwvYT4oNCwgMCwgc3RhdGUpIFwKICAgKSBcCiAgIC8qKi8KCiNkZWZpbmUgUFJFRF8yKHIsIHN0YXRlKSBcCiAgIDxhIGhyZWY9Im5vdF9lcXVhbC5odG1sIj5CT09TVF9QUF9OT1RfRVFVQUw8L2E+KCBcCiAgICAgIDxhIGhyZWY9InR1cGxlX2VsZW0uaHRtbCI+Qk9PU1RfUFBfVFVQTEVfRUxFTTwvYT4oNCwgMCwgc3RhdGUpLCBcCiAgICAgIDxhIGhyZWY9InR1cGxlX2VsZW0uaHRtbCI+Qk9PU1RfUFBfVFVQTEVfRUxFTTwvYT4oNCwgMSwgc3RhdGUpIFwKICAgKSBcCiAgIC8qKi8KCiNkZWZpbmUgTUFDUk9fMihyLCBzdGF0ZSkgXAogICA8YSBocmVmPSJjb21tYV9pZi5odG1sIj5CT09TVF9QUF9DT01NQV9JRjwvYT4oIFwKICAgICAgPGEgaHJlZj0idHVwbGVfZWxlbS5odG1sIj5CT09TVF9QUF9UVVBMRV9FTEVNPC9hPig0LCAwLCBzdGF0ZSkgXAogICApIGNsYXNzIFwKICAgLyoqLwoKI2RlZmluZSBURU1QTEFURV9URU1QTEFURShsb3csIGhpZ2gsIG5hbWUpIFwKICAgPGEgaHJlZj0iZm9yLmh0bWwiPkJPT1NUX1BQX0ZPUjwvYT4oIFwKICAgICAgKGxvdywgaGlnaCwgbmFtZSwgMCksIFwKICAgICAgUFJFRCwgT1AsIE1BQ1JPIFwKICAgKSBcCiAgIC8qKi8KClRFTVBMQVRFX1RFTVBMQVRFKDIsIDQsIFQpCi8qCiAgIGV4cGFuZHMgdG8uLi4KICAgdGVtcGxhdGUmbHQ7Y2xhc3MsIGNsYXNzJmd0OyBjbGFzcyBUMiwKICAgdGVtcGxhdGUmbHQ7Y2xhc3MsIGNsYXNzLCBjbGFzcyZndDsgY2xhc3MgVDMsCiAgIHRlbXBsYXRlJmx0O2NsYXNzLCBjbGFzcywgY2xhc3MsIGNsYXNzJmd0OyBjbGFzcyBUNAoqLwo8L3ByZT48L2Rpdj4KCTxociBzaXplPSIxIj4KCTxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwcHg7Ij4KCQk8aT6pIENvcHlyaWdodCA8YSBocmVmPSJodHRwOi8vd3d3LmhvdXNlbWFycXVlLmNvbSIgdGFyZ2V0PSJfdG9wIj5Ib3VzZW1hcnF1ZSBPeTwvYT4gMjAwMjwvaT4KCQk8L2JyPjxpPqkgQ29weXJpZ2h0IFBhdWwgTWVuc29uaWRlcyAyMDAyPC9pPgoJPC9kaXY+Cgk8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogMHB4OyI+CgkJPHA+PHNtYWxsPkRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQoJCWFjY29tcGFueWluZyBmaWxlIDxhIGhyZWY9Ii4uLy4uLy4uLy4uL0xJQ0VOU0VfMV8wLnR4dCI+TElDRU5TRV8xXzAudHh0PC9hPiBvcgoJCWNvcHkgYXQgPGEgaHJlZj0KCQkiaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0Ij53d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pPC9zbWFsbD48L3A+Cgk8L2Rpdj4KPC9ib2R5Pgo8L2h0bWw+Cg==