IwojIENvbmZpZyBmaWxlIGZvciBrdGVzdC5wbAojCiMgTm90ZSwgYWxsIHBhdGhzIG11c3QgYmUgYWJzb2x1dGUKIwoKIyBPcHRpb25zIHNldCBpbiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIGFyZSBjb25zaWRlcmVkIHRvIGJlCiMgZGVmYXVsdCBvcHRpb25zLiBUaGVzZSBvcHRpb25zIGNhbiBiZSBvdmVycmlkZW4gYnkgdGVzdCBzcGVjaWZpYwojIG9wdGlvbnMsIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOgojCiMgIExPR19GSUxFCiMgIENMRUFSX0xPRwojICBQT1dFUk9GRl9PTl9TVUNDRVNTCiMgIFJFQk9PVF9PTl9TVUNDRVNTCiMKIyBUZXN0IHNwZWNpZmljIG9wdGlvbnMgYXJlIHNldCBhZnRlciB0aGUgbGFiZWw6CiMKIyBURVNUX1NUQVJUCiMKIyBUaGUgb3B0aW9ucyBhZnRlciBhIFRFU1RfU1RBUlQgbGFiZWwgYXJlIHNwZWNpZmljIHRvIHRoYXQgdGVzdC4KIyBFYWNoIFRFU1RfU1RBUlQgbGFiZWwgd2lsbCBzZXQgdXAgYSBuZXcgdGVzdC4gSWYgeW91IHdhbnQgdG8KIyBwZXJmb3JtIGEgdGVzdCBtb3JlIHRoYW4gb25jZSwgeW91IGNhbiBhZGQgdGhlIElURVJBVEUgbGFiZWwKIyB0byBpdCBmb2xsb3dlZCBieSB0aGUgbnVtYmVyIG9mIHRpbWVzIHlvdSB3YW50IHRoYXQgdGVzdAojIHRvIGl0ZXJhdGUuIElmIHRoZSBJVEVSQVRFIGlzIGxlZnQgb2ZmLCB0aGUgdGVzdCB3aWxsIG9ubHkKIyBiZSBwZXJmb3JtZWQgb25jZS4KIwojIFRFU1RfU1RBUlQgSVRFUkFURSAxMAojCiMgWW91IGNhbiBza2lwIGEgdGVzdCBieSBhZGRpbmcgU0tJUCAoYmVmb3JlIG9yIGFmdGVyIHRoZSBJVEVSQVRFCiMgYW5kIG51bWJlcikKIwojIFRFU1RfU1RBUlQgU0tJUAojCiMgVEVTVF9TVEFSVCBTS0lQIElURVJBVEUgMTAKIwojIFRFU1RfU1RBUlQgSVRFUkFURSAxMCBTS0lQCiMKIyBUaGUgU0tJUCBsYWJlbCBjYXVzZXMgdGhlIG9wdGlvbnMgYW5kIHRoZSB0ZXN0IGl0c2VsZiB0byBiZSBpZ25vcmVkLgojIFRoaXMgaXMgdXNlZnVsIHRvIHNldCB1cCBzZXZlcmFsIGRpZmZlcmVudCB0ZXN0cyBpbiBvbmUgY29uZmlnIGZpbGUsIGFuZAojIG9ubHkgZW5hYmxpbmcgdGhlIG9uZXMgeW91IHdhbnQgdG8gdXNlIGZvciBhIGN1cnJlbnQgdGVzdCBydW4uCiMKIyBZb3UgY2FuIGFkZCBkZWZhdWx0IG9wdGlvbnMgYW55d2hlcmUgaW4gdGhlIGZpbGUgYXMgd2VsbAojIHdpdGggdGhlIERFRkFVTFRTIHRhZy4gVGhpcyBhbGxvd3MgeW91IHRvIGhhdmUgZGVmYXVsdCBvcHRpb25zCiMgYWZ0ZXIgdGhlIHRlc3Qgb3B0aW9ucyB0byBrZWVwIHRoZSB0ZXN0IG9wdGlvbnMgYXQgdGhlIHRvcAojIG9mIHRoZSBmaWxlLiBZb3UgY2FuIGV2ZW4gcGxhY2UgdGhlIERFRkFVTFRTIHRhZyBiZXR3ZWVuCiMgdGVzdCBjYXNlcyAoYnV0IG5vdCBpbiB0aGUgbWlkZGxlIG9mIGEgc2luZ2xlIHRlc3QgY2FzZSkKIwojIFRFU1RfU1RBUlQKIyBNSU5fQ09ORklHID0gL2hvbWUvdGVzdC9jb25maWctdGVzdDEKIwojIERFRkFVTFRTCiMgTUlOX0NPTkZJRyA9IC9ob21lL3Rlc3QvY29uZmlnLWRlZmF1bHQKIwojIFRFU1RfU1RBUlQgSVRFUkFURSAxMAojCiMgVGhlIGFib3ZlIHdpbGwgcnVuIHRoZSBmaXJzdCB0ZXN0IHdpdGggTUlOX0NPTkZJRyBzZXQgdG8KIyAvaG9tZS90ZXN0L2NvbmZpZy10ZXN0LTEuIFRoZW4gMTAgdGVzdHMgd2lsbCBiZSBleGVjdXRlZAojIHdpdGggTUlOX0NPTkZJRyB3aXRoIC9ob21lL3Rlc3QvY29uZmlnLWRlZmF1bHQuCiMKIyBZb3UgY2FuIGFsc28gZGlzYWJsZSBkZWZhdWx0cyB3aXRoIHRoZSBTS0lQIG9wdGlvbgojCiMgREVGQVVMVFMgU0tJUAojIE1JTl9DT05GSUcgPSAvaG9tZS90ZXN0L2NvbmZpZy11c2Utc29tZXRpbWVzCiMKIyBERUZBVUxUUwojIE1JTl9DT05GSUcgPSAvaG9tZS90ZXN0L2NvbmZpZy1tb3N0LXRpbWVzCiMKIyBUaGUgYWJvdmUgd2lsbCBpZ25vcmUgdGhlIGZpcnN0IE1JTl9DT05GSUcuIElmIHlvdSB3YW50IHRvCiMgdXNlIHRoZSBmaXJzdCBNSU5fQ09ORklHLCByZW1vdmUgdGhlIFNLSVAgZnJvbSB0aGUgZmlyc3QKIyBERUZBVUxUUyB0YWcgYW5kIGFkZCBpdCB0byB0aGUgc2Vjb25kLiBCZSBjYXJlZnVsLCBvcHRpb25zCiMgbWF5IG9ubHkgYmUgZGVjbGFyZWQgb25jZSBwZXIgdGVzdCBvciBkZWZhdWx0LiBJZiB5b3UgaGF2ZQojIHRoZSBzYW1lIG9wdGlvbiBuYW1lIHVuZGVyIHRoZSBzYW1lIHRlc3Qgb3IgYXMgZGVmYXVsdAojIGt0ZXN0IHdpbGwgZmFpbCB0byBleGVjdXRlLCBhbmQgbm8gdGVzdHMgd2lsbCBydW4uCiMKCiMjIyMgQ29uZmlnIHZhcmlhYmxlcyAjIyMjCiMKIyBUaGlzIGNvbmZpZyBmaWxlIGNhbiBhbHNvIGNvbnRhaW4gImNvbmZpZyB2YXJpYWJsZXMiLgojIFRoZXNlIGFyZSBhc3NpZ25lZCB3aXRoICI6PSIgaW5zdGVhZCBvZiB0aGUga3Rlc3Qgb3B0aW9uCiMgYXNzaWdtZW50ICI9Ii4KIwojIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4ga3Rlc3Qgb3B0aW9ucyBhbmQgY29uZmlnIHZhcmlhYmxlcwojIGlzIHRoYXQgY29uZmlnIHZhcmlhYmxlcyBjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcywKIyB3aGVyZSBlYWNoIGluc3RhbmNlIHdpbGwgb3ZlcnJpZGUgdGhlIHByZXZpb3VzIGluc3RhbmNlLgojIEFuZCB0aGF0IHRoZXkgb25seSBsaXZlIGF0IHRpbWUgb2YgcHJvY2Vzc2luZyB0aGlzIGNvbmZpZy4KIwojIFRoZSBhZHZhbnRhZ2UgdG8gY29uZmlnIHZhcmlhYmxlcyBhcmUgdGhhdCB0aGV5IGNhbiBiZSB1c2VkCiMgYnkgYW55IG9wdGlvbiBvciBhbnkgb3RoZXIgY29uZmlnIHZhcmlhYmxlcyB0byBkZWZpbmUgdGhpbmcKIyB0aGF0IHlvdSBtYXkgdXNlIG92ZXIgYW5kIG92ZXIgYWdhaW4gaW4gdGhlIG9wdGlvbnMuCiMKIyBGb3IgZXhhbXBsZToKIwojIFVTRVIgICAgICA6PSByb290CiMgVEFSR0VUICAgIDo9IG15Ym94CiMgVEVTVF9DQVNFIDo9IHNzaCAke1VTRVJ9QCR7VEFSR0VUfSAvcGF0aC90by9teS90ZXN0CiMKIyBURVNUX1NUQVJUCiMgTUlOX0NPTkZJRyA9IGNvbmZpZzEKIyBURVNUID0gJHtURVNUX0NBU0V9CiMKIyBURVNUX1NUQVJUCiMgTUlOX0NPTkZJRyA9IGNvbmZpZzIKIyBURVNUID0gJHtURVNUX0NBU0V9CiMKIyBURVNUX0NBU0UgOj0gc3NoICR7VVNFUn1AJHtUQVJHRVR9IC9wYXRoL3RvL215L3Rlc3QyCiMKIyBURVNUX1NUQVJUCiMgTUlOX0NPTkZJRyA9IGNvbmZpZzEKIyBURVNUID0gJHtURVNUX0NBU0V9CiMKIyBURVNUX1NUQVJUCiMgTUlOX0NPTkZJRyA9IGNvbmZpZzIKIyBURVNUID0gJHtURVNUX0NBU0V9CiMKIyBURVNUX0RJUiA6PSAvaG9tZS9tZS90ZXN0CiMKIyBCVUlMRF9ESVIgPSAke1RFU1RfRElSfS9saW51eC5naXQKIyBPVVRQVVRfRElSID0gJHtURVNUX0RJUn0vdGVzdAojCiMgTm90ZSwgdGhlIGNvbmZpZyB2YXJpYWJsZXMgYXJlIGV2YWx1YXRlZCBpbW1lZGlhdGVseSwgdGh1cwojIHVwZGF0aW5nIFRBUkdFVCBhZnRlciBURVNUX0NBU0UgaGFzIGJlZW4gYXNzaWduZWQgZG9lcyBub3RoaW5nCiMgdG8gVEVTVF9DQVNFLgojCiMgQXMgc2hvd24gaW4gdGhlIGV4YW1wbGUsIHRvIGV2YWx1YXRlIGEgY29uZmlnIHZhcmlhYmxlLCB5b3UKIyB1c2UgdGhlICR7WH0gY29udmVudGlvbi4gU2ltcGxlICRYIHdpbGwgbm90IHdvcmsuCiMKIyBJZiB0aGUgY29uZmlnIHZhcmlhYmxlIGRvZXMgbm90IGV4aXN0LCB0aGUgJHtYfSB3aWxsIG5vdAojIGJlIGV2YWx1YXRlZC4gVGh1czoKIwojIE1BS0VfQ01EID0gUEFUSD0vbXlwYXRoOiR7UEFUSH0gbWFrZQojCiMgSWYgUEFUSCBpcyBub3QgYSBjb25maWcgdmFyaWFibGUsIHRoZW4gdGhlICR7UEFUSH0gaW4KIyB0aGUgTUFLRV9DTUQgb3B0aW9uIHdpbGwgYmUgZXZhbHVhdGVkIGJ5IHRoZSBzaGVsbCB3aGVuCiMgdGhlIE1BS0VfQ01EIG9wdGlvbiBpcyBwYXNzZWQgaW50byBzaGVsbCBwcm9jZXNzaW5nLgoKIyMjIyBVc2luZyBvcHRpb25zIGluIG90aGVyIG9wdGlvbnMgIyMjIwojCiMgT3B0aW9ucyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBjb25maWcgZmlsZSBtYXkgYWxzbyBiZSB1c2VkCiMgYnkgb3RoZXIgb3B0aW9ucy4gQWxsIG9wdGlvbnMgYXJlIGV2YXVsYXRlZCBhdCB0aW1lIG9mCiMgdXNlIChleGNlcHQgdGhhdCBjb25maWcgdmFyaWFibGVzIGFyZSBldmFsdWF0ZWQgYXQgY29uZmlnCiMgcHJvY2Vzc2luZyB0aW1lKS4KIwojIElmIGFuIGt0ZXN0IG9wdGlvbiBpcyB1c2VkIHdpdGhpbiBhbm90aGVyIG9wdGlvbiwgaW5zdGVhZCBvZgojIHR5cGluZyBpdCBhZ2FpbiBpbiB0aGF0IG9wdGlvbiB5b3UgY2FuIHNpbXBseSB1c2UgdGhlIG9wdGlvbgojIGp1c3QgbGlrZSB5b3UgY2FuIGNvbmZpZyB2YXJpYWJsZXMuCiMKIyBNQUNISU5FID0gbXlib3gKIwojIFRFU1QgPSBzc2ggcm9vdEAke01BQ0hJTkV9IC9wYXRoL3RvL3Rlc3QKIwojIFRoZSBvcHRpb24gd2lsbCBiZSB1c2VkIHBlciB0ZXN0IGNhc2UuIFRodXM6CiMKIyBURVNUX1RZUEUgPSB0ZXN0CiMgVEVTVCA9IHNzaCByb290QHtNQUNISU5FfQojCiMgVEVTVF9TVEFSVAojIE1BQ0hJTkUgPSBib3gxCiMKIyBURVNUX1NUQVJUCiMgTUFDSElORSA9IGJveDIKIwojIEZvciBib3RoIHRlc3QgY2FzZXMsIE1BQ0hJTkUgd2lsbCBiZSBldmFsdWF0ZWQgYXQgdGhlIHRpbWUKIyBvZiB0aGUgdGVzdCBjYXNlLiBUaGUgZmlyc3QgdGVzdCB3aWxsIHJ1biBzc2ggcm9vdEBib3gxCiMgYW5kIHRoZSBzZWNvbmQgd2lsbCBydW4gc3NoIHJvb3RAYm94Mi4KCiMjIyMgTWFuZGF0b3J5IERlZmF1bHQgT3B0aW9ucyAjIyMjCgojIFRoZXNlIG9wdGlvbnMgbXVzdCBiZSBpbiB0aGUgZGVmYXVsdCBzZWN0aW9uLCBhbHRob3VnaCBtb3N0CiMgbWF5IGJlIG92ZXJyaWRkZW4gYnkgdGVzdCBvcHRpb25zLgoKIyBUaGUgbWFjaGluZSBob3N0bmFtZSB0aGF0IHlvdSB3aWxsIHRlc3QKI01BQ0hJTkUgPSB0YXJnZXQKCiMgVGhlIGJveCBpcyBleHBlY3RlZCB0byBoYXZlIHNzaCBvbiBub3JtYWwgYm9vdHVwLCBwcm92aWRlIHRoZSB1c2VyCiMgIChtb3N0IGxpa2VseSByb290LCBzaW5jZSB5b3UgbmVlZCBwcml2aWxlZ2VkIG9wZXJhdGlvbnMpCiNTU0hfVVNFUiA9IHJvb3QKCiMgVGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBMaW51eCBzb3VyY2UgY29kZQojQlVJTERfRElSID0gL2hvbWUvdGVzdC9saW51eC5naXQKCiMgVGhlIGRpcmVjdG9yeSB0aGF0IHRoZSBvYmplY3RzIHdpbGwgYmUgYnVpbHQKIyAoY2FuIG5vdCBiZSBzYW1lIGFzIEJVSUxEX0RJUikKI09VVFBVVF9ESVIgPSAvaG9tZS90ZXN0L2J1aWxkL3RhcmdldAoKIyBUaGUgbG9jYXRpb24gb2YgdGhlIGNvbXBpbGVkIGZpbGUgdG8gY29weSB0byB0aGUgdGFyZ2V0CiMgKHJlbGF0aXZlIHRvIE9VVFBVVF9ESVIpCiNCVUlMRF9UQVJHRVQgPSBhcmNoL3g4Ni9ib290L2J6SW1hZ2UKCiMgVGhlIHBsYWNlIHRvIHB1dCB5b3VyIGltYWdlIG9uIHRoZSB0ZXN0IG1hY2hpbmUKI1RBUkdFVF9JTUFHRSA9IC9ib290L3ZtbGludXotdGVzdAoKIyBBIHNjcmlwdCBvciBjb21tYW5kIHRvIHJlYm9vdCB0aGUgYm94CiMKIyBIZXJlIGlzIGEgZGlnaXRhbCBsb2dnZXJzIHBvd2VyIHN3aXRjaCBleGFtcGxlCiNQT1dFUl9DWUNMRSA9IHdnZXQgLS1uby1wcm94eSAtTyAvZGV2L251bGwgLXEgIC0tYXV0aC1uby1jaGFsbGVuZ2UgJ2h0dHA6Ly9hZG1pbjphZG1pbkBwb3dlci9vdXRsZXQ/NT1DQ0wnCiMKIyBIZXJlIGlzIGFuIGV4YW1wbGUgdG8gcmVib290IGEgdmlydHVhbCBib3ggb24gdGhlIGN1cnJlbnQgaG9zdAojIHdpdGggdGhlIG5hbWUgIkd1ZXN0Ii4KI1BPV0VSX0NZQ0xFID0gdmlyc2ggZGVzdHJveSBHdWVzdDsgc2xlZXAgNTsgdmlyc2ggc3RhcnQgR3Vlc3QKCiMgVGhlIHNjcmlwdCBvciBjb21tYW5kIHRoYXQgcmVhZHMgdGhlIGNvbnNvbGUKIwojICBJZiB5b3UgdXNlIHR0eXdhdGNoIHNlcnZlciwgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyB3b3VsZCB3b3JrLgojQ09OU09MRSA9IG5jIC1kIGxvY2FsaG9zdCAzMDAxCiMKIyBGb3IgYSB2aXJ0dWFsIG1hY2hpbmUgd2l0aCBndWVzdCBuYW1lICJHdWVzdCIuCiNDT05TT0xFID0gIHZpcnNoIGNvbnNvbGUgR3Vlc3QKCiMgUmVxdWlyZWQgdmVyc2lvbiBlbmRpbmcgdG8gZGlmZmVyZW50aWF0ZSB0aGUgdGVzdAojIGZyb20gb3RoZXIgbGludXggYnVpbGRzIG9uIHRoZSBzeXN0ZW0uCiNMT0NBTFZFUlNJT04gPSAtdGVzdAoKIyBUaGUgZ3J1YiB0aXRsZSBuYW1lIGZvciB0aGUgdGVzdCBrZXJuZWwgdG8gYm9vdAojIChPbmx5IG1hbmRhdG9yeSBpZiBSRUJPT1RfVFlQRSA9IGdydWIpCiMKIyBOb3RlLCBrdGVzdC5wbCB3aWxsIG5vdCB1cGRhdGUgdGhlIGdydWIgbWVudS5sc3QsIHlvdSBuZWVkIHRvCiMgbWFudWFsbHkgYWRkIGFuIG9wdGlvbiBmb3IgdGhlIHRlc3QuIGt0ZXN0LnBsIHdpbGwgc2VhcmNoCiMgdGhlIGdydWIgbWVudS5sc3QgZm9yIHRoaXMgb3B0aW9uIHRvIGZpbmQgd2hhdCBrZXJuZWwgdG8KIyByZWJvb3QgaW50by4KIwojIEZvciBleGFtcGxlLCBpZiBpbiB0aGUgL2Jvb3QvZ3J1Yi9tZW51LmxzdCB0aGUgdGVzdCBrZXJuZWwgdGl0bGUgaGFzOgojIHRpdGxlIFRlc3QgS2VybmVsCiMga2VybmVsIHZtbGludXotdGVzdAojR1JVQl9NRU5VID0gVGVzdCBLZXJuZWwKCiMgQSBzY3JpcHQgdG8gcmVib290IHRoZSB0YXJnZXQgaW50byB0aGUgdGVzdCBrZXJuZWwKIyAoT25seSBtYW5kYXRvcnkgaWYgUkVCT09UX1RZUEUgPSBzY3JpcHQpCiNSRUJPT1RfU0NSSVBUID0KCiMjIyMgT3B0aW9uYWwgQ29uZmlnIE9wdGlvbnMgKGFsbCBoYXZlIGRlZmF1bHRzKSAjIyMjCgojIFN0YXJ0IGEgdGVzdCBzZXR1cC4gSWYgeW91IGxlYXZlIHRoaXMgb2ZmLCBhbGwgb3B0aW9ucwojIHdpbGwgYmUgZGVmYXVsdCBhbmQgdGhlIHRlc3Qgd2lsbCBydW4gb25jZS4KIyBUaGlzIGlzIGEgbGFiZWwgYW5kIG5vdCByZWFsbHkgYW4gb3B0aW9uIChpdCB0YWtlcyBubyB2YWx1ZSkuCiMgWW91IGNhbiBhcHBlbmQgSVRFUkFURSBhbmQgYSBudW1iZXIgYWZ0ZXIgaXQgdG8gaXRlcmF0ZSB0aGUKIyB0ZXN0IGEgbnVtYmVyIG9mIHRpbWVzLCBvciBTS0lQIHRvIGlnbm9yZSB0aGlzIHRlc3QuCiMKI1RFU1RfU1RBUlQKI1RFU1RfU1RBUlQgSVRFUkFURSA1CiNURVNUX1NUQVJUIFNLSVAKCiMgSGF2ZSB0aGUgZm9sbG93aW5nIG9wdGlvbnMgYXMgZGVmYXVsdCBhZ2Fpbi4gVXNlZCBhZnRlciB0ZXN0cwojIGhhdmUgYWxyZWFkeSBiZWVuIGRlZmluZWQgYnkgVEVTVF9TVEFSVC4gT3B0aW9uYWxseSwgeW91IGNhbgojIGp1c3QgZGVmaW5lIGFsbCBkZWZhdWx0IG9wdGlvbnMgYmVmb3JlIHRoZSBmaXJzdCBURVNUX1NUQVJUCiMgYW5kIHlvdSBkbyBub3QgbmVlZCB0aGlzIG9wdGlvbi4KIwojIFRoaXMgaXMgYSBsYWJlbCBhbmQgbm90IHJlYWxseSBhbiBvcHRpb24gKGl0IHRha2VzIG5vIHZhbHVlKS4KIyBZb3UgY2FuIGFwcGVuZCBTS0lQIHRvIHRoaXMgbGFiZWwgYW5kIHRoZSBvcHRpb25zIHdpdGhpbiB0aGlzCiMgc2VjdGlvbiB3aWxsIGJlIGlnbm9yZWQuCiMKIyBERUZBVUxUUwojIERFRkFVTFRTIFNLSVAKCiMgVGhlIGRlZmF1bHQgdGVzdCB0eXBlIChkZWZhdWx0IHRlc3QpCiMgVGhlIHRlc3QgdHlwZXMgbWF5IGJlOgojICAgYnVpbGQgLSBvbmx5IGJ1aWxkIHRoZSBrZXJuZWwsIGRvIG5vdGhpbmcgZWxzZQojICAgYm9vdCAtIGJ1aWxkIGFuZCBib290IHRoZSBrZXJuZWwKIyAgIHRlc3QgLSBidWlsZCwgYm9vdCBhbmQgaWYgVEVTVCBpcyBzZXQsIHJ1biB0aGUgdGVzdCBzY3JpcHQKIyAgICAgICAgICAoSWYgVEVTVCBpcyBub3Qgc2V0LCBpdCBkZWZhdWx0cyBiYWNrIHRvIGJvb3QpCiMgICBiaXNlY3QgLSBQZXJmb3JtIGEgYmlzZWN0IG9uIHRoZSBrZXJuZWwgKHNlZSBCSVNFQ1RfVFlQRSBiZWxvdykKIyAgIHBhdGNoY2hlY2sgLSBEbyBhIHRlc3Qgb24gYSBzZXJpZXMgb2YgY29tbWl0cyBpbiBnaXQgKHNlZSBQQVRDSENIRUNLIGJlbG93KQojVEVTVF9UWVBFID0gdGVzdAoKIyBUZXN0IHRvIHJ1biBpZiB0aGVyZSBpcyBhIHN1Y2Nlc3NmdWwgYm9vdCBhbmQgVEVTVF9UWVBFIGlzIHRlc3QuCiMgTXVzdCBleGl0IHdpdGggMCBvbiBzdWNjZXNzIGFuZCBub24gemVybyBvbiBlcnJvcgojIGRlZmF1bHQgKHVuZGVmaW5lZCkKI1RFU1QgPSBzc2ggdXNlckBtYWNoaW5lIC9yb290L3J1bl90ZXN0CgojIFRoZSBidWlsZCB0eXBlIGlzIGFueSBtYWtlIGNvbmZpZyB0eXBlIG9yIHNwZWNpYWwgY29tbWFuZAojICAoZGVmYXVsdCByYW5kY29uZmlnKQojICAgbm9idWlsZCAtIHNraXAgdGhlIGNsZWFuIGFuZCBidWlsZCBzdGVwCiMgICB1c2Vjb25maWc6L3BhdGgvdG8vY29uZmlnIC0gdXNlIHRoZSBnaXZlbiBjb25maWcgYW5kIHJ1bgojICAgICAgICAgICAgICBvbGRjb25maWcgb24gaXQuCiMgVGhpcyBvcHRpb24gaXMgaWdub3JlZCBpZiBURVNUX1RZUEUgaXMgcGF0Y2hjaGVjayBvciBiaXNlY3QKI0JVSUxEX1RZUEUgPSByYW5kY29uZmlnCgojIFRoZSBtYWtlIGNvbW1hbmQgKGRlZmF1bHQgbWFrZSkKIyBJZiB5b3UgYXJlIGJ1aWxkaW5nIGEgMzJiaXQgeDg2IG9uIGEgNjQgYml0IGhvc3QKI01BS0VfQ01EID0gQ0M9aTM4Ni1nY2MgQVM9aTM4Ni1hcyBtYWtlIEFSQ0g9aTM4NgoKIyBBbnkgYnVpbGQgb3B0aW9ucyBmb3IgdGhlIG1ha2Ugb2YgdGhlIGtlcm5lbCAobm90IGZvciBvdGhlciBtYWtlcywgbGlrZSBjb25maWdzKQojIChkZWZhdWx0ICIiKQojQlVJTERfT1BUSU9OUyA9IC1qMjAKCiMgSWYgeW91IG5lZWQgYW4gaW5pdHJkLCB5b3UgY2FuIGFkZCBhIHNjcmlwdCBvciBjb2RlIGhlcmUgdG8gaW5zdGFsbAojIGl0LiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgS0VSTkVMX1ZFUlNJT04gd2lsbCBiZSBzZXQgdG8gdGhlCiMga2VybmVsIHZlcnNpb24gdGhhdCBpcyB1c2VkLiBSZW1lbWJlciB0byBhZGQgdGhlIGluaXRyZCBsaW5lCiMgdG8geW91ciBncnViIG1lbnUubHN0IGZpbGUuCiMKIyBIZXJlJ3MgYSBjb3VwbGUgb2YgZXhhbXBsZXMgdG8gdXNlOgojUE9TVF9JTlNUQUxMID0gc3NoIHVzZXJAdGFyZ2V0IC9zYmluL21raW5pdHJkIC0tYWxsb3ctbWlzc2luZyAtZiAvYm9vdC9pbml0cmFtZnMtdGVzdC5pbWcgJEtFUk5FTF9WRVJTSU9OCiMKIyBvciBvbiBzb21lIHN5c3RlbXM6CiNQT1NUX0lOU1RBTEwgPSBzc2ggdXNlckB0YXJnZXQgL3NiaW4vZHJhY3V0IC1mIC9ib290L2luaXRyYW1mcy10ZXN0LmltZyAkS0VSTkVMX1ZFUlNJT04KCiMgV2F5IHRvIHJlYm9vdCB0aGUgYm94IHRvIHRoZSB0ZXN0IGtlcm5lbC4KIyBPbmx5IHZhbGlkIG9wdGlvbnMgc28gZmFyIGFyZSAiZ3J1YiIgYW5kICJzY3JpcHQiCiMgKGRlZmF1bHQgZ3J1YikKIyBJZiB5b3Ugc3BlY2lmeSBncnViLCBpdCB3aWxsIGFzc3VtZSBncnViIHZlcnNpb24gMQojIGFuZCB3aWxsIHNlYXJjaCBpbiAvYm9vdC9ncnViL21lbnUubHN0IGZvciB0aGUgdGl0bGUgJEdSVUJfTUVOVQojIGFuZCBzZWxlY3QgdGhhdCB0YXJnZXQgdG8gcmVib290IHRvIHRoZSBrZXJuZWwuIElmIHRoaXMgaXMgbm90CiMgeW91ciBzZXR1cCwgdGhlbiBzcGVjaWZ5ICJzY3JpcHQiIGFuZCBoYXZlIGEgY29tbWFuZCBvciBzY3JpcHQKIyBzcGVjaWZpZWQgaW4gUkVCT09UX1NDUklQVCB0byBib290IHRvIHRoZSB0YXJnZXQuCiMKIyBUaGUgZW50cnkgaW4gL2Jvb3QvZ3J1Yi9tZW51LmxzdCBtdXN0IGJlIGVudGVyZWQgaW4gbWFudWFsbHkuCiMgVGhlIHRlc3Qgd2lsbCBub3QgbW9kaWZ5IHRoYXQgZmlsZS4KI1JFQk9PVF9UWVBFID0gZ3J1YgoKIyBUaGUgbWluIGNvbmZpZyB0aGF0IGlzIG5lZWRlZCB0byBidWlsZCBmb3IgdGhlIG1hY2hpbmUKIyBBIG5pY2Ugd2F5IHRvIGNyZWF0ZSB0aGlzIGlzIHdpdGggdGhlIGZvbGxvd2luZzoKIwojICAgJCBzc2ggdGFyZ2V0CiMgICAkIGxzbW9kID4gbXltb2RzCiMgICAkIHNjcCBteW1vZHMgaG9zdDovdG1wCiMgICAkIGV4aXQKIyAgICQgY2QgbGludXguZ2l0CiMgICAkIHJtIC5jb25maWcKIyAgICQgbWFrZSBMU01PRD1teW1vZHMgbG9jYWx5ZXNjb25maWcKIyAgICQgZ3JlcCAnXkNPTkZJRycgLmNvbmZpZyA+IC9ob21lL3Rlc3QvY29uZmlnLW1pbgojCiMgSWYgeW91IHdhbnQgZXZlbiBsZXNzIGNvbmZpZ3M6CiMKIyAgIGxvZyBpbiBkaXJlY3RseSB0byB0YXJnZXQgKGRvIG5vdCBzc2gpCiMKIyAgICQgc3UKIyAgICMgbHNtb2QgfCBjdXQgLWQnICcgLWYxIHwgeGFyZ3Mgcm1tb2QKIwojICAgcmVwZWF0IHRoZSBhYm92ZSBzZXZlcmFsIHRpbWVzCiMKIyAgICMgbHNtb2QgPiBteW1vZHMKIyAgICMgcmVib290CiMKIyBNYXkgbmVlZCB0byByZWJvb3QgdG8gZ2V0IHlvdXIgbmV0d29yayBiYWNrIHRvIGNvcHkgdGhlIG15bW9kcwojIHRvIHRoZSBob3N0LCBhbmQgdGhlbiByZW1vdmUgdGhlIHByZXZpb3VzIC5jb25maWcgYW5kIHJ1biB0aGUKIyBsb2NhbHllc2NvbmZpZyBhZ2Fpbi4gVGhlIENPTkZJR19NSU4gZ2VuZXJhdGVkIGxpa2UgdGhpcyB3aWxsCiMgbm90IGd1YXJhbnRlZSBuZXR3b3JrIGFjdGl2aXR5IHRvIHRoZSBib3ggc28gdGhlIFRFU1RfVFlQRSBvZgojIHRlc3QgbWF5IGZhaWwuCiMKIyBZb3UgbWlnaHQgYWxzbyB3YW50IHRvIHNldDoKIyAgIENPTkZJR19DTURMSU5FPSI8eW91ciBvcHRpb25zIGhlcmU+IgojICByYW5kY29uZmlnIG1heSBzZXQgdGhlIGFib3ZlIGFuZCBvdmVycmlkZSB5b3VyIHJlYWwgY29tbWFuZAojICBsaW5lIG9wdGlvbnMuCiMgKGRlZmF1bHQgdW5kZWZpbmVkKQojTUlOX0NPTkZJRyA9IC9ob21lL3Rlc3QvY29uZmlnLW1pbgoKIyBTb21ldGltZXMgdGhlcmUncyBvcHRpb25zIHRoYXQganVzdCBicmVhayB0aGUgYm9vdCBhbmQKIyB5b3UgZG8gbm90IGNhcmUgYWJvdXQuIEhlcmUgYXJlIGEgZmV3OgojICAgIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiMgIFN0YWdpbmcgZHJpdmVycyBhcmUgaG9ycmlibGUsIGFuZCBjYW4gYnJlYWsgdGhlIGJ1aWxkLgojICAgIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiMgIFNDU0lfREVCVUcgbWF5IGNoYW5nZSB5b3VyIHJvb3QgcGFydGl0aW9uCiMgICAjIENPTkZJR19LR0RCX1NFUklBTF9DT05TT0xFIGlzIG5vdCBzZXQKIyAgS0dEQiBtYXkgY2F1c2Ugb29wcyB3YWl0aW5nIGZvciBhIGNvbm5lY3Rpb24gdGhhdCdzIG5vdCB0aGVyZS4KIyBUaGlzIG9wdGlvbiBwb2ludHMgdG8gdGhlIGZpbGUgY29udGFpbmluZyBjb25maWcgb3B0aW9ucyB0aGF0IHdpbGwgYmUgcHJlcGVuZGVkCiMgdG8gdGhlIE1JTl9DT05GSUcgKG9yIGJlIHRoZSBNSU5fQ09ORklHIGlmIGl0IGlzIG5vdCBzZXQpCiMKIyBOb3RlLCBjb25maWcgb3B0aW9ucyBpbiBNSU5fQ09ORklHIHdpbGwgb3ZlcnJpZGUgdGhlc2Ugb3B0aW9ucy4KIwojIChkZWZhdWx0IHVuZGVmaW5lZCkKI0FERF9DT05GSUcgPSAvaG9tZS90ZXN0L2NvbmZpZy1icm9rZW4KCiMgVGhlIGxvY2F0aW9uIG9uIHRoZSBob3N0IHdoZXJlIHRvIHdyaXRlIHRlbXAgZmlsZXMKIyAoZGVmYXVsdCAvdG1wL2t0ZXN0KQojVE1QX0RJUiA9IC90bXAva3Rlc3QKCiMgT3B0aW9uYWwgbG9nIGZpbGUgdG8gd3JpdGUgdGhlIHN0YXR1cyAocmVjb21tZW5kZWQpCiMgIE5vdGUsIHRoaXMgaXMgYSBERUZBVUxUIHNlY3Rpb24gb25seSBvcHRpb24uCiMgKGRlZmF1bHQgdW5kZWZpbmVkKQojTE9HX0ZJTEUgPSAvaG9tZS90ZXN0L2xvZ2ZpbGVzL3RhcmdldC5sb2cKCiMgUmVtb3ZlIG9sZCBsb2dmaWxlIGlmIGl0IGV4aXN0cyBiZWZvcmUgc3RhcnRpbmcgYWxsIHRlc3RzLgojICBOb3RlLCB0aGlzIGlzIGEgREVGQVVMVCBzZWN0aW9uIG9ubHkgb3B0aW9uLgojIChkZWZhdWx0IDApCiNDTEVBUl9MT0cgPSAwCgojIExpbmUgdG8gZGVmaW5lIGEgc3VjY2Vzc2Z1bCBib290IHVwIGluIGNvbnNvbGUgb3V0cHV0LgojIFRoaXMgaXMgd2hhdCB0aGUgbGluZSBjb250YWlucywgbm90IHRoZSBlbnRpcmUgbGluZS4gSWYgeW91IG5lZWQKIyB0aGUgZW50aXJlIGxpbmUgdG8gbWF0Y2gsIHRoZW4gdXNlIHJlZ3VyYWwgZXhwcmVzc2lvbiBzeW50YXggbGlrZToKIyAgKGRvIG5vdCBhZGQgYW55IHF1b3RlcyBhcm91bmQgaXQpCiMKIyAgU1VDQ0VTU19MSU5FID0gXk15Qm94IExvZ2luOiQKIwojIChkZWZhdWx0ICJsb2dpbjoiKQojU1VDQ0VTU19MSU5FID0gbG9naW46CgojIEluIGNhc2UgdGhlIGNvbnNvbGUgY29uc3RhbnRseSBmaWxscyB0aGUgc2NyZWVuLCBoYXZpbmcKIyBhIHNwZWNpZmllZCB0aW1lIHRvIHN0b3AgdGhlIHRlc3QgYWZ0ZXIgc3VjY2VzcyBpcyByZWNvbW1lbmRlZC4KIyAoaW4gc2Vjb25kcykKIyAoZGVmYXVsdCAxMCkKI1NUT1BfQUZURVJfU1VDQ0VTUyA9IDEwCgojIEluIGNhc2UgdGhlIGNvbnNvbGUgY29uc3RhbnRseSBmaWxscyB0aGUgc2NyZWVuLCBoYXZpbmcKIyBhIHNwZWNpZmllZCB0aW1lIHRvIHN0b3AgdGhlIHRlc3QgYWZ0ZXIgZmFpbHVyZSBpcyByZWNvbW1lbmRlZC4KIyAoaW4gc2Vjb25kcykKIyAoZGVmYXVsdCA2MCkKI1NUT1BfQUZURVJfRkFJTFVSRSA9IDYwCgojIEluIGNhc2UgdGhlIGNvbnNvbGUgY29uc3RhbnRseSBmaWxscyB0aGUgc2NyZWVuLCBoYXZpbmcKIyBhIHNwZWNpZmllZCB0aW1lIHRvIHN0b3AgdGhlIHRlc3QgaWYgaXQgbmV2ZXIgc3VjY2VlZHMgbm9yIGZhaWxzCiMgaXMgcmVjb21tZW5kZWQuCiMgTm90ZTogdGhpcyBpcyBpZ25vcmVkIGlmIGEgc3VjY2VzcyBvciBmYWlsdXJlIGlzIGRldGVjdGVkLgojIChpbiBzZWNvbmRzKQojIChkZWZhdWx0IDYwMCwgLTEgaXMgdG8gbmV2ZXIgc3RvcCkKI1NUT1BfVEVTVF9BRlRFUiA9IDYwMAoKIyBTdG9wIHRlc3RpbmcgaWYgYSBidWlsZCBmYWlscy4gSWYgc2V0LCB0aGUgc2NyaXB0IHdpbGwgZW5kIGlmCiMgYSBmYWlsdXJlIGlzIGRldGVjdGVkLCBvdGhlcndpc2UgaXQgd2lsbCBzYXZlIG9mZiB0aGUgLmNvbmZpZywKIyBkbWVzZyBhbmQgYm9vdGxvZyBpbiBhIGRpcmVjdG9yeSBjYWxsZWQKIyBNQUNISU5FLVRFU1RfVFlQRV9CVUlMRF9UWVBFLWZhaWwteXl5eW1tZGRoaG1tc3MKIyBpZiB0aGUgU1RPUkVfRkFJTFVSRVMgZGlyZWN0b3J5IGlzIHNldC4KIyAoZGVmYXVsdCAxKQojIE5vdGUsIGV2ZW4gaWYgdGhpcyBpcyBzZXQgdG8gemVybywgdGhlcmUgYXJlIHNvbWUgZXJyb3JzIHRoYXQgc3RpbGwKIyBzdG9wIHRoZSB0ZXN0cy4KI0RJRV9PTl9GQUlMVVJFID0gMQoKIyBEaXJlY3RvcnkgdG8gc3RvcmUgZmFpbHVyZSBkaXJlY3RvcmllcyBvbiBmYWlsdXJlLiBJZiB0aGlzIGlzIG5vdAojIHNldCwgRElFX09OX0ZBSUxVUkU9MCB3aWxsIG5vdCBzYXZlIG9mZiB0aGUgLmNvbmZpZywgZG1lc2cgYW5kCiMgYm9vdGxvZy4gVGhpcyBvcHRpb24gaXMgaWdub3JlZCBpZiBESUVfT05fRkFJTFVSRSBpcyBub3Qgc2V0LgojIChkZWZhdWx0IHVuZGVmaW5lZCkKI1NUT1JFX0ZBSUxVUkVTID0gL2hvbWUvdGVzdC9mYWlsdXJlcwoKIyBCdWlsZCB3aXRob3V0IGRvaW5nIGEgbWFrZSBtcnByb3Blciwgb3IgcmVtb3ZpbmcgLmNvbmZpZwojIChkZWZhdWx0IDApCiNCVUlMRF9OT0NMRUFOID0gMAoKIyBBcyB0aGUgdGVzdCByZWFkcyB0aGUgY29uc29sZSwgYWZ0ZXIgaXQgaGl0cyB0aGUgU1VDQ0VTU19MSU5FCiMgdGhlIHRpbWUgaXQgd2FpdHMgZm9yIHRoZSBtb25pdG9yIHRvIHNldHRsZSBkb3duIGJldHdlZW4gcmVhZHMKIyBjYW4gdXN1YWxseSBiZSBsb3dlcmVkLgojIChpbiBzZWNvbmRzKSAoZGVmYXVsdCAxKQojQk9PVEVEX1RJTUVPVVQgPSAxCgojIFRoZSB0aW1lb3V0IGluIHNlY29uZHMgd2hlbiB3ZSBjb25zaWRlciB0aGUgYm94IGh1bmcgYWZ0ZXIKIyB0aGUgY29uc29sZSBzdG9wIHByb2R1Y2luZyBvdXRwdXQuIEJlIHN1cmUgdG8gbGVhdmUgZW5vdWdoCiMgdGltZSBoZXJlIHRvIGdldCBwYXNzIGEgcmVib290LiBTb21lIG1hY2hpbmVzIG1heSBub3QgcHJvZHVjZQojIGFueSBjb25zb2xlIG91dHB1dCBmb3IgYSBsb25nIHRpbWUgZHVyaW5nIGEgcmVib290LiBZb3UgZG8KIyBub3Qgd2FudCB0aGUgdGVzdCB0byBmYWlsIGp1c3QgYmVjYXVzZSB0aGUgc3lzdGVtIHdhcyBpbgojIHRoZSBwcm9jZXNzIG9mIHJlYm9vdGluZyB0byB0aGUgdGVzdCBrZXJuZWwuCiMgKGRlZmF1bHQgMTIwKQojVElNRU9VVCA9IDEyMAoKIyBJbiBiZXR3ZWVuIHRlc3RzLCBhIHJlYm9vdCBvZiB0aGUgYm94IG1heSBvY2N1ciwgYW5kIHRoaXMKIyBpcyB0aGUgdGltZSB0byB3YWl0IGZvciB0aGUgY29uc29sZSBhZnRlciBpdCBzdG9wcyBwcm9kdWNpbmcKIyBvdXRwdXQuIFNvbWUgbWFjaGluZXMgbWF5IG5vdCBwcm9kdWNlIGEgbGFyZ2UgbGFnIG9uIHJlYm9vdAojIHNvIHRoaXMgc2hvdWxkIGFjY29tbW9kYXRlIGl0LgojIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBhbmQgVElNRU9VVCwgaXMgdGhhdCBUSU1FT1VUIGhhcHBlbnMKIyB3aGVuIHJlYm9vdGluZyB0byB0aGUgdGVzdCBrZXJuZWwuIFRoaXMgc2xlZXAgdGltZSBoYXBwZW5zCiMgYWZ0ZXIgYSB0ZXN0IGhhcyBjb21wbGV0ZWQgYW5kIHdlIGFyZSBhYm91dCB0byBzdGFydCBydW5uaW5nCiMgYW5vdGhlciB0ZXN0LiBJZiBhIHJlYm9vdCB0byB0aGUgcmVsaWFibGUga2VybmVsIGhhcHBlbnMsCiMgd2Ugd2FpdCBTTEVFUF9USU1FIGZvciB0aGUgY29uc29sZSB0byBzdG9wIHByb2R1Y2luZyBvdXRwdXQKIyBiZWZvcmUgc3RhcnRpbmcgdGhlIG5leHQgdGVzdC4KIyAoZGVmYXVsdCA2MCkKI1NMRUVQX1RJTUUgPSA2MAoKIyBUaGUgdGltZSBpbiBiZXR3ZWVuIGJpc2VjdHMgdG8gc2xlZXAgKGluIHNlY29uZHMpCiMgKGRlZmF1bHQgNjApCiNCSVNFQ1RfU0xFRVBfVElNRSA9IDYwCgojIFRoZSB0aW1lIGluIGJldHdlZW4gcGF0Y2ggY2hlY2tzIHRvIHNsZWVwIChpbiBzZWNvbmRzKQojIChkZWZhdWx0IDYwKQojUEFUQ0hDSEVDS19TTEVFUF9USU1FID0gNjAKCiMgUmVib290IHRoZSB0YXJnZXQgYm94IG9uIGVycm9yIChkZWZhdWx0IDApCiNSRUJPT1RfT05fRVJST1IgPSAwCgojIFBvd2VyIG9mZiB0aGUgdGFyZ2V0IG9uIGVycm9yIChpZ25vcmVkIGlmIFJFQk9PVF9PTl9FUlJPUiBpcyBzZXQpCiMgIE5vdGUsIHRoaXMgaXMgYSBERUZBVUxUIHNlY3Rpb24gb25seSBvcHRpb24uCiMgKGRlZmF1bHQgMCkKI1BPV0VST0ZGX09OX0VSUk9SID0gMAoKIyBQb3dlciBvZmYgdGhlIHRhcmdldCBhZnRlciBhbGwgdGVzdHMgaGF2ZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5CiMgIE5vdGUsIHRoaXMgaXMgYSBERUZBVUxUIHNlY3Rpb24gb25seSBvcHRpb24uCiMgKGRlZmF1bHQgMCkKI1BPV0VST0ZGX09OX1NVQ0NFU1MgPSAwCgojIFJlYm9vdCB0aGUgdGFyZ2V0IGFmdGVyIGFsbCB0ZXN0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgKGRlZmF1bHQgMSkKIyAoaWdub3JlZCBpZiBQT1dFUk9GRl9PTl9TVUNDRVNTIGlzIHNldCkKI1JFQk9PVF9PTl9TVUNDRVNTID0gMQoKIyBJbiBjYXNlIHRoZXJlIGFyZSBpc3NlcyB3aXRoIHJlYm9vdGluZywgeW91IGNhbiBzcGVjaWZ5IHRoaXMKIyB0byBhbHdheXMgcG93ZXJjeWNsZSBhZnRlciB0aGlzIGFtb3VudCBvZiB0aW1lIGFmdGVyIGNhbGxpbmcKIyByZWJvb3QuCiMgTm90ZSwgUE9XRVJDWUNMRV9BRlRFUl9SRUJPT1QgPSAwIGRvZXMgTk9UIGRpc2FibGUgaXQuIEl0IGp1c3QKIyBtYWtlcyBpdCBwb3dlcmN5Y2xlIGltbWVkaWF0ZWx5IGFmdGVyIHJlYm9vdGluZy4gRG8gbm90IGRlZmluZQojIGl0IGlmIHlvdSBkbyBub3Qgd2FudCBpdC4KIyAoZGVmYXVsdCB1bmRlZmluZWQpCiNQT1dFUkNZQ0xFX0FGVEVSX1JFQk9PVCA9IDUKCiMgSW4gY2FzZSB0aGVyZSdzIGlzc2VzIHdpdGggaGFsdGluZywgeW91IGNhbiBzcGVjaWZ5IHRoaXMKIyB0byBhbHdheXMgcG93ZXJvZmYgYWZ0ZXIgdGhpcyBhbW91bnQgb2YgdGltZSBhZnRlciBjYWxsaW5nCiMgaGFsdC4KIyBOb3RlLCBQT1dFUk9GRl9BRlRFUl9IQUxUID0gMCBkb2VzIE5PVCBkaXNhYmxlIGl0LiBJdCBqdXN0CiMgbWFrZXMgaXQgcG93ZXJvZmYgaW1tZWRpYXRlbHkgYWZ0ZXIgaGFsdGluZy4gRG8gbm90IGRlZmluZQojIGl0IGlmIHlvdSBkbyBub3Qgd2FudCBpdC4KIyAoZGVmYXVsdCB1bmRlZmluZWQpCiNQT1dFUk9GRl9BRlRFUl9IQUxUID0gMjAKCiMgQSBzY3JpcHQgb3IgY29tbWFuZCB0byBwb3dlciBvZmYgdGhlIGJveCAoZGVmYXVsdCB1bmRlZmluZWQpCiMgTmVlZGVkIGZvciBQT1dFUk9GRl9PTl9FUlJPUiBhbmQgU1VDQ0VTUwojCiMgRXhhbXBsZSBmb3IgZGlnaXRhbCBsb2dnZXJzIHBvd2VyIHN3aXRjaDoKI1BPV0VSX09GRiA9IHdnZXQgLS1uby1wcm94eSAtTyAvZGV2L251bGwgLXEgIC0tYXV0aC1uby1jaGFsbGVuZ2UgJ2h0dHA6Ly9hZG1pbjphZG1pbkBwb3dlci9vdXRsZXQ/NT1PRkYnCiMKIyBFeGFtcGxlIGZvciBhIHZpcnR1YWwgZ3Vlc3QgY2FsbCAiR3Vlc3QiLgojUE9XRVJfT0ZGID0gdmlyc2ggZGVzdHJveSBHdWVzdAoKIyBUaGUgd2F5IHRvIGV4ZWN1dGUgYSBjb21tYW5kIG9uIHRoZSB0YXJnZXQKIyAoZGVmYXVsdCBzc2ggJFNTSF9VU0VSQCRNQUNISU5FICRTU0hfQ09NTUFORCI7KQojIFRoZSB2YXJpYWJsZXMgU1NIX1VTRVIsIE1BQ0hJTkUgYW5kIFNTSF9DT01NQU5EIGFyZSBkZWZpbmVkCiNTU0hfRVhFQyA9IHNzaCAkU1NIX1VTRVJAJE1BQ0hJTkUgJFNTSF9DT01NQU5EIjsKCiMgVGhlIHdheSB0byBjb3B5IGEgZmlsZSB0byB0aGUgdGFyZ2V0CiMgKGRlZmF1bHQgc2NwICRTUkNfRklMRSAkU1NIX1VTRVJAJE1BQ0hJTkU6JERTVF9GSUxFKQojIFRoZSB2YXJpYWJsZXMgU1NIX1VTRVIsIE1BQ0hJTkUsIFNSQ19GSUxFIGFuZCBEU1RfRklMRSBhcmUgZGVmaW5lZC4KI1NDUF9UT19UQVJHRVQgPSBzY3AgJFNSQ19GSUxFICRTU0hfVVNFUkAkTUFDSElORTokRFNUX0ZJTEUKCiMgVGhlIG5pY2Ugd2F5IHRvIHJlYm9vdCB0aGUgdGFyZ2V0CiMgKGRlZmF1bHQgc3NoICRTU0hfVVNFUkAkTUFDSElORSByZWJvb3QpCiMgVGhlIHZhcmlhYmxlcyBTU0hfVVNFUiBhbmQgTUFDSElORSBhcmUgZGVmaW5lZC4KI1JFQk9PVCA9IHNzaCAkU1NIX1VTRVJAJE1BQ0hJTkUgcmVib290CgojIyMjIFBlciB0ZXN0IHJ1biBvcHRpb25zICMjIyMKIyBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIG9ubHkgYWxsb3dlZCBpbiBURVNUX1NUQVJUIHNlY3Rpb25zLgojIFRoZXkgYXJlIGlnbm9yZWQgaW4gdGhlIERFRkFVTFRTIHNlY3Rpb25zLgojCiMgQWxsIG9mIHRoZXNlIGFyZSBvcHRpb25hbCBhbmQgdW5kZWZpbmVkIGJ5IGRlZmF1bHQsIGFsdGhvdWdoCiMgIHNvbWUgb2YgdGhlc2Ugb3B0aW9ucyBhcmUgcmVxdWlyZWQgZm9yIFRFU1RfVFlQRSBvZiBwYXRjaGNoZWNrCiMgIGFuZCBiaXNlY3QuCiMKIwojIENIRUNLT1VUID0gYnJhbmNoCiMKIyAgSWYgdGhlIEJVSUxEX0RJUiBpcyBhIGdpdCByZXBvc2l0b3J5LCB0aGVuIHlvdSBjYW4gc2V0IHRoaXMgb3B0aW9uCiMgIHRvIGNoZWNrb3V0IHRoZSBnaXZlbiBicmFuY2ggYmVmb3JlIHJ1bm5pbmcgdGhlIFRFU1QuIElmIHlvdQojICBzcGVjaWZ5IHRoaXMgZm9yIHRoZSBmaXJzdCBydW4sIHRoYXQgYnJhbmNoIHdpbGwgYmUgdXNlZCBmb3IKIyAgYWxsIHByZWNlZGluZyB0ZXN0cyB1bnRpbCBhIG5ldyBDSEVDS09VVCBpcyBzZXQuCiMKIwojCiMgRm9yIFRFU1RfVFlQRSA9IHBhdGNoY2hlY2sKIwojICBUaGlzIGV4cGVjdHMgdGhlIEJVSUxEX0RJUiB0byBiZSBhIGdpdCByZXBvc2l0b3J5LCBhbmQKIyAgd2lsbCBjaGVja291dCB0aGUgUEFUQ0hDSEVDS19TVEFSVCBjb21taXQuCiMKIyAgVGhlIG9wdGlvbiBCVUlMRF9UWVBFIHdpbGwgYmUgaWdub3JlZC4KIwojICBUaGUgTUlOX0NPTkZJRyB3aWxsIGJlIHVzZWQgZm9yIGFsbCBidWlsZHMgb2YgdGhlIHBhdGNoY2hlY2suIFRoZSBidWlsZCB0eXBlCiMgIHVzZWQgZm9yIHBhdGNoY2hlY2sgaXMgb2xkY29uZmlnLgojCiMgIFBBVENIQ0hFQ0tfU1RBUlQgaXMgcmVxdWlyZWQgYW5kIGlzIHRoZSBmaXJzdCBwYXRjaCB0bwojICAgdGVzdCAodGhlIFNIQTEgb2YgdGhlIGNvbW1pdCkuIFlvdSBtYXkgYWxzbyBzcGVjaWZ5IGFueXRoaW5nCiMgICB0aGF0IGdpdCBjaGVja291dCBhbGxvd3MgKGJyYW5jaCBuYW1lLCB0YWdlLCBIRUFEfjMpLgojCiMgIFBBVENIQ0hFQ0tfRU5EIGlzIHRoZSBsYXN0IHBhdGNoIHRvIGNoZWNrIChkZWZhdWx0IEhFQUQpCiMKIyAgUEFUQ0hDSEVDS19UWVBFIGlzIHJlcXVpcmVkIGFuZCBpcyB0aGUgdHlwZSBvZiB0ZXN0IHRvIHJ1bjoKIyAgICAgIGJ1aWxkLCBib290LCB0ZXN0LgojCiMgICBOb3RlLCB0aGUgYnVpbGQgdGVzdCB3aWxsIGxvb2sgZm9yIHdhcm5pbmdzLCBpZiBhIHdhcm5pbmcgb2NjdXJyZWQKIyAgICAgaW4gYSBmaWxlIHRoYXQgYSBjb21taXQgdG91Y2hlcywgdGhlIGJ1aWxkIHdpbGwgZmFpbC4KIwojICAgSWYgQlVJTERfTk9DTEVBTiBpcyBzZXQsIHRoZW4gbWFrZSBtcnByb3BlciB3aWxsIG5vdCBiZSBydW4gb24KIyAgIGFueSBvZiB0aGUgYnVpbGRzLCBqdXN0IGxpa2UgYWxsIG90aGVyIFRFU1RfVFlQRSB0ZXN0cy4gQnV0CiMgICB3aGF0IG1ha2VzIHBhdGNoY2hlY2sgZGlmZmVyZW50IGZyb20gdGhlIG90aGVyIHRlc3RzLCBpcyBpZgojICAgQlVJTERfTk9DTEVBTiBpcyBub3Qgc2V0LCBvbmx5IHRoZSBmaXJzdCBhbmQgbGFzdCBwYXRjaCBydW4KIyAgIG1ha2UgbXJwcm9wZXIuIFRoaXMgaGVscHMgc3BlZWQgdXAgdGhlIHRlc3QuCiMKIyBFeGFtcGxlOgojICAgVEVTVF9TVEFSVAojICAgVEVTVF9UWVBFID0gcGF0Y2hjaGVjawojICAgQ0hFQ0tPVVQgPSBteWJyYW5jaAojICAgUEFUQ0hDSEVDS19UWVBFID0gYm9vdAojICAgUEFUQ0hDSEVDS19TVEFSVCA9IDc0N2U5NGFlM2QxYjRjOWJmNTM4MGU1NjlmNjE0ZWI5MDQwYjc5ZTcKIyAgIFBBVENIQ0hFQ0tfRU5EID0gSEVBRH4yCiMKIwojCiMgRm9yIFRFU1RfVFlQRSA9IGJpc2VjdAojCiMgIFlvdSBjYW4gc3BlY2lmeSBhIGdpdCBiaXNlY3QgaWYgdGhlIEJVSUxEX0RJUiBpcyBhIGdpdCByZXBvc2l0b3J5LgojICBUaGUgTUlOX0NPTkZJRyB3aWxsIGJlIHVzZWQgZm9yIGFsbCBidWlsZHMgb2YgdGhlIGJpc2VjdC4gVGhlIGJ1aWxkIHR5cGUKIyAgdXNlZCBmb3IgYmlzZWN0aW5nIGlzIG9sZGNvbmZpZy4KIwojICBUaGUgb3B0aW9uIEJVSUxEX1RZUEUgd2lsbCBiZSBpZ25vcmVkLgojCiMgIEJJU0VDVF9UWVBFIGlzIHRoZSB0eXBlIG9mIHRlc3QgdG8gcGVyZm9ybToKIwlidWlsZAktIGJhZCBmYWlscyB0byBidWlsZAojCWJvb3QJLSBiYWQgYnVpbGRzIGJ1dCBmYWlscyB0byBib290CiMJdGVzdAktIGJhZCBib290cyBidXQgZmFpbHMgYSB0ZXN0CiMKIyBCSVNFQ1RfR09PRCBpcyB0aGUgY29tbWl0IChTSEExKSB0byBsYWJlbCBhcyBnb29kIChhY2NlcHRzIGFsbCBnaXQgZ29vZCBjb21taXQgdHlwZXMpCiMgQklTRUNUX0JBRCBpcyB0aGUgY29tbWl0IHRvIGxhYmVsIGFzIGJhZCAoYWNjZXB0cyBhbGwgZ2l0IGJhZCBjb21taXQgdHlwZXMpCiMKIyBUaGUgYWJvdmUgdGhyZWUgb3B0aW9ucyBhcmUgcmVxdWlyZWQgZm9yIGEgYmlzZWN0IG9wZXJhdGlvbi4KIwojIEJJU0VDVF9SRVBMQVkgPSAvcGF0aC90by9yZXBsYXkvZmlsZSAob3B0aW9uYWwsIGRlZmF1bHQgdW5kZWZpbmVkKQojCiMgICBJZiBhbiBvcGVyYXRpb24gZmFpbGVkIGluIHRoZSBiaXNlY3QgdGhhdCB3YXMgbm90IGV4cGVjdGVkIHRvCiMgICBmYWlsLiBUaGVuIHRoZSB0ZXN0IGVuZHMuIFRoZSBzdGF0ZSBvZiB0aGUgQlVJTERfRElSIHdpbGwgYmUKIyAgIGxlZnQgb2ZmIGF0IHdoZXJlIHRoZSBmYWlsdXJlIG9jY3VycmVkLiBZb3UgY2FuIGV4YW1pbmUgdGhlCiMgICByZWFzb24gZm9yIHRoZSBmYWlsdXJlLCBhbmQgcGVyaGFwcyBldmVuIGZpbmQgYSBnaXQgY29tbWl0CiMgICB0aGF0IHdvdWxkIHdvcmsgdG8gY29udGludWUgd2l0aC4gWW91IGNhbiBydW46CiMKIyAgIGdpdCBiaXNlY3QgbG9nID4gL3BhdGgvdG8vcmVwbGF5L2ZpbGUKIwojICAgVGhlIGFkZGluZzoKIwojICAgIEJJU0VDVF9SRVBMQVk9IC9wYXRoL3RvL3JlcGxheS9maWxlCiMKIyAgIEFuZCBydW5uaW5nIHRoZSB0ZXN0IGFnYWluLiBUaGUgdGVzdCB3aWxsIHBlcmZvcm0gdGhlIGluaXRpYWwKIyAgICBnaXQgYmlzZWN0IHN0YXJ0LCBnaXQgYmlzZWN0IGdvb2QsIGFuZCBnaXQgYmlzZWN0IGJhZCwgYW5kCiMgICAgdGhlbiBpdCB3aWxsIHJ1biBnaXQgYmlzZWN0IHJlcGxheSBvbiB0aGlzIGZpbGUsIGJlZm9yZQojICAgIGNvbnRpbnVpbmcgd2l0aCB0aGUgYmlzZWN0LgojCiMgQklTRUNUX1NUQVJUID0gY29tbWl0IChvcHRpb25hbCwgZGVmYXVsdCB1bmRlZmluZWQpCiMKIyAgIEFzIHdpdGggQklTRUNUX1JFUExBWSwgaWYgdGhlIHRlc3QgZmFpbGVkIG9uIGEgY29tbWl0IHRoYXQKIyAgIGp1c3QgaGFwcGVuIHRvIGhhdmUgYSBiYWQgY29tbWl0IGluIHRoZSBtaWRkbGUgb2YgdGhlIGJpc2VjdCwKIyAgIGFuZCB5b3UgbmVlZCB0byBza2lwIGl0LiBJZiBCSVNFQ1RfU1RBUlQgaXMgZGVmaW5lZCwgaXQKIyAgIHdpbGwgY2hlY2tvdXQgdGhhdCBjb21taXQgYWZ0ZXIgZG9pbmcgdGhlIGluaXRpYWwgZ2l0IGJpc2VjdCBzdGFydCwKIyAgIGdpdCBiaXNlY3QgZ29vZCwgZ2l0IGJpc2VjdCBiYWQsIGFuZCBydW5uaW5nIHRoZSBnaXQgYmlzZWN0IHJlcGxheQojICAgaWYgdGhlIEJJU0VDVF9SRVBMQVkgaXMgc2V0LgojCiMgQklTRUNUX1NLSVAgPSAxIChvcHRpb25hbCwgZGVmYXVsdCAwKQojCiMgICBJZiBCSVNFQ1RfVFlQRSBpcyBzZXQgdG8gdGVzdCBidXQgdGhlIGJ1aWxkIGZhaWxzLCBrdGVzdCB3aWxsCiMgICBzaW1wbHkgZmFpbCB0aGUgdGVzdCBhbmQgZW5kIHRoZWlyLiBZb3UgY291bGQgdXNlIEJJU0VDVF9SRVBMQVkKIyAgIGFuZCBCSVNFQ1RfU1RBUlQgdG8gcmVzdW1lIGFmdGVyIHlvdSBmb3VuZCBhIG5ldyBzdGFydGluZyBwb2ludCwKIyAgIG9yIHlvdSBjb3VsZCBzZXQgQklTRUNUX1NLSVAgdG8gMS4gSWYgQklTRUNUX1NLSVAgaXMgc2V0IHRvIDEsCiMgICB3aGVuIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBCSVNFQ1RfVFlQRSBmYWlscywga3Rlc3QucGwgd2lsbAojICAgcnVuICJnaXQgYmlzZWN0IHNraXAiIGFuZCB0cnkgYWdhaW4uCiMKIyBCSVNFQ1RfRklMRVMgPSA8cGF0aD4gKG9wdGlvbmFsLCBkZWZhdWx0IHVuZGVmaW5lZCkKIwojICAgVG8ganVzdCBydW4gdGhlIGdpdCBiaXNlY3Qgb24gYSBzcGVjaWZpYyBwYXRoLCBzZXQgQklTRUNUX0ZJTEVTLgojICAgRm9yIGV4YW1wbGU6CiMKIyAgICAgQklTRUNUX0ZJTEVTID0gYXJjaC94ODYga2VybmVsL3RpbWUKIwojICAgV2lsbCBydW4gdGhlIGJpc2VjdCB3aXRoICJnaXQgYmlzZWN0IHN0YXJ0IC0tIGFyY2gveDg2IGtlcm5lbC90aW1lIgojCiMgQklTRUNUX1JFVkVSU0UgPSAxIChvcHRpb25hbCwgZGVmYXVsdCAwKQojCiMgICBJbiB0aG9zZSBzdHJhbmdlIGluc3RhbmNlcyB3aGVyZSBpdCB3YXMgYnJva2VuIGZvcmV2ZXIKIyAgIGFuZCB5b3UgYXJlIHRyeWluZyB0byBmaW5kIHdoZXJlIGl0IHN0YXJ0ZWQgdG8gd29yayEKIyAgIFNldCBCSVNFQ1RfR09PRCB0byB0aGUgY29tbWl0IHRoYXQgd2FzIGxhc3Qga25vd24gdG8gZmFpbAojICAgU2V0IEJJU0VDVF9CQUQgdG8gdGhlIGNvbW1pdCB0aGF0IGlzIGtub3duIHRvIHN0YXJ0IHdvcmtpbmcuCiMgICBXaXRoIEJJU0VDVF9SRVZFUlNFID0gMSwgVGhlIHRlc3Qgd2lsbCBjb25zaWRlciBmYWlsdXJlcyBhcwojICAgZ29vZCwgYW5kIHN1Y2Nlc3MgYXMgYmFkLgojCiMgQklTRUNUX01BTlVBTCA9IDEgKG9wdGlvbmFsLCBkZWZhdWx0IDApCiMKIyAgIEluIGNhc2UgdGhlcmUncyBhIHByb2JsZW0gd2l0aCBhdXRvbWF0aW5nIHRoZSBiaXNlY3QgZm9yCiMgICB3aGF0ZXZlciByZWFzb24uIChDYW4ndCByZWJvb3QsIHdhbnQgdG8gaW5zcGVjdCBlYWNoIGl0ZXJhdGlvbikKIyAgIERvaW5nIGEgQklTRUNUX01BTlVBTCB3aWxsIGhhdmUgdGhlIHRlc3Qgd2FpdCBmb3IgeW91IHRvCiMgICB0ZWxsIGl0IGlmIHRoZSB0ZXN0IHBhc3NlZCBvciBmYWlsZWQgYWZ0ZXIgZWFjaCBpdGVyYXRpb24uCiMgICBUaGlzIGlzIGJhc2ljYWxsIHRoZSBzYW1lIGFzIHJ1bm5pbmcgZ2l0IGJpc2VjdCB5b3Vyc2VsZgojICAgYnV0IGt0ZXN0IHdpbGwgcmVidWlsZCBhbmQgaW5zdGFsbCB0aGUga2VybmVsIGZvciB5b3UuCiMKIyBCSVNFQ1RfQ0hFQ0sgPSAxIChvcHRpb25hbCwgZGVmYXVsdCAwKQojCiMgICBKdXN0IHRvIGJlIHN1cmUgdGhlIGdvb2QgaXMgZ29vZCBhbmQgYmFkIGlzIGJhZCwgc2V0dGluZwojICAgQklTRUNUX0NIRUNLIHRvIDEgd2lsbCBzdGFydCB0aGUgYmlzZWN0IGJ5IGZpcnN0IGNoZWNraW5nCiMgICBvdXQgQklTRUNUX0JBRCBhbmQgbWFrZXMgc3VyZSBpdCBmYWlscywgdGhlbiBpdCB3aWxsIGNoZWNrCiMgICBvdXQgQklTRUNUX0dPT0QgYW5kIG1ha2VzIHN1cmUgaXQgc3VjY2VlZHMgYmVmb3JlIHN0YXJ0aW5nCiMgICB0aGUgYmlzZWN0IChpdCB3b3JrcyBmb3IgQklTRUNUX1JFVkVSU0UgdG9vKS4KIwojICAgWW91IGNhbiBsaW1pdCB0aGUgdGVzdCB0byBqdXN0IGNoZWNrIEJJU0VDVF9HT09EIG9yCiMgICBCSVNFQ1RfQkFEIHdpdGggQklTRUNUX0NIRUNLID0gZ29vZCBvcgojICAgQklTRUNUX0NIRUNLID0gYmFkLCByZXNwZWN0aXZlbHkuCiMKIyBFeGFtcGxlOgojICAgVEVTVF9TVEFSVAojICAgVEVTVF9UWVBFID0gYmlzZWN0CiMgICBCSVNFQ1RfR09PRCA9IHYyLjYuMzYKIyAgIEJJU0VDVF9CQUQgPSBiNTE1MzE2M2VkNTgwZTAwYzY3YmRmZWNiMDJiMmUzODQzODE3YjNlCiMgICBCSVNFQ1RfVFlQRSA9IGJ1aWxkCiMgICBNSU5fQ09ORklHID0gL2hvbWUvdGVzdC9jb25maWctYmlzZWN0CiMKIwojCiMgRm9yIFRFU1RfVFlQRSA9IGNvbmZpZ19iaXNlY3QKIwojICBJbiB0aG9zZSBjYXNlcyB0aGF0IHlvdSBoYXZlIHR3byBkaWZmZXJlbnQgY29uZmlncy4gT25lIG9mIHRoZW0KIyAgd29yaywgdGhlIG90aGVyIGRvZXMgbm90LCBhbmQgeW91IGRvIG5vdCBrbm93IHdoYXQgY29uZmlnIGNhdXNlcwojICB0aGUgcHJvYmxlbS4KIyAgVGhlIFRFU1RfVFlQRSBjb25maWdfYmlzZWN0IHdpbGwgYmlzZWN0IHRoZSBiYWQgY29uZmlnIGxvb2tpbmcgZm9yCiMgIHdoYXQgY29uZmlnIGNhdXNlcyB0aGUgZmFpbHVyZS4KIwojICBUaGUgd2F5IGl0IHdvcmtzIGlzIHRoaXM6CiMKIyAgIEZpcnN0IGl0IGZpbmRzIGEgY29uZmlnIHRvIHdvcmsgd2l0aC4gU2luY2UgYSBkaWZmZXJlbnQgdmVyc2lvbiwgb3IKIyAgIE1JTl9DT05GSUcgbWF5IGNhdXNlIGRpZmZlcmVudCBkZXBlbmRlY2llcywgaXQgbXVzdCBydW4gdGhyb3VnaCB0aGlzCiMgICBwcmVwYXJhdGlvbi4KIwojICAgT3ZlcndyaXRlcyBhbnkgY29uZmlnIHNldCBpbiB0aGUgYmFkIGNvbmZpZyB3aXRoIGEgY29uZmlnIHNldCBpbgojICAgZWl0aGVyIHRoZSBNSU5fQ09ORklHIG9yIEFERF9DT05GSUcuIFRodXMsIG1ha2Ugc3VyZSB0aGVzZSBjb25maWdzCiMgICBhcmUgbWluaW1hbCBhbmQgZG8gbm90IGRpc2FibGUgY29uZmlncyB5b3Ugd2FudCB0byB0ZXN0OgojICAgKGllLiAgIyBDT05GSUdfRk9PIGlzIG5vdCBzZXQpLgojCiMgICBBbiBvbGRjb25maWcgaXMgcnVuIG9uIHRoZSBiYWQgY29uZmlnIGFuZCBhbnkgbmV3IGNvbmZpZyB0aGF0CiMgICBhcHBlYXJzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGNvbmZpZ3MgdG8gdGVzdC4KIwojICAgRmluYWxseSwgaXQgZ2VuZXJhdGVzIGEgY29uZmlnIHdpdGggdGhlIGFib3ZlIHJlc3VsdCBhbmQgcnVucyBpdAojICAgYWdhaW4gdGhyb3VnaCBtYWtlIG9sZGNvbmZpZyB0byBwcm9kdWNlIGEgY29uZmlnIHRoYXQgc2hvdWxkIGJlCiMgICBzYXRpc2ZpZWQgYnkga2NvbmZpZy4KIwojICAgVGhlbiBpdCBzdGFydHMgdGhlIGJpc2VjdC4KIwojICAgVGhlIGNvbmZpZ3MgdG8gdGVzdCBhcmUgY3V0IGluIGhhbGYuIElmIGFsbCB0aGUgY29uZmlncyBpbiB0aGlzCiMgICBoYWxmIGRlcGVuZCBvbiBhIGNvbmZpZyBpbiB0aGUgb3RoZXIgaGFsZiwgdGhlbiB0aGUgb3RoZXIgaGFsZgojICAgaXMgdGVzdGVkIGluc3RlYWQuIElmIG5vIGNvbmZpZ3MgYXJlIGVuYWJsZWQgYnkgZWl0aGVyIGhhbGYsIHRoZW4KIyAgIHRoaXMgbWVhbnMgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGV4aXN0cyBhbmQgdGhlIHRlc3QgZmFpbHMuCiMKIyAgIEEgY29uZmlnIGlzIGNyZWF0ZWQgd2l0aCB0aGUgdGVzdCBoYWxmLCBhbmQgdGhlIGJpc2VjdCB0ZXN0IGlzIHJ1bi4KIwojICAgSWYgdGhlIGJpc2VjdCBzdWNjZWVkcywgdGhlbiBhbGwgY29uZmlncyBpbiB0aGUgZ2VuZXJhdGVkIGNvbmZpZwojICAgYXJlIHJlbW92ZWQgZnJvbSB0aGUgY29uZmlncyB0byB0ZXN0IGFuZCBhZGRlZCB0byB0aGUgY29uZmlncyB0aGF0CiMgICB3aWxsIGJlIGVuYWJsZWQgZm9yIGFsbCBidWlsZHMgKHRoZXkgd2lsbCBiZSBlbmFibGVkLCBidXQgbm90IGJlIHBhcnQKIyAgIG9mIHRoZSBjb25maWdzIHRvIGV4YW1pbmUpLgojCiMgICBJZiB0aGUgYmlzZWN0IGZhaWxzLCB0aGVuIGFsbCB0ZXN0IGNvbmZpZ3MgdGhhdCB3ZXJlIG5vdCBlbmFibGVkIGJ5CiMgICB0aGUgY29uZmlnIGZpbGUgYXJlIHJlbW92ZWQgZnJvbSB0aGUgdGVzdC4gVGhlc2UgY29uZmlncyB3aWxsIG5vdAojICAgYmUgZW5hYmxlZCBpbiBmdXR1cmUgdGVzdHMuIFNpbmNlIGN1cnJlbnQgY29uZmlnIGZhaWxlZCwgd2UgY29uc2lkZXIKIyAgIHRoaXMgdG8gYmUgYSBzdWJzZXQgb2YgdGhlIGNvbmZpZyB0aGF0IHdlIHN0YXJ0ZWQgd2l0aC4KIwojICAgV2hlbiB3ZSBhcmUgZG93biB0byBvbmUgY29uZmlnLCBpdCBpcyBjb25zaWRlcmVkIHRoZSBiYWQgY29uZmlnLgojCiMgICBOb3RlLCB0aGUgY29uZmlnIGNob3NlbiBtYXkgbm90IGJlIHRoZSB0cnVlIGJhZCBjb25maWcuIER1ZSB0bwojICAgZGVwZW5kZW5jaWVzIGFuZCBzZWxlY3Rpb25zIG9mIHRoZSBrYnVpbGQgc3lzdGVtLCBtdWxpdHBsZQojICAgY29uZmlncyBtYXkgYmUgbmVlZGVkIHRvIGNhdXNlIGEgZmFpbHVyZS4gSWYgeW91IGRpc2FibGUgdGhlCiMgICBjb25maWcgdGhhdCB3YXMgZm91bmQgYW5kIHJlc3RhcnQgdGhlIHRlc3QsIGlmIHRoZSB0ZXN0IGZhaWxzCiMgICBhZ2FpbiwgaXQgaXMgcmVjb21tZW5kZWQgdG8gcmVydW4gdGhlIGNvbmZpZ19iaXNlY3Qgd2l0aCBhIG5ldwojICAgYmFkIGNvbmZpZyB3aXRob3V0IHRoZSBmb3VuZCBjb25maWcgZW5hYmxlZC4KIwojICBUaGUgb3B0aW9uIEJVSUxEX1RZUEUgd2lsbCBiZSBpZ25vcmVkLgojCiMgIENPTkZJR19CSVNFQ1RfVFlQRSBpcyB0aGUgdHlwZSBvZiB0ZXN0IHRvIHBlcmZvcm06CiMJYnVpbGQJLSBiYWQgZmFpbHMgdG8gYnVpbGQKIwlib290CS0gYmFkIGJ1aWxkcyBidXQgZmFpbHMgdG8gYm9vdAojCXRlc3QJLSBiYWQgYm9vdHMgYnV0IGZhaWxzIGEgdGVzdAojCiMgICBDT05GSUdfQklTRUNUIGlzIHRoZSBjb25maWcgdGhhdCBmYWlsZWQgdG8gYm9vdAojCiMgICBJZiBCSVNFQ1RfTUFOVUFMIGlzIHNldCwgaXQgd2lsbCBwYXVzZSBiZXR3ZWVuIGl0ZXJhdGlvbnMuCiMgICBUaGlzIGlzIHVzZWZ1bCB0byB1c2UganVzdCBrdGVzdC5wbCBqdXN0IGZvciB0aGUgY29uZmlnIGJpc2VjdC4KIyAgIElmIHlvdSBzZXQgaXQgdG8gYnVpbGQsIGl0IHdpbGwgcnVuIHRoZSBiaXNlY3QgYW5kIHlvdSBjYW4KIyAgIGNvbnRyb2wgd2hhdCBoYXBwZW5zIGluIGJldHdlZW4gaXRlcmF0aW9ucy4gSXQgd2lsbCBhc2sgeW91IGlmCiMgICB0aGUgdGVzdCBzdWNjZWVkZWQgb3Igbm90IGFuZCBjb250aW51ZSB0aGUgY29uZmlnIGJpc2VjdC4KIwojIEV4YW1wbGU6CiMgICBURVNUX1NUQVJUCiMgICBURVNUX1RZUEUgPSBjb25maWdfYmlzZWN0CiMgICBDT05GSUdfQklTRUNUX1RZUEUgPSBidWlsZAojICAgQ09ORklHX0JJU0VDVCA9IC9ob21lL3Rlc3Qvom9uZmlnLWJhZAojICAgTUlOX0NPTkZJRyA9IC9ob21lL3Rlc3QvY29uZmlnLW1pbgojICAgQklTRUNUX01BTlVBTCA9IDEKIwo=