LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoquabE3L3pydyjutfU0dDKtc/WtcRpb2N0bL3Tv9qyzsr9tqjS5QoquLrU8MjLo7oKKrG4t93Iy6O6CirQ3rjEyNWjugoq0N64xMTayN2jugoqsOaxvrrFo7oKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2lmbmRlZiBfWlhJQ19JT0NUTF9IXwojZGVmaW5lIF9aWElDX0lPQ1RMX0hfCgojaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiNpbmNsdWRlIDxzeXMvc3RhdC5oPgojaW5jbHVkZSA8ZmNudGwuaD4KI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgoKCiNpZmRlZiBfTUJCX09TX1VDTElOVVgKI2luY2x1ZGUgPHN0ZGludC5oPgojZW5kaWYKCgojZGVmaW5lIE5JT0NUTF9NQUdJQyAneCcKI2RlZmluZSBOSU9DVExfTUFYX05SIDMyICAgICAgICAgLy9JT0NUTL/J08PD/MHutcTX7rTzuPbK/QoKCiNkZWZpbmUgTklPQ1RMX1JFQUQgX0lPKE5JT0NUTF9NQUdJQywwKQoKLyq78cihtv6y48HavtPB0LHt1tBtYWO12Na3us2z9r/aZGV2bmFtZSovCgojZGVmaW5lIE5JT0NHUENJTkZPICBfSU9XUihOSU9DVExfTUFHSUMsMSxpb2N0bF9kYXRhKQoKLyq78cihzfjC58nosbh0eKGicnihomRyb3C1yM2zvMajrM34wufJ6LG417TMrNDFz6IqLwoKI2RlZmluZSBOSU9DR1NUQVRTIF9JT1dSKE5JT0NUTF9NQUdJQywyLGlvY3RsX2RhdGEpCgovKsno1sPE2rrLss7K/c2o08PD/MHuo6zA/cjnZmFzdG5hdC9mYXN0YnIvbGVhay9icm1vbml0ZXK1yL+qudi78ry2sfAqLwoKI2RlZmluZSBOSU9DU0tQQVJBTSBfSU9XUihOSU9DVExfTUFHSUMsMyxpb2N0bF9kYXRhKQoKLyq78cihc2tiyerH67PJuaYvyqew3Lj2yv3Ns7zGKi8KCiNkZWZpbmUgTklPQ0dTS0JDTlQgX0lPUihOSU9DVExfTUFHSUMsNCxpb2N0bF9kYXRhKQoKLyq78cihZmFzdG5hdCDX7rTzwbS908r9Ki8KCiNkZWZpbmUgTklPQ0dGQVNUTUFYTElOS1MgX0lPUihOSU9DVExfTUFHSUMsNyxpb2N0bF9kYXRhKS8vyLe2qLrz0PjKx7fxu7nSqsq508MKCgovKrvxyKHX1LTyv6rNs7zGv6q52NauuvOjrHNrYiC1xLWxx7C49sr9oaLLsrzkt+XWtbXIzbO8xtDFz6KhonNrYr+9sbS0zsr9oaJza2LNt8Cp1bm0zsr9CnNrYtTayO3W0LbPys23xbTOyv0qLwoKI2RlZmluZSBOSU9DR1NLQk5VTSBfSU9XUihOSU9DVExfTUFHSUMsMTMsaW9jdGxfZGF0YSkKCi8qyejWw8Taustza2IgZHVtcMalxeTQxc+io6zA/cjnxqXF5MzYtqhtYWO12Na3oaJJULXY1rcqLwoKI2RlZmluZSBOSU9DR1NLQkRVTVAgX0lPUihOSU9DVExfTUFHSUMsMTQsaW9jdGxfZGF0YSkKCi8qyejWw8Taust0Y3BkdW1wIL+qudgqLwoKI2RlZmluZSBOSU9DU1RDUERVTVAgX0lPUihOSU9DVExfTUFHSUMsMTUsaW9jdGxfZGF0YSkKCi8qKi8KCiNkZWZpbmUgTklPQ1BEUCAgICAgX0lPUihOSU9DVExfTUFHSUMsMTcsaW9jdGxfZGF0YSkKCi8qKi8KCiNkZWZpbmUgTklPQ0ZMVVNIRkxBRyBfSU9SKE5JT0NUTF9NQUdJQywxOCxpb2N0bF9kYXRhKQojZGVmaW5lIE5JT0NHS1BBUkFNIF9JT1IoTklPQ1RMX01BR0lDLDE5LGlvY3RsX2RhdGEpCgoKCiNkZWZpbmUgTklPQ0dTTEFCIF9JT1IoTklPQ1RMX01BR0lDLDIxLGlvY3RsX2RhdGEpCgovKmFkZCBieSBqaWFuZ2ppbmcsu/HIoWluaXRfbmV01tDL+dPQzfjC58nosbi1xMP7s8a6zde0zKzQxc+iKi8KI2RlZmluZSBOSU9DR0RFVkxJU1QgIF9JT1IoTklPQ1RMX01BR0lDLCAyMiwgaW9jdGxfZGF0YSkKCi8qYWRkIGJ5IHpoYW5ncGVpbWluo6y78cihU0tCIEZBU1S1scewzbO8xtDFz6IqLwojZGVmaW5lIE5JT0NHU0tCRkFTVCBfSU9SKE5JT0NUTF9NQUdJQywgMjQsIGlvY3RsX2RhdGEpCgojZGVmaW5lIE5JT0NHTUFYTVNHICBfSU9SKE5JT0NUTF9NQUdJQywgMjUsIGlvY3RsX2RhdGEpCgojZGVmaW5lIE5JT0NHUFRZUEUgIF9JT1IoTklPQ1RMX01BR0lDLCAyNiwgaW9jdGxfZGF0YSkKCiNkZWZpbmUgTklPQ0dQU0lORk8gIF9JT1IoTklPQ1RMX01BR0lDLCAyNywgaW9jdGxfZGF0YSkKCiNkZWZpbmUgTklPQ0dIQVNIICAgX0lPUihOSU9DVExfTUFHSUMsIDI4LCBpb2N0bF9kYXRhKQoKLyq78cihtbHHsFRDULaqsPzNs7zG0MXPoiovCiNkZWZpbmUgTklPQ0dQS1RMT1NUIF9JT1IoTklPQ1RMX01BR0lDLCAyOSwgaW9jdGxfZGF0YSkKCi8qu/HIobG+tdhUQ1DM173T19bNs7zG0MXPoiovCiNkZWZpbmUgTklPQ0dUQ1BTT0NLU1RBVFMgX0lPUihOSU9DVExfTUFHSUMsIDMwLCBpb2N0bF9kYXRhKQoKI2RlZmluZSBOSU9DVExfTUFYX01TR0xFTiAxMjggICAgLy/X1rf7tK7A4NDNss7K/da1tcTX7rTzs6S2yAojZGVmaW5lIE5JT0NUTF9NQVhfTkFNRUxFTiAyMCAgICAvL7LOyv3D+7PGtcTX7rTzs6S2yAovKgogICAgzajTw2lvY3RstcSyzsr9wODQzaOstbGyzsr91rXOqtfWt/u0rsqxo6zKudPDYnVmseTBv9PrxNq6y727u6WjuwogICAgtbGyzsr91rXOqtX70M3KsaOsyrnTw3ZhbHVlseTBv9PrxNq6y727u6UKCiovCnR5cGVkZWYgc3RydWN0IHsKCXVuc2lnbmVkIGludCBzaXplOyAgICAgICAgICAgICAgICAgICAgIC8v19a3+7SuwODQzbLOyv21xLOktsijrLbU09rV+9DNss7K/aOsuMPWtb2o0um4s9a1zqowCgljaGFyIG5hbWVbTklPQ1RMX01BWF9OQU1FTEVOXTsgICAgICAgICAvL7LOyv3D+7PGo6zA/cjnZmFzdG5hdKGiZmFzdGJyoaJsZWFrCgl1bnNpZ25lZCBjaGFyIGJ1ZltOSU9DVExfTUFYX01TR0xFTl07ICAvL9fWt/u0rsDg0M2yzsr91rWjrMD9yOdvbi9vZmYKCXZvaWQgKmRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v19S2qNLlveG5uczlCglpbnQgdmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL9X70M2yzsr91rWjrMD9yOcwLzEvMi8zCgp9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpICBpb2N0bF9kYXRhOwoKCgplbnVtIGRldl9vcHRfc3RhdGUgewoJREVWX1VOT1BUID0gMCwgIC8vyPTTw7unzrTX9sjOus6y2df3o6yz9cq81rXOqjAKCURFVl9OT1BSRVNFTlQsICAvL7bU06YhbmV0aWZfZGV2aWNlX3ByZXNlbnTS7LOjo6yx7cP3x/22r7XXsuPJ0M6017yxuLrDCglERVZfT1BFTkVELCAgICAgLy9kZXYgaXMgb3BlbmVkCglERVZfT1BFTl9GQUlMLCAgICAgIC8vb3BlbiAgZmFpbAoJREVWX0NMT1NFRCwgICAgICAJLy9kZXYgaXMgY2xvc2VkCn07CgoKLy/N+MLnzO2806OszbO8xs34wuey48PmytW3orD8x+m/9gpzdHJ1Y3QgbmV0X2Rldl9za2JpbmZvIHsKCXVuc2lnbmVkIGxvbmcJcnhfcGFja2V0czsgIC8vx/22r7eiy83AtLXEyv2+3bD8uPbK/aOs1NpuZXRpZl9yeM23wNu80woJdW5zaWduZWQgbG9uZwl0eF9wYWNrZXRzOyAgLy+3osvNuPjH/bavtcTK/b7dsPy49sr9o6zU2mRldl9xdWV1ZV94bWl0zbfA27zTCgl1bnNpZ25lZCBsb25nCXJ4X2J5dGVzOyAgICAgLy/X1r3ayv0KCXVuc2lnbmVkIGxvbmcJdHhfYnl0ZXM7ICAgICAvL9fWvdrK/QoJdW5zaWduZWQgbG9uZwlyeF9kcm9wcGVkOyAvL25ldGlmX3J4xNqyv8H3s8zW0Mv509DS7LOjys23xXNrYrXEwNu806OsyOe077W9bmV0ZGV2X21heF9iYWNrbG9nyOu208HQyc/P3rb4tqqw/AoJdW5zaWduZWQgbG9uZwl0eF9kcm9wcGVkOyAvL2Rldl9xdWV1ZV94bWl0xNqyv8H3s8zW0Mv509DS7LOjys23xXNrYrXEwNu806OsyOcodHhxLT54bWl0X2xvY2tfb3duZXIgPT0gY3B1KdTss8m1xLaqsPwKfTsKCi8qILjDveG5uczl1tC1xMv509DQxc+ivdTTycf9tq+4s9a1o6zN+MLn1+myu7vhuLPWtSAqLwovL9XiuPa94bm5zOWx2NDrus0gPGxpbnV4L25ldGRldmljZS5oPtbQtcRuZXRfZGV2aWNlX3N0YXRzsaOz1tK71sIKc3RydWN0IG5ldF9kZXZfc3RhdHMgewoJdW5zaWduZWQgbG9uZyAgICByeF9wYWNrZXRzOwoJdW5zaWduZWQgbG9uZyAgICB0eF9wYWNrZXRzOwoJdW5zaWduZWQgbG9uZyAgICByeF9ieXRlczsKCXVuc2lnbmVkIGxvbmcgICAgdHhfYnl0ZXM7Cgl1bnNpZ25lZCBsb25nICAgIHJ4X2Vycm9yczsgICAvL9DovOC/2AoJdW5zaWduZWQgbG9uZyAgICB0eF9lcnJvcnM7ICAgLy/Q6Lzgv9gKCXVuc2lnbmVkIGxvbmcgICAgcnhfZHJvcHBlZDsgICAvL9DovOC/2AoJdW5zaWduZWQgbG9uZyAgICB0eF9kcm9wcGVkOyAgIC8v0Oi84L/YCgl1bnNpZ25lZCBsb25nICAgIG11bHRpY2FzdDsKCXVuc2lnbmVkIGxvbmcgICAgY29sbGlzaW9uczsKCXVuc2lnbmVkIGxvbmcgICAgcnhfbGVuZ3RoX2Vycm9yczsgICAvL9DovOC/2AoJdW5zaWduZWQgbG9uZyAgICByeF9vdmVyX2Vycm9yczsgICAvL9DovOC/2AoJdW5zaWduZWQgbG9uZyAgICByeF9jcmNfZXJyb3JzOyAgIC8v0Oi84L/YCgl1bnNpZ25lZCBsb25nICAgIHJ4X2ZyYW1lX2Vycm9yczsgICAvL9DovOC/2AoJdW5zaWduZWQgbG9uZyAgICByeF9maWZvX2Vycm9yczsgICAvL9DovOC/2AoJdW5zaWduZWQgbG9uZyAgICByeF9taXNzZWRfZXJyb3JzOyAgIC8v0Oi84L/YCgl1bnNpZ25lZCBsb25nICAgIHR4X2Fib3J0ZWRfZXJyb3JzOyAgIC8v0Oi84L/YCgl1bnNpZ25lZCBsb25nICAgIHR4X2NhcnJpZXJfZXJyb3JzOyAgIC8v0Oi84L/YCgl1bnNpZ25lZCBsb25nICAgIHR4X2ZpZm9fZXJyb3JzOyAgIC8v0Oi84L/YCgl1bnNpZ25lZCBsb25nICAgIHR4X2hlYXJ0YmVhdF9lcnJvcnM7ICAgLy/Q6Lzgv9gKCXVuc2lnbmVkIGxvbmcgICAgdHhfd2luZG93X2Vycm9yczsgICAvL9DovOC/2AoJdW5zaWduZWQgbG9uZyAgICByeF9jb21wcmVzc2VkOwoJdW5zaWduZWQgbG9uZyAgICB0eF9jb21wcmVzc2VkOwp9OwplbnVtIG5ldGRldl9xdWV1ZV9zdGF0ZSB7CglfX1FVRVVFX1NUQVRFX0RSVl9YT0ZGLAoJX19RVUVVRV9TVEFURV9TVEFDS19YT0ZGLAoJX19RVUVVRV9TVEFURV9GUk9aRU4sCn07CgpzdHJ1Y3QgZGV2X2lvY3RsX2luZm8gewoJY2hhciBkZXZfbmFtZVsyMF07CglzdHJ1Y3QgbmV0X2Rldl9za2JpbmZvICBzdGF0c19kYmc7ICAvL834wufM7bzTtcSjrM2zvMbN+MLnsuPD5srVt6Kw/Mfpv/YKCXN0cnVjdCBuZXRfZGV2X3N0YXRzICBza2Jfc3RhdHVzOyAgICAgLy/K/b7dytW3os2zvMbWtaOsuMPWtcirsr/Tycf9tq+4s9a1tcSjrM34wueyu7iz1rUKCXVuc2lnbmVkIGludCAgICAgICAgZmxhZ3M7ICAgICAgICAgICAvL0lGRl9VULXICgl1bnNpZ25lZCBjaGFyICAgICAgIG9wZXJzdGF0ZTsgICAgLy/Ev8eww7vJttPDCgl1bnNpZ25lZCBsb25nICAgICAgIHN0YXRlOyAgICAgICAgICAgLy+117Ljx/22r9e0zKyjrF9fTElOS19TVEFURV9OT0NBUlJJRVIKCWludCAgICAgICAgICAgICAgICAgbmV0X2ZsYWc7ICAgICAgICAvL9PDu6dpZmNvbmZpZ7XEveG5+9e0zKyjrMjnREVWX09QRU5fRkFJTAoJdW5zaWduZWQgbG9uZyAgICAgICBxdWVfc3RhdGU7ICAgICAgIC8vttPB0Ne0zKyjrLbU06YgZGV2LT5fdHhbMF0uc3RhdGWjrMjnX19RVUVVRV9TVEFURV9EUlZfWE9GRgoJdW5zaWduZWQgaW50ICAgICAgICBudW1fdHhfcXVldWVzOyAgIC8vVFi208HQyv3Bv6OstuDK/cf9tq/KudPDzqjSu7bTwdCjrNTy1rXOqjEKfTsKCi8v0+vE2rrLc2tiX3VzaW5nX21zZyC94bm5zOXSu9bCCnN0cnVjdCBza2JfaW9jdGxfaW5mbyB7Cgl1bnNpZ25lZCBsb25nIHNrYl9hbGw7Cgl1bnNpZ25lZCBsb25nIHNrYl90b2NwOwoJdW5zaWduZWQgbG9uZyBza2JfZnJvbWNwOwoJdW5zaWduZWQgbG9uZyBza2JfZGF0YV9udW07Cgl1bnNpZ25lZCBsb25nIHNrYl9kYXRhX3NpemU7Cgl1bnNpZ25lZCBsb25nIHNrYl9zdG9wOwoJdW5zaWduZWQgbG9uZyBza2JfbG9jazsKCgl1bnNpZ25lZCBsb25nIHNrYl9wYW5pYzsKCXVuc2lnbmVkIGxvbmcgc2tiX2ZhaWw7Cn07CgpzdHJ1Y3Qgc2tiX2Zhc3RfaW9jdGxfaW5mbyB7CglpbnQgIHNrYl9udW00OyAgICAgICAgICAgICAgIC8vvdPK1bW9tcRWNMr9vt2w/AoJaW50ICBza2JfbnVtNjsgICAgICAgICAgICAgICAvL73TytW1vbXEVjbK/b7dsPwKCWludCAgc2tiX2JpZ19udW07ICAgICAgICAgICAgLy9sZW6zpLbIs6y5/TEwMDC1xMr9vt2w/KOsuqxWNLrNVjYKCWludCAgc2tiX3NtYWxsX251bTsgICAgICAgICAgLy9sZW6zpLbI0KHT2jEwMLXEyv2+3bD8o6y6rFY0us1WNgoJaW50ICBza2JfYnl0ZXM0OyAgICAgICAgICAgICAvL73TytW1vbXEVjTK/b7dsPzX1r3ayv0KCWludCAgc2tiX2J5dGVzNjsgICAgICAgICAgICAgLy+908rVtb21xFY2yv2+3bD819a92sr9CglpbnQgIHNrYl91bmtub3duOyAgICAgICAgICAgIC8vvdPK1bW9tcTOtNaq0K3S6cr9vt2w/KOssPzAqEFSULXIt8dWNLrNVja1xLGozsQKCWludCAgc2tiX3RjcG51bTsgICAgICAgICAgICAgLy+908rVtb21xHRjcMr9vt2w/KOsuqxWNLrNVjajrLWrsru6rGZhc3RicrXEsajOxAoJaW50ICBza2JfdWRwbnVtOyAgICAgICAgICAgICAvL73TytW1vbXEdWRwyv2+3bD8o6y6rFY0us1WNqOstauyu7qsZmFzdGJytcSxqM7ECglpbnQgIGJyb2FkY2FzdF9udW00OyAgICAgICAgIC8vvdPK1bW9tcRWNLnjsqWw/AoJaW50ICBicm9hZGNhc3RfbnVtNjsgICAgICAgICAvL73TytW1vbXEVja547KlsPwKCWludCAgbXVsdGljYXN0X251bTQ7ICAgICAgICAgLy+908rVtb21xFY01+mypbGoCglpbnQgIG11bHRpY2FzdF9udW02OyAgICAgICAgIC8vvdPK1bW9tcRWNtfpsqWxqAoJaW50ICBmYXN0bmF0X251bTsgICAgICAgICAgICAvL2Zhc3RuYXSzybmmtcSxqM7ECglpbnQgIGZhc3Q2X251bTsgICAgICAgICAgICAgIC8vZmFzdDazybmmtcSxqM7ECglpbnQgIGZhc3Ricl9udW07ICAgICAgICAgICAgIC8vZmFzdGJys8m5prXEsajOxAoJaW50ICBmYXN0bmF0X2xldmVsOyAgICAgICAgICAvL7LOv7RGQVNUX05FVF9ERVZJQ0UKCWludCAgZmFzdGJyX2xldmVsOyAgICAgICAgICAgLy+yvLb7wODQzQoJLy/PwsPmvLi49ta1zqrA27zT1rWjrNDUxNzP4LnYCglpbnQgIGlycWZyZWVfbnVtOyAgICAgICAgICAgIC8vzai5/cjt1tC2z8rNt8W1xHNrYqOs0NTE3M/gudgKCWludCAgc2tiY29weV9udW07ICAgICAgICAgICAgLy/K/b7dv72xtLXEc2tio6zQ1MTcz+C52AoJaW50ICBjYWNoZV9jb3B5OyAgICAgICAgICAgICAvL25ldF9jYWNoZdS0zsS8/r340NC/vbG0tcTA27v9vMbK/aOs0NTE3M/gudgKCWludCAgc2tiZmxvb2RfbnVtOyAgICAgICAgICAgLy+3urrptcRza2KjrNDUxNzP4LnYCglpbnQgIGVycmZyZWVfbnVtOyAgICAgICAgICAgIC8vZGV21LTOxLz+1tC07c7zys23xbXEc2tivMbK/aOssPzAqFNLQl9RVUVVRV9TVE9Qus1TS0JfUVVFVUVfTE9DS8G9uPa8xsr91rUKCWludCAgZnJhZ19udW07ICAgICAgICAgICAgICAgLy+908rVtb21xLfWxqyxqM7Eo6zQ1MTcz+C52AoJaW50ICBtdHVfbnVtOyAgICAgICAgICAgICAgICAvL2Zhc3TW0Mr9vt2zpLbItPPT2rP2v9pkZXYgTVRVyrGjrGZhc3TKp7DcuPbK/c2zvMYKCWludCAgZmFzdF9sb29wOyAgICAgICAgICAgICAgLy/NtrXduPjH/bavo6zT1rTTx/22r8rVtb21xNLss6O72Lu3uPbK/c2zvMYKCWludCAgc2tiX2FsbG9jX2ZhaWwgOyAgICAgICAgLy/J6sfrc2tiyqew3LXEuPbK/cDbvNPWtQoJaW50ICB4bWl0X2xvY2tfbnVtOyAgICAgICAgICAvL3htaXRfbG9ja19vd25lcrG7y/jXodTss8m1xLaqsPy1xMDbvNO8xsr9o6zH/bav1OyzybXECglpbnQgIHhtaXRfc3RvcF9udW07ICAgICAgICAgIC8vIW5ldGlmX3htaXRfc3RvcHBlZCh0eHEp1OyzybXEtqqw/LXEwNu807zGyv2jrMf9tq/U7LPJtcQKCWludCAgYnJfbWFjX2NoYW5nZV9udW07ICAgICAgLy/N+MfFbWFjtdjWt7G7uMSx5LTOyv0KCWludCAgZmFzdF90Y3BkdW1wX251bTsgICAgICAgLy9mYXN016Ww/Mr9CglpbnQgIGZhc3Rfc3dpdGNoOyAgICAgICAgICAgIC8vZmFzdNfTuabE3M67zby/qrnYCglpbnQgIGZhc3RfbG9jYWw0X3Jjdl9udW07ICAgIC8vsb612GZhc3RfbG9jYWw0s8m5pr3TytWxqM7ECglpbnQgIGZhc3RfbG9jYWw2X3Jjdl9udW07ICAgIC8vsb612GZhc3RfbG9jYWw2s8m5pr3TytWxqM7ECglpbnQgIGZhc3RfbG9jYWw0X291dHB1dF9udW07IC8vsb612GZhc3RfbG9jYWw0s8m5preiy82xqM7ECglpbnQgIGZhc3RfbG9jYWw2X291dHB1dF9udW07IC8vsb612GZhc3RfbG9jYWw2s8m5preiy82xqM7ECn07CgojZGVmaW5lIFNMQUJfTlVNICAyMQplbnVtIHNsYWJpbmZvX2ZpbGUgewoJU0tCX1NMQUIgPSAwLAoJQlJGREJfU0xBQiwKCURTVF9TTEFCLAoJRklCX1RSSUVfU0xBQiwKCUZMT1dfU0xBQiwKCUlORVRQRUVSX1NMQUIsCglJTkVUX0hBU0hUQUJMRVNfU0xBQiwKCUlORVRfVElNRVdBSVRfU09DS19TTEFCLAoJTVlTT0NLRVRfU0xBQiwKCU5GX0NPTk5UUkFDS19DT1JFX1NMQUIsCglORl9DT05OVFJBQ0tfRVhDRVBUX1NMQUIsCglSRVFVRVNUX1NPQ0tfU0xBQiwKCVNPQ0tfU0xBQiwKCVNPQ0tFVF9TTEFCLAoJWEZSTTZfVFVOTkVMX1NMQUIsCglYVF9IQVNITElNSVRfU0xBQiwKCVNPQ0tfQUxMT0NfUEFHRVMsCglJUDZfT1VUUFVUX0FMTE9DX1BBR0VTLAoJSVBfT1VUUFVUX0FMTE9DX1BBR0VTLAoJU0tCX0FMTE9DX1BBR0VTLAp9OwoKc3RydWN0IHNsYWJfaW5mbyB7CglpbnQgbnVtW1NMQUJfTlVNXVsyXTsKfTsKCiNkZWZpbmUgSEFTSF9BUlJBWV9DT1VOVCA1MTIKc3RydWN0IGhhc2hfaW5mbyB7CglpbnQgbWF4X2hhc2hfc2l6ZTsKCWludCBjdXJyZW50X2hhc2hfbnVtOwoJaW50IGhhc2hbSEFTSF9BUlJBWV9DT1VOVF1bMl07CglpbnQgY3VycmVudF9hcnJheV9zaXplOwp9OwoKc3RydWN0IG5laWdoX2luZm8gewoJdW5zaWduZWQgaW50IGlwX2xlbjsgICAgICAgICAgLy9JULXY1rezpLbIo6zH+LfWVjS6zVY2Cgl1bnNpZ25lZCBjaGFyIGlwX2FkZHJbSVBWNEFERExFTl9NQVhdOwoJdW5zaWduZWQgY2hhciBtYWNfYWRkcltNQVhfTUFDQUREUl9MRU5dOwp9OwoKI2RlZmluZSBNQVhfTkVJR0hfTlVNICAgICAgICAgICAyMApzdHJ1Y3QgZGV2X25laWdoX2luZm8gewoJdW5zaWduZWQgaW50IG51bTsKCXN0cnVjdCBuZWlnaF9pbmZvIG5laWdoX25vZFtNQVhfTkVJR0hfTlVNXTsKfTsKCmVudW0gZGV2X2xheWVyIHsKCUwzX0RFViA9IDAsICAvL7LjM8nosbgKCUJSX0RFViwgIC8vzfjHxbXETDPM2MriyeixuAoJTDJfREVWLCAgICAgLy9MMrLjyeixuAp9OwoKZW51bSB7CglMT0NBTF9MM0RFViA9IDAsCglMT0NBTF9CUl9QT1JULAoJTkVJR0hfQU5EX0RTVERFViwKCURFVl9TVEFUSVNUSUMsCn07CgplbnVtIElGTUFDX0VSUiB7CglaRVJPX0FERFJFUlIgPSAxLAoJTVVMVElDQVNUX0FERFJFUlIsCglCUk9BRENBU1RfQUREUkVSUiwKfTsKCi8qYWRkIGJ5IGppYW5namluZyovCnN0cnVjdCBkZXZfYW5kX25laWdoIHsKCWNoYXIgbmFtZVsyMF07Cgl1bnNpZ25lZCBjaGFyICBkZXZfbGF5ZXI7ICAgLy/WuMq+uMOxvrXYzfi/2rXE0K3S6bLjo6yyzrz7uurWtUwzX0RFVgoJLypNQUO12Na3LElQdjS12Na3Ki8KCXVuc2lnbmVkIGNoYXIJCW1hY19hZGRyWzIwXTsgIC8vsb612M34v9q12Na3Cgl1bnNpZ25lZCBpbnQJCWlwdjRfYWRkcjsgICAgICAgIC8vsb612M34v9pJULXY1rcKCXN0cnVjdCBkZXZfbmVpZ2hfaW5mbyAgZGV2X25laWdoOyAgLy+4w7G+tdjN+L/a0K+0+LXE1LazzMHavtO12Na30MXPosr91+kKCWludCBtYWNfZXJydHlwZTsKfTsKI2RlZmluZSBNQVhfREVWX05VTSAgIDMwCi8qzfi/2s/gudi1xNDFz6IqLwpzdHJ1Y3QgZGV2bGlzdF9pb2N0bF9pbmZvIHsKCXVuc2lnbmVkIGludCBudW07ICAgICAgICAvL7G+tdjT0NCnzfi/2rXEuPbK/QoJc3RydWN0IGRldl9hbmRfbmVpZ2ggaW5mb1tNQVhfREVWX05VTV07ICAvL7G+tdjT0NCnzfi/2rXEvt/M5dDFz6Kyzsr9Cn07CgovKioqKtfK1LTKudPDvLDJz8/e0MXPoqOsy/nT0LHq17zE2rrL09DJz8/ex+m/9rXEo6y91NDovOyy4qOs0tS3wNa50uyzo7eiyfoqKioqLwpzdHJ1Y3QgbmV0X21heF9jaGVja19tc2cgewoJLypuZl9jb25udHJhY2sqLwoJdW5zaWduZWQgbG9uZyBuZl9jb25udHJhY2tfbWF4OyAgICAgICAgLy9uZl9jb25udHJhY2tfbWF4ID0gNDgzMgoJdW5zaWduZWQgbG9uZyBuZl9jb25udHJhY2tfbm93OyAgICAgICAgLy9uZXQtPmN0LmNvdW50CgkvKmVucXVldWUqLwoJaW50ICAgICAgICAgIG5ldGRldl9tYXhfYmFja2xvZzsgICAgICAgLy9uZXRkZXZfbWF4X2JhY2tsb2c9MTAwMAoJaW50ICAgICAgICAgIGlucHV0X3F1ZXVlX2xlbjsgICAgICAgICAgLy+yzr+0ZW5xdWV1ZV90b19iYWNrbG9nvdO/2sq1z9YKCWludCAgICAgICAgICByeF9kcm9wcGVkOyAgICAgICAgICAgICAgICAgLy/S8s6qyOu208HQ0tHC+tTss8m1xMjrttPB0LaqsPy1xMDbvNPWtQoJLyrQ1MTcz+C52CovCglpbnQgICAgICAgICAgZmFzdG5hdF9saW5rX21heDsgICAgICAgICAvL25mX2Nvbm50cmFja19tYXgKCWludCAgICAgICAgICBmYXN0bmF0X2xpbmtfbm93OyAgICAgICAgIC8vd29ya2luZ19saXN0LmNvdW50CglpbnQgICAgICAgICAgZmFzdDZfbGlua19tYXg7ICAgICAgICAgICAvL25mX2Nvbm50cmFja19tYXgKCWludCAgICAgICAgICBmYXN0Nl9saW5rX25vdzsgICAgICAgICAgIC8vd29ya2luZ19saXN0Ni5jb3VudAoJLyrN+MLnxNq6y9TL0NDKsbXEzbO8xta1o6zW2LXjudjXor3hubnM5bXEyerH67XjKi8KCXVuc2lnbmVkIGxvbmcgYnJfbWFjX2NoYW5nZTsJCSAgLy/N+MfFbWFjtdjWt7G7uMSx5LTOyv0KCXVuc2lnbmVkIGxvbmcgbmVpZ2hfYWxsb2M7CQkJCSAgIC8vbmVpZ2hib3VyyerH67TOyv0KCXVuc2lnbmVkIGxvbmcgbmVpZ2hfZnJlZTsJCQkJCSAgLy9uZWlnaGJvdXLKzbfFtePA27zT1rUKCXVuc2lnbmVkIGxvbmcgYnJfbmVpZ2hfdmFyeTsJCQkJLy/HxbXjtcSz9r/aZGV2tcRtYWO12Na3sbu24Lj2cGO5ss/tCgl1bnNpZ25lZCBsb25nIGNvbm5fYWxsb2M7CQkJCQkvL2Nvbm7J6sfrtM7K/cDbvNPWtQoJdW5zaWduZWQgbG9uZyBjb25uX2ZyZWU7CQkJCQkJICAvL2Nvbm7KzbfFtePA27zT1rUKCXVuc2lnbmVkIGxvbmcgYnJmZGJfYWxsb2M7IAkJCQkgICAvL8fFtePJ6sfrtM7K/cDbvNPWtQoJdW5zaWduZWQgbG9uZyBkc3RfYWxsb2M7CQkJCQkJICAvL2RzdF9lbnRyecnqx+vA27zT1rUKCXVuc2lnbmVkIGxvbmcgZHN0X2ZyZWU7CQkJCQkJCS8vZHN0X2VudHJ5ys23xbXjwNu809a1Cgl1bnNpZ25lZCBsb25nIGhoX3VwZGF0ZTsJCQkJCQkgIC8vaGi2/rLjbWFjzbe4/NDCwNu809a1Cgl1bnNpZ25lZCBsb25nIHJ0X2NhY2hlX2ludmFsaWQ7ICAgICAgICAgCQkJICAgICAgLy/H5b/VwrfTyWNhY2hltcTA27zT1rUKCXVuc2lnbmVkIGxvbmcgcnRfaGFzaF9hZGQ7IAkJCQkJICAgLy/QwtT2cnRfaGFzaF90YWJsZb3ateO1xMDbvNPWtQoJdW5zaWduZWQgbG9uZyBydF9oYXNoX2RlbDsgCQkJCQkgICAvL8m+s/1ydF9oYXNoX3RhYmxlvdq147XEwNu809a1Cgl1bnNpZ25lZCBsb25nIHNzbWFjX2NoYW5nZV9pbmRldjsJICAgCS8vzazSu9S0TUFDtdjWt8jrv9pkZXa4xLHktcS0zsr9Cn07CgpzdHJ1Y3QgcHR5cGVfaW5mbyB7Cgl1bnNpZ25lZCBsb25nIHB0eXBlX2FsbFs1XTsKCXVuc2lnbmVkIGxvbmcgcHR5cGVfYmFzZVsxNV07Cn07CgoKc3RydWN0IHBrdF9sb3N0X3N0YXRzIHsKCXVuc2lnbmVkIGludCBzZW5kX2Ryb3BzOwoJdW5zaWduZWQgaW50IHNlbmRfZHJvcF9ieXRlczsKCXVuc2lnbmVkIGludCByZWN2X2Ryb3BzOwoJdW5zaWduZWQgaW50IHJlY3ZfZHJvcF9ieXRlczsKCXVuc2lnbmVkIGludCB0b3RhbF9wYWNrZXRzOwoJdW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOwp9OwoKc3RydWN0IHBrdF9sb3N0X2luZm8gewoJc3RydWN0IHBrdF9sb3N0X3N0YXRzIHN0YXRzWzJdOyAgLyowOm9yaWdpbre9z/KjrDE6cmVwbHm3vc/yKi8KfTsKCgpzdHJ1Y3QgdGNwX3NvY2tfc3RhdCB7Cgl1bnNpZ25lZCBsb25nIHRjcF9yZWN2X251bTsKCXVuc2lnbmVkIGxvbmcgdGNwX3NlbmRfbnVtOwoJdW5zaWduZWQgbG9uZyB0Y3BfcmV0cmFuc19udW07Cgl1bnNpZ25lZCBsb25nIHRjcF9yZWN2X2Ryb3BzOwoJdW5zaWduZWQgbG9uZyB0Y3Bfc2VuZF9kcm9wczsKCXVuc2lnbmVkIGxvbmcgdGNwX3JzdF9zZW5kOwoJdW5zaWduZWQgbG9uZyB0Y3BfcnN0X3JlY3Y7Cn07CgoKLy+907/ayfnD9wpleHRlcm4gaW50IG5ldGlvY3RsX2hhbmRsZShpbnQgY21kLCB2b2lkICp2YWwpOwoKI2VuZGlmIC8vZW5kIF9aWElDX0lPQ1RMX0hfCgo=