Ci8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAoKqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KCiAxLiAgICBJTlRST0RVQ1RJT04KVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkICgiRkRLIEFBQyBDb2RlYyIpIGlzIHNvZnR3YXJlIHRoYXQgaW1wbGVtZW50cwp0aGUgTVBFRyBBZHZhbmNlZCBBdWRpbyBDb2RpbmcgKCJBQUMiKSBlbmNvZGluZyBhbmQgZGVjb2Rpbmcgc2NoZW1lIGZvciBkaWdpdGFsIGF1ZGlvLgpUaGlzIEZESyBBQUMgQ29kZWMgc29mdHdhcmUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBvbiBhIHdpZGUgdmFyaWV0eSBvZiBBbmRyb2lkIGRldmljZXMuCgpBQUMncyBIRS1BQUMgYW5kIEhFLUFBQyB2MiB2ZXJzaW9ucyBhcmUgcmVnYXJkZWQgYXMgdG9kYXkncyBtb3N0IGVmZmljaWVudCBnZW5lcmFsIHBlcmNlcHR1YWwKYXVkaW8gY29kZWNzLiBBQUMtRUxEIGlzIGNvbnNpZGVyZWQgdGhlIGJlc3QtcGVyZm9ybWluZyBmdWxsLWJhbmR3aWR0aCBjb21tdW5pY2F0aW9ucyBjb2RlYyBieQppbmRlcGVuZGVudCBzdHVkaWVzIGFuZCBpcyB3aWRlbHkgZGVwbG95ZWQuIEFBQyBoYXMgYmVlbiBzdGFuZGFyZGl6ZWQgYnkgSVNPIGFuZCBJRUMgYXMgcGFydApvZiB0aGUgTVBFRyBzcGVjaWZpY2F0aW9ucy4KClBhdGVudCBsaWNlbnNlcyBmb3IgbmVjZXNzYXJ5IHBhdGVudCBjbGFpbXMgZm9yIHRoZSBGREsgQUFDIENvZGVjIChpbmNsdWRpbmcgdGhvc2Ugb2YgRnJhdW5ob2ZlcikKbWF5IGJlIG9idGFpbmVkIHRocm91Z2ggVmlhIExpY2Vuc2luZyAod3d3LnZpYWxpY2Vuc2luZy5jb20pIG9yIHRocm91Z2ggdGhlIHJlc3BlY3RpdmUgcGF0ZW50IG93bmVycwppbmRpdmlkdWFsbHkgZm9yIHRoZSBwdXJwb3NlIG9mIGVuY29kaW5nIG9yIGRlY29kaW5nIGJpdCBzdHJlYW1zIGluIHByb2R1Y3RzIHRoYXQgYXJlIGNvbXBsaWFudCB3aXRoCnRoZSBJU08vSUVDIE1QRUcgYXVkaW8gc3RhbmRhcmRzLiBQbGVhc2Ugbm90ZSB0aGF0IG1vc3QgbWFudWZhY3R1cmVycyBvZiBBbmRyb2lkIGRldmljZXMgYWxyZWFkeSBsaWNlbnNlCnRoZXNlIHBhdGVudCBjbGFpbXMgdGhyb3VnaCBWaWEgTGljZW5zaW5nIG9yIGRpcmVjdGx5IGZyb20gdGhlIHBhdGVudCBvd25lcnMsIGFuZCB0aGVyZWZvcmUgRkRLIEFBQyBDb2RlYwpzb2Z0d2FyZSBtYXkgYWxyZWFkeSBiZSBjb3ZlcmVkIHVuZGVyIHRob3NlIHBhdGVudCBsaWNlbnNlcyB3aGVuIGl0IGlzIHVzZWQgZm9yIHRob3NlIGxpY2Vuc2VkIHB1cnBvc2VzIG9ubHkuCgpDb21tZXJjaWFsbHktbGljZW5zZWQgQUFDIHNvZnR3YXJlIGxpYnJhcmllcywgaW5jbHVkaW5nIGZsb2F0aW5nLXBvaW50IHZlcnNpb25zIHdpdGggZW5oYW5jZWQgc291bmQgcXVhbGl0eSwKYXJlIGFsc28gYXZhaWxhYmxlIGZyb20gRnJhdW5ob2Zlci4gVXNlcnMgYXJlIGVuY291cmFnZWQgdG8gY2hlY2sgdGhlIEZyYXVuaG9mZXIgd2Vic2l0ZSBmb3IgYWRkaXRpb25hbAphcHBsaWNhdGlvbnMgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50YXRpb24uCgoyLiAgICBDT1BZUklHSFQgTElDRU5TRQoKUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCB3aXRob3V0CnBheW1lbnQgb2YgY29weXJpZ2h0IGxpY2Vuc2UgZmVlcyBwcm92aWRlZCB0aGF0IHlvdSBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKCllvdSBtdXN0IHJldGFpbiB0aGUgY29tcGxldGUgdGV4dCBvZiB0aGlzIHNvZnR3YXJlIGxpY2Vuc2UgaW4gcmVkaXN0cmlidXRpb25zIG9mIHRoZSBGREsgQUFDIENvZGVjIG9yCnlvdXIgbW9kaWZpY2F0aW9ucyB0aGVyZXRvIGluIHNvdXJjZSBjb2RlIGZvcm0uCgpZb3UgbXVzdCByZXRhaW4gdGhlIGNvbXBsZXRlIHRleHQgb2YgdGhpcyBzb2Z0d2FyZSBsaWNlbnNlIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKcHJvdmlkZWQgd2l0aCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIEZESyBBQUMgQ29kZWMgb3IgeW91ciBtb2RpZmljYXRpb25zIHRoZXJldG8gaW4gYmluYXJ5IGZvcm0uCllvdSBtdXN0IG1ha2UgYXZhaWxhYmxlIGZyZWUgb2YgY2hhcmdlIGNvcGllcyBvZiB0aGUgY29tcGxldGUgc291cmNlIGNvZGUgb2YgdGhlIEZESyBBQUMgQ29kZWMgYW5kIHlvdXIKbW9kaWZpY2F0aW9ucyB0aGVyZXRvIHRvIHJlY2lwaWVudHMgb2YgY29waWVzIGluIGJpbmFyeSBmb3JtLgoKVGhlIG5hbWUgb2YgRnJhdW5ob2ZlciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIGxpYnJhcnkgd2l0aG91dApwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgpZb3UgbWF5IG5vdCBjaGFyZ2UgY29weXJpZ2h0IGxpY2Vuc2UgZmVlcyBmb3IgYW55b25lIHRvIHVzZSwgY29weSBvciBkaXN0cmlidXRlIHRoZSBGREsgQUFDIENvZGVjCnNvZnR3YXJlIG9yIHlvdXIgbW9kaWZpY2F0aW9ucyB0aGVyZXRvLgoKWW91ciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgRkRLIEFBQyBDb2RlYyBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgc29mdHdhcmUKYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIEZvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgRkRLIEFBQyBDb2RlYywgdGhlIHRlcm0KIkZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkIiBtdXN0IGJlIHJlcGxhY2VkIGJ5IHRoZSB0ZXJtCiJUaGlyZC1QYXJ0eSBNb2RpZmllZCBWZXJzaW9uIG9mIHRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZC4iCgozLiAgICBOTyBQQVRFTlQgTElDRU5TRQoKTk8gRVhQUkVTUyBPUiBJTVBMSUVEIExJQ0VOU0VTIFRPIEFOWSBQQVRFTlQgQ0xBSU1TLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBwYXRlbnRzIG9mIEZyYXVuaG9mZXIsCkFSRSBHUkFOVEVEIEJZIFRISVMgU09GVFdBUkUgTElDRU5TRS4gRnJhdW5ob2ZlciBwcm92aWRlcyBubyB3YXJyYW50eSBvZiBwYXRlbnQgbm9uLWluZnJpbmdlbWVudCB3aXRoCnJlc3BlY3QgdG8gdGhpcyBzb2Z0d2FyZS4KCllvdSBtYXkgdXNlIHRoaXMgRkRLIEFBQyBDb2RlYyBzb2Z0d2FyZSBvciBtb2RpZmljYXRpb25zIHRoZXJldG8gb25seSBmb3IgcHVycG9zZXMgdGhhdCBhcmUgYXV0aG9yaXplZApieSBhcHByb3ByaWF0ZSBwYXRlbnQgbGljZW5zZXMuCgo0LiAgICBESVNDTEFJTUVSCgpUaGlzIEZESyBBQUMgQ29kZWMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYnkgRnJhdW5ob2ZlciBvbiBiZWhhbGYgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIGFuZCBjb250cmlidXRvcnMKIkFTIElTIiBhbmQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGltcGxpZWQgd2FycmFudGllcwpvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgpDT05UUklCVVRPUlMgQkUgTElBQkxFIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgc3BlY2lhbCwgZXhlbXBsYXJ5LCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsCmluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gcHJvY3VyZW1lbnQgb2Ygc3Vic3RpdHV0ZSBnb29kcyBvciBzZXJ2aWNlczsgbG9zcyBvZiB1c2UsIGRhdGEsIG9yIHByb2ZpdHMsCm9yIGJ1c2luZXNzIGludGVycnVwdGlvbiwgaG93ZXZlciBjYXVzZWQgYW5kIG9uIGFueSB0aGVvcnkgb2YgbGlhYmlsaXR5LCB3aGV0aGVyIGluIGNvbnRyYWN0LCBzdHJpY3QKbGlhYmlsaXR5LCBvciB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGFyaXNpbmcgaW4gYW55IHdheSBvdXQgb2YgdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCBldmVuIGlmCmFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgoKNS4gICAgQ09OVEFDVCBJTkZPUk1BVElPTgoKRnJhdW5ob2ZlciBJbnN0aXR1dGUgZm9yIEludGVncmF0ZWQgQ2lyY3VpdHMgSUlTCkF0dGVudGlvbjogQXVkaW8gYW5kIE11bHRpbWVkaWEgRGVwYXJ0bWVudHMgLSBGREsgQUFDIExMCkFtIFdvbGZzbWFudGVsIDMzCjkxMDU4IEVybGFuZ2VuLCBHZXJtYW55Cgp3d3cuaWlzLmZyYXVuaG9mZXIuZGUvYW1tCmFtbS1pbmZvQGlpcy5mcmF1bmhvZmVyLmRlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoKCiNpZmRlZiBGVU5DVElPTl9kY3RfSVZfZnVuYzEKCi8qCiAgIE5vdGU6IFRoaXMgYXNzZW1ibGVyIHJvdXRpbmUgaXMgaGVyZSwgYmVjYXVzZSB0aGUgQVJNOTI2IGNvbXBpbGVyIGRvZXMKICAgICAgICAgbm90IGVuY29kZSB0aGUgaW5saW5lIGFzc2VtYmxlciB3aXRoIG9wdGltYWwgc3BlZWQuCiAgICAgICAgIFdpdGggdGhpcyB2ZXJzaW9uLCB3ZSBzYXZlIDIgY3ljbGVzIHBlciBsb29wIGl0ZXJhdGlvbi4KKi8KCl9fYXNtICB2b2lkIGRjdF9JVl9mdW5jMSgKICAgIGludCBpLAogICAgY29uc3QgRklYUF9TUEsgKnR3aWRkbGUsCiAgICBGSVhQX0RCTCAqUkVTVFJJQ1QgcERhdF8wLAogICAgRklYUF9EQkwgKlJFU1RSSUNUIHBEYXRfMSkKewogICAgLyogUmVnaXN0ZXIgbWFwOgogICAgICAgcjAgICBpCiAgICAgICByMSAgIHR3aWRkbGUKICAgICAgIHIyICAgcERhdF8wCiAgICAgICByMyAgIHBEYXRfMQogICAgICAgcjQgICBhY2N1MQogICAgICAgcjUgICBhY2N1MgogICAgICAgcjYgICBhY2N1MwogICAgICAgcjcgICBhY2N1NAogICAgICAgcjggICB2YWxfdHcKICAgICAgIHI5ICAgYWNjdVgKICAgICovCiAgICBQVVNIICAgIHtyNC1yOX0KCiAgICAgLyogNDQgY3ljbGVzIGZvciAyIGl0ZXJhdGlvbnMgPSAyMiBjeWNsZXMvaXRlcmF0aW9uICovCmRjdF9JVl9sb29wMV9zdGFydAovKiAgRmlyc3QgaXRlcmF0aW9uICovCiAgICBMRFIgICAgIHI4LCBbcjFdLCAjNCAgICAvLyB2YWxfdHcgPSAqdHdpZGRsZSsrOwogICAgTERSICAgICByNSwgW3IyLCAjMF0gICAgLy8gYWNjdTIgPSBwRGF0XzBbMF0KICAgIExEUiAgICAgcjQsIFtyMywgIzBdICAgIC8vIGFjY3UxID0gcERhdF8xWzBdCgogICAgU01VTFdUICByOSwgcjUsIHI4ICAgICAgLy8gYWNjdVggPSBhY2N1Mip2YWxfdHcubAogICAgU01VTFdCICByNSwgcjUsIHI4ICAgICAgLy8gYWNjdTIgPSBhY2N1Mip2YWxfdHcuaAogICAgUlNCICAgICByOSwgcjksICMwICAgICAgLy8gYWNjdVggPS1hY2N1Mip2YWxfdHcubAogICAgU01MQVdUICByNSwgcjQsIHI4LCByNSAgLy8gYWNjdTIgPSBhY2N1Mip2YWxfdHcuaCArIGFjY3UxKnZhbF90dy5sCiAgICBTTUxBV0IgIHI0LCByNCwgcjgsIHI5ICAvLyBhY2N1MSA9IGFjY3UxKnZhbF90dy5oIC0gYWNjdTIqdmFsX3R3LmwKCiAgICBMRFIgICAgIHI4LCBbcjFdLCAjNCAgICAvLyB2YWxfdHcgPSAqdHdpZGRsZSsrOwogICAgTERSICAgICByNywgW3IzLCAjLTRdICAgLy8gYWNjdTQgPSBwRGF0XzFbLTFdCiAgICBMRFIgICAgIHI2LCBbcjIsICM0XSAgICAvLyBhY2N1MyA9IHBEYXRfMFsxXQoKICAgIFNNVUxXQiAgcjksIHI3LCByOCAgICAgIC8vIGFjY3VYID0gYWNjdTQqdmFsX3R3LmgKICAgIFNNVUxXVCAgcjcsIHI3LCByOCAgICAgIC8vIGFjY3U0ID0gYWNjdTQqdmFsX3R3LmwKICAgIFJTQiAgICAgcjksIHI5LCAjMCAgICAgIC8vIGFjY3VYID0tYWNjdTQqdmFsX3R3LmgKICAgIFNNTEFXQiAgcjcsIHI2LCByOCwgcjcgIC8vIGFjY3U0ID0gYWNjdTQqdmFsX3R3LmwrYWNjdTMqdmFsX3R3LmgKICAgIFNNTEFXVCAgcjYsIHI2LCByOCwgcjkgIC8vIGFjY3UzID0gYWNjdTMqdmFsX3R3LmwtYWNjdTQqdmFsX3R3LmgKCiAgICBTVFIgICAgIHI1LCBbcjJdLCAjNCAgICAvLyAqcERhdF8wKysgPSBhY2N1MgogICAgU1RSICAgICByNCwgW3IyXSwgIzQgICAgLy8gKnBEYXRfMCsrID0gYWNjdTEKICAgIFNUUiAgICAgcjYsIFtyM10sICMtNCAgIC8vICpwRGF0XzEtLSA9IGFjY3UzCiAgICBTVFIgICAgIHI3LCBbcjNdLCAjLTQgICAvLyAqcERhdF8xLS0gPSBhY2N1NAoKLyogIFNlY29uZCBpdGVyYXRpb24gKi8KICAgIExEUiAgICAgcjgsIFtyMV0sICM0ICAgIC8vIHZhbF90dyA9ICp0d2lkZGxlKys7CiAgICBMRFIgICAgIHI1LCBbcjIsICMwXSAgICAvLyBhY2N1MiA9IHBEYXRfMFswXQogICAgTERSICAgICByNCwgW3IzLCAjMF0gICAgLy8gYWNjdTEgPSBwRGF0XzFbMF0KCiAgICBTTVVMV1QgIHI5LCByNSwgcjggICAgICAvLyBhY2N1WCA9IGFjY3UyKnZhbF90dy5sCiAgICBTTVVMV0IgIHI1LCByNSwgcjggICAgICAvLyBhY2N1MiA9IGFjY3UyKnZhbF90dy5oCiAgICBSU0IgICAgIHI5LCByOSwgIzAgICAgICAvLyBhY2N1WCA9LWFjY3UyKnZhbF90dy5sCiAgICBTTUxBV1QgIHI1LCByNCwgcjgsIHI1ICAvLyBhY2N1MiA9IGFjY3UyKnZhbF90dy5oICsgYWNjdTEqdmFsX3R3LmwKICAgIFNNTEFXQiAgcjQsIHI0LCByOCwgcjkgIC8vIGFjY3UxID0gYWNjdTEqdmFsX3R3LmggLSBhY2N1Mip2YWxfdHcubAoKICAgIExEUiAgICAgcjgsIFtyMV0sICM0ICAgIC8vIHZhbF90dyA9ICp0d2lkZGxlKys7CiAgICBMRFIgICAgIHI3LCBbcjMsICMtNF0gICAvLyBhY2N1NCA9IHBEYXRfMVstMV0KICAgIExEUiAgICAgcjYsIFtyMiwgIzRdICAgIC8vIGFjY3UzID0gcERhdF8wWzFdCgogICAgU01VTFdCICByOSwgcjcsIHI4ICAgICAgLy8gYWNjdVggPSBhY2N1NCp2YWxfdHcuaAogICAgU01VTFdUICByNywgcjcsIHI4ICAgICAgLy8gYWNjdTQgPSBhY2N1NCp2YWxfdHcubAogICAgUlNCICAgICByOSwgcjksICMwICAgICAgLy8gYWNjdVggPS1hY2N1NCp2YWxfdHcuaAogICAgU01MQVdCICByNywgcjYsIHI4LCByNyAgLy8gYWNjdTQgPSBhY2N1NCp2YWxfdHcubCthY2N1Myp2YWxfdHcuaAogICAgU01MQVdUICByNiwgcjYsIHI4LCByOSAgLy8gYWNjdTMgPSBhY2N1Myp2YWxfdHcubC1hY2N1NCp2YWxfdHcuaAoKICAgIFNUUiAgICAgcjUsIFtyMl0sICM0ICAgIC8vICpwRGF0XzArKyA9IGFjY3UyCiAgICBTVFIgICAgIHI0LCBbcjJdLCAjNCAgICAvLyAqcERhdF8wKysgPSBhY2N1MQogICAgU1RSICAgICByNiwgW3IzXSwgIy00ICAgLy8gKnBEYXRfMS0tID0gYWNjdTMKICAgIFNUUiAgICAgcjcsIFtyM10sICMtNCAgIC8vICpwRGF0XzEtLSA9IGFjY3U0CgogICAgU1VCUyAgICByMCwgcjAsICMxCiAgICBCTkUgICAgIGRjdF9JVl9sb29wMV9zdGFydAoKICAgIFBPUCAgICAge3I0LXI5fQoKICAgIEJYICAgICAgbHIKfQoKI2VuZGlmIC8qIEZVTkNUSU9OX2RjdF9JVl9mdW5jMSAqLwoKCiNpZmRlZiBGVU5DVElPTl9kY3RfSVZfZnVuYzIKCkZES19JTkxJTkUKLyogX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKSAqLwpzdGF0aWMgdm9pZCBkY3RfSVZfZnVuYzIoCiAgICBpbnQgaSwKICAgIGNvbnN0IEZJWFBfU1BLICp0d2lkZGxlLAogICAgRklYUF9EQkwgKnBEYXRfMCwKICAgIEZJWFBfREJMICpwRGF0XzEsCiAgICBpbnQgaW5jKQp7CiAgRklYUF9EQkwgYWNjdTEsIGFjY3UyLCBhY2N1MywgYWNjdTQsIGFjY3VYOwogIExPTkcgdmFsX3R3OwoKICBhY2N1MSA9IHBEYXRfMVstMl07CiAgYWNjdTIgPSBwRGF0XzFbLTFdOwoKICAqLS1wRGF0XzEgPSAtKHBEYXRfMFsxXT4+MSk7CiAgKnBEYXRfMCsrID0gKHBEYXRfMFswXT4+MSk7CgogIHR3aWRkbGUgKz0gaW5jOwoKX19hc20KICB7CiAgICBMRFIgICAgIHZhbF90dywgW3R3aWRkbGVdLCBpbmMsIExTTCAjMiAgICAvLyB2YWxfdHcgPSAqdHdpZGRsZTsgdHdpZGRsZSArPSBpbmMKICAgIEIgICAgICAgZGN0X0lWX2xvb3AyXzJuZF9wYXJ0CgogICAgLyogNDIgY3ljbGVzIGZvciAyIGl0ZXJhdGlvbnMgPSAyMSBjeWNsZXMvaXRlcmF0aW9uICovCmRjdF9JVl9sb29wMjoKICAgIFNNVUxXVCAgYWNjdVgsIGFjY3UyLCB2YWxfdHcKICAgIFNNVUxXQiAgYWNjdTIsIGFjY3UyLCB2YWxfdHcKICAgIFJTQiAgICAgYWNjdVgsIGFjY3VYLCAjMAogICAgU01MQVdCICBhY2N1WCwgYWNjdTEsIHZhbF90dywgYWNjdVgKICAgIFNNTEFXVCAgYWNjdTIsIGFjY3UxLCB2YWxfdHcsIGFjY3UyCiAgICBTVFIgICAgIGFjY3VYLCBbcERhdF8wXSwgIzQKICAgIFNUUiAgICAgYWNjdTIsIFtwRGF0XzEsICMtNF0gIQoKICAgIExEUiAgICAgYWNjdTQsIFtwRGF0XzAsICM0XQogICAgTERSICAgICBhY2N1MywgW3BEYXRfMF0KICAgIFNNVUxXQiAgYWNjdVgsIGFjY3U0LCB2YWxfdHcKICAgIFNNVUxXVCAgYWNjdTQsIGFjY3U0LCB2YWxfdHcKICAgIFJTQiAgICAgYWNjdVgsIGFjY3VYLCAjMAogICAgU01MQVdUICBhY2N1WCwgYWNjdTMsIHZhbF90dywgYWNjdVgKICAgIFNNTEFXQiAgYWNjdTQsIGFjY3UzLCB2YWxfdHcsIGFjY3U0CgogICAgTERSICAgICBhY2N1MSwgW3BEYXRfMSwgIy04XQogICAgTERSICAgICBhY2N1MiwgW3BEYXRfMSwgIy00XQoKICAgIExEUiAgICAgdmFsX3R3LCBbdHdpZGRsZV0sIGluYywgTFNMICMyICAgIC8vIHZhbF90dyA9ICp0d2lkZGxlOyB0d2lkZGxlICs9IGluYwoKICAgIFNUUiAgICAgYWNjdVgsIFtwRGF0XzEsICMtNF0gIQogICAgU1RSICAgICBhY2N1NCwgW3BEYXRfMF0sICM0CgpkY3RfSVZfbG9vcDJfMm5kX3BhcnQ6CiAgICBTTVVMV1QgIGFjY3VYLCBhY2N1MiwgdmFsX3R3CiAgICBTTVVMV0IgIGFjY3UyLCBhY2N1MiwgdmFsX3R3CiAgICBSU0IgICAgIGFjY3VYLCBhY2N1WCwgIzAKICAgIFNNTEFXQiAgYWNjdVgsIGFjY3UxLCB2YWxfdHcsIGFjY3VYCiAgICBTTUxBV1QgIGFjY3UyLCBhY2N1MSwgdmFsX3R3LCBhY2N1MgogICAgU1RSICAgICBhY2N1WCwgW3BEYXRfMF0sICM0CiAgICBTVFIgICAgIGFjY3UyLCBbcERhdF8xLCAjLTRdICEKCiAgICBMRFIgICAgIGFjY3U0LCBbcERhdF8wLCAjNF0KICAgIExEUiAgICAgYWNjdTMsIFtwRGF0XzBdCiAgICBTTVVMV0IgIGFjY3VYLCBhY2N1NCwgdmFsX3R3CiAgICBTTVVMV1QgIGFjY3U0LCBhY2N1NCwgdmFsX3R3CiAgICBSU0IgICAgIGFjY3VYLCBhY2N1WCwgIzAKICAgIFNNTEFXVCAgYWNjdVgsIGFjY3UzLCB2YWxfdHcsIGFjY3VYCiAgICBTTUxBV0IgIGFjY3U0LCBhY2N1MywgdmFsX3R3LCBhY2N1NAoKICAgIExEUiAgICAgYWNjdTEsIFtwRGF0XzEsICMtOF0KICAgIExEUiAgICAgYWNjdTIsIFtwRGF0XzEsICMtNF0KCiAgICBTVFIgICAgIGFjY3VYLCBbcERhdF8xLCAjLTRdICEKICAgIFNUUiAgICAgYWNjdTQsIFtwRGF0XzBdLCAjNAoKICAgIExEUiAgICAgdmFsX3R3LCBbdHdpZGRsZV0sIGluYywgTFNMICMyICAgIC8vIHZhbF90dyA9ICp0d2lkZGxlOyB0d2lkZGxlICs9IGluYwoKICAgIFNVQlMgICAgaSwgaSwgIzEKICAgIEJORSAgICAgZGN0X0lWX2xvb3AyCiAgfQoKICAvKiBMYXN0IFNpbiBhbmQgQ29zIHZhbHVlIHBhaXIgYXJlIHRoZSBzYW1lICovCiAgYWNjdTEgPSBmTXVsdERpdjIoYWNjdTEsIFdUQygweDVhODI3OTlhKSk7CiAgYWNjdTIgPSBmTXVsdERpdjIoYWNjdTIsIFdUQygweDVhODI3OTlhKSk7CgogICotLXBEYXRfMSA9IGFjY3UxICsgYWNjdTI7CiAgKnBEYXRfMCsrID0gYWNjdTEgLSBhY2N1MjsKfQojZW5kaWYgLyogRlVOQ1RJT05fZGN0X0lWX2Z1bmMyICovCgoKI2lmZGVmIEZVTkNUSU9OX2RzdF9JVl9mdW5jMQoKX19hc20gdm9pZCBkc3RfSVZfZnVuYzEoCiAgICBpbnQgaSwKICAgIGNvbnN0IEZJWFBfU1BLICp0d2lkZGxlLAogICAgRklYUF9EQkwgKnBEYXRfMCwKICAgIEZJWFBfREJMICpwRGF0XzEpCnsKICAgIC8qIFJlZ2lzdGVyIG1hcDoKICAgICAgIHIwICAgaQogICAgICAgcjEgICB0d2lkZGxlCiAgICAgICByMiAgIHBEYXRfMAogICAgICAgcjMgICBwRGF0XzEKICAgICAgIHI0ICAgYWNjdTEKICAgICAgIHI1ICAgYWNjdTIKICAgICAgIHI2ICAgYWNjdTMKICAgICAgIHI3ICAgYWNjdTQKICAgICAgIHI4ICAgdmFsX3R3CiAgICAgICByOSAgIGFjY3VYCiAgICAqLwogICAgUFVTSCAgICB7cjQtcjl9Cgpkc3RfSVZfbG9vcDEKICAgIExEUiAgICAgcjgsIFtyMV0sICM0ICAgICAgICAgICAgICAgLy8gdmFsX3R3ID0gKnR3aWRkbGUrKwogICAgTERSICAgICByNSwgW3IyXSAgICAgICAgICAgICAgICAgICAvLyBhY2N1MiA9IHBEYXRfMFswXQogICAgTERSICAgICByNiwgW3IyLCAjNF0gICAgICAgICAgICAgICAvLyBhY2N1MyA9IHBEYXRfMFsxXQogICAgUlNCICAgICByNSwgcjUsICMwICAgICAgICAgICAgICAgICAvLyBhY2N1MiA9IC1hY2N1MgogICAgU01VTFdUICByOSwgcjUsIHI4ICAgICAgICAgICAgICAgICAvLyBhY2N1WCA9ICgtYWNjdTIpKnZhbF90dy5sCiAgICBMRFIgICAgIHI0LCBbcjMsICMtNF0gICAgICAgICAgICAgIC8vIGFjY3UxID0gcERhdF8xWy0xXQogICAgUlNCICAgICByOSwgcjksICMwICAgICAgICAgICAgICAgICAvLyBhY2N1WCA9IC0oLWFjY3UyKSp2YWxfdHcubAogICAgU01MQVdCICByOSwgcjQsIHI4LCByOSAgICAgICAgICAgICAvLyBhY2N1WCA9IGFjY3UxKnZhbF90dy5oLSgtYWNjdTIpKnZhbF90dy5sCiAgICBTTVVMV1QgIHI0LCByNCwgcjggICAgICAgICAgICAgICAgIC8vIGFjY3UxID0gYWNjdTEqdmFsX3R3LmwKICAgIExEUiAgICAgcjcsIFtyMywgIy04XSAgICAgICAgICAgICAgLy8gYWNjdTQgPSBwRGF0XzFbLTJdCiAgICBTTUxBV0IgIHI1LCByNSwgcjgsIHI0ICAgICAgICAgICAgIC8vIGFjY3UyID0gKC1hY2N1MikqdmFsX3R3LnQrYWNjdTEqdmFsX3R3LmwKICAgIExEUiAgICAgcjgsIFtyMV0sICM0ICAgICAgICAgICAgICAgLy8gdmFsX3R3ID0gKnR3aWRkbGUrKwogICAgU1RSICAgICByNSwgW3IyXSwgIzQgICAgICAgICAgICAgICAvLyAqcERhdF8wKysgPSBhY2N1MgogICAgU1RSICAgICByOSwgW3IyXSwgIzQgICAgICAgICAgICAgICAvLyAqcERhdF8wKysgPSBhY2N1MSAoYWNjdVgpCiAgICBSU0IgICAgIHI3LCByNywgIzAgICAgICAgICAgICAgICAgIC8vIGFjY3U0ID0gLWFjY3U0CiAgICBTTVVMV0IgIHI1LCByNywgcjggICAgICAgICAgICAgICAgIC8vIGFjY3UyID0gKC1hY2N1NCkqdmFsX3R3LmgKICAgIFNNVUxXQiAgcjQsIHI2LCByOCAgICAgICAgICAgICAgICAgLy8gYWNjdTEgPSAoLWFjY3U0KSp2YWxfdHcubAogICAgUlNCICAgICByNSwgcjUsICMwICAgICAgICAgICAgICAgICAvLyBhY2N1MiA9IC0oLWFjY3U0KSp2YWxfdHcuaAogICAgU01MQVdUICByNiwgcjYsIHI4LCByNSAgICAgICAgICAgICAvLyBhY2N1MyA9ICgtYWNjdTQpKnZhbF90dy5sLSgtYWNjdTMpKnZhbF90dy5oCiAgICBTTUxBV1QgIHI3LCByNywgcjgsIHI0ICAgICAgICAgICAgIC8vIGFjY3U0ID0gKC1hY2N1MykqdmFsX3R3LmwrKC1hY2N1NCkqdmFsX3R3LmgKICAgIFNUUiAgICAgcjYsIFtyMywgIy00XSAhICAgICAgICAgICAgLy8gKi0tcERhdF8xID0gYWNjdTMKICAgIFNUUiAgICAgcjcsIFtyMywgIy00XSAhICAgICAgICAgICAgLy8gKi0tcERhdF8xID0gYWNjdTQKCiAgICBMRFIgICAgIHI4LCBbcjFdLCAjNCAgICAgICAgICAgICAgIC8vIHZhbF90dyA9ICp0d2lkZGxlKysKICAgIExEUiAgICAgcjUsIFtyMl0gICAgICAgICAgICAgICAgICAgLy8gYWNjdTIgPSBwRGF0XzBbMF0KICAgIExEUiAgICAgcjYsIFtyMiwgIzRdICAgICAgICAgICAgICAgLy8gYWNjdTMgPSBwRGF0XzBbMV0KICAgIFJTQiAgICAgcjUsIHI1LCAjMCAgICAgICAgICAgICAgICAgLy8gYWNjdTIgPSAtYWNjdTIKICAgIFNNVUxXVCAgcjksIHI1LCByOCAgICAgICAgICAgICAgICAgLy8gYWNjdVggPSAoLWFjY3UyKSp2YWxfdHcubAogICAgTERSICAgICByNCwgW3IzLCAjLTRdICAgICAgICAgICAgICAvLyBhY2N1MSA9IHBEYXRfMVstMV0KICAgIFJTQiAgICAgcjksIHI5LCAjMCAgICAgICAgICAgICAgICAgLy8gYWNjdVggPSAtKC1hY2N1MikqdmFsX3R3LmwKICAgIFNNTEFXQiAgcjksIHI0LCByOCwgcjkgICAgICAgICAgICAgLy8gYWNjdVggPSBhY2N1MSp2YWxfdHcuaC0oLWFjY3UyKSp2YWxfdHcubAogICAgU01VTFdUICByNCwgcjQsIHI4ICAgICAgICAgICAgICAgICAvLyBhY2N1MSA9IGFjY3UxKnZhbF90dy5sCiAgICBMRFIgICAgIHI3LCBbcjMsICMtOF0gICAgICAgICAgICAgIC8vIGFjY3U0ID0gcERhdF8xWy0yXQogICAgU01MQVdCICByNSwgcjUsIHI4LCByNCAgICAgICAgICAgICAvLyBhY2N1MiA9ICgtYWNjdTIpKnZhbF90dy50K2FjY3UxKnZhbF90dy5sCiAgICBMRFIgICAgIHI4LCBbcjFdLCAjNCAgICAgICAgICAgICAgIC8vIHZhbF90dyA9ICp0d2lkZGxlKysKICAgIFNUUiAgICAgcjUsIFtyMl0sICM0ICAgICAgICAgICAgICAgLy8gKnBEYXRfMCsrID0gYWNjdTIKICAgIFNUUiAgICAgcjksIFtyMl0sICM0ICAgICAgICAgICAgICAgLy8gKnBEYXRfMCsrID0gYWNjdTEgKGFjY3VYKQogICAgUlNCICAgICByNywgcjcsICMwICAgICAgICAgICAgICAgICAvLyBhY2N1NCA9IC1hY2N1NAogICAgU01VTFdCICByNSwgcjcsIHI4ICAgICAgICAgICAgICAgICAvLyBhY2N1MiA9ICgtYWNjdTQpKnZhbF90dy5oCiAgICBTTVVMV0IgIHI0LCByNiwgcjggICAgICAgICAgICAgICAgIC8vIGFjY3UxID0gKC1hY2N1NCkqdmFsX3R3LmwKICAgIFJTQiAgICAgcjUsIHI1LCAjMCAgICAgICAgICAgICAgICAgLy8gYWNjdTIgPSAtKC1hY2N1NCkqdmFsX3R3LmgKICAgIFNNTEFXVCAgcjYsIHI2LCByOCwgcjUgICAgICAgICAgICAgLy8gYWNjdTMgPSAoLWFjY3U0KSp2YWxfdHcubC0oLWFjY3UzKSp2YWxfdHcuaAogICAgU01MQVdUICByNywgcjcsIHI4LCByNCAgICAgICAgICAgICAvLyBhY2N1NCA9ICgtYWNjdTMpKnZhbF90dy5sKygtYWNjdTQpKnZhbF90dy5oCiAgICBTVFIgICAgIHI2LCBbcjMsICMtNF0gISAgICAgICAgICAgIC8vICotLXBEYXRfMSA9IGFjY3UzCiAgICBTVFIgICAgIHI3LCBbcjMsICMtNF0gISAgICAgICAgICAgIC8vICotLXBEYXRfMSA9IGFjY3U0CgogICAgU1VCUyAgICByMCwgcjAsICM0ICAgICAgICAgICAgICAgICAvLyBpLT0gNAogICAgQk5FICAgICBkc3RfSVZfbG9vcDEKCiAgICBQT1AgICAgIHtyNC1yOX0KICAgIEJYICAgICAgbHIKfQojZW5kaWYgLyogRlVOQ1RJT05fZHN0X0lWX2Z1bmMxICovCgojaWZkZWYgRlVOQ1RJT05fZHN0X0lWX2Z1bmMyCgpGREtfSU5MSU5FCi8qIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkgKi8Kc3RhdGljIHZvaWQgZHN0X0lWX2Z1bmMyKAogICAgaW50IGksCiAgICBjb25zdCBGSVhQX1NQSyAqdHdpZGRsZSwKICAgIEZJWFBfREJMICpSRVNUUklDVCBwRGF0XzAsCiAgICBGSVhQX0RCTCAqUkVTVFJJQ1QgcERhdF8xLAogICAgaW50IGluYykKewogIEZJWFBfREJMIGFjY3UxLGFjY3UyLGFjY3UzLGFjY3U0OwogIExPTkcgdmFsX3R3OwoKICBhY2N1NCA9IHBEYXRfMFswXTsKICBhY2N1MyA9IHBEYXRfMFsxXTsKICBhY2N1NCA+Pj0gMTsKICBhY2N1MyA+Pj0gMTsKICBhY2N1NCA9IC1hY2N1NDsKCiAgYWNjdTEgPSBwRGF0XzFbLTFdOwogIGFjY3UyID0gcERhdF8xWzBdOwoKICAqcERhdF8wKysgPSBhY2N1MzsKICAqcERhdF8xLS0gPSBhY2N1NDsKCgogIF9fYXNtCiAgewogICAgQiAgICAgICBkc3RfSVZfbG9vcDJfMm5kX3BhcnQKCiAgICAvKiA1MCBjeWNsZXMgZm9yIDIgaXRlcmF0aW9ucyA9IDI1IGN5Y2xlcy9pdGVyYXRpb24gKi8KCmRzdF9JVl9sb29wMjoKCiAgICBMRFIgICAgIHZhbF90dywgW3R3aWRkbGVdLCBpbmMsIExTTCAjMiAgICAvLyB2YWxfdHcgPSAqdHdpZGRsZTsgdHdpZGRsZSArPSBpbmMKCiAgICBSU0IgICAgIGFjY3UyLCBhY2N1MiwgIzAgICAgICAgICAgICAgICAgICAvLyBhY2N1MiA9IC1hY2N1MgogICAgUlNCICAgICBhY2N1MSwgYWNjdTEsICMwICAgICAgICAgICAgICAgICAgLy8gYWNjdTEgPSAtYWNjdTEKICAgIFNNVUxXVCAgYWNjdTMsIGFjY3UyLCB2YWxfdHcgICAgICAgICAgICAgIC8vIGFjY3UzID0gKC1hY2N1MikqdmFsX3R3LmwKICAgIFNNVUxXVCAgYWNjdTQsIGFjY3UxLCB2YWxfdHcgICAgICAgICAgICAgIC8vIGFjY3U0ID0gKC1hY2N1MSkqdmFsX3R3LmwKICAgIFJTQiAgICAgYWNjdTMsIGFjY3UzLCAjMCAgICAgICAgICAgICAgICAgIC8vIGFjY3UzID0gLWFjY3UyKnZhbF90dy5sCiAgICBTTUxBV0IgIGFjY3UxLCBhY2N1MSwgdmFsX3R3LCBhY2N1MyAgICAgICAvLyBhY2N1MSA9IC1hY2N1MSp2YWxfdHcuaC0oLWFjY3UyKSp2YWxfdHcubAogICAgU01MQVdCICBhY2N1MiwgYWNjdTIsIHZhbF90dywgYWNjdTQgICAgICAgLy8gYWNjdTIgPSAoLWFjY3UxKSp2YWxfdHcubCsoLWFjY3UyKSp2YWxfdHcuaAogICAgU1RSICAgICBhY2N1MSwgW3BEYXRfMV0sICMtNCAgICAgICAgICAgICAgLy8gKnBEYXRfMS0tID0gYWNjdTEKICAJU1RSICAgICBhY2N1MiwgW3BEYXRfMF0sICM0ICAgICAgICAgICAgICAgLy8gKnBEYXRfMCsrID0gYWNjdTIKCiAgCUxEUiAgICAgYWNjdTQsIFtwRGF0XzBdICAgICAgICAgICAgICAgICAgIC8vIGFjY3U0ID0gcERhdF8wWzBdCiAgCUxEUiAgICAgYWNjdTMsIFtwRGF0XzAsICM0XSAgICAgICAgICAgICAgIC8vIGFjY3UzID0gcERhdF8wWzFdCgogICAgUlNCICAgICBhY2N1NCwgYWNjdTQsICMwICAgICAgICAgICAgICAgICAgLy8gYWNjdTQgPSAtYWNjdTQKICAgIFJTQiAgICAgYWNjdTMsIGFjY3UzLCAjMCAgICAgICAgICAgICAgICAgIC8vIGFjY3UzID0gLWFjY3UzCgogICAgU01VTFdCICBhY2N1MSwgYWNjdTMsIHZhbF90dyAgICAgICAgICAgICAgLy8gYWNjdTEgPSAoLWFjY3UzKSp2YWxfdHcuaAogICAgU01VTFdUICBhY2N1MiwgYWNjdTMsIHZhbF90dyAgICAgICAgICAgICAgLy8gYWNjdTIgPSAoLWFjY3UzKSp2YWxfdHcubAogICAgUlNCICAgICBhY2N1MSwgYWNjdTEsICMwICAgICAgICAgICAgICAgICAgLy8gYWNjdTEgPSAtKC1hY2N1MykqdmFsX3R3LmgKICAgIFNNTEFXVCAgYWNjdTMsIGFjY3U0LCB2YWxfdHcsIGFjY3UxICAgICAgIC8vIGFjY3UzID0gKC1hY2N1NCkqdmFsX3R3LmwtKC1hY2N1MykqdmFsX3R3LmgKICAgIFNNTEFXQiAgYWNjdTQsIGFjY3U0LCB2YWxfdHcsIGFjY3UyICAgICAgIC8vIGFjY3U0ID0gKC1hY2N1MykqdmFsX3R3LmwrKC1hY2N1NCkqdmFsX3R3LmgKCiAgICBMRFIgICAgIGFjY3UxLCBbcERhdF8xLCAjLTRdICAgICAgICAgICAgICAvLyBhY2N1MSA9IHBEYXRfMVstMV0KICAgIExEUiAgICAgYWNjdTIsIFtwRGF0XzFdICAgICAgICAgICAgICAgICAgIC8vIGFjY3UyID0gcERhdF8xWzBdCgogICAgU1RSICAgICBhY2N1MywgW3BEYXRfMF0sICM0ICAgICAgICAgICAgICAgLy8gKnBEYXRfMCsrID0gYWNjdTMKICAgIFNUUiAgICAgYWNjdTQsIFtwRGF0XzFdLCAjLTQgICAgICAgICAgICAgIC8vICpwRGF0XzEtLSA9IGFjY3U0Cgpkc3RfSVZfbG9vcDJfMm5kX3BhcnQ6CgogICAgTERSICAgICB2YWxfdHcsIFt0d2lkZGxlXSwgaW5jLCBMU0wgIzIgICAgLy8gdmFsX3R3ID0gKnR3aWRkbGU7IHR3aWRkbGUgKz0gaW5jCgogICAgUlNCICAgICBhY2N1MiwgYWNjdTIsICMwICAgICAgICAgICAgICAgICAgLy8gYWNjdTIgPSAtYWNjdTIKICAgIFJTQiAgICAgYWNjdTEsIGFjY3UxLCAjMCAgICAgICAgICAgICAgICAgIC8vIGFjY3UxID0gLWFjY3UxCiAgICBTTVVMV1QgIGFjY3UzLCBhY2N1MiwgdmFsX3R3ICAgICAgICAgICAgICAvLyBhY2N1MyA9ICgtYWNjdTIpKnZhbF90dy5sCiAgICBTTVVMV1QgIGFjY3U0LCBhY2N1MSwgdmFsX3R3ICAgICAgICAgICAgICAvLyBhY2N1NCA9ICgtYWNjdTEpKnZhbF90dy5sCiAgICBSU0IgICAgIGFjY3UzLCBhY2N1MywgIzAgICAgICAgICAgICAgICAgICAvLyBhY2N1MyA9IC1hY2N1Mip2YWxfdHcubAogICAgU01MQVdCICBhY2N1MSwgYWNjdTEsIHZhbF90dywgYWNjdTMgICAgICAgLy8gYWNjdTEgPSAtYWNjdTEqdmFsX3R3LmgtKC1hY2N1MikqdmFsX3R3LmwKICAgIFNNTEFXQiAgYWNjdTIsIGFjY3UyLCB2YWxfdHcsIGFjY3U0ICAgICAgIC8vIGFjY3UyID0gKC1hY2N1MSkqdmFsX3R3LmwrKC1hY2N1MikqdmFsX3R3LmgKICAgIFNUUiAgICAgYWNjdTEsIFtwRGF0XzFdLCAjLTQgICAgICAgICAgICAgIC8vICpwRGF0XzEtLSA9IGFjY3UxCiAgCVNUUiAgICAgYWNjdTIsIFtwRGF0XzBdLCAjNCAgICAgICAgICAgICAgIC8vICpwRGF0XzArKyA9IGFjY3UyCgogIAlMRFIgICAgIGFjY3U0LCBbcERhdF8wXSAgICAgICAgICAgICAgICAgICAvLyBhY2N1NCA9IHBEYXRfMFswXQogIAlMRFIgICAgIGFjY3UzLCBbcERhdF8wLCAjNF0gICAgICAgICAgICAgICAvLyBhY2N1MyA9IHBEYXRfMFsxXQoKICAgIFJTQiAgICAgYWNjdTQsIGFjY3U0LCAjMCAgICAgICAgICAgICAgICAgIC8vIGFjY3U0ID0gLWFjY3U0CiAgICBSU0IgICAgIGFjY3UzLCBhY2N1MywgIzAgICAgICAgICAgICAgICAgICAvLyBhY2N1MyA9IC1hY2N1MwoKICAgIFNNVUxXQiAgYWNjdTEsIGFjY3UzLCB2YWxfdHcgICAgICAgICAgICAgIC8vIGFjY3UxID0gKC1hY2N1MykqdmFsX3R3LmgKICAgIFNNVUxXVCAgYWNjdTIsIGFjY3UzLCB2YWxfdHcgICAgICAgICAgICAgIC8vIGFjY3UyID0gKC1hY2N1MykqdmFsX3R3LmwKICAgIFJTQiAgICAgYWNjdTEsIGFjY3UxLCAjMCAgICAgICAgICAgICAgICAgIC8vIGFjY3UxID0gLSgtYWNjdTMpKnZhbF90dy5oCiAgICBTTUxBV1QgIGFjY3UzLCBhY2N1NCwgdmFsX3R3LCBhY2N1MSAgICAgICAvLyBhY2N1MyA9ICgtYWNjdTQpKnZhbF90dy5sLSgtYWNjdTMpKnZhbF90dy5oCiAgICBTTUxBV0IgIGFjY3U0LCBhY2N1NCwgdmFsX3R3LCBhY2N1MiAgICAgICAvLyBhY2N1NCA9ICgtYWNjdTMpKnZhbF90dy5sKygtYWNjdTQpKnZhbF90dy5oCgogICAgTERSICAgICBhY2N1MSwgW3BEYXRfMSwgIy00XSAgICAgICAgICAgICAgLy8gYWNjdTEgPSBwRGF0XzFbLTFdCiAgICBMRFIgICAgIGFjY3UyLCBbcERhdF8xXSAgICAgICAgICAgICAgICAgICAvLyBhY2N1MiA9IHBEYXRfMVswXQoKICAgIFNUUiAgICAgYWNjdTMsIFtwRGF0XzBdLCAjNCAgICAgICAgICAgICAgIC8vICpwRGF0XzArKyA9IGFjY3UzCiAgICBTVFIgICAgIGFjY3U0LCBbcERhdF8xXSwgIy00ICAgICAgICAgICAgICAvLyAqcERhdF8xLS0gPSBhY2N1NAoKICAgIFNVQlMgICAgaSwgaSwgIzEKICAgIEJORSAgICAgZHN0X0lWX2xvb3AyCiAgfQoKICAvKiBMYXN0IFNpbiBhbmQgQ29zIHZhbHVlIHBhaXIgYXJlIHRoZSBzYW1lICovCiAgYWNjdTEgPSBmTXVsdERpdjIoLWFjY3UxLCBXVEMoMHg1YTgyNzk5YSkpOwogIGFjY3UyID0gZk11bHREaXYyKC1hY2N1MiwgV1RDKDB4NWE4Mjc5OWEpKTsKCiAgKnBEYXRfMCA9IGFjY3UxICsgYWNjdTI7CiAgKnBEYXRfMSA9IGFjY3UxIC0gYWNjdTI7Cn0KI2VuZGlmIC8qIEZVTkNUSU9OX2RzdF9JVl9mdW5jMiAqLwo=