Ci8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAoKqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KCiAxLiAgICBJTlRST0RVQ1RJT04KVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkICgiRkRLIEFBQyBDb2RlYyIpIGlzIHNvZnR3YXJlIHRoYXQgaW1wbGVtZW50cwp0aGUgTVBFRyBBZHZhbmNlZCBBdWRpbyBDb2RpbmcgKCJBQUMiKSBlbmNvZGluZyBhbmQgZGVjb2Rpbmcgc2NoZW1lIGZvciBkaWdpdGFsIGF1ZGlvLgpUaGlzIEZESyBBQUMgQ29kZWMgc29mdHdhcmUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBvbiBhIHdpZGUgdmFyaWV0eSBvZiBBbmRyb2lkIGRldmljZXMuCgpBQUMncyBIRS1BQUMgYW5kIEhFLUFBQyB2MiB2ZXJzaW9ucyBhcmUgcmVnYXJkZWQgYXMgdG9kYXkncyBtb3N0IGVmZmljaWVudCBnZW5lcmFsIHBlcmNlcHR1YWwKYXVkaW8gY29kZWNzLiBBQUMtRUxEIGlzIGNvbnNpZGVyZWQgdGhlIGJlc3QtcGVyZm9ybWluZyBmdWxsLWJhbmR3aWR0aCBjb21tdW5pY2F0aW9ucyBjb2RlYyBieQppbmRlcGVuZGVudCBzdHVkaWVzIGFuZCBpcyB3aWRlbHkgZGVwbG95ZWQuIEFBQyBoYXMgYmVlbiBzdGFuZGFyZGl6ZWQgYnkgSVNPIGFuZCBJRUMgYXMgcGFydApvZiB0aGUgTVBFRyBzcGVjaWZpY2F0aW9ucy4KClBhdGVudCBsaWNlbnNlcyBmb3IgbmVjZXNzYXJ5IHBhdGVudCBjbGFpbXMgZm9yIHRoZSBGREsgQUFDIENvZGVjIChpbmNsdWRpbmcgdGhvc2Ugb2YgRnJhdW5ob2ZlcikKbWF5IGJlIG9idGFpbmVkIHRocm91Z2ggVmlhIExpY2Vuc2luZyAod3d3LnZpYWxpY2Vuc2luZy5jb20pIG9yIHRocm91Z2ggdGhlIHJlc3BlY3RpdmUgcGF0ZW50IG93bmVycwppbmRpdmlkdWFsbHkgZm9yIHRoZSBwdXJwb3NlIG9mIGVuY29kaW5nIG9yIGRlY29kaW5nIGJpdCBzdHJlYW1zIGluIHByb2R1Y3RzIHRoYXQgYXJlIGNvbXBsaWFudCB3aXRoCnRoZSBJU08vSUVDIE1QRUcgYXVkaW8gc3RhbmRhcmRzLiBQbGVhc2Ugbm90ZSB0aGF0IG1vc3QgbWFudWZhY3R1cmVycyBvZiBBbmRyb2lkIGRldmljZXMgYWxyZWFkeSBsaWNlbnNlCnRoZXNlIHBhdGVudCBjbGFpbXMgdGhyb3VnaCBWaWEgTGljZW5zaW5nIG9yIGRpcmVjdGx5IGZyb20gdGhlIHBhdGVudCBvd25lcnMsIGFuZCB0aGVyZWZvcmUgRkRLIEFBQyBDb2RlYwpzb2Z0d2FyZSBtYXkgYWxyZWFkeSBiZSBjb3ZlcmVkIHVuZGVyIHRob3NlIHBhdGVudCBsaWNlbnNlcyB3aGVuIGl0IGlzIHVzZWQgZm9yIHRob3NlIGxpY2Vuc2VkIHB1cnBvc2VzIG9ubHkuCgpDb21tZXJjaWFsbHktbGljZW5zZWQgQUFDIHNvZnR3YXJlIGxpYnJhcmllcywgaW5jbHVkaW5nIGZsb2F0aW5nLXBvaW50IHZlcnNpb25zIHdpdGggZW5oYW5jZWQgc291bmQgcXVhbGl0eSwKYXJlIGFsc28gYXZhaWxhYmxlIGZyb20gRnJhdW5ob2Zlci4gVXNlcnMgYXJlIGVuY291cmFnZWQgdG8gY2hlY2sgdGhlIEZyYXVuaG9mZXIgd2Vic2l0ZSBmb3IgYWRkaXRpb25hbAphcHBsaWNhdGlvbnMgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50YXRpb24uCgoyLiAgICBDT1BZUklHSFQgTElDRU5TRQoKUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCB3aXRob3V0CnBheW1lbnQgb2YgY29weXJpZ2h0IGxpY2Vuc2UgZmVlcyBwcm92aWRlZCB0aGF0IHlvdSBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKCllvdSBtdXN0IHJldGFpbiB0aGUgY29tcGxldGUgdGV4dCBvZiB0aGlzIHNvZnR3YXJlIGxpY2Vuc2UgaW4gcmVkaXN0cmlidXRpb25zIG9mIHRoZSBGREsgQUFDIENvZGVjIG9yCnlvdXIgbW9kaWZpY2F0aW9ucyB0aGVyZXRvIGluIHNvdXJjZSBjb2RlIGZvcm0uCgpZb3UgbXVzdCByZXRhaW4gdGhlIGNvbXBsZXRlIHRleHQgb2YgdGhpcyBzb2Z0d2FyZSBsaWNlbnNlIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKcHJvdmlkZWQgd2l0aCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIEZESyBBQUMgQ29kZWMgb3IgeW91ciBtb2RpZmljYXRpb25zIHRoZXJldG8gaW4gYmluYXJ5IGZvcm0uCllvdSBtdXN0IG1ha2UgYXZhaWxhYmxlIGZyZWUgb2YgY2hhcmdlIGNvcGllcyBvZiB0aGUgY29tcGxldGUgc291cmNlIGNvZGUgb2YgdGhlIEZESyBBQUMgQ29kZWMgYW5kIHlvdXIKbW9kaWZpY2F0aW9ucyB0aGVyZXRvIHRvIHJlY2lwaWVudHMgb2YgY29waWVzIGluIGJpbmFyeSBmb3JtLgoKVGhlIG5hbWUgb2YgRnJhdW5ob2ZlciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIGxpYnJhcnkgd2l0aG91dApwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgpZb3UgbWF5IG5vdCBjaGFyZ2UgY29weXJpZ2h0IGxpY2Vuc2UgZmVlcyBmb3IgYW55b25lIHRvIHVzZSwgY29weSBvciBkaXN0cmlidXRlIHRoZSBGREsgQUFDIENvZGVjCnNvZnR3YXJlIG9yIHlvdXIgbW9kaWZpY2F0aW9ucyB0aGVyZXRvLgoKWW91ciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgRkRLIEFBQyBDb2RlYyBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgc29mdHdhcmUKYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIEZvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgRkRLIEFBQyBDb2RlYywgdGhlIHRlcm0KIkZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkIiBtdXN0IGJlIHJlcGxhY2VkIGJ5IHRoZSB0ZXJtCiJUaGlyZC1QYXJ0eSBNb2RpZmllZCBWZXJzaW9uIG9mIHRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZC4iCgozLiAgICBOTyBQQVRFTlQgTElDRU5TRQoKTk8gRVhQUkVTUyBPUiBJTVBMSUVEIExJQ0VOU0VTIFRPIEFOWSBQQVRFTlQgQ0xBSU1TLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBwYXRlbnRzIG9mIEZyYXVuaG9mZXIsCkFSRSBHUkFOVEVEIEJZIFRISVMgU09GVFdBUkUgTElDRU5TRS4gRnJhdW5ob2ZlciBwcm92aWRlcyBubyB3YXJyYW50eSBvZiBwYXRlbnQgbm9uLWluZnJpbmdlbWVudCB3aXRoCnJlc3BlY3QgdG8gdGhpcyBzb2Z0d2FyZS4KCllvdSBtYXkgdXNlIHRoaXMgRkRLIEFBQyBDb2RlYyBzb2Z0d2FyZSBvciBtb2RpZmljYXRpb25zIHRoZXJldG8gb25seSBmb3IgcHVycG9zZXMgdGhhdCBhcmUgYXV0aG9yaXplZApieSBhcHByb3ByaWF0ZSBwYXRlbnQgbGljZW5zZXMuCgo0LiAgICBESVNDTEFJTUVSCgpUaGlzIEZESyBBQUMgQ29kZWMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYnkgRnJhdW5ob2ZlciBvbiBiZWhhbGYgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIGFuZCBjb250cmlidXRvcnMKIkFTIElTIiBhbmQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGltcGxpZWQgd2FycmFudGllcwpvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgpDT05UUklCVVRPUlMgQkUgTElBQkxFIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgc3BlY2lhbCwgZXhlbXBsYXJ5LCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsCmluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gcHJvY3VyZW1lbnQgb2Ygc3Vic3RpdHV0ZSBnb29kcyBvciBzZXJ2aWNlczsgbG9zcyBvZiB1c2UsIGRhdGEsIG9yIHByb2ZpdHMsCm9yIGJ1c2luZXNzIGludGVycnVwdGlvbiwgaG93ZXZlciBjYXVzZWQgYW5kIG9uIGFueSB0aGVvcnkgb2YgbGlhYmlsaXR5LCB3aGV0aGVyIGluIGNvbnRyYWN0LCBzdHJpY3QKbGlhYmlsaXR5LCBvciB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGFyaXNpbmcgaW4gYW55IHdheSBvdXQgb2YgdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCBldmVuIGlmCmFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgoKNS4gICAgQ09OVEFDVCBJTkZPUk1BVElPTgoKRnJhdW5ob2ZlciBJbnN0aXR1dGUgZm9yIEludGVncmF0ZWQgQ2lyY3VpdHMgSUlTCkF0dGVudGlvbjogQXVkaW8gYW5kIE11bHRpbWVkaWEgRGVwYXJ0bWVudHMgLSBGREsgQUFDIExMCkFtIFdvbGZzbWFudGVsIDMzCjkxMDU4IEVybGFuZ2VuLCBHZXJtYW55Cgp3d3cuaWlzLmZyYXVuaG9mZXIuZGUvYW1tCmFtbS1pbmZvQGlpcy5mcmF1bmhvZmVyLmRlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKiogIEZyYXVuaG9mZXIgSUlTIEZESyBTeXNMaWIgICoqKioqKioqKioqKioqKioqKioqKioKCiAgIEF1dGhvcihzKTogICBNYW51ZWwgSmFuZGVyCgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKiogXGZpbGUgICBGREtfYXVkaW8uaAogKiAgXGJyaWVmICBHbG9iYWwgYXVkaW8gc3RydWN0IGFuZCBjb25zdGFudCBkZWZpbml0aW9ucy4KICovCgojaWZuZGVmIEZES19BVURJT19ICiNkZWZpbmUgRkRLX0FVRElPX0gKCiNpbmNsdWRlICJtYWNoaW5lX3R5cGUuaCIKI2luY2x1ZGUgImdlbmVyaWNTdGRzLmgiCgojaWZkZWYgX19jcGx1c3BsdXMKZXh0ZXJuICJDIgp7CiNlbmRpZgoKLyoqCiAqIEZpbGUgZm9ybWF0IGlkZW50aWZpZXJzLgogKi8KdHlwZWRlZiBlbnVtCnsKICBGRl9VTktOT1dOICAgICAgICAgICA9IC0xLCAvKio8IFVua25vd24gZm9ybWF0LiAgICAgICAgKi8KICBGRl9SQVcgICAgICAgICAgICAgICA9IDAsICAvKio8IE5vIGNvbnRhaW5lciwgYml0IHN0cmVhbSBkYXRhIGNvbnZleWVkICJhcyBpcyIuICovCgogIEZGX01QNF8zR1BQICAgICAgICAgID0gMywgIC8qKjwgM0dQUCBmaWxlIGZvcm1hdC4gICAgICAqLwogIEZGX01QNF9NUDRGICAgICAgICAgID0gNCwgIC8qKjwgTVBFRy00IEZpbGUgZm9ybWF0LiAgICAgKi8KCiAgRkZfUkFXUEFDS0VUUyAgICAgICAgPSA1LCAgLyoqPCBQcm9wcmlldGFyeSByYXcgcGFja2V0IGZpbGUuICovCgogIEZGX0RSTUNUICAgICAgICAgICAgID0gMTIgIC8qKjwgRGlnaXRhbCBSYWRpbyBNb25kaWFsIChEUk0zMC9EUk0rKSBDVCBwcm9wcmlldGFyeSBmaWxlIGZvcm1hdC4gKi8KCn0gRklMRV9GT1JNQVQ7CgovKioKICogVHJhbnNwb3J0IHR5cGUgaWRlbnRpZmllcnMuCiAqLwp0eXBlZGVmIGVudW0KewogIFRUX1VOS05PV04gICAgICAgICAgID0gLTEsIC8qKjwgVW5rbm93biBmb3JtYXQuICAgICAgICAgICAgKi8KICBUVF9NUDRfUkFXICAgICAgICAgICA9IDAsICAvKio8ICJhcyBpcyIgYWNjZXNzIHVuaXRzIChwYWNrZXQgYmFzZWQgc2luY2UgdGhlcmUgaXMgb2J2aW91c2x5IG5vIHN5bmMgbGF5ZXIpICovCiAgVFRfTVA0X0FESUYgICAgICAgICAgPSAxLCAgLyoqPCBBRElGIGJpdHN0cmVhbSBmb3JtYXQuICAgICAqLwogIFRUX01QNF9BRFRTICAgICAgICAgID0gMiwgIC8qKjwgQURUUyBiaXRzdHJlYW0gZm9ybWF0LiAgICAgKi8KCiAgVFRfTVA0X0xBVE1fTUNQMSAgICAgPSA2LCAgLyoqPCBBdWRpbyBNdXggRWxlbWVudHMgd2l0aCBtdXhDb25maWdQcmVzZW50ID0gMSAqLwogIFRUX01QNF9MQVRNX01DUDAgICAgID0gNywgIC8qKjwgQXVkaW8gTXV4IEVsZW1lbnRzIHdpdGggbXV4Q29uZmlnUHJlc2VudCA9IDAsIG91dCBvZiBiYW5kIFN0cmVhbU11eENvbmZpZyAqLwoKICBUVF9NUDRfTE9BUyAgICAgICAgICA9IDEwLCAvKio8IEF1ZGlvIFN5bmMgU3RyZWFtLiAgICAgICAgICovCgogIFRUX0RSTSAgICAgICAgICAgICAgID0gMTIsIC8qKjwgRGlnaXRhbCBSYWRpbyBNb25kaWFsIChEUk0zMC9EUk0rKSBiaXRzdHJlYW0gZm9ybWF0LiAqLwoKICBUVF9NUDFfTDEgICAgICAgICAgICA9IDE2LCAvKio8IE1QRUcgMSBBdWRpbyBMYXllciAxIGF1ZGlvIGJpdHN0cmVhbS4gKi8KICBUVF9NUDFfTDIgICAgICAgICAgICA9IDE3LCAvKio8IE1QRUcgMSBBdWRpbyBMYXllciAyIGF1ZGlvIGJpdHN0cmVhbS4gKi8KICBUVF9NUDFfTDMgICAgICAgICAgICA9IDE4LCAvKio8IE1QRUcgMSBBdWRpbyBMYXllciAzIGF1ZGlvIGJpdHN0cmVhbS4gKi8KCiAgVFRfUlNWRDUwICAgICAgICAgICAgPSA1MCAvKio8ICovCgp9IFRSQU5TUE9SVF9UWVBFOwoKI2RlZmluZSBUVF9JU19QQUNLRVQoeCkgXAogICAgICAgKCAoKHgpID09IFRUX01QNF9SQVcpIFwKICAgICAgfHwgKCh4KSA9PSBUVF9EUk0pIFwKICAgICAgfHwgKCh4KSA9PSBUVF9NUDRfTEFUTV9NQ1AwKSBcCiAgICAgIHx8ICgoeCkgPT0gVFRfTVA0X0xBVE1fTUNQMSkgKQoKLyoqCiAqIEF1ZGlvIE9iamVjdCBUeXBlIGRlZmluaXRpb25zLgogKi8KdHlwZWRlZiBlbnVtCnsKICBBT1RfTk9ORSAgICAgICAgICAgICA9IC0xLAogIEFPVF9OVUxMX09CSkVDVCAgICAgID0gMCwKICBBT1RfQUFDX01BSU4gICAgICAgICA9IDEsIC8qKjwgTWFpbiBwcm9maWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBBT1RfQUFDX0xDICAgICAgICAgICA9IDIsIC8qKjwgTG93IENvbXBsZXhpdHkgb2JqZWN0ICAgICAgICAgICAgICAgICAgICAgKi8KICBBT1RfQUFDX1NTUiAgICAgICAgICA9IDMsCiAgQU9UX0FBQ19MVFAgICAgICAgICAgPSA0LAogIEFPVF9TQlIgICAgICAgICAgICAgID0gNSwKICBBT1RfQUFDX1NDQUwgICAgICAgICA9IDYsCiAgQU9UX1RXSU5fVlEgICAgICAgICAgPSA3LAogIEFPVF9DRUxQICAgICAgICAgICAgID0gOCwKICBBT1RfSFZYQyAgICAgICAgICAgICA9IDksCiAgQU9UX1JTVkRfMTAgICAgICAgICAgPSAxMCwgLyoqPCAocmVzZXJ2ZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogIEFPVF9SU1ZEXzExICAgICAgICAgID0gMTEsIC8qKjwgKHJlc2VydmVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBBT1RfVFRTSSAgICAgICAgICAgICA9IDEyLCAvKio8IFRUU0kgT2JqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgQU9UX01BSU5fU1lOVEggICAgICAgPSAxMywgLyoqPCBNYWluIFN5bnRoZXRpYyBvYmplY3QgICAgICAgICAgICAgICAgICAgICAqLwogIEFPVF9XQVZfVEFCX1NZTlRIICAgID0gMTQsIC8qKjwgV2F2ZXRhYmxlIFN5bnRoZXNpcyBvYmplY3QgICAgICAgICAgICAgICAgKi8KICBBT1RfR0VOX01JREkgICAgICAgICA9IDE1LCAvKio8IEdlbmVyYWwgTUlESSBvYmplY3QgICAgICAgICAgICAgICAgICAgICAgICovCiAgQU9UX0FMR19TWU5USF9BVURfRlggPSAxNiwgLyoqPCBBbGdvcml0aG1pYyBTeW50aGVzaXMgYW5kIEF1ZGlvIEZYIG9iamVjdCAqLwogIEFPVF9FUl9BQUNfTEMgICAgICAgID0gMTcsIC8qKjwgRXJyb3IgUmVzaWxpZW50KEVSKSBBQUMgTG93IENvbXBsZXhpdHkgICAgKi8KICBBT1RfUlNWRF8xOCAgICAgICAgICA9IDE4LCAvKio8IChyZXNlcnZlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgQU9UX0VSX0FBQ19MVFAgICAgICAgPSAxOSwgLyoqPCBFcnJvciBSZXNpbGllbnQoRVIpIEFBQyBMVFAgb2JqZWN0ICAgICAgICAqLwogIEFPVF9FUl9BQUNfU0NBTCAgICAgID0gMjAsIC8qKjwgRXJyb3IgUmVzaWxpZW50KEVSKSBBQUMgU2NhbGFibGUgb2JqZWN0ICAgKi8KICBBT1RfRVJfVFdJTl9WUSAgICAgICA9IDIxLCAvKio8IEVycm9yIFJlc2lsaWVudChFUikgVHdpblZRIG9iamVjdCAgICAgICAgICovCiAgQU9UX0VSX0JTQUMgICAgICAgICAgPSAyMiwgLyoqPCBFcnJvciBSZXNpbGllbnQoRVIpIEJTQUMgb2JqZWN0ICAgICAgICAgICAqLwogIEFPVF9FUl9BQUNfTEQgICAgICAgID0gMjMsIC8qKjwgRXJyb3IgUmVzaWxpZW50KEVSKSBBQUMgTG93RGVsYXkgb2JqZWN0ICAgKi8KICBBT1RfRVJfQ0VMUCAgICAgICAgICA9IDI0LCAvKio8IEVycm9yIFJlc2lsaWVudChFUikgQ0VMUCBvYmplY3QgICAgICAgICAgICovCiAgQU9UX0VSX0hWWEMgICAgICAgICAgPSAyNSwgLyoqPCBFcnJvciBSZXNpbGllbnQoRVIpIEhWWEMgb2JqZWN0ICAgICAgICAgICAqLwogIEFPVF9FUl9ISUxOICAgICAgICAgID0gMjYsIC8qKjwgRXJyb3IgUmVzaWxpZW50KEVSKSBISUxOIG9iamVjdCAgICAgICAgICAgKi8KICBBT1RfRVJfUEFSQSAgICAgICAgICA9IDI3LCAvKio8IEVycm9yIFJlc2lsaWVudChFUikgUGFyYW1ldHJpYyBvYmplY3QgICAgICovCiAgQU9UX1JTVkRfMjggICAgICAgICAgPSAyOCwgLyoqPCBtaWdodCBiZWNvbWUgU1NDICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogIEFPVF9QUyAgICAgICAgICAgICAgID0gMjksIC8qKjwgUFMsIFBhcmFtZXRyaWMgU3RlcmVvIChpbmNsdWRlcyBTQlIpICAgICAgKi8KICBBT1RfTVBFR1MgICAgICAgICAgICA9IDMwLCAvKio8IE1QRUcgU3Vycm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgogIEFPVF9FU0NBUEUgICAgICAgICAgID0gMzEsIC8qKjwgU2lnbmFsIEFPVCB1c2VzIG1vcmUgdGhhbiA1IGJpdHMgICAgICAgICAgKi8KCiAgQU9UX01QM09OTVA0X0wxICAgICAgPSAzMiwgLyoqPCBNUEVHLUxheWVyMSBpbiBtcDQgICAgICAgICAgICAgICAgICAgICAgICAqLwogIEFPVF9NUDNPTk1QNF9MMiAgICAgID0gMzMsIC8qKjwgTVBFRy1MYXllcjIgaW4gbXA0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBBT1RfTVAzT05NUDRfTDMgICAgICA9IDM0LCAvKio8IE1QRUctTGF5ZXIzIGluIG1wNCAgICAgICAgICAgICAgICAgICAgICAgICovCiAgQU9UX1JTVkRfMzUgICAgICAgICAgPSAzNSwgLyoqPCBtaWdodCBiZWNvbWUgRFNUICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogIEFPVF9SU1ZEXzM2ICAgICAgICAgID0gMzYsIC8qKjwgbWlnaHQgYmVjb21lIEFMUyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBBT1RfQUFDX1NMUyAgICAgICAgICA9IDM3LCAvKio8IEFBQyArIFNMUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgQU9UX1NMUyAgICAgICAgICAgICAgPSAzOCwgLyoqPCBTTFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogIEFPVF9FUl9BQUNfRUxEICAgICAgID0gMzksIC8qKjwgQUFDIEVuaGFuY2VkIExvdyBEZWxheSAgICAgICAgICAgICAgICAgICAgKi8KCiAgQU9UX1VTQUMgICAgICAgICAgICAgPSA0MiwgLyoqPCBVU0FDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogIEFPVF9TQU9DICAgICAgICAgICAgID0gNDMsIC8qKjwgU0FPQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBBT1RfTERfTVBFR1MgICAgICAgICA9IDQ0LCAvKio8IExvdyBEZWxheSBNUEVHIFN1cnJvdW5kICAgICAgICAgICAgICAgICAgICovCgogIEFPVF9SU1ZENTAgICAgICAgICAgID0gNTAsICAvKio8IEludGVyaW0gQU9UIGZvciBSc3ZkNTAgICAgICAgICAgICAgICAgICAgKi8KCiAgLyogUHNldWRvIEFPVHMgKi8KICBBT1RfTVAyX0FBQ19NQUlOICAgICA9IDEyOCwgLyoqPCBWaXJ0dWFsIEFPVCBNUDIgTWFpbiBwcm9maWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBBT1RfTVAyX0FBQ19MQyAgICAgICA9IDEyOSwgLyoqPCBWaXJ0dWFsIEFPVCBNUDIgTG93IENvbXBsZXhpdHkgcHJvZmlsZSAgICAgICAgICAgICAgICAgKi8KICBBT1RfTVAyX0FBQ19TU1IgICAgICA9IDEzMCwgLyoqPCBWaXJ0dWFsIEFPVCBNUDIgU2NhbGFibGUgU2FtcGxpbmcgUmF0ZSBwcm9maWxlICAgICAgICAgKi8KCiAgQU9UX01QMl9TQlIgICAgICAgICAgPSAxMzIsIC8qKjwgVmlydHVhbCBBT1QgTVAyIExvdyBDb21wbGV4aXR5IFByb2ZpbGUgd2l0aCBTQlIgICAgICAgICovCgogIEFPVF9EQUIgICAgICAgICAgICAgID0gMTM0LCAvKio8IFZpcnR1YWwgQU9UIGZvciBEQUIgKExheWVyMiB3aXRoIHNjYWxlZmFjdG9yIENSQykgICAgICAqLwogIEFPVF9EQUJQTFVTX0FBQ19MQyAgID0gMTM1LCAvKio8IFZpcnR1YWwgQU9UIGZvciBEQUIgcGx1cyBBQUMtTEMgICAgICAgICAgICAgICAgICAgICAgICAqLwogIEFPVF9EQUJQTFVTX1NCUiAgICAgID0gMTM2LCAvKio8IFZpcnR1YWwgQU9UIGZvciBEQUIgcGx1cyBIRS1BQUMgICAgICAgICAgICAgICAgICAgICAgICAqLwogIEFPVF9EQUJQTFVTX1BTICAgICAgID0gMTM3LCAvKio8IFZpcnR1YWwgQU9UIGZvciBEQUIgcGx1cyBIRS1BQUMgdjIgICAgICAgICAgICAgICAgICAgICAqLwoKICBBT1RfUExBSU5fTVAxICAgICAgICA9IDE0MCwgLyoqPCBWaXJ0dWFsIEFPVCBmb3IgcGxhaW4gbXAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBBT1RfUExBSU5fTVAyICAgICAgICA9IDE0MSwgLyoqPCBWaXJ0dWFsIEFPVCBmb3IgcGxhaW4gbXAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBBT1RfUExBSU5fTVAzICAgICAgICA9IDE0MiwgLyoqPCBWaXJ0dWFsIEFPVCBmb3IgcGxhaW4gbXAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCiAgQU9UX0RSTV9BQUMgICAgICAgICAgPSAxNDMsIC8qKjwgVmlydHVhbCBBT1QgZm9yIERSTSAoRVItQUFDLVNDQUwgd2l0aG91dCBTQlIpICAgICAgICAgICovCiAgQU9UX0RSTV9TQlIgICAgICAgICAgPSAxNDQsIC8qKjwgVmlydHVhbCBBT1QgZm9yIERSTSAoRVItQUFDLVNDQUwgd2l0aCBTQlIpICAgICAgICAgICAgICovCiAgQU9UX0RSTV9NUEVHX1BTICAgICAgPSAxNDUsIC8qKjwgVmlydHVhbCBBT1QgZm9yIERSTSAoRVItQUFDLVNDQUwgd2l0aCBTQlIgYW5kIE1QRUctUFMpICovCiAgQU9UX0RSTV9TVVJST1VORCAgICAgPSAxNDYsIC8qKjwgVmlydHVhbCBBT1QgZm9yIERSTSBTdXJyb3VuZCAoRVItQUFDLVNDQUwgKCtTQlIpICtNUFMpICovCgogIEFPVF9NUDJfUFMgICAgICAgICAgID0gMTU2LCAvKio8IFZpcnR1YWwgQU9UIE1QMiBMb3cgQ29tcGxleGl0eSBQcm9maWxlIHdpdGggU0JSIGFuZCBQUyAqLwoKICBBT1RfTVBFR1NfUkVTSURVQUxTICA9IDI1NiAgLyoqPCBWaXJ0dWFsIEFPVCBmb3IgTVBFRyBTdXJyb3VuZCByZXNpZHVhbHMgICAgICAgICAgICAgICAgKi8KCn0gQVVESU9fT0JKRUNUX1RZUEU7CgovKiogQ2hhbm5lbCBNb2RlICggMS03IGVxdWFscyBNUEVHIGNoYW5uZWwgY29uZmlndXJhdGlvbnMsIG90aGVycyBhcmUgYXJiaXRyYXJ5KS4gKi8KdHlwZWRlZiBlbnVtIHsKICBNT0RFX0lOVkFMSUQgICAgICAgICAgICAgICAgICA9IC0xLAogIE1PREVfVU5LTk9XTiAgICAgICAgICAgICAgICAgID0gIDAsCiAgTU9ERV8xICAgICAgICAgICAgICAgICAgICAgICAgPSAgMSwgICAgICAgLyoqPCBDICovCiAgTU9ERV8yICAgICAgICAgICAgICAgICAgICAgICAgPSAgMiwgICAgICAgLyoqPCBMK1IgKi8KICBNT0RFXzFfMiAgICAgICAgICAgICAgICAgICAgICA9ICAzLCAgICAgICAvKio8IEMsIEwrUiAqLwogIE1PREVfMV8yXzEgICAgICAgICAgICAgICAgICAgID0gIDQsICAgICAgIC8qKjwgQywgTCtSLCBSZWFyICovCiAgTU9ERV8xXzJfMiAgICAgICAgICAgICAgICAgICAgPSAgNSwgICAgICAgLyoqPCBDLCBMK1IsIExTK1JTICovCiAgTU9ERV8xXzJfMl8xICAgICAgICAgICAgICAgICAgPSAgNiwgICAgICAgLyoqPCBDLCBMK1IsIExTK1JTLCBMRkUgKi8KICBNT0RFXzFfMl8yXzJfMSAgICAgICAgICAgICAgICA9ICA3LCAgICAgICAvKio8IEMsIExDK1JDLCBMK1IsIExTK1JTLCBMRkUgKi8KCgogIE1PREVfMV8xICAgICAgICAgICAgICAgICAgICAgID0gMTYsICAgICAgIC8qKjwgMiBTQ0VzIChkdWFsIG1vbm8pICovCiAgTU9ERV8xXzFfMV8xICAgICAgICAgICAgICAgICAgPSAxNywgICAgICAgLyoqPCA0IFNDRXMgKi8KICBNT0RFXzFfMV8xXzFfMV8xICAgICAgICAgICAgICA9IDE4LCAgICAgICAvKio8IDYgU0NFcyAqLwogIE1PREVfMV8xXzFfMV8xXzFfMV8xICAgICAgICAgID0gMTksICAgICAgIC8qKjwgOCBTQ0VzICovCiAgTU9ERV8xXzFfMV8xXzFfMV8xXzFfMV8xXzFfMSAgPSAyMCwgICAgICAgLyoqPCAxMiBTQ0VzICovCgogIE1PREVfMl8yICAgICAgICAgICAgICAgICAgICAgID0gMjEsICAgICAgIC8qKjwgMiBDUEVzICovCiAgTU9ERV8yXzJfMiAgICAgICAgICAgICAgICAgICAgPSAyMiwgICAgICAgLyoqPCAzIENQRXMgKi8KICBNT0RFXzJfMl8yXzIgICAgICAgICAgICAgICAgICA9IDIzLCAgICAgICAvKio8IDQgQ1BFcyAqLwogIE1PREVfMl8yXzJfMl8yXzIgICAgICAgICAgICAgID0gMjQsICAgICAgIC8qKjwgNiBDUEVzICovCgogIE1PREVfMl8xICAgICAgICAgICAgICAgICAgICAgID0gMzAsICAgICAgIC8qKjwgQ1BFLFNDRSAoQVJJQiBzdGFuZGFyZCBCMzIpICovCgogIE1PREVfN18xX1JFQVJfU1VSUk9VTkQgICAgICAgID0gMzMsICAgICAgIC8qKjwgQywgTCtSLCBMUytSUywgTHJlYXIrUnJlYXIsIExGRSAqLwogIE1PREVfN18xX0ZST05UX0NFTlRFUiAgICAgICAgID0gMzQgICAgICAgIC8qKjwgQywgTEMrUkMsIEwrUiwgTFMrUlMsIExGRSAqLwoKfSBDSEFOTkVMX01PREU7CgovKioKICogU3BlYWtlciBkZXNjcmlwdGlvbiB0YWdzLgogKiBEbyBub3QgY2hhbmdlIHRoZSBlbnVtZXJhdGlvbiB2YWx1ZXMgdW5sZXNzIGl0IGtlZXBzIHRoZSBmb2xsb3dpbmcgc2VnbWVudGF0aW9uOgogKiAtIEJpdCAwLTM6IEhvcml6b250YWwgcG9zdGlvbiAoMDogbm9uZSwgMTogZnJvbnQsIDI6IHNpZGUsIDM6IGJhY2ssIDQ6IGxmZSkKICogLSBCaXQgNC03OiBWZXJ0aWNhbCBwb3NpdGlvbiAoMDogbm9ybWFsLCAxOiB0b3AsIDI6IGJvdHRvbSkKICovCnR5cGVkZWYgZW51bSB7CiAgQUNUX05PTkUgICAgICAgICA9IDB4MDAsCiAgQUNUX0ZST05UICAgICAgICA9IDB4MDEsICAvKiE8IEZyb250IHNwZWFrZXIgcG9zaXRpb24gKGF0IG5vcm1hbCBoZWlnaHQpICovCiAgQUNUX1NJREUgICAgICAgICA9IDB4MDIsICAvKiE8IFNpZGUgc3BlYWtlciBwb3NpdGlvbiAoYXQgbm9ybWFsIGhlaWdodCkgKi8KICBBQ1RfQkFDSyAgICAgICAgID0gMHgwMywgIC8qITwgQmFjayBzcGVha2VyIHBvc2l0aW9uIChhdCBub3JtYWwgaGVpZ2h0KSAqLwogIEFDVF9MRkUgICAgICAgICAgPSAweDA0LCAgLyohPCBMb3cgZnJlcXVlbmN5IGVmZmVjdCBzcGVha2VyIHBvc3Rpb24gKGZyb250KSAqLwoKICBBQ1RfVE9QICAgICAgICAgID0gMHgxMCwgIC8qITwgVG9wIHNwZWFrZXIgYXJlYSAoZm9yIGNvbWJpbmF0aW9uIHdpdGggc3BlYWtlciBwb3NpdGlvbnMpICovCiAgQUNUX0ZST05UX1RPUCAgICA9IDB4MTEsICAvKiE8IFRvcCBmcm9udCBzcGVha2VyID0gKEFDVF9GUk9OVHxBQ1RfVE9QKSAqLwogIEFDVF9TSURFX1RPUCAgICAgPSAweDEyLCAgLyohPCBUb3Agc2lkZSBzcGVha2VyICA9IChBQ1RfU0lERSB8QUNUX1RPUCkgKi8KICBBQ1RfQkFDS19UT1AgICAgID0gMHgxMywgIC8qITwgVG9wIGJhY2sgc3BlYWtlciAgPSAoQUNUX0JBQ0sgfEFDVF9UT1ApICovCgogIEFDVF9CT1RUT00gICAgICAgPSAweDIwLCAgLyohPCBCb3R0b20gc3BlYWtlciBhcmVhIChmb3IgY29tYmluYXRpb24gd2l0aCBzcGVha2VyIHBvc2l0aW9ucykgKi8KICBBQ1RfRlJPTlRfQk9UVE9NID0gMHgyMSwgIC8qITwgQm90dG9tIGZyb250IHNwZWFrZXIgPSAoQUNUX0ZST05UfEFDVF9CT1RUT00pICovCiAgQUNUX1NJREVfQk9UVE9NICA9IDB4MjIsICAvKiE8IEJvdHRvbSBzaWRlIHNwZWFrZXIgID0gKEFDVF9TSURFIHxBQ1RfQk9UVE9NKSAqLwogIEFDVF9CQUNLX0JPVFRPTSAgPSAweDIzICAgLyohPCBCb3R0b20gYmFjayBzcGVha2VyICA9IChBQ1RfQkFDSyB8QUNUX0JPVFRPTSkgKi8KCn0gQVVESU9fQ0hBTk5FTF9UWVBFOwoKdHlwZWRlZiBlbnVtCnsKICBTSUdfVU5LTk9XTiAgICAgICAgICAgICAgICAgPSAtMSwKICBTSUdfSU1QTElDSVQgICAgICAgICAgICAgICAgPSAgMCwKICBTSUdfRVhQTElDSVRfQldfQ09NUEFUSUJMRSAgPSAgMSwKICBTSUdfRVhQTElDSVRfSElFUkFSQ0hJQ0FMICAgPSAgMgoKfSBTQlJfUFNfU0lHTkFMSU5HOwoKLyoqCiAqIEF1ZGlvIENvZGVjIGZsYWdzLgogKi8KI2RlZmluZSBBQ19FUl9WQ0IxMSAgICAgMHgwMDAwMDEgIC8qITwgYWFjU2VjdGlvbkRhdGFSZXNpbGllbmNlRmxhZyAgICAgZmxhZyAoZnJvbSBBU0MpOiAxIG1lYW5zIHVzZSB2aXJ0dWFsIGNvZGVib29rcyAgKi8KI2RlZmluZSBBQ19FUl9SVkxDICAgICAgMHgwMDAwMDIgIC8qITwgYWFjU3BlY3RyYWxEYXRhUmVzaWxpZW5jZUZsYWcgICAgIGZsYWcgKGZyb20gQVNDKTogMSBtZWFucyB1c2UgaHVmZm1hbiBjb2Rld29yZCByZW9yZGVyaW5nICovCiNkZWZpbmUgQUNfRVJfSENSICAgICAgIDB4MDAwMDA0ICAvKiE8IGFhY1NlY3Rpb25EYXRhUmVzaWxpZW5jZUZsYWcgICAgIGZsYWcgKGZyb20gQVNDKTogMSBtZWFucyB1c2UgdmlydHVhbCBjb2RlYm9va3MgICovCiNkZWZpbmUgQUNfU0NBTEFCTEUgICAgIDB4MDAwMDA4ICAvKiE8IEFBQyBTY2FsYWJsZSovCiNkZWZpbmUgQUNfRUxEICAgICAgICAgIDB4MDAwMDEwICAvKiE8IEFBQy1FTEQgKi8KI2RlZmluZSBBQ19MRCAgICAgICAgICAgMHgwMDAwMjAgIC8qITwgQUFDLUxEICovCiNkZWZpbmUgQUNfRVIgICAgICAgICAgIDB4MDAwMDQwICAvKiE8IEVSIHN5bnRheCAqLwojZGVmaW5lIEFDX0JTQUMgICAgICAgICAweDAwMDA4MCAgLyohPCBCU0FDICovCiNkZWZpbmUgQUNfVVNBQyAgICAgICAgIDB4MDAwMTAwICAvKiE8IFVTQUMgKi8KI2RlZmluZSBBQ19VU0FDX1RXICAgICAgMHgwMDAyMDAgIC8qITwgVVNBQyB0aW1lIHdhcnBlZCBmaWx0ZXIgYmFuayBpcyBhY3RpdmUgKi8KI2RlZmluZSBBQ19VU0FDX05PSVNFICAgMHgwMDA0MDAgIC8qITwgVVNBQyBub2lzZSBmaWxsaW5nIGlzIGFjdGl2ZSAqLwojZGVmaW5lIEFDX1VTQUNfSEJFICAgICAweDAwMDgwMCAgLyohPCBVU0FDIGhhcm1vbmljIGJhbmR3aWR0aCBleHRlbnNpb24gaXMgYWN0aXZlICovCiNkZWZpbmUgQUNfUlNWRDUwICAgICAgIDB4MDAxMDAwICAvKiE8IFJzdmQ1MCAqLwojZGVmaW5lIEFDX1NCUl9QUkVTRU5UICAweDAwMjAwMCAgLyohPCBTQlIgcHJlc2VudCBmbGFnIChmcm9tIEFTQykgICAgICAgICAgICAgKi8KI2RlZmluZSBBQ19TQlJDUkMgICAgICAgMHgwMDQwMDAgIC8qITwgU0JSIENSQyBwcmVzZW50IGZsYWcuIE9ubHkgcmVsZXZhbnQgZm9yIEFBQy1FTEQgZm9yIG5vdy4gKi8KI2RlZmluZSBBQ19QU19QUkVTRU5UICAgMHgwMDgwMDAgIC8qITwgUFMgcHJlc2VudCBmbGFnIChmcm9tIEFTQyBvciBpbXBsaWNpdCkgICovCiNkZWZpbmUgQUNfTVBTX1BSRVNFTlQgIDB4MDEwMDAwICAvKiE8IE1QUyBwcmVzZW50IGZsYWcgKGZyb20gQVNDIG9yIGltcGxpY2l0KSAqLwojZGVmaW5lIEFDX0RSTSAgICAgICAgICAweDAyMDAwMCAgLyohPCBEUk0gYml0IHN0cmVhbSBzeW50YXggKi8KI2RlZmluZSBBQ19JTkRFUCAgICAgICAgMHgwNDAwMDAgIC8qITwgSW5kZXBlbmRlbmN5IGZsYWcgKi8KI2RlZmluZSBBQ19NUFNfUkVTICAgICAgMHgwODAwMDAgIC8qITwgTVBTIHJlc2lkdWFsIGluZGl2aWR1YWwgY2hhbm5lbCBkYXRhLiAqLwojZGVmaW5lIEFDX0RBQiAgICAgICAgICAweDgwMDAwMCAgLyohPCBEQUIgYml0IHN0cmVhbSBzeW50YXggKi8KI2RlZmluZSBBQ19MRF9NUFMgICAgIDB4MDEwMDAwMDAgIC8qITwgTG93IERlbGF5IE1QUy4gKi8KCgovKiBDT0RFUl9DT05GSUc6OmZsYWdzICovCiNkZWZpbmUgQ0NfTVBFR19JRCAgICAgICAgIDB4MDAxMDAwMDAKI2RlZmluZSBDQ19JU19CQVNFTEFZRVIgICAgMHgwMDIwMDAwMAojZGVmaW5lIENDX1BST1RFQ1RJT04gICAgICAweDAwNDAwMDAwCiNkZWZpbmUgQ0NfU0JSICAgICAgICAgICAgIDB4MDA4MDAwMDAKI2RlZmluZSBDQ19TQlJDUkMgICAgICAgICAgMHgwMDAxMDAwMAojZGVmaW5lIENDX1JWTEMgICAgICAgICAgICAweDAxMDAwMDAwCiNkZWZpbmUgQ0NfVkNCMTEgICAgICAgICAgIDB4MDIwMDAwMDAKI2RlZmluZSBDQ19IQ1IgICAgICAgICAgICAgMHgwNDAwMDAwMAojZGVmaW5lIENDX1BTRVVET19TVVJST1VORCAweDA4MDAwMDAwCiNkZWZpbmUgQ0NfVVNBQ19OT0lTRSAgICAgIDB4MTAwMDAwMDAKI2RlZmluZSBDQ19VU0FDX1RXICAgICAgICAgMHgyMDAwMDAwMAojZGVmaW5lIENDX1VTQUNfSEJFICAgICAgICAweDQwMDAwMDAwCgovKiogR2VuZXJpYyBhdWRpbyBjb2RlciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4gKi8KdHlwZWRlZiBzdHJ1Y3QgewogIEFVRElPX09CSkVDVF9UWVBFIGFvdDsgICAgICAgICAvKio8IEF1ZGlvIE9iamVjdCBUeXBlIChBT1QpLiAgICAgICAgICAgKi8KICBBVURJT19PQkpFQ1RfVFlQRSBleHRBT1Q7ICAgICAgLyoqPCBFeHRlbnNpb24gQXVkaW8gT2JqZWN0IFR5cGUgKFNCUikuICovCiAgQ0hBTk5FTF9NT0RFIGNoYW5uZWxNb2RlOyAgICAgIC8qKjwgQ2hhbm5lbCBtb2RlLiAgICAgICAgICAgICAgICAgICAgICAqLwogIElOVCAgICAgICAgc2FtcGxpbmdSYXRlOyAgICAgICAvKio8IFNhbXBsaW5nIHJhdGUuICAgICAgICAgICAgICAgICAgICAgKi8KICBJTlQgICAgICAgIGV4dFNhbXBsaW5nUmF0ZTsgICAgLyoqPCBFeHRlbmRlZCBzYW1wbGVyYXRlIChTQlIpLiAgICAgICAgICovCiAgSU5UICAgICAgICBiaXRSYXRlOyAgICAgICAgICAgIC8qKjwgQXZlcmFnZSBiaXRyYXRlLiAgICAgICAgICAgICAgICAgICAqLwogIGludCAgICAgICAgc2FtcGxlc1BlckZyYW1lOyAgICAvKio8IE51bWJlciBvZiBQQ00gc2FtcGxlcyBwZXIgY29kZWMgZnJhbWUgYW5kIGF1ZGlvIGNoYW5uZWwuICovCiAgaW50ICAgICAgICBub0NoYW5uZWxzOyAgICAgICAgIC8qKjwgTnVtYmVyIG9mIGF1ZGlvIGNoYW5uZWxzLiAgICAgICAgICAqLwogIGludCAgICAgICAgYml0c0ZyYW1lOwogIGludCAgICAgICAgblN1YkZyYW1lczsgICAgICAgICAvKio8IEFtb3VudCBvZiBlbmNvZGVyIHN1YmZyYW1lcy4gMSBtZWFucyBubyBzdWJmcmFtaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogIGludCAgICAgICAgQlNBQ251bU9mU3ViRnJhbWU7ICAvKio8IFRoZSBudW1iZXIgb2YgdGhlIHN1Yi1mcmFtZXMgd2hpY2ggYXJlIGdyb3VwZWQgYW5kIHRyYW5zbWl0dGVkIGluIGEgc3VwZXItZnJhbWUgKEJTQUMpLiAqLwogIGludCAgICAgICAgQlNBQ2xheWVyTGVuZ3RoOyAgICAvKio8IFRoZSBhdmVyYWdlIGxlbmd0aCBvZiB0aGUgbGFyZ2Utc3RlcCBsYXllcnMgaW4gYnl0ZXMgKEJTQUMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogIFVJTlQgICAgICAgZmxhZ3M7ICAgICAgICAgICAgICAvKio8IGZsYWdzICovCiAgVUNIQVIgICAgICBtYXRyaXhNaXhkb3duQTsgICAgIC8qKjwgTWF0cml4IG1peGRvd24gaW5kZXggdG8gcHV0IGludG8gUENFLiBEZWZhdWx0IHZhbHVlIDAgbWVhbnMgbm8gbWl4ZG93biBjb2VmZmljaWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCB2YWx1ZXMgYXJlIDEtNCB3aGljaCBjb3JyZXNwb25kIHRvIG1hdHJpeF9taXhkb3duX2lkeCAwLTMuICovCiAgVUNIQVIgICAgICBoZWFkZXJQZXJpb2Q7ICAgICAgIC8qKjwgRnJhbWUgcGVyaW9kIGZvciBzZW5kaW5nIGluIGJhbmQgY29uZmlndXJhdGlvbiBidWZmZXJzIGluIHRoZSB0cmFuc3BvcnQgbGF5ZXIuICovCgogIFVDSEFSICAgICAgc3RlcmVvQ29uZmlnSW5kZXg7IC8qKjwgVVNBQyBNUFMgc3RlcmVvIG1vZGUgKi8KICBVQ0hBUiAgICAgIHNick1vZGU7ICAgICAgICAgICAvKio8IFVTQUMgU0JSIG1vZGUgKi8KICBTQlJfUFNfU0lHTkFMSU5HIHNiclNpZ25hbGluZzsvKio8IDA6IGltcGxpY2l0IHNpZ25hbGluZywgMTogYmFja3dhcmRzIGNvbXBhdGlibGUgZXhwbGljaXQgc2lnbmFsaW5nLCAyOiBoaWVyYXJjaWNhbCBleHBsaWNpdCBzaWduYWxpbmcgKi8KCiAgVUNIQVIgICAgICBzYnJQcmVzZW50OwogIFVDSEFSICAgICAgcHNQcmVzZW50Owp9IENPREVSX0NPTkZJRzsKCi8qKiBNUDQgRWxlbWVudCBJRHMuICovCnR5cGVkZWYgZW51bQp7CiAgSURfTk9ORSA9IC0xLCAgIC8qKjwgSW52YWxpZCBFbGVtZW50IGhlbHBlciBJRC4gICAgICAgICAgICAgKi8KICBJRF9TQ0UgPSAwLCAgICAgLyoqPCBTaW5nbGUgQ2hhbm5lbCBFbGVtZW50LiAgICAgICAgICAgICAgICAqLwogIElEX0NQRSA9IDEsICAgICAvKio8IENoYW5uZWwgUGFpciBFbGVtZW50LiAgICAgICAgICAgICAgICAgICovCiAgSURfQ0NFID0gMiwgICAgIC8qKjwgQ291cGxpbmcgQ2hhbm5lbCBFbGVtZW50LiAgICAgICAgICAgICAgKi8KICBJRF9MRkUgPSAzLCAgICAgLyoqPCBMRkUgQ2hhbm5lbCBFbGVtZW50LiAgICAgICAgICAgICAgICAgICAqLwogIElEX0RTRSA9IDQsICAgICAvKio8IEN1cnJlbnRseSBvbmUgRGF0YSBTdHJlYW0gRWxlbWVudCBmb3IgYW5jaWxsYXJ5IGRhdGEgaXMgc3VwcG9ydGVkLiAqLwogIElEX1BDRSA9IDUsICAgICAvKio8IFByb2dyYW0gQ29uZmlnIEVsZW1lbnQuICAgICAgICAgICAgICAgICovCiAgSURfRklMID0gNiwgICAgIC8qKjwgRmlsbCBFbGVtZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBJRF9FTkQgPSA3LCAgICAgLyoqPCBBcm5pZSAoRW5kIEVsZW1lbnQgPSBUZXJtaW5hdG9yKS4gICAgICAqLwogIElEX0VYVCA9IDgsICAgICAvKio8IEV4dGVuc2lvbiBQYXlsb2FkIChFUiBvbmx5KS4gICAgICAgICAgICovCiAgSURfU0NBTCA9IDksICAgIC8qKjwgQUFDIHNjYWxhYmxlIGVsZW1lbnQgKEVSIG9ubHkpLiAgICAgICAgKi8KICBJRF9MQVNUCn0gTVA0X0VMRU1FTlRfSUQ7CgojZGVmaW5lIElTX0NIQU5ORUxfRUxFTUVOVChlbGVtZW50SWQpIFwKICAoKGVsZW1lbnRJZCkgPT0gSURfU0NFIFwKfHwgKGVsZW1lbnRJZCkgPT0gSURfQ1BFIFwKfHwgKGVsZW1lbnRJZCkgPT0gSURfTEZFKQoKI2RlZmluZSBFWFRfSURfQklUUyA0ICAvKio8IFNpemUgaW4gYml0cyBvZiBleHRlbnNpb24gcGF5bG9hZCB0eXBlIHRhZ3MuICovCgovKiogRXh0ZW5zaW9uIHBheWxvYWQgdHlwZXMuICovCnR5cGVkZWYgZW51bSB7CiAgRVhUX0ZJTCAgICAgICAgICAgPSAweDAwLAogIEVYVF9GSUxMX0RBVEEgICAgID0gMHgwMSwKICBFWFRfREFUQV9FTEVNRU5UICA9IDB4MDIsCiAgRVhUX0RBVEFfTEVOR1RIICAgPSAweDAzLAogIEVYVF9MRFNBQ19EQVRBICAgID0gMHgwOSwKICBFWFRfU0FPQ19EQVRBICAgICA9IDB4MGEsCiAgRVhUX0RZTkFNSUNfUkFOR0UgPSAweDBiLAogIEVYVF9TQUNfREFUQSAgICAgID0gMHgwYywKICBFWFRfU0JSX0RBVEEgICAgICA9IDB4MGQsCiAgRVhUX1NCUl9EQVRBX0NSQyAgPSAweDBlCn0gRVhUX1BBWUxPQURfVFlQRTsKCgovKioKICogUHJvcHJpZXRhcnkgcmF3IHBhY2tldCBmaWxlIGNvbmZpZ3VyYXRpb24gZGF0YSB0eXBlIGlkZW50aWZpZXIuCiAqLwp0eXBlZGVmIGVudW0KewogIFRDX05PVEhJTkcgPSAwLCAgICAgLyogTm8gY29uZmlndXJhdGlvbiBhdmFpbGFibGUgLT4gaW4tYmFuZCBjb25maWd1cmF0aW9uLiAgICovCiAgVENfUkFXX0FTQywgICAgICAgICAvKiBDb25maWd1cmF0aW9uIGRhdGEgZmllbGQgaXMgYSByYXcgQXVkaW9TcGVjaWZpY0NvbmZpZy4gKi8KICBUQ19SQVdfU01DLCAgICAgICAgIC8qIENvbmZpZ3VyYXRpb24gZGF0YSBmaWVsZCBpcyBhIHJhdyBTdHJlYW1NdXhDb25maWcuICAgICAqLwogIFRDX1JBV19TREMgICAgICAgICAgLyogQ29uZmlndXJhdGlvbiBkYXRhIGZpZWxkIGlzIGEgcmF3IERybSBTREMuICAgICAgICAgICAgICovCgp9IFRQX0NPTkZJR19UWVBFOwoKLyoKICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogKiBMaWJyYXJ5IGlkZW50aWZpY2F0aW9uIGFuZCBlcnJvciBoYW5kbGluZwogKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAqLwovKiBcY29uZCAqLwojZGVmaW5lIE1PRFVMRV9JRF9NQVNLICAoMHgwMDAwMDBmZikKI2RlZmluZSBNT0RVTEVfSURfU0hJRlQgKDI0KQoKdHlwZWRlZiBlbnVtIHsKICBGREtfTk9ORSAgID0gMCwKICBGREtfVE9PTFMgID0gMSwKICBGREtfU1lTTElCID0gMiwKICBGREtfQUFDREVDID0gMywKICBGREtfQUFDRU5DID0gNCwKICBGREtfU0JSREVDID0gNSwKICBGREtfU0JSRU5DID0gNiwKICBGREtfVFBERUMgID0gNywKICBGREtfVFBFTkMgID0gOCwKICBGREtfTVBTREVDID0gOSwKICBGREtfTVBFR0ZJTEVSRUFEICA9IDEwLAogIEZES19NUEVHRklMRVdSSVRFID0gMTEsCiAgRkRLX01QMkRFQyA9IDEyLAogIEZES19EQUJERUMgPSAxMywKICBGREtfREFCUEFSU0UgPSAxNCwKICBGREtfRFJNREVDID0gMTUsCiAgRkRLX0RSTVBBUlNFID0gMTYsCiAgRkRLX0FBQ0xERU5DID0gMTcsCiAgRkRLX01QMkVOQyA9IDE4LAogIEZES19NUDNFTkMgPSAxOSwKICBGREtfTVAzREVDID0gMjAsCiAgRkRLX01QM0hFQURQSE9ORSA9IDIxLAogIEZES19NUDNTREVDID0gMjIsCiAgRkRLX01QM1NFTkMgPSAyMywKICBGREtfRUFFQyAgICA9IDI0LAogIEZES19EQUJFTkMgID0gMjUsCiAgRkRLX0RNQkRFQyAgPSAyNiwKICBGREtfRkRSRVZFUkIgPSAyNywKICBGREtfRFJNRU5DICA9IDI4LAogIEZES19NRVRBREFUQVRSQU5TQ09ERVIgPSAyOSwKICBGREtfQUMzREVDID0gMzAsCiAgRkRLX1BDTURNWCA9IDMxLAoKICBGREtfTU9EVUxFX0xBU1QKCn0gRkRLX01PRFVMRV9JRDsKCi8qIEFBQyBjYXBhYmlsaXR5IGZsYWdzICovCiNkZWZpbmUgQ0FQRl9BQUNfTEMgICAgICAgICAgIDB4MDAwMDAwMDEgIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBBQUMgTG93IENvbXBsZXhpdHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwojZGVmaW5lIENBUEZfRVJfQUFDX0xEICAgICAgICAweDAwMDAwMDAyICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgQUFDIExvdyBEZWxheSB3aXRoIEVycm9yIFJlc2lsaWVuY2UgdG9vbHMuICAgICAgKi8KI2RlZmluZSBDQVBGX0VSX0FBQ19TQ0FMICAgICAgMHgwMDAwMDAwNCAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIEFBQyBTY2FsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgQ0FQRl9FUl9BQUNfTEMgICAgICAgIDB4MDAwMDAwMDggIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBBQUMgTG93IENvbXBsZXhpdHkgd2l0aCBFcnJvciBSZXNpbGllbmNlIHRvb2xzLiAqLwojZGVmaW5lIENBUEZfQUFDXzQ4MCAgICAgICAgICAweDAwMDAwMDEwICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgQUFDIHdpdGggNDgwIGZyYW1lbGVuZ3RoLiAgKi8KI2RlZmluZSBDQVBGX0FBQ181MTIgICAgICAgICAgMHgwMDAwMDAyMCAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIEFBQyB3aXRoIDUxMiBmcmFtZWxlbmd0aC4gICovCiNkZWZpbmUgQ0FQRl9BQUNfOTYwICAgICAgICAgIDB4MDAwMDAwNDAgIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBBQUMgd2l0aCA5NjAgZnJhbWVsZW5ndGguICAqLwojZGVmaW5lIENBUEZfQUFDXzEwMjQgICAgICAgICAweDAwMDAwMDgwICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgQUFDIHdpdGggMTAyNCBmcmFtZWxlbmd0aC4gKi8KI2RlZmluZSBDQVBGX0FBQ19IQ1IgICAgICAgICAgMHgwMDAwMDEwMCAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIEFBQyB3aXRoIEh1ZmZtYW4gQ29kZXdvcmQgUmVvcmRlcmluZy4gICAgKi8KI2RlZmluZSBDQVBGX0FBQ19WQ0IxMSAgICAgICAgMHgwMDAwMDIwMCAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIEFBQyBWaXJ0dWFsIENvZGVib29rIDExLiAgICAqLwojZGVmaW5lIENBUEZfQUFDX1JWTEMgICAgICAgICAweDAwMDAwNDAwICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgQUFDIFJldmVyc2libGUgVmFyaWFibGUgTGVuZ3RoIENvZGluZy4gICAqLwojZGVmaW5lIENBUEZfQUFDX01QRUc0ICAgICAgICAweDAwMDAwODAwICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgTVBFRyBmaWxlIGZvcm1hdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwojZGVmaW5lIENBUEZfQUFDX0RSQyAgICAgICAgICAweDAwMDAxMDAwICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgQUFDIER5bmFtaWMgUmFuZ2UgQ29udHJvbC4gKi8KI2RlZmluZSBDQVBGX0FBQ19DT05DRUFMTUVOVCAgMHgwMDAwMjAwMCAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIEFBQyBjb25jZWFsbWVudC4gICAgICAgICAgICovCiNkZWZpbmUgQ0FQRl9BQUNfRFJNX0JTRk9STUFUIDB4MDAwMDQwMDAgIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBBQUMgRFJNIGJpc3RyZWFtIGZvcm1hdC4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBDQVBGX0VSX0FBQ19FTEQgICAgICAgMHgwMDAwODAwMCAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIEFBQyBFbmhhbmNlZCBMb3cgRGVsYXkgd2l0aCBFcnJvciBSZXNpbGllbmNlIHRvb2xzLiAgKi8KI2RlZmluZSBDQVBGX0VSX0FBQ19CU0FDICAgICAgMHgwMDAxMDAwMCAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIEFBQyBCU0FDLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgQ0FQRl9BQUNfU1VQRVJGUkFNSU5HIDB4MDAwMjAwMDAgIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBBQUMgU3VwZXJmcmFtaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgovKiBUcmFuc3BvcnQgY2FwYWJpbGl0eSBmbGFncyAqLwojZGVmaW5lIENBUEZfQURUUyAgICAgICAgICAgICAweDAwMDAwMDAxICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgQURUUyB0cmFuc3BvcnQgZm9ybWF0LiAgICAgICAgKi8KI2RlZmluZSBDQVBGX0FESUYgICAgICAgICAgICAgMHgwMDAwMDAwMiAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIEFESUYgdHJhbnNwb3J0IGZvcm1hdC4gICAgICAgICovCiNkZWZpbmUgQ0FQRl9MQVRNICAgICAgICAgICAgIDB4MDAwMDAwMDQgIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBMQVRNIHRyYW5zcG9ydCBmb3JtYXQuICAgICAgICAqLwojZGVmaW5lIENBUEZfTE9BUyAgICAgICAgICAgICAweDAwMDAwMDA4ICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgTE9BUyB0cmFuc3BvcnQgZm9ybWF0LiAgICAgICAgKi8KI2RlZmluZSBDQVBGX1JBV1BBQ0tFVFMgICAgICAgMHgwMDAwMDAxMCAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIFJBVyBQQUNLRVRTIHRyYW5zcG9ydCBmb3JtYXQuICovCiNkZWZpbmUgQ0FQRl9EUk0gICAgICAgICAgICAgIDB4MDAwMDAwMjAgIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBEUk0vRFJNKyB0cmFuc3BvcnQgZm9ybWF0LiAgICAqLwojZGVmaW5lIENBUEZfUlNWRDUwICAgICAgICAgICAweDAwMDAwMDQwICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgUlNWRDUwIHRyYW5zcG9ydCBmb3JtYXQgICAgICAgKi8KCi8qIFNCUiBjYXBhYmlsaXR5IGZsYWdzICovCiNkZWZpbmUgQ0FQRl9TQlJfTFAgICAgICAgICAgIDB4MDAwMDAwMDEgIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBTQlIgTG93IFBvd2VyIG1vZGUuICAgICAgICAgICAqLwojZGVmaW5lIENBUEZfU0JSX0hRICAgICAgICAgICAweDAwMDAwMDAyICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgU0JSIEhpZ2ggUXVhbGl0eSBtb2RlLiAgICAgICAgKi8KI2RlZmluZSBDQVBGX1NCUl9EUk1fQlMgICAgICAgMHgwMDAwMDAwNCAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgQ0FQRl9TQlJfQ09OQ0VBTE1FTlQgIDB4MDAwMDAwMDggIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBTQlIgY29uY2VhbG1lbnQuICAgICAgICAgICAgICAqLwojZGVmaW5lIENBUEZfU0JSX0RSQyAgICAgICAgICAweDAwMDAwMDEwICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgU0JSIER5bmFtaWMgUmFuZ2UgQ29udHJvbC4gICAgKi8KI2RlZmluZSBDQVBGX1NCUl9QU19NUEVHICAgICAgMHgwMDAwMDAyMCAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIE1QRUcgUGFyYW1ldHJpYyBTdGVyZW8uICAgICAgICovCiNkZWZpbmUgQ0FQRl9TQlJfUFNfRFJNICAgICAgIDB4MDAwMDAwNDAgIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBEUk0gUGFyYW1ldHJpYyBTdGVyZW8uICAgICAgICAqLwoKLyogTVAyIGVuY29kZXIgY2FwYWJpbGl0eSBmbGFncyAqLwojZGVmaW5lIENBUEZfTVAyRU5DX1NTICAgICAgICAweDAwMDAwMDAxICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgU2VhbWxlc3MgU3dpdGNoaW5nLiAgICAgICAgICAgKi8KI2RlZmluZSBDQVBGX01QMkVOQ19EQUIgICAgICAgMHgwMDAwMDAwMiAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIExheWVyMiBEQUIuICAgICAgICAgICAgICAgICAgICovCgovKiBEQUIgY2FwYWJpbGl0eSBmbGFncyAqLwojZGVmaW5lIENBUEZfREFCX01QMiAgICAgICAgICAweDAwMDAwMDAxICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgTGF5ZXIyIERBQi4gICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBDQVBGX0RBQl9BQUMgICAgICAgICAgMHgwMDAwMDAwMiAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIERBQisgKEhFLUFBQyB2MikuICAgICAgICAgICAgICovCiNkZWZpbmUgQ0FQRl9EQUJfUEFEICAgICAgICAgIDB4MDAwMDAwMDQgIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBQQUQgZXh0cmFjdGlvbi4gICAgICAgICAgICAgICAqLwojZGVmaW5lIENBUEZfREFCX0RSQyAgICAgICAgICAweDAwMDAwMDA4ICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgRHluYW1pYyBSYW5nZSBDb250cm9sLiAgICAgICAgKi8KI2RlZmluZSBDQVBGX0RBQl9TVVJST1VORCAgICAgMHgwMDAwMDAxMCAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIERBQiBTdXJyb3VuZCAoTVBTKS4gICAgICAgICAgICovCgovKiBETUIgY2FwYWJpbGl0eSBmbGFncyAqLwojZGVmaW5lIENBUEZfRE1CX0JTQUMgICAgICAgICAweDAwMDAwMDAxICAvKio8IFN1cHBvcnQgZmxhZyBmb3IgRVIgQUFDIEJTQUMuICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBDQVBGX0RNQl9EUkMgICAgICAgICAgMHgwMDAwMDAwOCAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIER5bmFtaWMgUmFuZ2UgQ29udHJvbC4gICAgICAgICovCiNkZWZpbmUgQ0FQRl9ETUJfU1VSUk9VTkQgICAgIDB4MDAwMDAwMTAgIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBETUIgU3Vycm91bmQgKE1QUykuICAgICAgICAgICAqLwoKLyogUENNIHVwL2Rvd25tbWl4IGNhcGFiaWxpdHkgZmxhZ3MgKi8KI2RlZmluZSBDQVBGX0RNWF9CTElORCAgICAgICAgMHgwMDAwMDAwMSAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIGJsaW5kIGRvd25taXhpbmcuICAgICAgICAgICAgICovCiNkZWZpbmUgQ0FQRl9ETVhfUENFICAgICAgICAgIDB4MDAwMDAwMDIgIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBndWlkZWQgZG93bm1peCB3aXRoIGRhdGEgZnJvbSBNUEVHLTIvNCBQcm9ncmFtIENvbmZpZyBFbGVtZW50cyAoUENFKS4gKi8KI2RlZmluZSBDQVBGX0RNWF9BUklCICAgICAgICAgMHgwMDAwMDAwNCAgLyoqPCBTdXBwb3J0IGZsYWcgZm9yIFBDRSBndWlkZWQgZG93bm1peCB3aXRoIHNsaWdodGx5IGRpZmZlcmVudCBlcXVhdGlvbnMgYW5kIGxldmVscyB0byBmdWxmaWxsIEFSSUIgc3RhbmRhcmQuICovCiNkZWZpbmUgQ0FQRl9ETVhfRFZCICAgICAgICAgIDB4MDAwMDAwMDggIC8qKjwgU3VwcG9ydCBmbGFnIGZvciBndWlkZWQgZG93bm1peCB3aXRoIGRhdGEgZnJvbSBEVkIgYW5jaWxsYXJ5IGRhdGEgZmllbGRzLiAqLwojZGVmaW5lIENBUEZfRE1YX0NIX0VYUCAgICAgICAweDAwMDAwMDEwICAvKio8IFN1cHBvcnQgZmxhZyBmb3Igc2ltcGxlIHVwbWl4aW5nIGJ5IGR1YmxpY2F0aW5nIGNoYW5uZWxzIG9yIGFkZGluZyB6ZXJvIGNoYW5uZWxzLiAqLwovKiBcZW5kY29uZCAqLwoKCi8qCiAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICogTGlicmFyeSB2ZXJzaW9uaW5nCiAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICovCgovKioKICogQ29udmVydCBlYWNoIG1lbWJlciBvZiB2ZXJzaW9uIG51bWJlcnMgdG8gb25lIHNpbmdsZSBudW1lcmljIHZlcnNpb24gcmVwcmVzZW50YXRpb24uCiAqIFxwYXJhbSBsZXYwICAxc3QgbGV2ZWwgb2YgdmVyc2lvbiBudW1iZXIuCiAqIFxwYXJhbSBsZXYxICAybmQgbGV2ZWwgb2YgdmVyc2lvbiBudW1iZXIuCiAqIFxwYXJhbSBsZXYyICAzcmQgbGV2ZWwgb2YgdmVyc2lvbiBudW1iZXIuCiAgKi8KI2RlZmluZSBMSUJfVkVSU0lPTihsZXYwLCBsZXYxLCBsZXYyKSAoKGxldjA8PDI0ICYgMHhmZjAwMDAwMCkgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsZXYxPDwxNiAmIDB4MDBmZjAwMDApIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGV2Mjw8OCAgJiAweDAwMDBmZjAwKSkKCi8qKgogKiAgQnVpbGQgdGV4dCBzdHJpbmcgb2YgdmVyc2lvbi4KICovCiNkZWZpbmUgTElCX1ZFUlNJT05fU1RSSU5HKGluZm8pIEZES3NwcmludGYoKGluZm8pLT52ZXJzaW9uU3RyLCAiJWQuJWQuJWQiLCAoKChpbmZvKS0+dmVyc2lvbiA+PiAyNCkgJiAweGZmKSwgKCgoaW5mbyktPnZlcnNpb24gPj4gMTYpICYgMHhmZiksICgoKGluZm8pLT52ZXJzaW9uID4+IDggKSAmIDB4ZmYpKQoKLyoqCiAqICBMaWJyYXJ5IGluZm9ybWF0aW9uLgogKi8KdHlwZWRlZiBzdHJ1Y3QgTElCX0lORk8KewogIGNvbnN0IGNoYXIqIHRpdGxlOwogIGNvbnN0IGNoYXIqIGJ1aWxkX2RhdGU7CiAgY29uc3QgY2hhciogYnVpbGRfdGltZTsKICBGREtfTU9EVUxFX0lEIG1vZHVsZV9pZDsKICBJTlQgdmVyc2lvbjsKICBVSU5UICBmbGFnczsKICBjaGFyIHZlcnNpb25TdHJbMzJdOwp9IExJQl9JTkZPOwoKLyoqIEluaXRpYWxpemUgbGlicmFyeSBpbmZvLiAqLwpzdGF0aWMgaW5saW5lIHZvaWQgRkRLaW5pdExpYkluZm8oIExJQl9JTkZPKiBpbmZvICkKewogIGludCBpOwoKICBmb3IgKGkgPSAwOyBpIDwgRkRLX01PRFVMRV9MQVNUOyBpKyspIHsKICAgIGluZm9baV0ubW9kdWxlX2lkID0gRkRLX05PTkU7CiAgfQp9CgovKiogQXF1aXJlIHN1cHBvcnRlZCBmZWF0dXJlcyBvZiBsaWJyYXJ5LiAqLwpzdGF0aWMgaW5saW5lIFVJTlQgRkRLbGliSW5mb19nZXRDYXBhYmlsaXRpZXMoIGNvbnN0IExJQl9JTkZPKiBpbmZvLCBGREtfTU9EVUxFX0lEIG1vZHVsZV9pZCApCnsKICBpbnQgaTsKCiAgZm9yIChpPTA7IGk8RkRLX01PRFVMRV9MQVNUOyBpKyspIHsKICAgIGlmIChpbmZvW2ldLm1vZHVsZV9pZCA9PSBtb2R1bGVfaWQpIHsKICAgICAgcmV0dXJuIGluZm9baV0uZmxhZ3M7CiAgICB9CiAgfQogIHJldHVybiAwOwp9CgovKiogU2VhcmNoIGZvciBuZXh0IGZyZWUgdGFiLiAqLwpzdGF0aWMgaW5saW5lIElOVCBGREtsaWJJbmZvX2xvb2t1cCggY29uc3QgTElCX0lORk8qIGluZm8sIEZES19NT0RVTEVfSUQgbW9kdWxlX2lkICkKewogIGludCBpID0gLTE7CgogIGZvciAoaSA9IDA7IGkgPCBGREtfTU9EVUxFX0xBU1Q7IGkrKykgewogICAgaWYgKGluZm9baV0ubW9kdWxlX2lkID09IG1vZHVsZV9pZCkKICAgICAgcmV0dXJuIC0xOwogICAgaWYgKGluZm9baV0ubW9kdWxlX2lkID09IEZES19OT05FKQogICAgICBicmVhazsKICB9CiAgaWYgKGkgPT0gRkRLX01PRFVMRV9MQVNUKQogICAgcmV0dXJuIC0xOwoKICByZXR1cm4gaTsKfQoKCi8qCiAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICogQnVmZmVyIGRlc2NyaXB0aW9uCiAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICovCgovKioKICogIEkvTyBidWZmZXIgZGVzY3JpcHRvci4KICovCnR5cGVkZWYgc3RydWN0IEZES19idWZEZXNjcgp7CiAgdm9pZCAgKipwcEJhc2U7ICAgICAvKiE8IFBvaW50ZXIgdG8gYW4gYXJyYXkgY29udGFpbmluZyBidWZmZXIgYmFzZSBhZGRyZXNzZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldCB0byBOVUxMIGZvciBidWZmZXIgcmVxdWlyZW1lbnQgaW5mby4gKi8KICBVSU5UICAgKnBCdWZTaXplOyAgIC8qITwgUG9pbnRlciB0byBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgdGhhdCBjYW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgcGxhY2VkIGluIHRoZSBzcGVjaWZpYyBidWZmZXIuICovCiAgVUlOVCAgICpwRWxlU2l6ZTsgICAvKiE8IFBvaW50ZXIgdG8gYW4gYXJyYXkgY29udGFpbmluZyB0aGUgZWxlbWVudCBzaXplIGZvciBlYWNoIGJ1ZmZlcgogICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBieXRlcy4gVGhhdCBpcyBtb3N0bHkgdGhlIG51bWJlciByZXR1cm5lZCBieSB0aGUgc2l6ZW9mKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgZm9yIHRoZSBkYXRhIHR5cGUgdXNlZCBmb3IgdGhlIHNwZWNpZmljIGJ1ZmZlci4gKi8KICBVSU5UICAgKnBCdWZUeXBlOyAgIC8qITwgUG9pbnRlciB0byBhbiBhcnJheSBvZiBiaXQgZmllbGRzIGNvbnRhaW5pbmcgYSBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZWFjaCBidWZmZXIuIFNlZSBYWFggYmVsb3cgZm9yIG1vcmUgZGV0YWlscy4gICovCiAgVUlOVCAgICBudW1CdWZzOyAgICAvKiE8IFRvdGFsIG51bWJlciBvZiBidWZmZXJzLiAqLwoKfSBGREtfYnVmRGVzY3I7CgovKioKICogQnVmZmVyIHR5cGUgZGVzY3JpcHRpb24gZmllbGQuCiAqLwojZGVmaW5lIEZES19CVUZfVFlQRV9NQVNLX0lPICAgICAoIDB4MDMgPDwgMzAgKQojZGVmaW5lIEZES19CVUZfVFlQRV9NQVNLX0RFU0NSICAoIDB4M0YgPDwgMTYgKQojZGVmaW5lIEZES19CVUZfVFlQRV9NQVNLX0lEICAgICAoIDB4RkYgKQoKI2RlZmluZSBGREtfQlVGX1RZUEVfSU5QVVQgICAgICAgKCAweDEgPDwgMzAgKQojZGVmaW5lIEZES19CVUZfVFlQRV9PVVRQVVQgICAgICAoIDB4MiA8PCAzMCApCgojZGVmaW5lIEZES19CVUZfVFlQRV9QQ01fREFUQSAgICAoIDB4MSA8PCAxNiApCiNkZWZpbmUgRkRLX0JVRl9UWVBFX0FOQ19EQVRBICAgICggMHgyIDw8IDE2ICkKI2RlZmluZSBGREtfQlVGX1RZUEVfQlNfREFUQSAgICAgKCAweDQgPDwgMTYgKQoKI2lmZGVmIF9fY3BsdXNwbHVzCn0KI2VuZGlmCgojZW5kaWYgLyogRkRLX0FVRElPX0ggKi8K