LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgKGMpIFNZU1RFQyBlbGVjdHJvbmljIEdtYkgsIEQtMDc5NzMgR3JlaXosIEF1Z3VzdC1CZWJlbC1TdHIuIDI5CiAgICAgIHd3dy5zeXN0ZWMtZWxlY3Ryb25pYy5jb20KCiAgUHJvamVjdDogICAgICBvcGVuUE9XRVJMSU5LCgogIERlc2NyaXB0aW9uOiAgZGVmaW5pdGlvbnMgZm9yIGdlbmVyYXRpbmcgaW5zdGFuY2VzCgogIExpY2Vuc2U6CgogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAgIGFyZSBtZXQ6CgogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KCiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KCiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIFNZU1RFQyBlbGVjdHJvbmljIEdtYkggbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAogICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgogICAgICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgaW5mb0BzeXN0ZWMtZWxlY3Ryb25pYy5jb20uCgogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCiAgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQogICAgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCiAgICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAogICAgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgogICAgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCiAgICBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgogICAgQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KCiAgICBTZXZlcmFiaWxpdHkgQ2xhdXNlOgoKICAgICAgICBJZiBhIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgb3IgYmVjb21lcyBpbGxlZ2FsLCBpbnZhbGlkIG9yCiAgICAgICAgdW5lbmZvcmNlYWJsZSBpbiBhbnkganVyaXNkaWN0aW9uLCB0aGF0IHNoYWxsIG5vdCBhZmZlY3Q6CiAgICAgICAgMS4gdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IGluIHRoYXQganVyaXNkaWN0aW9uIG9mIGFueSBvdGhlcgogICAgICAgICAgIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2U7IG9yCiAgICAgICAgMi4gdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IGluIG90aGVyIGp1cmlzZGljdGlvbnMgb2YgdGhhdCBvcgogICAgICAgICAgIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLgoKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICAgICAgICAgJFJDU2ZpbGU6IEVwbEluc3REZWYuaCx2ICQKCiAgICAgICAgICAgICAgICAkQXV0aG9yOiBELktydWVnZXIgJAoKICAgICAgICAgICAgICAgICRSZXZpc2lvbjogMS40ICQgICREYXRlOiAyMDA4LzA0LzE3IDIxOjM2OjMyICQKCiAgICAgICAgICAgICAgICAkU3RhdGU6IEV4cCAkCgogICAgICAgICAgICAgICAgQnVpbGQgRW52aXJvbm1lbnQ6CiAgICAgICAgICAgICAgICAgICAgLi4uCgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgUmV2aXNpb24gSGlzdG9yeToKCiAgci5kLjogZmlyc3QgaW1wbGVtZW50YXRpb24KCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgojaWZuZGVmIF9FUExJTlNUREVGX0hfCiNkZWZpbmUgX0VQTElOU1RERUZfSF8KCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gdHlwZXMgYW5kIG1hY3JvcyBmb3IgZ2VuZXJhdGluZyBpbnN0YW5jZXMKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKdHlwZWRlZiBlbnVtIHsKCWtTdGF0ZVVudXNlZCA9IDAsCglrU3RhdGVEZWxldGVkID0gMSwKCWtTdGF0ZVVzZWQgPSAweEZGCn0gdEluc3RTdGF0ZTsKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgp0eXBlZGVmIHZvaWQgTUVNICp0RXBsUHRySW5zdGFuY2U7CnR5cGVkZWYgQllURSB0RXBsSW5zdGFuY2VIZGw7CgovLyBkZWZpbmUgY29uc3QgZm9yIGlsbGVnYWxlIHZhbHVlcwojZGVmaW5lIENDTV9JTExJTlNUQU5DRSAgICAgIE5VTEwKI2RlZmluZSBDQ01fSUxMSU5TVEFOQ0VfSERMICAweEZGCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBpZiBtb3JlIHRoYW4gb25lIGluc3RhbmNlIHRoZW4gdXNlIHRoaXMgbWFjcm9zCiNpZiAoRVBMX01BWF9JTlNUQU5DRVMgPiAxKQoKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIG1hY3JvIGRlZmluaXRpb24gZm9yIGluc3RhbmNlIHRhYmxlIGRlZmluaXRpb24KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAvLyBtZW1vcnkgYXR0cmlidXRlcyBmb3IgaW5zdGFuY2UgdGFibGUKI2RlZmluZSBJTlNUX05FQVIJCS8vIGZhc3RlciBhY2Nlc3MgdG8gdmFyaWFibGVzCiNkZWZpbmUgSU5TVF9GQVIJCS8vIHZhcmlhYmxlcyB3aWNoIGhhdmUgdG8gbG9jYXRlZCBpbiB4ZGF0YQojZGVmaW5lIFNUQVRJQwkJCS8vIHByZXZlbnQgd2FybmluZ3MgZm9yIHZhcmlhYmxlcyB3aXRoIHNhbWUgbmFtZQoKI2RlZmluZSBJTlNUQU5DRV9UWVBFX0JFR0lOICAgICB0eXBlZGVmIHN0cnVjdCB7CiNkZWZpbmUgSU5TVEFOQ0VfVFlQRV9FTkQgICAgICAgfSB0RXBsSW5zdGFuY2VJbmZvOwoKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIG1hY3JvIGRlZmluaXRpb24gZm9yIEFQSSBpbnRlcmZhY2UKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAvLyBkZWNsYXJhdGlvbjoKCiAgICAvLyBtYWNyb3MgZm9yIGRlY2xhcmF0aW9uIHdpdGhpbiBmdW5jdGlvbiBoZWFkZXIgb3IgcHJvdG90eXBlIG9mIEFQSSBmdW5jdGlvbnMKI2RlZmluZSBDQ01fREVDTF9JTlNUQU5DRV9IREwgICAgICAgICAgICAgICAgICAgdEVwbEluc3RhbmNlSGRsIEluc3RhbmNlSGFuZGxlCiNkZWZpbmUgQ0NNX0RFQ0xfSU5TVEFOQ0VfSERMXyAgICAgICAgICAgICAgICAgIHRFcGxJbnN0YW5jZUhkbCBJbnN0YW5jZUhhbmRsZSwKCiAgICAvLyBtYWNyb3MgZm9yIGRlY2xhcmF0aW9uIG9mIHBvaW50ZXIgdG8gaW5zdGFuY2UgaGFuZGxlIHdpdGhpbiBmdW5jdGlvbiBoZWFkZXIgb3IgcHJvdG90eXBlIG9mIEFQSSBmdW5jdGlvbnMKI2RlZmluZSBDQ01fREVDTF9QVFJfSU5TVEFOQ0VfSERMICAgICAgICAgICAgICAgdEVwbEluc3RhbmNlSGRsIE1FTSogcEluc3RhbmNlSGFuZGxlCiNkZWZpbmUgQ0NNX0RFQ0xfUFRSX0lOU1RBTkNFX0hETF8gICAgICAgICAgICAgIHRFcGxJbnN0YW5jZUhkbCBNRU0qIHBJbnN0YW5jZUhhbmRsZSwKCiAgICAvLyBtYWNyb3MgZm9yIGRlY2xhcmF0aW9uIGluc3RhbmNlIGFzIGxva2FjbCB2YXJpYWJsZSB3aXRoaW4gZnVuY3Rpb25zCiNkZWZpbmUgQ0NNX0RFQ0xfSU5TVEFOQ0VfUFRSX0xPQ0FMICAgICAgICAgICAgIHRDY21JbnN0YW5jZUluZm8gTUVNKiBwSW5zdGFuY2U7CiNkZWZpbmUgQ0NNX0RFQ0xfUFRSX0lOU1RBTkNFX0hETF9MT0NBTCAgICAgICAgIHRFcGxJbnN0YW5jZUhkbCAgTUVNKiBwSW5zdGFuY2VIYW5kbGU7CgogICAgLy8gcmVmZXJlbmNlOgoKICAgIC8vIG1hY3JvcyBmb3IgcmVmZXJlbmNlIG9mIGluc3RhbmNlIGhhbmRsZSBmb3IgZnVuY3Rpb24gcGFyYW1ldGVycwojZGVmaW5lIENDTV9JTlNUQU5DRV9IREwgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YW5jZUhhbmRsZQojZGVmaW5lIENDTV9JTlNUQU5DRV9IRExfICAgICAgICAgICAgICAgICAgICAgICBJbnN0YW5jZUhhbmRsZSwKCiAgICAvLyBtYWNyb3MgZm9yIHJlZmVyZW5jZSBvZiBpbnN0YW5jZSBwYXJhbWV0ZXIgZm9yIGZ1bmN0aW9uIHBhcmFtZXRlcnMKI2RlZmluZSBDQ01fSU5TVEFOQ0VfUEFSQU0ocGFyKSAgICAgICAgICAgICAgICAgcGFyCiNkZWZpbmUgQ0NNX0lOU1RBTkNFX1BBUkFNXyhwYXIpICAgICAgICAgICAgICAgIHBhciwKCiAgICAvLyBtYWNyb3MgZm9yIHJlZmVyZW5jZSBvZiBpbnN0YW5jZSBwYXJhbWV0ZXIgZm9yIHdyaXRpbmcgb3IgcmVhZGluZyB2YWx1ZXMKI2RlZmluZSBDQ01fSU5TVF9FTlRSWSAgICAgICAgICAgICAgICAgICAgICAgICAgKCooKHRFcGxQdHJJbnN0YW5jZSlwSW5zdGFuY2UpKQoKICAgIC8vIHByb2Nlc3Npbmc6CgogICAgLy8gbWFjcm9zIGZvciBwcm9jZXNzIGluc3RhbmNlIGhhbmRsZQojZGVmaW5lIENDTV9DSEVDS19JTlNUQU5DRV9IREwoKSAgICAgICAgICAgICAgICBpZiAoSW5zdGFuY2VIYW5kbGUgPj0gRVBMX01BWF9JTlNUQU5DRVMpIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmV0dXJuIChrRXBsSWxsZWdhbEluc3RhbmNlKTt9CgogICAgLy8gbWFjcm9zIGZvciBwcm9jZXNzIHBvaW50ZXIgdG8gaW5zdGFuY2UgaGFuZGxlCiNkZWZpbmUgQ0NNX0NIRUNLX1BUUl9JTlNUQU5DRV9IREwoKSAgICAgICAgICAgIGlmIChwSW5zdGFuY2VIYW5kbGUgPT0gTlVMTCkgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZXR1cm4gKGtFcGxJbnZhbGlkSW5zdGFuY2VQYXJhbSk7fQoKICAgIC8vIFRoaXMgbWFjcm8gcmV0dXJuZWQgdGhlIGhhbmRsZSBhbmQgcG9pbnRlciB0byBuZXh0IGZyZWUgaW5zdGFuY2UuCiNkZWZpbmUgQ0NNX0dFVF9GUkVFX0lOU1RBTkNFX0FORF9IREwoKSAgICAgICAgIHBJbnN0YW5jZSA9IENjbUdldEZyZWVJbnN0YW5jZUFuZEhhbmRsZSAocEluc3RhbmNlSGFuZGxlKTsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUICgqcEluc3RhbmNlSGFuZGxlICE9IENDTV9JTExJTlNUQU5DRV9IREwpOwoKI2RlZmluZSBDQ01fQ0hFQ0tfSU5TVEFOQ0VfUFRSKCkgICAgICAgICAgICAgICAgaWYgKHBJbnN0YW5jZSA9PSBDQ01fSUxMSU5TVEFOQ0UpIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmV0dXJuIChrRXBsTm9GcmVlSW5zdGFuY2UpO30KCiNkZWZpbmUgQ0NNX0dFVF9JTlNUQU5DRV9QVFIoKSAgICAgICAgICAgICAgICAgIHBJbnN0YW5jZSA9IENjbUdldEluc3RhbmNlUHRyIChJbnN0YW5jZUhhbmRsZSk7CiNkZWZpbmUgQ0NNX0dFVF9GUkVFX0lOU1RBTkNFX1BUUigpICAgICAgICAgICAgIHBJbnN0YW5jZSA9IEdldEZyZWVJbnN0YW5jZSAoKTsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUIChwSW5zdGFuY2UgIT0gQ0NNX0lMTElOU1RBTkNFKTsKCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAvLyBtYWNybyBkZWZpbml0aW9uIGZvciBzdGFjayBpbnRlcmZhY2UKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAvLyBtYWNyb3MgZm9yIGRlY2xhcmF0aW9uIHdpdGhpbiB0aGUgZnVuY3Rpb24gaGVhZGVyLCBwcm90b3R5cGUgb3IgbG9jYWwgdmFyIGxpc3QKICAgIC8vIERlY2xhcmF0aW9uIG9mIHBvaW50ZXJzIHdpdGhpbiBmdW5jdGlvbiBwYXJhbWF0ZXIgbGlzdCBtdXN0IGRlZmluZWQgYXMgdm9pZCBNRU0qCiAgICAvLyBwb2ludGVyLgojZGVmaW5lIEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFIgICAgICAgICAgICAgICAgICAgdm9pZCBNRU0qIHBJbnN0YW5jZQojZGVmaW5lIEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfICAgICAgICAgICAgICAgICAgdm9pZCBNRU0qIHBJbnN0YW5jZSwKI2RlZmluZSBFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSX0xPQ0FMICAgICAgICAgICAgIHRFcGxQdHJJbnN0YW5jZSAgcEluc3RhbmNlOwoKICAgIC8vIG1hY3JvcyBmb3IgcmVmZXJlbmNlIG9mIHBvaW50ZXIgdG8gaW5zdGFuY2UKICAgIC8vIFRoZXNlIG1hY3JvcyBhcmUgdXNlZCBmb3IgcGFyYW1ldGVyIHBhc3NpbmcgdG8gY2FsbGVkIGZ1bmN0aW9uLgojZGVmaW5lIEVQTF9NQ09fSU5TVEFOQ0VfUFRSICAgICAgICAgICAgICAgICAgICAgICAgcEluc3RhbmNlCiNkZWZpbmUgRVBMX01DT19JTlNUQU5DRV9QVFJfICAgICAgICAgICAgICAgICAgICAgICBwSW5zdGFuY2UsCiNkZWZpbmUgRVBMX01DT19BRERSX0lOU1RBTkNFX1BUUl8gICAgICAgICAgICAgICAgICAmcEluc3RhbmNlLAoKICAgIC8vIG1hY3JvIGZvciBhY2Nlc3Mgb2Ygc3RydWN0IG1lbWJlcnMgb2Ygb25lIGluc3RhbmNlCiAgICAvLyBBbiBhY2Nlc3MgdG8gYSBtZW1iZXIgb2YgaW5zdGFuY2UgdGFibGUgbXVzdCBiZSBjYXN0ZWQgYnkgdGhlIGxvY2FsCiAgICAvLyBkZWZpbmVkIHR5cGUgb2YgaW5zdGFuY2UgdGFibGUuCiNkZWZpbmUgRVBMX01DT19JTlNUX0VOVFJZICAgICAgICAgICAgICAgICAgICAgICAgICAoKih0RXBsUHRySW5zdGFuY2UpcEluc3RhbmNlKQojZGVmaW5lIEVQTF9NQ09fR0xCX1ZBUih2YXIpICAgICAgICAgICAgICAgICAgICAgICAgKCgodEVwbFB0ckluc3RhbmNlKXBJbnN0YW5jZSktPnZhcikKCiAgICAvLyBtYWNyb3MgZm9yIHByb2Nlc3MgcG9pbnRlciB0byBpbnN0YW5jZQojZGVmaW5lIEVQTF9NQ09fR0VUX0lOU1RBTkNFX1BUUigpICAgICAgICAgICAgICAgICAgcEluc3RhbmNlID0gKHRFcGxQdHJJbnN0YW5jZSkgR2V0SW5zdGFuY2VQdHIgKEluc3RhbmNlSGFuZGxlKTsKI2RlZmluZSBFUExfTUNPX0dFVF9GUkVFX0lOU1RBTkNFX1BUUigpICAgICAgICAgICAgIHBJbnN0YW5jZSA9ICh0RXBsUHRySW5zdGFuY2UpIEdldEZyZWVJbnN0YW5jZSAoKTsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUIChwSW5zdGFuY2UgIT0gQ0NNX0lMTElOU1RBTkNFKTsKCiAgICAvLyBUaGlzIG1hY3JvIHNob3VsZCBiZSB1c2VkIHRvIGNoZWNrIHRoZSBwYXNzZWQgcG9pbnRlciB0byBhbiBwdWJsaWMgZnVuY3Rpb24KI2RlZmluZSBFUExfTUNPX0NIRUNLX0lOU1RBTkNFX1NUQVRFKCkgICAgICAgICAgICAgIEFTU0VSVCAocEluc3RhbmNlICE9IE5VTEwpOyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQgKCgodEVwbFB0ckluc3RhbmNlKXBJbnN0YW5jZSktPm1fSW5zdFN0YXRlID09IGtTdGF0ZVVzZWQpOwoKICAgIC8vIG1hY3JvcyBmb3IgZGVjbGFyYXRpb24gb2YgcG9pbnRlciB0byBpbnN0YW5jZSBwb2ludGVyCiNkZWZpbmUgRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFIgICAgICAgICAgICAgICB2b2lkIE1FTSogIE1FTSogcEluc3RhbmNlUHRyCiNkZWZpbmUgRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFJfICAgICAgICAgICAgICB2b2lkIE1FTSogIE1FTSogcEluc3RhbmNlUHRyLAoKICAgIC8vIG1hY3JvcyBmb3IgcmVmZXJlbmNlIG9mIHBvaW50ZXIgdG8gaW5zdGFuY2UgcG9pbnRlcgogICAgLy8gVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGZvciBwYXJhbWV0ZXIgcGFzc2luZyB0byBjYWxsZWQgZnVuY3Rpb24uCiNkZWZpbmUgRVBMX01DT19QVFJfSU5TVEFOQ0VfUFRSICAgICAgICAgICAgICAgICAgICBwSW5zdGFuY2VQdHIKI2RlZmluZSBFUExfTUNPX1BUUl9JTlNUQU5DRV9QVFJfICAgICAgICAgICAgICAgICAgIHBJbnN0YW5jZVB0ciwKCiAgICAvLyBtYWNyb3MgZm9yIHByb2Nlc3MgcG9pbnRlciB0byBpbnN0YW5jZSBwb2ludGVyCiNkZWZpbmUgRVBMX01DT19DSEVDS19QVFJfSU5TVEFOQ0VfUFRSKCkgICAgICAgICAgICBBU1NFUlQgKHBJbnN0YW5jZVB0ciAhPSBOVUxMKTsKI2RlZmluZSBFUExfTUNPX1NFVF9QVFJfSU5TVEFOQ0VfUFRSKCkgICAgICAgICAgICAgICgqcEluc3RhbmNlUHRyID0gcEluc3RhbmNlKTsKCiNkZWZpbmUgRVBMX01DT19JTlNUQU5DRV9QQVJBTShhKSAgICAgICAgICAgICAgICAgICAoYSkKI2RlZmluZSBFUExfTUNPX0lOU1RBTkNFX1BBUkFNXyhhKSAgICAgICAgICAgICAgICAgIChhKSwKI2RlZmluZSBFUExfTUNPX0lOU1RBTkNFX1BBUkFNX0lEWF8oKSAgICAgICAgICAgICAgIEVQTF9NQ09fSU5TVEFOQ0VfUEFSQU1fIChFUExfTUNPX0dMQl9WQVIgKG1fYkluc3RJbmRleCkpCiNkZWZpbmUgRVBMX01DT19JTlNUQU5DRV9QQVJBTV9JRFgoKSAgICAgICAgICAgICAgICBFUExfTUNPX0lOU1RBTkNFX1BBUkFNIChFUExfTUNPX0dMQl9WQVIgKG1fYkluc3RJbmRleCkpCiNkZWZpbmUgRVBMX01DT19XUklURV9JTlNUQU5DRV9TVEFURShhKSAgICAgICAgICAgICBFUExfTUNPX0dMQl9WQVIgKG1fSW5zdFN0YXRlKSA9IGE7CgogICAgLy8gdGhpcyBtYWNybyBkZWxldGVzIGFsbCBpbnN0YW5jZSBlbnRyaWVzIGFzIHVudXNlZAojZGVmaW5lIEVQTF9NQ09fREVMRVRFX0lOU1RBTkNFX1RBQkxFKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICB0RXBsSW5zdGFuY2VJbmZvIE1FTSogICBwSW5zdGFuY2UgICAgICAgPSAmYUVwbEluc3RhbmNlVGFibGVfZ1swXTsgXAogICAgICAgIHRGYXN0Qnl0ZSAgICAgICAgICAgICAgIEluc3ROdW1iZXIgICAgICA9IDA7ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgdEZhc3RCeXRlICAgICAgICAgICAgICAgaSAgICAgICAgICAgICAgID0gRVBMX01BWF9JTlNUQU5DRVM7ICAgICAgIFwKICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICBwSW5zdGFuY2UtPm1fSW5zdFN0YXRlID0gKEJZVEUpIGtTdGF0ZVVudXNlZDsgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgIHBJbnN0YW5jZS0+bV9iSW5zdEluZGV4ID0gKEJZVEUpIEluc3ROdW1iZXI7ICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgcEluc3RhbmNlKys7IEluc3ROdW1iZXIrKzsgaS0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIH0gd2hpbGUgKGkgIT0gMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICB9CgogICAgLy8gZGVmaW5pdGlvbiBvZiBmdW5jdGlvbnMgd2hpY2ggaGFzIHRvIGJlIGRlZmluZWQgaW4gZWFjaCBtb2R1bGUgb2YgQ0FOb3BlbiBzdGFjawojZGVmaW5lIEVQTF9NQ09fREVGSU5FX0lOU1RBTkNFX0ZDVCgpIFwKICAgICAgICBzdGF0aWMgdEVwbFB0ckluc3RhbmNlIEdldEluc3RhbmNlUHRyICh0RXBsSW5zdGFuY2VIZGwgSW5zdEhhbmRsZV9wKTsgIFwKICAgICAgICBzdGF0aWMgdEVwbFB0ckluc3RhbmNlIEdldEZyZWVJbnN0YW5jZSAodm9pZCk7CiNkZWZpbmUgRVBMX01DT19ERUNMX0lOU1RBTkNFX0ZDVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgc3RhdGljIHRFcGxQdHJJbnN0YW5jZSBHZXRJbnN0YW5jZVB0ciAodEVwbEluc3RhbmNlSGRsIEluc3RIYW5kbGVfcCkgeyBcCiAgICAgICAgICAgIHJldHVybiAmYUVwbEluc3RhbmNlVGFibGVfZ1tJbnN0SGFuZGxlX3BdOyB9ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgc3RhdGljIHRFcGxQdHJJbnN0YW5jZSBHZXRGcmVlSW5zdGFuY2UgKHZvaWQpIHsgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgIHRFcGxJbnN0YW5jZUluZm8gTUVNKiAgIHBJbnN0YW5jZSAgID0gJmFFcGxJbnN0YW5jZVRhYmxlX2dbMF07ICAgICBcCiAgICAgICAgICAgIHRGYXN0Qnl0ZSAgICAgICAgICAgICAgIGkgICAgICAgICAgID0gRVBMX01BWF9JTlNUQU5DRVM7ICAgICAgICAgICBcCiAgICAgICAgICAgIGRvIHsgaWYgKHBJbnN0YW5jZS0+bV9JbnN0U3RhdGUgIT0ga1N0YXRlVXNlZCkgeyAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0RXBsUHRySW5zdGFuY2UpIHBJbnN0YW5jZTsgfSAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICBwSW5zdGFuY2UrKzsgaS0tOyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgIHdoaWxlIChpICE9IDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgIHJldHVybiBDQ01fSUxMSU5TVEFOQ0U7IH0KCiAgICAvLyB0aGlzIG1hY3JvIGRlZmluZXMgdGhlIGluc3RhbmNlIHRhYmxlLiBFYWNoIGVudHJ5IGlzIHJlc2VydmVkIGZvciBhbiBpbnN0YW5jZSBvZiBDQU5vcGVuLgojZGVmaW5lIEVQTF9NQ09fREVDTF9JTlNUQU5DRV9WQVIoKSBcCiAgICAgICAgc3RhdGljIHRFcGxJbnN0YW5jZUluZm8gTUVNIGFFcGxJbnN0YW5jZVRhYmxlX2cgW0VQTF9NQVhfSU5TVEFOQ0VTXTsKCiAgICAvLyB0aGlzIG1hY3JvIGRlZmluZXMgbWVtYmVyIHZhcmlhYmxlcyBpbiBpbnN0YW5jZSB0YWJsZSB3aGljaCBhcmUgbmVlZGVkIGluCiAgICAvLyBhbGwgbW9kdWxlcyBvZiBFcGwgc3RhY2sKI2RlZmluZSBFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfTUVNQkVSKCkgXAogICAgICAgIFNUQVRJQyAgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX0luc3RTdGF0ZTsgXAogICAgICAgIFNUQVRJQyAgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2JJbnN0SW5kZXg7CgojZGVmaW5lIEVQTF9NQ09fSU5TVEFOQ0VfUEFSQU1fSURYXygpICAgICAgICAgICBFUExfTUNPX0lOU1RBTkNFX1BBUkFNXyAoRVBMX01DT19HTEJfVkFSIChtX2JJbnN0SW5kZXgpKQojZGVmaW5lIEVQTF9NQ09fSU5TVEFOQ0VfUEFSQU1fSURYKCkgICAgICAgICAgICBFUExfTUNPX0lOU1RBTkNFX1BBUkFNIChFUExfTUNPX0dMQl9WQVIgKG1fYkluc3RJbmRleCkpCgojZWxzZSAvLyBvbmx5IG9uZSBpbnN0YW5jZSBpcyB1c2VkCgogICAgLy8gTWVtb3J5IGF0dHJpYnV0ZXMgZm9yIGluc3RhbmNlIHRhYmxlLgojZGVmaW5lIElOU1RfTkVBUiAgIE5FQVIJLy8gZmFzdGVyIGFjY2VzcyB0byB2YXJpYWJsZXMKI2RlZmluZSBJTlNUX0ZBUiAgICBNRU0JCS8vIHZhcmlhYmxlcyB3aWNoIGhhdmUgdG8gbG9jYXRlZCBpbiB4ZGF0YQojZGVmaW5lIFNUQVRJQyAgICAgIHN0YXRpYwkvLyBwcmV2ZW50IHdhcm5pbmdzIGZvciB2YXJpYWJsZXMgd2l0aCBzYW1lIG5hbWUKCiNkZWZpbmUgSU5TVEFOQ0VfVFlQRV9CRUdJTgojZGVmaW5lIElOU1RBTkNFX1RZUEVfRU5ECgovLyBtYWNyb3MgZm9yIGRlY2xhcmF0aW9uLCBpbml0aWFsaXppbmcgYW5kIG1lbWJlciBhY2Nlc3MgZm9yIGluc3RhbmNlIGhhbmRsZQovLyBUaGlzIGNsYXNzIG9mIG1hY3JvcyBhcmUgdXNlZCBieSBBUEkgZnVuY3Rpb24gdG8gaW5mb3JtIENDTS1tb2R1bCB3aGljaAovLyBpbnN0YW5jZSBpcyB0byBiZSB1c2VkLgoKICAgIC8vIG1hY3JvcyBmb3IgcmVmZXJlbmNlIG9mIGluc3RhbmNlIGhhbmRsZQogICAgLy8gVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGZvciBwYXJhbWV0ZXIgcGFzc2luZyB0byBDQU5vcGVuIEFQSSBmdW5jdGlvbi4KI2RlZmluZSBDQ01fSU5TVEFOQ0VfSERMCiNkZWZpbmUgQ0NNX0lOU1RBTkNFX0hETF8KCiNkZWZpbmUgQ0NNX0RFQ0xfSU5TVEFOQ0VfUFRSX0xPQ0FMCgogICAgLy8gbWFjcm9zIGZvciBkZWNsYXJhdGlvbiB3aXRoaW4gdGhlIGZ1bmN0aW9uIGhlYWRlciBvciBwcm90b3R5cGUKI2RlZmluZSBDQ01fREVDTF9JTlNUQU5DRV9IREwgICAgICAgICAgICAgICAgICAgdm9pZAojZGVmaW5lIENDTV9ERUNMX0lOU1RBTkNFX0hETF8KCiAgICAvLyBtYWNyb3MgZm9yIHByb2Nlc3MgaW5zdGFuY2UgaGFuZGxlCiNkZWZpbmUgQ0NNX0NIRUNLX0lOU1RBTkNFX0hETCgpCgogICAgLy8gbWFjcm9zIGZvciBkZWNsYXJhdGlvbiBvZiBwb2ludGVyIHRvIGluc3RhbmNlIGhhbmRsZQojZGVmaW5lIENDTV9ERUNMX1BUUl9JTlNUQU5DRV9IREwgICAgICAgICAgICAgICB2b2lkCiNkZWZpbmUgQ0NNX0RFQ0xfUFRSX0lOU1RBTkNFX0hETF8KCiAgICAvLyBtYWNyb3MgZm9yIHByb2Nlc3MgcG9pbnRlciB0byBpbnN0YW5jZSBoYW5kbGUKI2RlZmluZSBDQ01fQ0hFQ0tfUFRSX0lOU1RBTkNFX0hETCgpCgogICAgLy8gVGhpcyBtYWNybyByZXR1cm5lZCB0aGUgaGFuZGxlIGFuZCBwb2ludGVyIHRvIG5leHQgZnJlZSBpbnN0YW5jZS4KI2RlZmluZSBDQ01fR0VUX0ZSRUVfSU5TVEFOQ0VfQU5EX0hETCgpCgojZGVmaW5lIENDTV9DSEVDS19JTlNUQU5DRV9QVFIoKQoKI2RlZmluZSBDQ01fR0VUX0lOU1RBTkNFX1BUUigpCiNkZWZpbmUgQ0NNX0dFVF9GUkVFX0lOU1RBTkNFX1BUUigpCgojZGVmaW5lIENDTV9JTlNUQU5DRV9QQVJBTShwYXIpCiNkZWZpbmUgQ0NNX0lOU1RBTkNFX1BBUkFNXyhwYXIpCgojZGVmaW5lIENDTV9JTlNUX0VOVFJZICAgICAgICAgICAgICAgICAgICAgICAgICBhQ2NtSW5zdGFuY2VUYWJsZV9nWzBdCgovLyBtYWNyb3MgZm9yIGRlY2xhcmF0aW9uLCBpbml0aWFsaXppbmcgYW5kIG1lbWJlciBhY2Nlc3MgZm9yIGluc3RhbmNlIHBvaW50ZXIKLy8gVGhpcyBjbGFzcyBvZiBtYWNyb3MgYXJlIHVzZWQgYnkgQ0FOb3BlbiBpbnRlcm5hbCBmdW5jdGlvbiB0byBwb2ludCB0byBvbmUgaW5zdGFuY2UuCgogICAgLy8gbWFjcm9zIGZvciBkZWNsYXJhdGlvbiB3aXRoaW4gdGhlIGZ1bmN0aW9uIGhlYWRlciwgcHJvdG90eXBlIG9yIGxvY2FsIHZhciBsaXN0CiNkZWZpbmUgRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUiAgICAgICAgICAgICAgICAgICB2b2lkCiNkZWZpbmUgRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KI2RlZmluZSBFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSX0xPQ0FMCgogICAgLy8gbWFjcm9zIGZvciByZWZlcmVuY2Ugb2YgcG9pbnRlciB0byBpbnN0YW5jZQogICAgLy8gVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGZvciBwYXJhbWV0ZXIgcGFzc2luZyB0byBjYWxsZWQgZnVuY3Rpb24uCiNkZWZpbmUgRVBMX01DT19JTlNUQU5DRV9QVFIKI2RlZmluZSBFUExfTUNPX0lOU1RBTkNFX1BUUl8KI2RlZmluZSBFUExfTUNPX0FERFJfSU5TVEFOQ0VfUFRSXwoKICAgIC8vIG1hY3JvcyBmb3IgcHJvY2VzcyBwb2ludGVyIHRvIGluc3RhbmNlCiNkZWZpbmUgRVBMX01DT19HRVRfSU5TVEFOQ0VfUFRSKCkKI2RlZmluZSBFUExfTUNPX0dFVF9GUkVFX0lOU1RBTkNFX1BUUigpCgogICAgLy8gVGhpcyBtYWNybyBzaG91bGQgYmUgdXNlZCB0byBjaGVjayB0aGUgcGFzc2VkIHBvaW50ZXIgdG8gYW4gcHVibGljIGZ1bmN0aW9uCiNkZWZpbmUgRVBMX01DT19DSEVDS19JTlNUQU5DRV9TVEFURSgpCgogICAgLy8gbWFjcm9zIGZvciBkZWNsYXJhdGlvbiBvZiBwb2ludGVyIHRvIGluc3RhbmNlIHBvaW50ZXIKI2RlZmluZSBFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUiAgICAgICAgICAgICAgIHZvaWQKI2RlZmluZSBFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUl8KCiAgICAvLyBtYWNyb3MgZm9yIHJlZmVyZW5jZSBvZiBwb2ludGVyIHRvIGluc3RhbmNlIHBvaW50ZXIKICAgIC8vIFRoZXNlIG1hY3JvcyBhcmUgdXNlZCBmb3IgcGFyYW1ldGVyIHBhc3NpbmcgdG8gY2FsbGVkIGZ1bmN0aW9uLgojZGVmaW5lIEVQTF9NQ09fUFRSX0lOU1RBTkNFX1BUUgojZGVmaW5lIEVQTF9NQ09fUFRSX0lOU1RBTkNFX1BUUl8KCiAgICAvLyBtYWNyb3MgZm9yIHByb2Nlc3MgcG9pbnRlciB0byBpbnN0YW5jZSBwb2ludGVyCiNkZWZpbmUgRVBMX01DT19DSEVDS19QVFJfSU5TVEFOQ0VfUFRSKCkKI2RlZmluZSBFUExfTUNPX1NFVF9QVFJfSU5TVEFOQ0VfUFRSKCkKCiNkZWZpbmUgRVBMX01DT19JTlNUQU5DRV9QQVJBTShhKQojZGVmaW5lIEVQTF9NQ09fSU5TVEFOQ0VfUEFSQU1fKGEpCiNkZWZpbmUgRVBMX01DT19JTlNUQU5DRV9QQVJBTV9JRFhfKCkKI2RlZmluZSBFUExfTUNPX0lOU1RBTkNFX1BBUkFNX0lEWCgpCgogICAgLy8gbWFjcm8gZm9yIGFjY2VzcyBvZiBzdHJ1Y3QgbWVtYmVycyBvZiBvbmUgaW5zdGFuY2UKI2RlZmluZSBFUExfTUNPX0lOU1RfRU5UUlkgICAgICAgICAgICAgICAgICAgICAgICAgIGFFcGxJbnN0YW5jZVRhYmxlX2dbMF0KI2RlZmluZSBFUExfTUNPX0dMQl9WQVIodmFyKSAgICAgICAgICAgICAgICAgICAgICAgICh2YXIpCiNkZWZpbmUgRVBMX01DT19XUklURV9JTlNUQU5DRV9TVEFURShhKQoKICAgIC8vIHRoaXMgbWFjcm8gZGVsZXRlcyBhbGwgaW5zdGFuY2UgZW50cmllcyBhcyB1bnVzZWQKI2RlZmluZSBFUExfTUNPX0RFTEVURV9JTlNUQU5DRV9UQUJMRSgpCgogICAgLy8gZGVmaW5pdGlvbiBvZiBmdW5jdGlvbnMgd2hpY2ggaGFzIHRvIGJlIGRlZmluZWQgaW4gZWFjaCBtb2R1bGUgb2YgQ0FOb3BlbiBzdGFjawojZGVmaW5lIEVQTF9NQ09fREVGSU5FX0lOU1RBTkNFX0ZDVCgpCiNkZWZpbmUgRVBMX01DT19ERUNMX0lOU1RBTkNFX0ZDVCgpCgogICAgLy8gdGhpcyBtYWNybyBkZWZpbmVzIHRoZSBpbnN0YW5jZSB0YWJsZS4gRWFjaCBlbnRyeSBpcyByZXNlcnZlZCBmb3IgYW4gaW5zdGFuY2Ugb2YgQ0FOb3Blbi4KI2RlZmluZSBFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfVkFSKCkKCiAgICAvLyB0aGlzIG1hY3JvIGRlZmluZXMgbWVtYmVyIHZhcmlhYmxlcyBpbiBpbnN0YW5jZSB0YWJsZSB3aGljaCBhcmUgbmVlZGVkIGluCiAgICAvLyBhbGwgbW9kdWxlcyBvZiBDQU5vcGVuIHN0YWNrCiNkZWZpbmUgRVBMX01DT19ERUNMX0lOU1RBTkNFX01FTUJFUigpCgojZW5kaWYKCi8qCiNpZiAoQ0RSVl9NQVhfSU5TVEFOQ0VTID4gMSkKCiAgICAjZGVmaW5lIENEUlZfUkVFTlRSQU5UICAgICAgICAgICAgICAgICAgICAgICAgICBSRUVOVFJBTlQKCiNlbHNlCgogICAgI2RlZmluZSBDRFJWX1JFRU5UUkFOVAoKI2VuZGlmCiovCgojZW5kaWYgLy8gX0VQTElOU1RERUZfSF8KCi8vIERpZSBsZXR6dGUgWmVpbGUgbXXfIHVuYmVkaW5ndCBlaW5lIGxlZXJlIFplaWxlIHNlaW4sIHdlaWwgbWFuY2hlIENvbXBpbGVyCi8vIGRhbWl0IGVpbiBQcm9ibGVtIGhhYmVuLCB3ZW5uIGRhcyBuaWNodCBzbyBpc3QgKHouQi4gR05VIG9kZXIgQm9ybGFuZCBDKysgQnVpbGRlcikuCg==