LyoqCiAqIEBmaWxlIHB1Yl9mbGFncy5oCiAqIEBicmllZiBmbGFnc7fWx/jX1rbOCiAqCiAqIENvcHlyaWdodCAoQykgMjAyMyBTYW5lY2hpcHMgVGVjaG5vbG9neSBDby4sIEx0ZC4KICogQGF1dGhvciAKICogQGluZ3JvdXAgCiAqIAogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4go6ix2NGho7pHUEx2MiBMaWNlbmNlo6kKICoKICovCgoKI2lmbmRlZiBfUFVCX0ZMQUdTX0gKI2RlZmluZSBfUFVCX0ZMQUdTX0gKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGUgaGVhZGVyIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNybyBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKgogKiBAYnJpZWYg1NpmbGFnc7fWx/jA78ar0sa12Na3CiAqLwojZGVmaW5lCUZMQUdTX01BR0lDICgweDQ2NEM0MTQ3VUwpCgojZGVmaW5lCURVQUxTWVNURU1fU1RBVFVTX0JPT1RBQkxFCQkoMHhCMEFCKQkvKiC/ycb0tq8gKi8KI2RlZmluZQlEVUFMU1lTVEVNX1NUQVRVU19TVUNDRVNTRlVMCSgweDVDQ0YpCS8qIMTcs8m5psb0tq8gKi8KI2RlZmluZQlEVUFMU1lTVEVNX1NUQVRVU19VTkJPT1RBQkxFCSgweEJBQkUpCS8qILK7v8nG9LavICovCgojZGVmaW5lIE9UQV9QQVJUSVRJT05fTlVNX01BWCAxNQoKI2RlZmluZSBJTUdfTkFNRV9MRU4gMTYKI2RlZmluZSBJTUdfTlVNX01BWCAxNQoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlIGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnR5cGVkZWYgc3RydWN0CnsKICAgIGludCBzdGF0dXM7ICAgICAvKiBib290YWJsZS9zdWNjZXNzZnVsL3VuYm9vdGFibGUgKi8KICAgIGludCB0cnlfY250Owp9IFRfRHVhbFN5c3RlbV9TdGF0dXM7Cgp0eXBlZGVmIGVudW0KewogICAgRFVBTF9TWVNURU0gID0gMHg4NzVBLCAgIC8qILXa0ru49s+1zbMgKi8KICAgIERVQUxfU1lTVEVNMiA9IDB4OTg2QiwgICAvKiC12rb+uPbPtc2zICovCn0gVF9CT09UX1RBUkdFVDsKCiNkZWZpbmUgTlZST19JTklUICAgICAgICAoMCkgICAgICAgLyogaW5pdGlhbCBzdGF0ZSAqLwojZGVmaW5lIE5WUk9fQkFDS0VEX1VQICAgKDB4QkFDRSkgIC8qIG52cm8gYmFja2VkIHVwIGFscmVhZHkgKi8KI2RlZmluZSBOVlJPX0JBQ0tJTkdfVVAgICgweEJBQzEpICAvKiBudnJvIGJhY2sgdXAgbmV4dCBib290ICovCiNkZWZpbmUgTlZST19SRVNUT1JJTkcgICAoMHgyRTIwKSAgLyogbnZybyByZXN0b3JpbmcgICovCiNkZWZpbmUgTlZST19JTlZBTElEICAgICAoMHhERUFEKSAgLyogbnZybyBpbnZhbGlkICovCgovKiDLq8+1zbPA4NDNICovCnR5cGVkZWYgZW51bQp7CiAgICBEVUFMU1lTVEVNX1JFQ09WRVJZID0gMHg3NTc1LCAgICAgICAgICAvKiBub3JtYWwtcmVjb3ZlcnnLq8+1zbMgKi8KICAgIERVQUxTWVNURU1fQUEgICAgICAgPSAweEFBQUEsICAgICAgICAgIC8qIEFBy6vPtc2zICovCiAgICBEVUFMU1lTVEVNX0FCICAgICAgID0gMHhBQkFCICAgICAgICAgICAvKiBBQsurz7XNsyAqLwp9IFRfQk9PVF9EVUFMU1lTVEVNX1RZUEU7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICBUX0JPT1RfVEFSR0VUCQkJYm9vdF90bzsgICAgICAgIC8qILWxx7DG9Lavz7XNs7Hq1r4qLwogICAgdW5zaWduZWQgaW50CQkJZm90YV9zdGF0dXM7ICAgIC8qIGZvdGHXtMysICovCiAgICBUX0R1YWxTeXN0ZW1fU3RhdHVzCQlzeXN0ZW07ICAgICAgICAgLyogtdrSu7j2z7XNs9e0zKwgKi8KICAgIFRfRHVhbFN5c3RlbV9TdGF0dXMJCXN5c3RlbTI7ICAgICAgICAvKiC12rb+uPbPtc2z17TMrCAqLwp9IFRfQk9PVF9GT1RBX0ZMQUc7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICBUX0JPT1RfRFVBTFNZU1RFTV9UWVBFIGR1YWxzeXNfdHlwZTsgIC8qIMurz7XNs8Dg0M0gKi8KICAgIGNoYXIgc3lzdGVtX2Jvb3RfZW52WzEyOF07CiAgICBjaGFyIHN5c3RlbTJfYm9vdF9lbnZbMTI4XTsKfSBUX0JPT1RfRU5WOwoKdHlwZWRlZiBzdHJ1Y3QKewoJaW50ICBmc19zdGF0dXM7ICAvKiDOxLz+z7XNs9Lss6Ox6sq2ICovCgljaGFyIGZzX210ZF9uYW1lWzE2XTsKCWNoYXIgZnNfdWJpX3ZvbF9uYW1lWzE2XTsKfSBUX1VCSUZTX1NUQVRVUzsKCnR5cGVkZWYgc3RydWN0CnsKICAgIGludCBtdGRudW07CiAgICB1bnNpZ25lZCBpbnQgbGVuOwp9IFRfQUFfUEFSVElUSU9OX0lORk87Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICBjaGFyICAgICAgICAgbmFtZVtJTUdfTkFNRV9MRU5dOwogICAgdW5zaWduZWQgaW50IHNpemVfYTsKICAgIHVuc2lnbmVkIGludCBzaXplX2I7Cn0gVF9JTUdfU0laRTsKCnR5cGVkZWYgc3RydWN0CnsKCXVuc2lnbmVkIGludCBtYWdpY19zdGFydDsgIC8qIMr9vt3T0NCn0NTEp8r119YgKi8KCQogICAgVF9CT09UX0ZPVEFfRkxBRyAJYm9vdF9mb3RhX2ZsYWc7CiAgICBUX0JPT1RfRU5WIAkJCWJvb3RfZW52OwoJVF9VQklGU19TVEFUVVMJCXViaWZzX3N0YXR1czsKCXVuc2lnbmVkIGludCAgICAgICAgbnZyb19mbGFnOwoJdW5zaWduZWQgaW50CQljcmMzMjsKCVRfQk9PVF9UQVJHRVQJCW90YV9zeXN0ZW07IC8qIMn9vLbKscrHz7XNs0G7ucrHz7XNs0IgKi8KCVRfQUFfUEFSVElUSU9OX0lORk8gb3RhX3BhcnRpdG9uX2luZm9bT1RBX1BBUlRJVElPTl9OVU1fTUFYXTsgLyogyN3EydfutuAxNbj2yf28trfWx/i1xGltYWdlvrXP8bTz0KEgKi8KCXVuc2lnbmVkIGludAlwb3dlcm9uX3RpbWU7CgljaGFyIHJlc2VydmVbNDhdOwoJdW5zaWduZWQgaW50IG1hZ2ljX2VuZDsgIC8qIMr9vt3T0NCn0NTEp8r119YgKi8KCVRfSU1HX1NJWkUgaW1nX3NpemVbSU1HX05VTV9NQVhdOyAgIC8qILGjtObPtc2zvrXP8c7EvP6089ChICovCglUX0JPT1RfVEFSR0VUIHN5bmNfc3lzdGVtOyAvKiDNrLK9yrHKx8+1zbNBu7nKx8+1zbNCICovCgl1bnNpZ25lZCBpbnQJCWNyYzMyXzE7CiAgICBpbnQgcmVzZXJ2ZTJbMjkyXTsgLyogsaPB9MCp1bnX1rbOICovCn0gVF9GTEFHU19JTkZPOwoKCiNlbmRpZiAvLyBfUFVCX0ZMQUdTX0gKCg==