IwojIENvbmZpZyBmaWxlIGZvciBrdGVzdC5wbAojCiMgTm90ZSwgYWxsIHBhdGhzIG11c3QgYmUgYWJzb2x1dGUKIwoKIyBPcHRpb25zIHNldCBpbiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIGFyZSBjb25zaWRlcmVkIHRvIGJlCiMgZGVmYXVsdCBvcHRpb25zLiBUaGVzZSBvcHRpb25zIGNhbiBiZSBvdmVycmlkZW4gYnkgdGVzdCBzcGVjaWZpYwojIG9wdGlvbnMsIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOgojCiMgIExPR19GSUxFCiMgIENMRUFSX0xPRwojICBQT1dFUk9GRl9PTl9TVUNDRVNTCiMgIFJFQk9PVF9PTl9TVUNDRVNTCiMKIyBUZXN0IHNwZWNpZmljIG9wdGlvbnMgYXJlIHNldCBhZnRlciB0aGUgbGFiZWw6CiMKIyBURVNUX1NUQVJUCiMKIyBUaGUgb3B0aW9ucyBhZnRlciBhIFRFU1RfU1RBUlQgbGFiZWwgYXJlIHNwZWNpZmljIHRvIHRoYXQgdGVzdC4KIyBFYWNoIFRFU1RfU1RBUlQgbGFiZWwgd2lsbCBzZXQgdXAgYSBuZXcgdGVzdC4gSWYgeW91IHdhbnQgdG8KIyBwZXJmb3JtIGEgdGVzdCBtb3JlIHRoYW4gb25jZSwgeW91IGNhbiBhZGQgdGhlIElURVJBVEUgbGFiZWwKIyB0byBpdCBmb2xsb3dlZCBieSB0aGUgbnVtYmVyIG9mIHRpbWVzIHlvdSB3YW50IHRoYXQgdGVzdAojIHRvIGl0ZXJhdGUuIElmIHRoZSBJVEVSQVRFIGlzIGxlZnQgb2ZmLCB0aGUgdGVzdCB3aWxsIG9ubHkKIyBiZSBwZXJmb3JtZWQgb25jZS4KIwojIFRFU1RfU1RBUlQgSVRFUkFURSAxMAojCiMgWW91IGNhbiBza2lwIGEgdGVzdCBieSBhZGRpbmcgU0tJUCAoYmVmb3JlIG9yIGFmdGVyIHRoZSBJVEVSQVRFCiMgYW5kIG51bWJlcikKIwojIFRFU1RfU1RBUlQgU0tJUAojCiMgVEVTVF9TVEFSVCBTS0lQIElURVJBVEUgMTAKIwojIFRFU1RfU1RBUlQgSVRFUkFURSAxMCBTS0lQCiMKIyBUaGUgU0tJUCBsYWJlbCBjYXVzZXMgdGhlIG9wdGlvbnMgYW5kIHRoZSB0ZXN0IGl0c2VsZiB0byBiZSBpZ25vcmVkLgojIFRoaXMgaXMgdXNlZnVsIHRvIHNldCB1cCBzZXZlcmFsIGRpZmZlcmVudCB0ZXN0cyBpbiBvbmUgY29uZmlnIGZpbGUsIGFuZAojIG9ubHkgZW5hYmxpbmcgdGhlIG9uZXMgeW91IHdhbnQgdG8gdXNlIGZvciBhIGN1cnJlbnQgdGVzdCBydW4uCiMKIyBZb3UgY2FuIGFkZCBkZWZhdWx0IG9wdGlvbnMgYW55d2hlcmUgaW4gdGhlIGZpbGUgYXMgd2VsbAojIHdpdGggdGhlIERFRkFVTFRTIHRhZy4gVGhpcyBhbGxvd3MgeW91IHRvIGhhdmUgZGVmYXVsdCBvcHRpb25zCiMgYWZ0ZXIgdGhlIHRlc3Qgb3B0aW9ucyB0byBrZWVwIHRoZSB0ZXN0IG9wdGlvbnMgYXQgdGhlIHRvcAojIG9mIHRoZSBmaWxlLiBZb3UgY2FuIGV2ZW4gcGxhY2UgdGhlIERFRkFVTFRTIHRhZyBiZXR3ZWVuCiMgdGVzdCBjYXNlcyAoYnV0IG5vdCBpbiB0aGUgbWlkZGxlIG9mIGEgc2luZ2xlIHRlc3QgY2FzZSkKIwojIFRFU1RfU1RBUlQKIyBNSU5fQ09ORklHID0gL2hvbWUvdGVzdC9jb25maWctdGVzdDEKIwojIERFRkFVTFRTCiMgTUlOX0NPTkZJRyA9IC9ob21lL3Rlc3QvY29uZmlnLWRlZmF1bHQKIwojIFRFU1RfU1RBUlQgSVRFUkFURSAxMAojCiMgVGhlIGFib3ZlIHdpbGwgcnVuIHRoZSBmaXJzdCB0ZXN0IHdpdGggTUlOX0NPTkZJRyBzZXQgdG8KIyAvaG9tZS90ZXN0L2NvbmZpZy10ZXN0LTEuIFRoZW4gMTAgdGVzdHMgd2lsbCBiZSBleGVjdXRlZAojIHdpdGggTUlOX0NPTkZJRyB3aXRoIC9ob21lL3Rlc3QvY29uZmlnLWRlZmF1bHQuCiMKIyBZb3UgY2FuIGFsc28gZGlzYWJsZSBkZWZhdWx0cyB3aXRoIHRoZSBTS0lQIG9wdGlvbgojCiMgREVGQVVMVFMgU0tJUAojIE1JTl9DT05GSUcgPSAvaG9tZS90ZXN0L2NvbmZpZy11c2Utc29tZXRpbWVzCiMKIyBERUZBVUxUUwojIE1JTl9DT05GSUcgPSAvaG9tZS90ZXN0L2NvbmZpZy1tb3N0LXRpbWVzCiMKIyBUaGUgYWJvdmUgd2lsbCBpZ25vcmUgdGhlIGZpcnN0IE1JTl9DT05GSUcuIElmIHlvdSB3YW50IHRvCiMgdXNlIHRoZSBmaXJzdCBNSU5fQ09ORklHLCByZW1vdmUgdGhlIFNLSVAgZnJvbSB0aGUgZmlyc3QKIyBERUZBVUxUUyB0YWcgYW5kIGFkZCBpdCB0byB0aGUgc2Vjb25kLiBCZSBjYXJlZnVsLCBvcHRpb25zCiMgbWF5IG9ubHkgYmUgZGVjbGFyZWQgb25jZSBwZXIgdGVzdCBvciBkZWZhdWx0LiBJZiB5b3UgaGF2ZQojIHRoZSBzYW1lIG9wdGlvbiBuYW1lIHVuZGVyIHRoZSBzYW1lIHRlc3Qgb3IgYXMgZGVmYXVsdAojIGt0ZXN0IHdpbGwgZmFpbCB0byBleGVjdXRlLCBhbmQgbm8gdGVzdHMgd2lsbCBydW4uCiMKCgojIyMjIE1hbmRhdG9yeSBEZWZhdWx0IE9wdGlvbnMgIyMjIwoKIyBUaGVzZSBvcHRpb25zIG11c3QgYmUgaW4gdGhlIGRlZmF1bHQgc2VjdGlvbiwgYWx0aG91Z2ggbW9zdAojIG1heSBiZSBvdmVycmlkZGVuIGJ5IHRlc3Qgb3B0aW9ucy4KCiMgVGhlIG1hY2hpbmUgaG9zdG5hbWUgdGhhdCB5b3Ugd2lsbCB0ZXN0CiNNQUNISU5FID0gdGFyZ2V0CgojIFRoZSBib3ggaXMgZXhwZWN0ZWQgdG8gaGF2ZSBzc2ggb24gbm9ybWFsIGJvb3R1cCwgcHJvdmlkZSB0aGUgdXNlcgojICAobW9zdCBsaWtlbHkgcm9vdCwgc2luY2UgeW91IG5lZWQgcHJpdmlsZWdlZCBvcGVyYXRpb25zKQojU1NIX1VTRVIgPSByb290CgojIFRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0aGUgTGludXggc291cmNlIGNvZGUKI0JVSUxEX0RJUiA9IC9ob21lL3Rlc3QvbGludXguZ2l0CgojIFRoZSBkaXJlY3RvcnkgdGhhdCB0aGUgb2JqZWN0cyB3aWxsIGJlIGJ1aWx0CiMgKGNhbiBub3QgYmUgc2FtZSBhcyBCVUlMRF9ESVIpCiNPVVRQVVRfRElSID0gL2hvbWUvdGVzdC9idWlsZC90YXJnZXQKCiMgVGhlIGxvY2F0aW9uIG9mIHRoZSBjb21waWxlZCBmaWxlIHRvIGNvcHkgdG8gdGhlIHRhcmdldAojIChyZWxhdGl2ZSB0byBPVVRQVVRfRElSKQojQlVJTERfVEFSR0VUID0gYXJjaC94ODYvYm9vdC9iekltYWdlCgojIFRoZSBwbGFjZSB0byBwdXQgeW91ciBpbWFnZSBvbiB0aGUgdGVzdCBtYWNoaW5lCiNUQVJHRVRfSU1BR0UgPSAvYm9vdC92bWxpbnV6LXRlc3QKCiMgQSBzY3JpcHQgb3IgY29tbWFuZCB0byByZWJvb3QgdGhlIGJveAojCiMgSGVyZSBpcyBhIGRpZ2l0YWwgbG9nZ2VycyBwb3dlciBzd2l0Y2ggZXhhbXBsZQojUE9XRVJfQ1lDTEUgPSB3Z2V0IC0tbm8tcHJveHkgLU8gL2Rldi9udWxsIC1xICAtLWF1dGgtbm8tY2hhbGxlbmdlICdodHRwOi8vYWRtaW46YWRtaW5AcG93ZXIvb3V0bGV0PzU9Q0NMJwojCiMgSGVyZSBpcyBhbiBleGFtcGxlIHRvIHJlYm9vdCBhIHZpcnR1YWwgYm94IG9uIHRoZSBjdXJyZW50IGhvc3QKIyB3aXRoIHRoZSBuYW1lICJHdWVzdCIuCiNQT1dFUl9DWUNMRSA9IHZpcnNoIGRlc3Ryb3kgR3Vlc3Q7IHNsZWVwIDU7IHZpcnNoIHN0YXJ0IEd1ZXN0CgojIFRoZSBzY3JpcHQgb3IgY29tbWFuZCB0aGF0IHJlYWRzIHRoZSBjb25zb2xlCiMKIyAgSWYgeW91IHVzZSB0dHl3YXRjaCBzZXJ2ZXIsIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgd291bGQgd29yay4KI0NPTlNPTEUgPSBuYyAtZCBsb2NhbGhvc3QgMzAwMQojCiMgRm9yIGEgdmlydHVhbCBtYWNoaW5lIHdpdGggZ3Vlc3QgbmFtZSAiR3Vlc3QiLgojQ09OU09MRSA9ICB2aXJzaCBjb25zb2xlIEd1ZXN0CgojIFJlcXVpcmVkIHZlcnNpb24gZW5kaW5nIHRvIGRpZmZlcmVudGlhdGUgdGhlIHRlc3QKIyBmcm9tIG90aGVyIGxpbnV4IGJ1aWxkcyBvbiB0aGUgc3lzdGVtLgojTE9DQUxWRVJTSU9OID0gLXRlc3QKCiMgVGhlIGdydWIgdGl0bGUgbmFtZSBmb3IgdGhlIHRlc3Qga2VybmVsIHRvIGJvb3QKIyAoT25seSBtYW5kYXRvcnkgaWYgUkVCT09UX1RZUEUgPSBncnViKQojCiMgTm90ZSwga3Rlc3QucGwgd2lsbCBub3QgdXBkYXRlIHRoZSBncnViIG1lbnUubHN0LCB5b3UgbmVlZCB0bwojIG1hbnVhbGx5IGFkZCBhbiBvcHRpb24gZm9yIHRoZSB0ZXN0LiBrdGVzdC5wbCB3aWxsIHNlYXJjaAojIHRoZSBncnViIG1lbnUubHN0IGZvciB0aGlzIG9wdGlvbiB0byBmaW5kIHdoYXQga2VybmVsIHRvCiMgcmVib290IGludG8uCiMKIyBGb3IgZXhhbXBsZSwgaWYgaW4gdGhlIC9ib290L2dydWIvbWVudS5sc3QgdGhlIHRlc3Qga2VybmVsIHRpdGxlIGhhczoKIyB0aXRsZSBUZXN0IEtlcm5lbAojIGtlcm5lbCB2bWxpbnV6LXRlc3QKI0dSVUJfTUVOVSA9IFRlc3QgS2VybmVsCgojIEEgc2NyaXB0IHRvIHJlYm9vdCB0aGUgdGFyZ2V0IGludG8gdGhlIHRlc3Qga2VybmVsCiMgKE9ubHkgbWFuZGF0b3J5IGlmIFJFQk9PVF9UWVBFID0gc2NyaXB0KQojUkVCT09UX1NDUklQVCA9CgojIyMjIE9wdGlvbmFsIENvbmZpZyBPcHRpb25zIChhbGwgaGF2ZSBkZWZhdWx0cykgIyMjIwoKIyBTdGFydCBhIHRlc3Qgc2V0dXAuIElmIHlvdSBsZWF2ZSB0aGlzIG9mZiwgYWxsIG9wdGlvbnMKIyB3aWxsIGJlIGRlZmF1bHQgYW5kIHRoZSB0ZXN0IHdpbGwgcnVuIG9uY2UuCiMgVGhpcyBpcyBhIGxhYmVsIGFuZCBub3QgcmVhbGx5IGFuIG9wdGlvbiAoaXQgdGFrZXMgbm8gdmFsdWUpLgojIFlvdSBjYW4gYXBwZW5kIElURVJBVEUgYW5kIGEgbnVtYmVyIGFmdGVyIGl0IHRvIGl0ZXJhdGUgdGhlCiMgdGVzdCBhIG51bWJlciBvZiB0aW1lcywgb3IgU0tJUCB0byBpZ25vcmUgdGhpcyB0ZXN0LgojCiNURVNUX1NUQVJUCiNURVNUX1NUQVJUIElURVJBVEUgNQojVEVTVF9TVEFSVCBTS0lQCgojIEhhdmUgdGhlIGZvbGxvd2luZyBvcHRpb25zIGFzIGRlZmF1bHQgYWdhaW4uIFVzZWQgYWZ0ZXIgdGVzdHMKIyBoYXZlIGFscmVhZHkgYmVlbiBkZWZpbmVkIGJ5IFRFU1RfU1RBUlQuIE9wdGlvbmFsbHksIHlvdSBjYW4KIyBqdXN0IGRlZmluZSBhbGwgZGVmYXVsdCBvcHRpb25zIGJlZm9yZSB0aGUgZmlyc3QgVEVTVF9TVEFSVAojIGFuZCB5b3UgZG8gbm90IG5lZWQgdGhpcyBvcHRpb24uCiMKIyBUaGlzIGlzIGEgbGFiZWwgYW5kIG5vdCByZWFsbHkgYW4gb3B0aW9uIChpdCB0YWtlcyBubyB2YWx1ZSkuCiMgWW91IGNhbiBhcHBlbmQgU0tJUCB0byB0aGlzIGxhYmVsIGFuZCB0aGUgb3B0aW9ucyB3aXRoaW4gdGhpcwojIHNlY3Rpb24gd2lsbCBiZSBpZ25vcmVkLgojCiMgREVGQVVMVFMKIyBERUZBVUxUUyBTS0lQCgojIFRoZSBkZWZhdWx0IHRlc3QgdHlwZSAoZGVmYXVsdCB0ZXN0KQojIFRoZSB0ZXN0IHR5cGVzIG1heSBiZToKIyAgIGJ1aWxkIC0gb25seSBidWlsZCB0aGUga2VybmVsLCBkbyBub3RoaW5nIGVsc2UKIyAgIGJvb3QgLSBidWlsZCBhbmQgYm9vdCB0aGUga2VybmVsCiMgICB0ZXN0IC0gYnVpbGQsIGJvb3QgYW5kIGlmIFRFU1QgaXMgc2V0LCBydW4gdGhlIHRlc3Qgc2NyaXB0CiMgICAgICAgICAgKElmIFRFU1QgaXMgbm90IHNldCwgaXQgZGVmYXVsdHMgYmFjayB0byBib290KQojICAgYmlzZWN0IC0gUGVyZm9ybSBhIGJpc2VjdCBvbiB0aGUga2VybmVsIChzZWUgQklTRUNUX1RZUEUgYmVsb3cpCiMgICBwYXRjaGNoZWNrIC0gRG8gYSB0ZXN0IG9uIGEgc2VyaWVzIG9mIGNvbW1pdHMgaW4gZ2l0IChzZWUgUEFUQ0hDSEVDSyBiZWxvdykKI1RFU1RfVFlQRSA9IHRlc3QKCiMgVGVzdCB0byBydW4gaWYgdGhlcmUgaXMgYSBzdWNjZXNzZnVsIGJvb3QgYW5kIFRFU1RfVFlQRSBpcyB0ZXN0LgojIE11c3QgZXhpdCB3aXRoIDAgb24gc3VjY2VzcyBhbmQgbm9uIHplcm8gb24gZXJyb3IKIyBkZWZhdWx0ICh1bmRlZmluZWQpCiNURVNUID0gc3NoIHVzZXJAbWFjaGluZSAvcm9vdC9ydW5fdGVzdAoKIyBUaGUgYnVpbGQgdHlwZSBpcyBhbnkgbWFrZSBjb25maWcgdHlwZSBvciBzcGVjaWFsIGNvbW1hbmQKIyAgKGRlZmF1bHQgcmFuZGNvbmZpZykKIyAgIG5vYnVpbGQgLSBza2lwIHRoZSBjbGVhbiBhbmQgYnVpbGQgc3RlcAojICAgdXNlY29uZmlnOi9wYXRoL3RvL2NvbmZpZyAtIHVzZSB0aGUgZ2l2ZW4gY29uZmlnIGFuZCBydW4KIyAgICAgICAgICAgICAgb2xkY29uZmlnIG9uIGl0LgojIFRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgaWYgVEVTVF9UWVBFIGlzIHBhdGNoY2hlY2sgb3IgYmlzZWN0CiNCVUlMRF9UWVBFID0gcmFuZGNvbmZpZwoKIyBUaGUgbWFrZSBjb21tYW5kIChkZWZhdWx0IG1ha2UpCiMgSWYgeW91IGFyZSBidWlsZGluZyBhIDMyYml0IHg4NiBvbiBhIDY0IGJpdCBob3N0CiNNQUtFX0NNRCA9IENDPWkzODYtZ2NjIEFTPWkzODYtYXMgbWFrZSBBUkNIPWkzODYKCiMgQW55IGJ1aWxkIG9wdGlvbnMgZm9yIHRoZSBtYWtlIG9mIHRoZSBrZXJuZWwgKG5vdCBmb3Igb3RoZXIgbWFrZXMsIGxpa2UgY29uZmlncykKIyAoZGVmYXVsdCAiIikKI0JVSUxEX09QVElPTlMgPSAtajIwCgojIElmIHlvdSBuZWVkIGFuIGluaXRyZCwgeW91IGNhbiBhZGQgYSBzY3JpcHQgb3IgY29kZSBoZXJlIHRvIGluc3RhbGwKIyBpdC4gVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEtFUk5FTF9WRVJTSU9OIHdpbGwgYmUgc2V0IHRvIHRoZQojIGtlcm5lbCB2ZXJzaW9uIHRoYXQgaXMgdXNlZC4gUmVtZW1iZXIgdG8gYWRkIHRoZSBpbml0cmQgbGluZQojIHRvIHlvdXIgZ3J1YiBtZW51LmxzdCBmaWxlLgojCiMgSGVyZSdzIGEgY291cGxlIG9mIGV4YW1wbGVzIHRvIHVzZToKI1BPU1RfSU5TVEFMTCA9IHNzaCB1c2VyQHRhcmdldCAvc2Jpbi9ta2luaXRyZCAtLWFsbG93LW1pc3NpbmcgLWYgL2Jvb3QvaW5pdHJhbWZzLXRlc3QuaW1nICRLRVJORUxfVkVSU0lPTgojCiMgb3Igb24gc29tZSBzeXN0ZW1zOgojUE9TVF9JTlNUQUxMID0gc3NoIHVzZXJAdGFyZ2V0IC9zYmluL2RyYWN1dCAtZiAvYm9vdC9pbml0cmFtZnMtdGVzdC5pbWcgJEtFUk5FTF9WRVJTSU9OCgojIFdheSB0byByZWJvb3QgdGhlIGJveCB0byB0aGUgdGVzdCBrZXJuZWwuCiMgT25seSB2YWxpZCBvcHRpb25zIHNvIGZhciBhcmUgImdydWIiIGFuZCAic2NyaXB0IgojIChkZWZhdWx0IGdydWIpCiMgSWYgeW91IHNwZWNpZnkgZ3J1YiwgaXQgd2lsbCBhc3N1bWUgZ3J1YiB2ZXJzaW9uIDEKIyBhbmQgd2lsbCBzZWFyY2ggaW4gL2Jvb3QvZ3J1Yi9tZW51LmxzdCBmb3IgdGhlIHRpdGxlICRHUlVCX01FTlUKIyBhbmQgc2VsZWN0IHRoYXQgdGFyZ2V0IHRvIHJlYm9vdCB0byB0aGUga2VybmVsLiBJZiB0aGlzIGlzIG5vdAojIHlvdXIgc2V0dXAsIHRoZW4gc3BlY2lmeSAic2NyaXB0IiBhbmQgaGF2ZSBhIGNvbW1hbmQgb3Igc2NyaXB0CiMgc3BlY2lmaWVkIGluIFJFQk9PVF9TQ1JJUFQgdG8gYm9vdCB0byB0aGUgdGFyZ2V0LgojCiMgVGhlIGVudHJ5IGluIC9ib290L2dydWIvbWVudS5sc3QgbXVzdCBiZSBlbnRlcmVkIGluIG1hbnVhbGx5LgojIFRoZSB0ZXN0IHdpbGwgbm90IG1vZGlmeSB0aGF0IGZpbGUuCiNSRUJPT1RfVFlQRSA9IGdydWIKCiMgVGhlIG1pbiBjb25maWcgdGhhdCBpcyBuZWVkZWQgdG8gYnVpbGQgZm9yIHRoZSBtYWNoaW5lCiMgQSBuaWNlIHdheSB0byBjcmVhdGUgdGhpcyBpcyB3aXRoIHRoZSBmb2xsb3dpbmc6CiMKIyAgICQgc3NoIHRhcmdldAojICAgJCBsc21vZCA+IG15bW9kcwojICAgJCBzY3AgbXltb2RzIGhvc3Q6L3RtcAojICAgJCBleGl0CiMgICAkIGNkIGxpbnV4LmdpdAojICAgJCBybSAuY29uZmlnCiMgICAkIG1ha2UgTFNNT0Q9bXltb2RzIGxvY2FseWVzY29uZmlnCiMgICAkIGdyZXAgJ15DT05GSUcnIC5jb25maWcgPiAvaG9tZS90ZXN0L2NvbmZpZy1taW4KIwojIElmIHlvdSB3YW50IGV2ZW4gbGVzcyBjb25maWdzOgojCiMgICBsb2cgaW4gZGlyZWN0bHkgdG8gdGFyZ2V0IChkbyBub3Qgc3NoKQojCiMgICAkIHN1CiMgICAjIGxzbW9kIHwgY3V0IC1kJyAnIC1mMSB8IHhhcmdzIHJtbW9kCiMKIyAgIHJlcGVhdCB0aGUgYWJvdmUgc2V2ZXJhbCB0aW1lcwojCiMgICAjIGxzbW9kID4gbXltb2RzCiMgICAjIHJlYm9vdAojCiMgTWF5IG5lZWQgdG8gcmVib290IHRvIGdldCB5b3VyIG5ldHdvcmsgYmFjayB0byBjb3B5IHRoZSBteW1vZHMKIyB0byB0aGUgaG9zdCwgYW5kIHRoZW4gcmVtb3ZlIHRoZSBwcmV2aW91cyAuY29uZmlnIGFuZCBydW4gdGhlCiMgbG9jYWx5ZXNjb25maWcgYWdhaW4uIFRoZSBDT05GSUdfTUlOIGdlbmVyYXRlZCBsaWtlIHRoaXMgd2lsbAojIG5vdCBndWFyYW50ZWUgbmV0d29yayBhY3Rpdml0eSB0byB0aGUgYm94IHNvIHRoZSBURVNUX1RZUEUgb2YKIyB0ZXN0IG1heSBmYWlsLgojCiMgWW91IG1pZ2h0IGFsc28gd2FudCB0byBzZXQ6CiMgICBDT05GSUdfQ01ETElORT0iPHlvdXIgb3B0aW9ucyBoZXJlPiIKIyAgcmFuZGNvbmZpZyBtYXkgc2V0IHRoZSBhYm92ZSBhbmQgb3ZlcnJpZGUgeW91ciByZWFsIGNvbW1hbmQKIyAgbGluZSBvcHRpb25zLgojIChkZWZhdWx0IHVuZGVmaW5lZCkKI01JTl9DT05GSUcgPSAvaG9tZS90ZXN0L2NvbmZpZy1taW4KCiMgU29tZXRpbWVzIHRoZXJlJ3Mgb3B0aW9ucyB0aGF0IGp1c3QgYnJlYWsgdGhlIGJvb3QgYW5kCiMgeW91IGRvIG5vdCBjYXJlIGFib3V0LiBIZXJlIGFyZSBhIGZldzoKIyAgICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAojICBTdGFnaW5nIGRyaXZlcnMgYXJlIGhvcnJpYmxlLCBhbmQgY2FuIGJyZWFrIHRoZSBidWlsZC4KIyAgICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAojICBTQ1NJX0RFQlVHIG1heSBjaGFuZ2UgeW91ciByb290IHBhcnRpdGlvbgojICAgIyBDT05GSUdfS0dEQl9TRVJJQUxfQ09OU09MRSBpcyBub3Qgc2V0CiMgIEtHREIgbWF5IGNhdXNlIG9vcHMgd2FpdGluZyBmb3IgYSBjb25uZWN0aW9uIHRoYXQncyBub3QgdGhlcmUuCiMgVGhpcyBvcHRpb24gcG9pbnRzIHRvIHRoZSBmaWxlIGNvbnRhaW5pbmcgY29uZmlnIG9wdGlvbnMgdGhhdCB3aWxsIGJlIHByZXBlbmRlZAojIHRvIHRoZSBNSU5fQ09ORklHIChvciBiZSB0aGUgTUlOX0NPTkZJRyBpZiBpdCBpcyBub3Qgc2V0KQojCiMgTm90ZSwgY29uZmlnIG9wdGlvbnMgaW4gTUlOX0NPTkZJRyB3aWxsIG92ZXJyaWRlIHRoZXNlIG9wdGlvbnMuCiMKIyAoZGVmYXVsdCB1bmRlZmluZWQpCiNBRERfQ09ORklHID0gL2hvbWUvdGVzdC9jb25maWctYnJva2VuCgojIFRoZSBsb2NhdGlvbiBvbiB0aGUgaG9zdCB3aGVyZSB0byB3cml0ZSB0ZW1wIGZpbGVzCiMgKGRlZmF1bHQgL3RtcC9rdGVzdCkKI1RNUF9ESVIgPSAvdG1wL2t0ZXN0CgojIE9wdGlvbmFsIGxvZyBmaWxlIHRvIHdyaXRlIHRoZSBzdGF0dXMgKHJlY29tbWVuZGVkKQojICBOb3RlLCB0aGlzIGlzIGEgREVGQVVMVCBzZWN0aW9uIG9ubHkgb3B0aW9uLgojIChkZWZhdWx0IHVuZGVmaW5lZCkKI0xPR19GSUxFID0gL2hvbWUvdGVzdC9sb2dmaWxlcy90YXJnZXQubG9nCgojIFJlbW92ZSBvbGQgbG9nZmlsZSBpZiBpdCBleGlzdHMgYmVmb3JlIHN0YXJ0aW5nIGFsbCB0ZXN0cy4KIyAgTm90ZSwgdGhpcyBpcyBhIERFRkFVTFQgc2VjdGlvbiBvbmx5IG9wdGlvbi4KIyAoZGVmYXVsdCAwKQojQ0xFQVJfTE9HID0gMAoKIyBMaW5lIHRvIGRlZmluZSBhIHN1Y2Nlc3NmdWwgYm9vdCB1cCBpbiBjb25zb2xlIG91dHB1dC4KIyBUaGlzIGlzIHdoYXQgdGhlIGxpbmUgY29udGFpbnMsIG5vdCB0aGUgZW50aXJlIGxpbmUuIElmIHlvdSBuZWVkCiMgdGhlIGVudGlyZSBsaW5lIHRvIG1hdGNoLCB0aGVuIHVzZSByZWd1cmFsIGV4cHJlc3Npb24gc3ludGF4IGxpa2U6CiMgIChkbyBub3QgYWRkIGFueSBxdW90ZXMgYXJvdW5kIGl0KQojCiMgIFNVQ0NFU1NfTElORSA9IF5NeUJveCBMb2dpbjokCiMKIyAoZGVmYXVsdCAibG9naW46IikKI1NVQ0NFU1NfTElORSA9IGxvZ2luOgoKIyBJbiBjYXNlIHRoZSBjb25zb2xlIGNvbnN0YW50bHkgZmlsbHMgdGhlIHNjcmVlbiwgaGF2aW5nCiMgYSBzcGVjaWZpZWQgdGltZSB0byBzdG9wIHRoZSB0ZXN0IGFmdGVyIHN1Y2Nlc3MgaXMgcmVjb21tZW5kZWQuCiMgKGluIHNlY29uZHMpCiMgKGRlZmF1bHQgMTApCiNTVE9QX0FGVEVSX1NVQ0NFU1MgPSAxMAoKIyBJbiBjYXNlIHRoZSBjb25zb2xlIGNvbnN0YW50bHkgZmlsbHMgdGhlIHNjcmVlbiwgaGF2aW5nCiMgYSBzcGVjaWZpZWQgdGltZSB0byBzdG9wIHRoZSB0ZXN0IGFmdGVyIGZhaWx1cmUgaXMgcmVjb21tZW5kZWQuCiMgKGluIHNlY29uZHMpCiMgKGRlZmF1bHQgNjApCiNTVE9QX0FGVEVSX0ZBSUxVUkUgPSA2MAoKIyBTdG9wIHRlc3RpbmcgaWYgYSBidWlsZCBmYWlscy4gSWYgc2V0LCB0aGUgc2NyaXB0IHdpbGwgZW5kIGlmCiMgYSBmYWlsdXJlIGlzIGRldGVjdGVkLCBvdGhlcndpc2UgaXQgd2lsbCBzYXZlIG9mZiB0aGUgLmNvbmZpZywKIyBkbWVzZyBhbmQgYm9vdGxvZyBpbiBhIGRpcmVjdG9yeSBjYWxsZWQKIyBNQUNISU5FLVRFU1RfVFlQRV9CVUlMRF9UWVBFLWZhaWwteXl5eW1tZGRoaG1tc3MKIyBpZiB0aGUgU1RPUkVfRkFJTFVSRVMgZGlyZWN0b3J5IGlzIHNldC4KIyAoZGVmYXVsdCAxKQojIE5vdGUsIGV2ZW4gaWYgdGhpcyBpcyBzZXQgdG8gemVybywgdGhlcmUgYXJlIHNvbWUgZXJyb3JzIHRoYXQgc3RpbGwKIyBzdG9wIHRoZSB0ZXN0cy4KI0RJRV9PTl9GQUlMVVJFID0gMQoKIyBEaXJlY3RvcnkgdG8gc3RvcmUgZmFpbHVyZSBkaXJlY3RvcmllcyBvbiBmYWlsdXJlLiBJZiB0aGlzIGlzIG5vdAojIHNldCwgRElFX09OX0ZBSUxVUkU9MCB3aWxsIG5vdCBzYXZlIG9mZiB0aGUgLmNvbmZpZywgZG1lc2cgYW5kCiMgYm9vdGxvZy4gVGhpcyBvcHRpb24gaXMgaWdub3JlZCBpZiBESUVfT05fRkFJTFVSRSBpcyBub3Qgc2V0LgojIChkZWZhdWx0IHVuZGVmaW5lZCkKI1NUT1JFX0ZBSUxVUkVTID0gL2hvbWUvdGVzdC9mYWlsdXJlcwoKIyBCdWlsZCB3aXRob3V0IGRvaW5nIGEgbWFrZSBtcnByb3Blciwgb3IgcmVtb3ZpbmcgLmNvbmZpZwojIChkZWZhdWx0IDApCiNCVUlMRF9OT0NMRUFOID0gMAoKIyBBcyB0aGUgdGVzdCByZWFkcyB0aGUgY29uc29sZSwgYWZ0ZXIgaXQgaGl0cyB0aGUgU1VDQ0VTU19MSU5FCiMgdGhlIHRpbWUgaXQgd2FpdHMgZm9yIHRoZSBtb25pdG9yIHRvIHNldHRsZSBkb3duIGJldHdlZW4gcmVhZHMKIyBjYW4gdXN1YWxseSBiZSBsb3dlcmVkLgojIChpbiBzZWNvbmRzKSAoZGVmYXVsdCAxKQojQk9PVEVEX1RJTUVPVVQgPSAxCgojIFRoZSB0aW1lb3V0IGluIHNlY29uZHMgd2hlbiB3ZSBjb25zaWRlciB0aGUgYm94IGh1bmcgYWZ0ZXIKIyB0aGUgY29uc29sZSBzdG9wIHByb2R1Y2luZyBvdXRwdXQuIEJlIHN1cmUgdG8gbGVhdmUgZW5vdWdoCiMgdGltZSBoZXJlIHRvIGdldCBwYXNzIGEgcmVib290LiBTb21lIG1hY2hpbmVzIG1heSBub3QgcHJvZHVjZQojIGFueSBjb25zb2xlIG91dHB1dCBmb3IgYSBsb25nIHRpbWUgZHVyaW5nIGEgcmVib290LiBZb3UgZG8KIyBub3Qgd2FudCB0aGUgdGVzdCB0byBmYWlsIGp1c3QgYmVjYXVzZSB0aGUgc3lzdGVtIHdhcyBpbgojIHRoZSBwcm9jZXNzIG9mIHJlYm9vdGluZyB0byB0aGUgdGVzdCBrZXJuZWwuCiMgKGRlZmF1bHQgMTIwKQojVElNRU9VVCA9IDEyMAoKIyBJbiBiZXR3ZWVuIHRlc3RzLCBhIHJlYm9vdCBvZiB0aGUgYm94IG1heSBvY2N1ciwgYW5kIHRoaXMKIyBpcyB0aGUgdGltZSB0byB3YWl0IGZvciB0aGUgY29uc29sZSBhZnRlciBpdCBzdG9wcyBwcm9kdWNpbmcKIyBvdXRwdXQuIFNvbWUgbWFjaGluZXMgbWF5IG5vdCBwcm9kdWNlIGEgbGFyZ2UgbGFnIG9uIHJlYm9vdAojIHNvIHRoaXMgc2hvdWxkIGFjY29tbW9kYXRlIGl0LgojIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBhbmQgVElNRU9VVCwgaXMgdGhhdCBUSU1FT1VUIGhhcHBlbnMKIyB3aGVuIHJlYm9vdGluZyB0byB0aGUgdGVzdCBrZXJuZWwuIFRoaXMgc2xlZXAgdGltZSBoYXBwZW5zCiMgYWZ0ZXIgYSB0ZXN0IGhhcyBjb21wbGV0ZWQgYW5kIHdlIGFyZSBhYm91dCB0byBzdGFydCBydW5uaW5nCiMgYW5vdGhlciB0ZXN0LiBJZiBhIHJlYm9vdCB0byB0aGUgcmVsaWFibGUga2VybmVsIGhhcHBlbnMsCiMgd2Ugd2FpdCBTTEVFUF9USU1FIGZvciB0aGUgY29uc29sZSB0byBzdG9wIHByb2R1Y2luZyBvdXRwdXQKIyBiZWZvcmUgc3RhcnRpbmcgdGhlIG5leHQgdGVzdC4KIyAoZGVmYXVsdCA2MCkKI1NMRUVQX1RJTUUgPSA2MAoKIyBUaGUgdGltZSBpbiBiZXR3ZWVuIGJpc2VjdHMgdG8gc2xlZXAgKGluIHNlY29uZHMpCiMgKGRlZmF1bHQgNjApCiNCSVNFQ1RfU0xFRVBfVElNRSA9IDYwCgojIFJlYm9vdCB0aGUgdGFyZ2V0IGJveCBvbiBlcnJvciAoZGVmYXVsdCAwKQojUkVCT09UX09OX0VSUk9SID0gMAoKIyBQb3dlciBvZmYgdGhlIHRhcmdldCBvbiBlcnJvciAoaWdub3JlZCBpZiBSRUJPT1RfT05fRVJST1IgaXMgc2V0KQojICBOb3RlLCB0aGlzIGlzIGEgREVGQVVMVCBzZWN0aW9uIG9ubHkgb3B0aW9uLgojIChkZWZhdWx0IDApCiNQT1dFUk9GRl9PTl9FUlJPUiA9IDAKCiMgUG93ZXIgb2ZmIHRoZSB0YXJnZXQgYWZ0ZXIgYWxsIHRlc3RzIGhhdmUgY29tcGxldGVkIHN1Y2Nlc3NmdWxseQojICBOb3RlLCB0aGlzIGlzIGEgREVGQVVMVCBzZWN0aW9uIG9ubHkgb3B0aW9uLgojIChkZWZhdWx0IDApCiNQT1dFUk9GRl9PTl9TVUNDRVNTID0gMAoKIyBSZWJvb3QgdGhlIHRhcmdldCBhZnRlciBhbGwgdGVzdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IChkZWZhdWx0IDEpCiMgKGlnbm9yZWQgaWYgUE9XRVJPRkZfT05fU1VDQ0VTUyBpcyBzZXQpCiNSRUJPT1RfT05fU1VDQ0VTUyA9IDEKCiMgSW4gY2FzZSB0aGVyZSBhcmUgaXNzZXMgd2l0aCByZWJvb3RpbmcsIHlvdSBjYW4gc3BlY2lmeSB0aGlzCiMgdG8gYWx3YXlzIHBvd2VyY3ljbGUgYWZ0ZXIgdGhpcyBhbW91bnQgb2YgdGltZSBhZnRlciBjYWxsaW5nCiMgcmVib290LgojIE5vdGUsIFBPV0VSQ1lDTEVfQUZURVJfUkVCT09UID0gMCBkb2VzIE5PVCBkaXNhYmxlIGl0LiBJdCBqdXN0CiMgbWFrZXMgaXQgcG93ZXJjeWNsZSBpbW1lZGlhdGVseSBhZnRlciByZWJvb3RpbmcuIERvIG5vdCBkZWZpbmUKIyBpdCBpZiB5b3UgZG8gbm90IHdhbnQgaXQuCiMgKGRlZmF1bHQgdW5kZWZpbmVkKQojUE9XRVJDWUNMRV9BRlRFUl9SRUJPT1QgPSA1CgojIEluIGNhc2UgdGhlcmUncyBpc3NlcyB3aXRoIGhhbHRpbmcsIHlvdSBjYW4gc3BlY2lmeSB0aGlzCiMgdG8gYWx3YXlzIHBvd2Vyb2ZmIGFmdGVyIHRoaXMgYW1vdW50IG9mIHRpbWUgYWZ0ZXIgY2FsbGluZwojIGhhbHQuCiMgTm90ZSwgUE9XRVJPRkZfQUZURVJfSEFMVCA9IDAgZG9lcyBOT1QgZGlzYWJsZSBpdC4gSXQganVzdAojIG1ha2VzIGl0IHBvd2Vyb2ZmIGltbWVkaWF0ZWx5IGFmdGVyIGhhbHRpbmcuIERvIG5vdCBkZWZpbmUKIyBpdCBpZiB5b3UgZG8gbm90IHdhbnQgaXQuCiMgKGRlZmF1bHQgdW5kZWZpbmVkKQojUE9XRVJPRkZfQUZURVJfSEFMVCA9IDIwCgojIEEgc2NyaXB0IG9yIGNvbW1hbmQgdG8gcG93ZXIgb2ZmIHRoZSBib3ggKGRlZmF1bHQgdW5kZWZpbmVkKQojIE5lZWRlZCBmb3IgUE9XRVJPRkZfT05fRVJST1IgYW5kIFNVQ0NFU1MKIwojIEV4YW1wbGUgZm9yIGRpZ2l0YWwgbG9nZ2VycyBwb3dlciBzd2l0Y2g6CiNQT1dFUl9PRkYgPSB3Z2V0IC0tbm8tcHJveHkgLU8gL2Rldi9udWxsIC1xICAtLWF1dGgtbm8tY2hhbGxlbmdlICdodHRwOi8vYWRtaW46YWRtaW5AcG93ZXIvb3V0bGV0PzU9T0ZGJwojCiMgRXhhbXBsZSBmb3IgYSB2aXJ0dWFsIGd1ZXN0IGNhbGwgIkd1ZXN0Ii4KI1BPV0VSX09GRiA9IHZpcnNoIGRlc3Ryb3kgR3Vlc3QKCiMgVGhlIHdheSB0byBleGVjdXRlIGEgY29tbWFuZCBvbiB0aGUgdGFyZ2V0CiMgKGRlZmF1bHQgc3NoICRTU0hfVVNFUkAkTUFDSElORSAkU1NIX0NPTU1BTkQiOykKIyBUaGUgdmFyaWFibGVzIFNTSF9VU0VSLCBNQUNISU5FIGFuZCBTU0hfQ09NTUFORCBhcmUgZGVmaW5lZAojU1NIX0VYRUMgPSBzc2ggJFNTSF9VU0VSQCRNQUNISU5FICRTU0hfQ09NTUFORCI7CgojIFRoZSB3YXkgdG8gY29weSBhIGZpbGUgdG8gdGhlIHRhcmdldAojIChkZWZhdWx0IHNjcCAkU1JDX0ZJTEUgJFNTSF9VU0VSQCRNQUNISU5FOiREU1RfRklMRSkKIyBUaGUgdmFyaWFibGVzIFNTSF9VU0VSLCBNQUNISU5FLCBTUkNfRklMRSBhbmQgRFNUX0ZJTEUgYXJlIGRlZmluZWQuCiNTQ1BfVE9fVEFSR0VUID0gc2NwICRTUkNfRklMRSAkU1NIX1VTRVJAJE1BQ0hJTkU6JERTVF9GSUxFCgojIFRoZSBuaWNlIHdheSB0byByZWJvb3QgdGhlIHRhcmdldAojIChkZWZhdWx0IHNzaCAkU1NIX1VTRVJAJE1BQ0hJTkUgcmVib290KQojIFRoZSB2YXJpYWJsZXMgU1NIX1VTRVIgYW5kIE1BQ0hJTkUgYXJlIGRlZmluZWQuCiNSRUJPT1QgPSBzc2ggJFNTSF9VU0VSQCRNQUNISU5FIHJlYm9vdAoKIyMjIyBQZXIgdGVzdCBydW4gb3B0aW9ucyAjIyMjCiMgVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBvbmx5IGFsbG93ZWQgaW4gVEVTVF9TVEFSVCBzZWN0aW9ucy4KIyBUaGV5IGFyZSBpZ25vcmVkIGluIHRoZSBERUZBVUxUUyBzZWN0aW9ucy4KIwojIEFsbCBvZiB0aGVzZSBhcmUgb3B0aW9uYWwgYW5kIHVuZGVmaW5lZCBieSBkZWZhdWx0LCBhbHRob3VnaAojICBzb21lIG9mIHRoZXNlIG9wdGlvbnMgYXJlIHJlcXVpcmVkIGZvciBURVNUX1RZUEUgb2YgcGF0Y2hjaGVjawojICBhbmQgYmlzZWN0LgojCiMKIyBDSEVDS09VVCA9IGJyYW5jaAojCiMgIElmIHRoZSBCVUlMRF9ESVIgaXMgYSBnaXQgcmVwb3NpdG9yeSwgdGhlbiB5b3UgY2FuIHNldCB0aGlzIG9wdGlvbgojICB0byBjaGVja291dCB0aGUgZ2l2ZW4gYnJhbmNoIGJlZm9yZSBydW5uaW5nIHRoZSBURVNULiBJZiB5b3UKIyAgc3BlY2lmeSB0aGlzIGZvciB0aGUgZmlyc3QgcnVuLCB0aGF0IGJyYW5jaCB3aWxsIGJlIHVzZWQgZm9yCiMgIGFsbCBwcmVjZWRpbmcgdGVzdHMgdW50aWwgYSBuZXcgQ0hFQ0tPVVQgaXMgc2V0LgojCiMKIwojIEZvciBURVNUX1RZUEUgPSBwYXRjaGNoZWNrCiMKIyAgVGhpcyBleHBlY3RzIHRoZSBCVUlMRF9ESVIgdG8gYmUgYSBnaXQgcmVwb3NpdG9yeSwgYW5kCiMgIHdpbGwgY2hlY2tvdXQgdGhlIFBBVENIQ0hFQ0tfU1RBUlQgY29tbWl0LgojCiMgIFRoZSBvcHRpb24gQlVJTERfVFlQRSB3aWxsIGJlIGlnbm9yZWQuCiMKIyAgVGhlIE1JTl9DT05GSUcgd2lsbCBiZSB1c2VkIGZvciBhbGwgYnVpbGRzIG9mIHRoZSBwYXRjaGNoZWNrLiBUaGUgYnVpbGQgdHlwZQojICB1c2VkIGZvciBwYXRjaGNoZWNrIGlzIG9sZGNvbmZpZy4KIwojICBQQVRDSENIRUNLX1NUQVJUIGlzIHJlcXVpcmVkIGFuZCBpcyB0aGUgZmlyc3QgcGF0Y2ggdG8KIyAgIHRlc3QgKHRoZSBTSEExIG9mIHRoZSBjb21taXQpLiBZb3UgbWF5IGFsc28gc3BlY2lmeSBhbnl0aGluZwojICAgdGhhdCBnaXQgY2hlY2tvdXQgYWxsb3dzIChicmFuY2ggbmFtZSwgdGFnZSwgSEVBRH4zKS4KIwojICBQQVRDSENIRUNLX0VORCBpcyB0aGUgbGFzdCBwYXRjaCB0byBjaGVjayAoZGVmYXVsdCBIRUFEKQojCiMgIFBBVENIQ0hFQ0tfVFlQRSBpcyByZXF1aXJlZCBhbmQgaXMgdGhlIHR5cGUgb2YgdGVzdCB0byBydW46CiMgICAgICBidWlsZCwgYm9vdCwgdGVzdC4KIwojICAgTm90ZSwgdGhlIGJ1aWxkIHRlc3Qgd2lsbCBsb29rIGZvciB3YXJuaW5ncywgaWYgYSB3YXJuaW5nIG9jY3VycmVkCiMgICAgIGluIGEgZmlsZSB0aGF0IGEgY29tbWl0IHRvdWNoZXMsIHRoZSBidWlsZCB3aWxsIGZhaWwuCiMKIyAgIElmIEJVSUxEX05PQ0xFQU4gaXMgc2V0LCB0aGVuIG1ha2UgbXJwcm9wZXIgd2lsbCBub3QgYmUgcnVuIG9uCiMgICBhbnkgb2YgdGhlIGJ1aWxkcywganVzdCBsaWtlIGFsbCBvdGhlciBURVNUX1RZUEUgdGVzdHMuIEJ1dAojICAgd2hhdCBtYWtlcyBwYXRjaGNoZWNrIGRpZmZlcmVudCBmcm9tIHRoZSBvdGhlciB0ZXN0cywgaXMgaWYKIyAgIEJVSUxEX05PQ0xFQU4gaXMgbm90IHNldCwgb25seSB0aGUgZmlyc3QgYW5kIGxhc3QgcGF0Y2ggcnVuCiMgICBtYWtlIG1ycHJvcGVyLiBUaGlzIGhlbHBzIHNwZWVkIHVwIHRoZSB0ZXN0LgojCiMgRXhhbXBsZToKIyAgIFRFU1RfU1RBUlQKIyAgIFRFU1RfVFlQRSA9IHBhdGNoY2hlY2sKIyAgIENIRUNLT1VUID0gbXlicmFuY2gKIyAgIFBBVENIQ0hFQ0tfVFlQRSA9IGJvb3QKIyAgIFBBVENIQ0hFQ0tfU1RBUlQgPSA3NDdlOTRhZTNkMWI0YzliZjUzODBlNTY5ZjYxNGViOTA0MGI3OWU3CiMgICBQQVRDSENIRUNLX0VORCA9IEhFQUR+MgojCiMKIwojIEZvciBURVNUX1RZUEUgPSBiaXNlY3QKIwojICBZb3UgY2FuIHNwZWNpZnkgYSBnaXQgYmlzZWN0IGlmIHRoZSBCVUlMRF9ESVIgaXMgYSBnaXQgcmVwb3NpdG9yeS4KIyAgVGhlIE1JTl9DT05GSUcgd2lsbCBiZSB1c2VkIGZvciBhbGwgYnVpbGRzIG9mIHRoZSBiaXNlY3QuIFRoZSBidWlsZCB0eXBlCiMgIHVzZWQgZm9yIGJpc2VjdGluZyBpcyBvbGRjb25maWcuCiMKIyAgVGhlIG9wdGlvbiBCVUlMRF9UWVBFIHdpbGwgYmUgaWdub3JlZC4KIwojICBCSVNFQ1RfVFlQRSBpcyB0aGUgdHlwZSBvZiB0ZXN0IHRvIHBlcmZvcm06CiMJYnVpbGQJLSBiYWQgZmFpbHMgdG8gYnVpbGQKIwlib290CS0gYmFkIGJ1aWxkcyBidXQgZmFpbHMgdG8gYm9vdAojCXRlc3QJLSBiYWQgYm9vdHMgYnV0IGZhaWxzIGEgdGVzdAojCiMgQklTRUNUX0dPT0QgaXMgdGhlIGNvbW1pdCAoU0hBMSkgdG8gbGFiZWwgYXMgZ29vZCAoYWNjZXB0cyBhbGwgZ2l0IGdvb2QgY29tbWl0IHR5cGVzKQojIEJJU0VDVF9CQUQgaXMgdGhlIGNvbW1pdCB0byBsYWJlbCBhcyBiYWQgKGFjY2VwdHMgYWxsIGdpdCBiYWQgY29tbWl0IHR5cGVzKQojCiMgVGhlIGFib3ZlIHRocmVlIG9wdGlvbnMgYXJlIHJlcXVpcmVkIGZvciBhIGJpc2VjdCBvcGVyYXRpb24uCiMKIyBCSVNFQ1RfUkVQTEFZID0gL3BhdGgvdG8vcmVwbGF5L2ZpbGUgKG9wdGlvbmFsLCBkZWZhdWx0IHVuZGVmaW5lZCkKIwojICAgSWYgYW4gb3BlcmF0aW9uIGZhaWxlZCBpbiB0aGUgYmlzZWN0IHRoYXQgd2FzIG5vdCBleHBlY3RlZCB0bwojICAgZmFpbC4gVGhlbiB0aGUgdGVzdCBlbmRzLiBUaGUgc3RhdGUgb2YgdGhlIEJVSUxEX0RJUiB3aWxsIGJlCiMgICBsZWZ0IG9mZiBhdCB3aGVyZSB0aGUgZmFpbHVyZSBvY2N1cnJlZC4gWW91IGNhbiBleGFtaW5lIHRoZQojICAgcmVhc29uIGZvciB0aGUgZmFpbHVyZSwgYW5kIHBlcmhhcHMgZXZlbiBmaW5kIGEgZ2l0IGNvbW1pdAojICAgdGhhdCB3b3VsZCB3b3JrIHRvIGNvbnRpbnVlIHdpdGguIFlvdSBjYW4gcnVuOgojCiMgICBnaXQgYmlzZWN0IGxvZyA+IC9wYXRoL3RvL3JlcGxheS9maWxlCiMKIyAgIFRoZSBhZGRpbmc6CiMKIyAgICBCSVNFQ1RfUkVQTEFZPSAvcGF0aC90by9yZXBsYXkvZmlsZQojCiMgICBBbmQgcnVubmluZyB0aGUgdGVzdCBhZ2Fpbi4gVGhlIHRlc3Qgd2lsbCBwZXJmb3JtIHRoZSBpbml0aWFsCiMgICAgZ2l0IGJpc2VjdCBzdGFydCwgZ2l0IGJpc2VjdCBnb29kLCBhbmQgZ2l0IGJpc2VjdCBiYWQsIGFuZAojICAgIHRoZW4gaXQgd2lsbCBydW4gZ2l0IGJpc2VjdCByZXBsYXkgb24gdGhpcyBmaWxlLCBiZWZvcmUKIyAgICBjb250aW51aW5nIHdpdGggdGhlIGJpc2VjdC4KIwojIEJJU0VDVF9TVEFSVCA9IGNvbW1pdCAob3B0aW9uYWwsIGRlZmF1bHQgdW5kZWZpbmVkKQojCiMgICBBcyB3aXRoIEJJU0VDVF9SRVBMQVksIGlmIHRoZSB0ZXN0IGZhaWxlZCBvbiBhIGNvbW1pdCB0aGF0CiMgICBqdXN0IGhhcHBlbiB0byBoYXZlIGEgYmFkIGNvbW1pdCBpbiB0aGUgbWlkZGxlIG9mIHRoZSBiaXNlY3QsCiMgICBhbmQgeW91IG5lZWQgdG8gc2tpcCBpdC4gSWYgQklTRUNUX1NUQVJUIGlzIGRlZmluZWQsIGl0CiMgICB3aWxsIGNoZWNrb3V0IHRoYXQgY29tbWl0IGFmdGVyIGRvaW5nIHRoZSBpbml0aWFsIGdpdCBiaXNlY3Qgc3RhcnQsCiMgICBnaXQgYmlzZWN0IGdvb2QsIGdpdCBiaXNlY3QgYmFkLCBhbmQgcnVubmluZyB0aGUgZ2l0IGJpc2VjdCByZXBsYXkKIyAgIGlmIHRoZSBCSVNFQ1RfUkVQTEFZIGlzIHNldC4KIwojIEJJU0VDVF9SRVZFUlNFID0gMSAob3B0aW9uYWwsIGRlZmF1bHQgMCkKIwojICAgSW4gdGhvc2Ugc3RyYW5nZSBpbnN0YW5jZXMgd2hlcmUgaXQgd2FzIGJyb2tlbiBmb3JldmVyCiMgICBhbmQgeW91IGFyZSB0cnlpbmcgdG8gZmluZCB3aGVyZSBpdCBzdGFydGVkIHRvIHdvcmshCiMgICBTZXQgQklTRUNUX0dPT0QgdG8gdGhlIGNvbW1pdCB0aGF0IHdhcyBsYXN0IGtub3duIHRvIGZhaWwKIyAgIFNldCBCSVNFQ1RfQkFEIHRvIHRoZSBjb21taXQgdGhhdCBpcyBrbm93biB0byBzdGFydCB3b3JraW5nLgojICAgV2l0aCBCSVNFQ1RfUkVWRVJTRSA9IDEsIFRoZSB0ZXN0IHdpbGwgY29uc2lkZXIgZmFpbHVyZXMgYXMKIyAgIGdvb2QsIGFuZCBzdWNjZXNzIGFzIGJhZC4KIwojIEJJU0VDVF9DSEVDSyA9IDEgKG9wdGlvbmFsLCBkZWZhdWx0IDApCiMKIyAgIEp1c3QgdG8gYmUgc3VyZSB0aGUgZ29vZCBpcyBnb29kIGFuZCBiYWQgaXMgYmFkLCBzZXR0aW5nCiMgICBCSVNFQ1RfQ0hFQ0sgdG8gMSB3aWxsIHN0YXJ0IHRoZSBiaXNlY3QgYnkgZmlyc3QgY2hlY2tpbmcKIyAgIG91dCBCSVNFQ1RfQkFEIGFuZCBtYWtlcyBzdXJlIGl0IGZhaWxzLCB0aGVuIGl0IHdpbGwgY2hlY2sKIyAgIG91dCBCSVNFQ1RfR09PRCBhbmQgbWFrZXMgc3VyZSBpdCBzdWNjZWVkcyBiZWZvcmUgc3RhcnRpbmcKIyAgIHRoZSBiaXNlY3QgKGl0IHdvcmtzIGZvciBCSVNFQ1RfUkVWRVJTRSB0b28pLgojCiMgICBZb3UgY2FuIGxpbWl0IHRoZSB0ZXN0IHRvIGp1c3QgY2hlY2sgQklTRUNUX0dPT0Qgb3IKIyAgIEJJU0VDVF9CQUQgd2l0aCBCSVNFQ1RfQ0hFQ0sgPSBnb29kIG9yCiMgICBCSVNFQ1RfQ0hFQ0sgPSBiYWQsIHJlc3BlY3RpdmVseS4KIwojIEV4YW1wbGU6CiMgICBURVNUX1NUQVJUCiMgICBURVNUX1RZUEUgPSBiaXNlY3QKIyAgIEJJU0VDVF9HT09EID0gdjIuNi4zNgojICAgQklTRUNUX0JBRCA9IGI1MTUzMTYzZWQ1ODBlMDBjNjdiZGZlY2IwMmIyZTM4NDM4MTdiM2UKIyAgIEJJU0VDVF9UWVBFID0gYnVpbGQKIyAgIE1JTl9DT05GSUcgPSAvaG9tZS90ZXN0L2NvbmZpZy1iaXNlY3QKIwojCiMKIyBGb3IgVEVTVF9UWVBFID0gY29uZmlnX2Jpc2VjdAojCiMgIEluIHRob3NlIGNhc2VzIHRoYXQgeW91IGhhdmUgdHdvIGRpZmZlcmVudCBjb25maWdzLiBPbmUgb2YgdGhlbQojICB3b3JrLCB0aGUgb3RoZXIgZG9lcyBub3QsIGFuZCB5b3UgZG8gbm90IGtub3cgd2hhdCBjb25maWcgY2F1c2VzCiMgIHRoZSBwcm9ibGVtLgojICBUaGUgVEVTVF9UWVBFIGNvbmZpZ19iaXNlY3Qgd2lsbCBiaXNlY3QgdGhlIGJhZCBjb25maWcgbG9va2luZyBmb3IKIyAgd2hhdCBjb25maWcgY2F1c2VzIHRoZSBmYWlsdXJlLgojCiMgIFRoZSB3YXkgaXQgd29ya3MgaXMgdGhpczoKIwojICAgRmlyc3QgaXQgZmluZHMgYSBjb25maWcgdG8gd29yayB3aXRoLiBTaW5jZSBhIGRpZmZlcmVudCB2ZXJzaW9uLCBvcgojICAgTUlOX0NPTkZJRyBtYXkgY2F1c2UgZGlmZmVyZW50IGRlcGVuZGVjaWVzLCBpdCBtdXN0IHJ1biB0aHJvdWdoIHRoaXMKIyAgIHByZXBhcmF0aW9uLgojCiMgICBPdmVyd3JpdGVzIGFueSBjb25maWcgc2V0IGluIHRoZSBiYWQgY29uZmlnIHdpdGggYSBjb25maWcgc2V0IGluCiMgICBlaXRoZXIgdGhlIE1JTl9DT05GSUcgb3IgQUREX0NPTkZJRy4gVGh1cywgbWFrZSBzdXJlIHRoZXNlIGNvbmZpZ3MKIyAgIGFyZSBtaW5pbWFsIGFuZCBkbyBub3QgZGlzYWJsZSBjb25maWdzIHlvdSB3YW50IHRvIHRlc3Q6CiMgICAoaWUuICAjIENPTkZJR19GT08gaXMgbm90IHNldCkuCiMKIyAgIEFuIG9sZGNvbmZpZyBpcyBydW4gb24gdGhlIGJhZCBjb25maWcgYW5kIGFueSBuZXcgY29uZmlnIHRoYXQKIyAgIGFwcGVhcnMgd2lsbCBiZSBhZGRlZCB0byB0aGUgY29uZmlncyB0byB0ZXN0LgojCiMgICBGaW5hbGx5LCBpdCBnZW5lcmF0ZXMgYSBjb25maWcgd2l0aCB0aGUgYWJvdmUgcmVzdWx0IGFuZCBydW5zIGl0CiMgICBhZ2FpbiB0aHJvdWdoIG1ha2Ugb2xkY29uZmlnIHRvIHByb2R1Y2UgYSBjb25maWcgdGhhdCBzaG91bGQgYmUKIyAgIHNhdGlzZmllZCBieSBrY29uZmlnLgojCiMgICBUaGVuIGl0IHN0YXJ0cyB0aGUgYmlzZWN0LgojCiMgICBUaGUgY29uZmlncyB0byB0ZXN0IGFyZSBjdXQgaW4gaGFsZi4gSWYgYWxsIHRoZSBjb25maWdzIGluIHRoaXMKIyAgIGhhbGYgZGVwZW5kIG9uIGEgY29uZmlnIGluIHRoZSBvdGhlciBoYWxmLCB0aGVuIHRoZSBvdGhlciBoYWxmCiMgICBpcyB0ZXN0ZWQgaW5zdGVhZC4gSWYgbm8gY29uZmlncyBhcmUgZW5hYmxlZCBieSBlaXRoZXIgaGFsZiwgdGhlbgojICAgdGhpcyBtZWFucyBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgZXhpc3RzIGFuZCB0aGUgdGVzdCBmYWlscy4KIwojICAgQSBjb25maWcgaXMgY3JlYXRlZCB3aXRoIHRoZSB0ZXN0IGhhbGYsIGFuZCB0aGUgYmlzZWN0IHRlc3QgaXMgcnVuLgojCiMgICBJZiB0aGUgYmlzZWN0IHN1Y2NlZWRzLCB0aGVuIGFsbCBjb25maWdzIGluIHRoZSBnZW5lcmF0ZWQgY29uZmlnCiMgICBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBjb25maWdzIHRvIHRlc3QgYW5kIGFkZGVkIHRvIHRoZSBjb25maWdzIHRoYXQKIyAgIHdpbGwgYmUgZW5hYmxlZCBmb3IgYWxsIGJ1aWxkcyAodGhleSB3aWxsIGJlIGVuYWJsZWQsIGJ1dCBub3QgYmUgcGFydAojICAgb2YgdGhlIGNvbmZpZ3MgdG8gZXhhbWluZSkuCiMKIyAgIElmIHRoZSBiaXNlY3QgZmFpbHMsIHRoZW4gYWxsIHRlc3QgY29uZmlncyB0aGF0IHdlcmUgbm90IGVuYWJsZWQgYnkKIyAgIHRoZSBjb25maWcgZmlsZSBhcmUgcmVtb3ZlZCBmcm9tIHRoZSB0ZXN0LiBUaGVzZSBjb25maWdzIHdpbGwgbm90CiMgICBiZSBlbmFibGVkIGluIGZ1dHVyZSB0ZXN0cy4gU2luY2UgY3VycmVudCBjb25maWcgZmFpbGVkLCB3ZSBjb25zaWRlcgojICAgdGhpcyB0byBiZSBhIHN1YnNldCBvZiB0aGUgY29uZmlnIHRoYXQgd2Ugc3RhcnRlZCB3aXRoLgojCiMgICBXaGVuIHdlIGFyZSBkb3duIHRvIG9uZSBjb25maWcsIGl0IGlzIGNvbnNpZGVyZWQgdGhlIGJhZCBjb25maWcuCiMKIyAgIE5vdGUsIHRoZSBjb25maWcgY2hvc2VuIG1heSBub3QgYmUgdGhlIHRydWUgYmFkIGNvbmZpZy4gRHVlIHRvCiMgICBkZXBlbmRlbmNpZXMgYW5kIHNlbGVjdGlvbnMgb2YgdGhlIGtidWlsZCBzeXN0ZW0sIG11bGl0cGxlCiMgICBjb25maWdzIG1heSBiZSBuZWVkZWQgdG8gY2F1c2UgYSBmYWlsdXJlLiBJZiB5b3UgZGlzYWJsZSB0aGUKIyAgIGNvbmZpZyB0aGF0IHdhcyBmb3VuZCBhbmQgcmVzdGFydCB0aGUgdGVzdCwgaWYgdGhlIHRlc3QgZmFpbHMKIyAgIGFnYWluLCBpdCBpcyByZWNvbW1lbmRlZCB0byByZXJ1biB0aGUgY29uZmlnX2Jpc2VjdCB3aXRoIGEgbmV3CiMgICBiYWQgY29uZmlnIHdpdGhvdXQgdGhlIGZvdW5kIGNvbmZpZyBlbmFibGVkLgojCiMgIFRoZSBvcHRpb24gQlVJTERfVFlQRSB3aWxsIGJlIGlnbm9yZWQuCiMKIyAgQ09ORklHX0JJU0VDVF9UWVBFIGlzIHRoZSB0eXBlIG9mIHRlc3QgdG8gcGVyZm9ybToKIwlidWlsZAktIGJhZCBmYWlscyB0byBidWlsZAojCWJvb3QJLSBiYWQgYnVpbGRzIGJ1dCBmYWlscyB0byBib290CiMJdGVzdAktIGJhZCBib290cyBidXQgZmFpbHMgYSB0ZXN0CiMKIyAgIENPTkZJR19CSVNFQ1QgaXMgdGhlIGNvbmZpZyB0aGF0IGZhaWxlZCB0byBib290CiMKIyBFeGFtcGxlOgojICAgVEVTVF9TVEFSVAojICAgVEVTVF9UWVBFID0gY29uZmlnX2Jpc2VjdAojICAgQ09ORklHX0JJU0VDVF9UWVBFID0gYnVpbGQKIyAgIENPTkZJR19CSVNFQ1QgPSAvaG9tZS90ZXN0L6JvbmZpZy1iYWQKIyAgIE1JTl9DT05GSUcgPSAvaG9tZS90ZXN0L2NvbmZpZy1taW4KIwo=