LyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTYsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogKiBtZXQ6CiAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogKiAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwogKiAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKICogICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBMaW51eCBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAqICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAogKiAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAogKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgogKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5UCiAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMKICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgogKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgogKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCiAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCiAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4KICogSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAqCiAqLwoKI2lmbmRlZiBfX1FDQU1FUkFfSU5URl9IX18KI2RlZmluZSBfX1FDQU1FUkFfSU5URl9IX18KCi8vIFN5c3RlbSBkZXBlbmRlbmNpZXMKI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8bWVkaWEvbXNtYl9pc3AuaD4KCi8vIENhbWVyYSBkZXBlbmRlbmNpZXMKI2luY2x1ZGUgImNhbV90eXBlcy5oIgoKI2RlZmluZSBDQU1fUFJJVl9JT0NUTF9CQVNFIChWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyBNU01fQ0FNRVJBX1BSSVZfQ01EX01BWCkKdHlwZWRlZiBlbnVtIHsKICAgIC8qIHNlc3Npb24gYmFzZWQgcGFyYW1ldGVycyAqLwogICAgQ0FNX1BSSVZfUEFSTSA9IENBTV9QUklWX0lPQ1RMX0JBU0UsCiAgICAvKiBzZXNzaW9uIGJhc2VkIGFjdGlvbjogZG8gYXV0byBmb2N1cy4qLwogICAgQ0FNX1BSSVZfRE9fQVVUT19GT0NVUywKICAgIC8qIHNlc3Npb24gYmFzZWQgYWN0aW9uOiBjYW5jZWwgYXV0byBmb2N1cy4qLwogICAgQ0FNX1BSSVZfQ0FOQ0VMX0FVVE9fRk9DVVMsCiAgICAvKiBzZXNzaW9uIGJhc2VkIGFjdGlvbjogcHJlcGFyZSBmb3Igc25hcHNob3QuKi8KICAgIENBTV9QUklWX1BSRVBBUkVfU05BUFNIT1QsCiAgICAvKiBzeW5jIHN0cmVhbSBpbmZvLiovCiAgICBDQU1fUFJJVl9TVFJFQU1fSU5GT19TWU5DLAogICAgLyogc3RyZWFtIGJhc2VkIHBhcmFtZXRlcnMqLwogICAgQ0FNX1BSSVZfU1RSRUFNX1BBUk0sCiAgICAvKiBzdGFydCBaU0wgc25hcHNob3QuKi8KICAgIENBTV9QUklWX1NUQVJUX1pTTF9TTkFQU0hPVCwKICAgIC8qIHN0b3AgWlNMIHNuYXBzaG90LiovCiAgICBDQU1fUFJJVl9TVE9QX1pTTF9TTkFQU0hPVCwKICAgIC8qIGV2ZW50IGZvciByZWxhdGVkIHNlbnNvcnMgc3luY2hyb25pemF0aW9uLiAqLwogICAgQ0FNX1BSSVZfU1lOQ19SRUxBVEVEX1NFTlNPUlMsCiAgICAvKiBmbHVzaCAqLwogICAgQ0FNX1BSSVZfRkxVU0gKfSBjYW1fcHJpdmF0ZV9pb2N0bF9lbnVtX3Q7Cgp0eXBlZGVmIGVudW0gewogICAgLyogc3RhcnQgc3luY2luZyBmb3IgcmVsYXRlZCBjYW1lcmFzICovCiAgICBDQU1fU1lOQ19SRUxBVEVEX1NFTlNPUlNfT04gPSAxLAogICAgLyogc3RvcCBzeW5jaW5nIGZvciByZWxhdGVkIGNhbWVyYXMgKi8KICAgIENBTV9TWU5DX1JFTEFURURfU0VOU09SU19PRkYKfSBjYW1fc3luY19yZWxhdGVkX3NlbnNvcnNfY29udHJvbF90OwoKdHlwZWRlZiBlbnVtIHsKICAgIC8qIERyaXZpbmcgY2FtZXJhIG9mIHRoZSByZWxhdGVkIGNhbWVyYSBzdWItc3lzdGVtICovCiAgICAvKiBDZXJ0YWluIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9ubHkgZm9yIHByaW1hcnkgY2FtZXJhCiAgICAgICBzdWNoIGFzIGRpc3BsYXkgbW9kZSBmb3IgcHJldmlldywgYXV0b2ZvY3VzIGV0YwogICAgICAgSW4gY2VydGFpbiBjb25maWd1cmF0aW9ucyBmb3IgZWcuIHdoZW4gb3B0aWNhbCB6b29tCiAgICAgICBsaW1pdCBpcyByZWFjaGVkLCBBdXggQ2FtZXJhIHdvdWxkIGJlY29tZQogICAgICAgdGhlIGRyaXZpbmcgY2FtZXJhIGFuZCB0aGVyZSB3aWxsIGJlIHJvbGUgc3dpdGNoLiovCiAgICBDQU1fTU9ERV9QUklNQVJZID0gMCwKICAgIC8qIE5vbi1kcml2aW5nIGNhbWVyYSBvZiB0aGUgcmVsYXRlZCBjYW1lcmEgc3ViLXN5c3RlbQogICAgICAgbm8gZGlzcGxheSBtb2RlIHNldCBmb3Igc2Vjb25kYXJ5IGNhbWVyYSAqLwogICAgQ0FNX01PREVfU0VDT05EQVJZCn0gY2FtX3N5bmNfbW9kZV90OwoKLyogUGF5bG9hZCBmb3Igc2VuZGluZyBidW5kbGluZyBpbmZvIHRvIGJhY2tlbmQgKi8KdHlwZWRlZiBzdHJ1Y3QgewogICAgY2FtX3N5bmNfcmVsYXRlZF9zZW5zb3JzX2NvbnRyb2xfdCBzeW5jX2NvbnRyb2w7CiAgICBjYW1fc3luY190eXBlX3QgdHlwZTsKICAgIGNhbV9zeW5jX21vZGVfdCBtb2RlOwogICAgY2FtXzNhX3N5bmNfbW9kZV90IHN5bmNfM2FfbW9kZTsKICAgIC8qIHNlc3Npb24gSWQgb2YgdGhlIG90aGVyIGNhbWVyYSBzZXNzaW9uCiAgICAgICBMaW5raW5nIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgc2Vzc2lvbiBpbiB0aGUKICAgICAgIGJhY2tlbmQgKi8KICAgIHVpbnQzMl90IHJlbGF0ZWRfc2Vuc29yX3Nlc3Npb25faWQ7CiAgICB1aW50OF90IGlzX2ZyYW1lX3N5bmNfZW5hYmxlZDsKfWNhbV9zeW5jX3JlbGF0ZWRfc2Vuc29yc19ldmVudF9pbmZvX3Q7CgovKiBSZWxhdGVkIGNhbWVyYSBzZW5zb3Igc3BlY2lmaWMgY2FsaWJyYXRpb24gZGF0YSAqLwovLyBBbGlnbiBieXRlcyBhY2NvcmRpbmcgdG8gQVBJIGRvY3VtZW50LgojcHJhZ21hIHBhY2soMikKdHlwZWRlZiBzdHJ1Y3QgewogICAgLyogRm9jYWwgbGVuZ3RoIGluIHBpeGVscyBAIGNhbGlicmF0aW9uIHJlc29sdXRpb24uKi8KICAgIGZsb2F0ICAgICAgIG5vcm1hbGl6ZWRfZm9jYWxfbGVuZ3RoOwogICAgLyogTmF0aXZlIHNlbnNvciByZXNvbHV0aW9uIFcgdGhhdCB3YXMgdXNlZCB0byBjYXB0dXJlIGNhbGlicmF0aW9uIGltYWdlICovCiAgICB1aW50MTZfdCAgICBuYXRpdmVfc2Vuc29yX3Jlc29sdXRpb25fd2lkdGg7CiAgICAvKiBOYXRpdmUgc2Vuc29yIHJlc29sdXRpb24gSCB0aGF0IHdhcyB1c2VkIHRvIGNhcHR1cmUgY2FsaWJyYXRpb24gaW1hZ2UgKi8KICAgIHVpbnQxNl90ICAgIG5hdGl2ZV9zZW5zb3JfcmVzb2x1dGlvbl9oZWlnaHQ7CiAgICAvKiBJbWFnZSBzaXplIFcgdXNlZCBpbnRlcm5hbGx5IGJ5IGNhbGlicmF0aW9uIHRvb2wgKi8KICAgIHVpbnQxNl90ICAgIGNhbGlicmF0aW9uX3NlbnNvcl9yZXNvbHV0aW9uX3dpZHRoOwogICAgLyogSW1hZ2Ugc2l6ZSBIIHVzZWQgaW50ZXJuYWxseSBieSBjYWxpYnJhdGlvbiB0b29sICovCiAgICB1aW50MTZfdCAgICBjYWxpYnJhdGlvbl9zZW5zb3JfcmVzb2x1dGlvbl9oZWlnaHQ7CiAgICAvKiBGb2NhbCBsZW5ndGggcmF0aW8gQCBDYWxpYnJhdGlvbiAqLwogICAgZmxvYXQgICAgICAgZm9jYWxfbGVuZ3RoX3JhdGlvOwp9Y2FtX3JlbGF0ZWRfc2Vuc29yX2NhbGlicmF0aW9uX2RhdGFfdDsKI3ByYWdtYSBwYWNrKCkKCi8qIFJlbGF0ZWQgQ2FtZXJhIFN5c3RlbSBDYWxpYnJhdGlvbiBkYXRhCiAgIENhbGlicmF0aW9uIGRhdGEgZm9yIHRoZSBlbnRpcmUgcmVsYXRlZCBjYW0gc3ViLXN5c3RlbSBpcwogICBpbiBhIHNoYXJlZCBFRVBST00uIFdlIGhhdmUgMiBmaWVsZHMgd2hpY2ggYXJlIHNwZWNpZmljIHRvCiAgIGVhY2ggc2Vuc29yIGZvbGxvd2VkIGJ5IGEgc2V0IG9mIGNvbW1vbiBjYWxpYnJhdGlvbiBvZiB0aGUKICAgZW50aXJlIHJlbGF0ZWQgY2FtIHN5c3RlbSovCi8vIEFsaWduIGJ5dGVzIGFjY29yZGluZyB0byBBUEkgZG9jdW1lbnQuCiNwcmFnbWEgcGFjaygyKQp0eXBlZGVmIHN0cnVjdCB7CiAgICAvKiBWZXJzaW9uIGluZm9ybWF0aW9uICovCiAgICB1aW50MzJfdCAgICBjYWxpYnJhdGlvbl9mb3JtYXRfdmVyc2lvbjsKICAgIC8qIE1haW4gQ2FtZXJhIFNlbnNvciBzcGVjaWZpYyBjYWxpYnJhdGlvbiAqLwogICAgY2FtX3JlbGF0ZWRfc2Vuc29yX2NhbGlicmF0aW9uX2RhdGFfdCAgbWFpbl9jYW1fc3BlY2lmaWNfY2FsaWJyYXRpb247CiAgICAvKiBBdXggQ2FtZXJhIFNlbnNvciBzcGVjaWZpYyBjYWxpYnJhdGlvbiAqLwogICAgY2FtX3JlbGF0ZWRfc2Vuc29yX2NhbGlicmF0aW9uX2RhdGFfdCAgYXV4X2NhbV9zcGVjaWZpY19jYWxpYnJhdGlvbjsKICAgIC8qIFJlbGF0aXZlIHZpZXdwb2ludCBtYXRjaGluZyBtYXRyaXggdy5yLnQgTWFpbiAqLwogICAgZmxvYXQgICAgICByZWxhdGl2ZV9yb3RhdGlvbl9tYXRyaXhbUkVMQ0FNX0NBTElCX1JPVF9NQVRSSVhfTUFYXTsKICAgIC8qIFJlbGF0aXZlIGdlb21ldHJpYyBzdXJmYWNlIGRlc2NyaXB0aW9uIHBhcmFtZXRlcnMgKi8KICAgIGZsb2F0ICAgICAgcmVsYXRpdmVfZ2VvbWV0cmljX3N1cmZhY2VfcGFyYW1ldGVyc1sKICAgICAgICAgICAgUkVMQ0FNX0NBTElCX1NVUkZBQ0VfUEFSTVNfTUFYXTsKICAgIC8qIFJlbGF0aXZlIG9mZnNldCBvZiBzZW5zb3IgY2VudGVyIGZyb20gb3B0aWNhbCBheGlzIGFsb25nIGhvcml6b250YWwgZGltZW5zaW9uICovCiAgICBmbG9hdCAgICAgIHJlbGF0aXZlX3ByaW5jaXBsZV9wb2ludF94X29mZnNldDsKICAgIC8qIFJlbGF0aXZlIG9mZnNldCBvZiBzZW5zb3IgY2VudGVyIGZyb20gb3B0aWNhbCBheGlzIGFsb25nIHZlcnRpY2FsIGRpbWVuc2lvbiAqLwogICAgZmxvYXQgICAgICByZWxhdGl2ZV9wcmluY2lwbGVfcG9pbnRfeV9vZmZzZXQ7CiAgICAvKiAwPU1haW4gQ2FtZXJhIGlzIG9uIHRoZSBsZWZ0IG9mIEF1eDsgMT1NYWluIENhbWVyYSBpcyBvbiB0aGUgcmlnaHQgb2YgQXV4ICovCiAgICB1aW50MTZfdCAgIHJlbGF0aXZlX3Bvc2l0aW9uX2ZsYWc7CiAgICAvKiBDYW1lcmEgc2VwYXJhdGlvbiBpbiBtbSAqLwogICAgZmxvYXQgICAgICByZWxhdGl2ZV9iYXNlbGluZV9kaXN0YW5jZTsKICAgIC8qIG1haW4gc2Vuc29yIHNldHRpbmcgZHVyaW5nIGNhbDogMC1ub25lLCAxLWhvci1taXJyb3IsIDItdmVyLWZsaXAsIDMtYm90aCAqLwogICAgdWludDE2X3QgICBtYWluX3NlbnNvcl9taXJyb3JfZmxpcF9zZXR0aW5nOwogICAgLyogYXV4IHNlbnNvciBzZXR0aW5nIGR1cmluZyBjYWw6IDAtbm9uZSwgMS1ob3ItbWlycm9yLCAyLXZlci1mbGlwLCAzLWJvdGggKi8KICAgIHVpbnQxNl90ICAgYXV4X3NlbnNvcl9taXJyb3JfZmxpcF9zZXR0aW5nOwogICAgLyogbW9kdWxlIG9yaWVudGF0aW9uIGR1cmluZyBjYWw6IDAtc2Vuc29ycyBpbiBsYW5kc2NhcGUsIDEtc2Vuc29ycyBpbiBwb3J0cmFpdCAqLwogICAgdWludDE2X3QgICBtb2R1bGVfb3JpZW50YXRpb25fZHVyaW5nX2NhbGlicmF0aW9uOwogICAgLyogY2FsIGltYWdlcyByZXF1aXJlZCByb3RhdGlvbjogMC1ubywgMS05MCBkZWdyZWVzIHJpZ2h0LCAyLTkwIGRlZ3JlZXMgbGVmdCAqLwogICAgdWludDE2X3QgICByb3RhdGlvbl9mbGFnOwogICAgLyogQUVDIHN5bmMgT1RQIGRhdGEgKi8KICAgIC8qIEFFQyBzeW5jIGJyaWdodG5lc3MgcmF0aW9uLiBGaXhlZCBQb2ludCBRMTAqLwogICAgaW50MTZfdCAgICBicmlnaHRuZXNzX3JhdGlvOwogICAgLyogUmVmZXJlbmNlIG1vbm8gZ2FpbiB2YWx1ZSBvYnRhaW5lZCBmcm9tIHNldHVwIHN0YWdlIGFuZCB1c2VkIGR1cmluZyBjYWxpYnJhdGlvbiBzdGFnZSAqLwogICAgLyogRml4ZWQgUG9pbnQgUTEwICovCiAgICBpbnQxNl90ICAgIHJlZl9tb25vX2dhaW47CiAgICAvKiBSZWZlcmVuY2UgbW9ubyBsaW5lIGNvdW50IG9idGFpbmVkIGZyb20gc2V0dXAgc3RhZ2UgYW5kIHVzZWQgZHVyaW5nIGNhbGlicmF0aW9uIHN0YWdlICovCiAgICB1aW50MTZfdCAgIHJlZl9tb25vX2xpbmVjb3VudDsKICAgIC8qIFJlZmVyZW5jZSBiYXllciBnYWluIHZhbHVlIG9idGFpbmVkIGZyb20gc2V0dXAgc3RhZ2UgYW5kIHVzZWQgZHVyaW5nIGNhbGlicmF0aW9uIHN0YWdlICovCiAgICAvKiBGaXhlZCBQb2ludCBRMTAgKi8KICAgIGludDE2X3QgICAgcmVmX2JheWVyX2dhaW47CiAgICAvKiBSZWZlcmVuY2UgYmF5ZXIgbGluZSBjb3VudCBvYnRhaW5lZCBmcm9tIHNldHVwIHN0YWdlIGFuZCB1c2VkIGR1cmluZyBjYWxpYnJhdGlvbiBzdGFnZSAqLwogICAgdWludDE2X3QgICByZWZfYmF5ZXJfbGluZWNvdW50OwogICAgLyogUmVmZXJlbmNlIGJheWVyIGNvbG9yIHRlbXBlcmF0dXJlICovCiAgICB1aW50MTZfdCAgIHJlZl9iYXllcl9jb2xvcl90ZW1wZXJhdHVyZTsKICAgIC8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCiAgICBmbG9hdCAgICAgIHJlc2VydmVkW1JFTENBTV9DQUxJQl9SRVNFUlZFRF9NQVhdOwp9IGNhbV9yZWxhdGVkX3N5c3RlbV9jYWxpYnJhdGlvbl9kYXRhX3Q7CiNwcmFnbWEgcGFjaygpCgp0eXBlZGVmIHN0cnVjdCB7CiAgdWludDMyX3QgZGVmYXVsdF9zZW5zb3JfZmxpcDsKICB1aW50MzJfdCBzZW5zb3JfbW91bnRfYW5nbGU7CiAgY2FtX3JlbGF0ZWRfc3lzdGVtX2NhbGlicmF0aW9uX2RhdGFfdCBvdHBfY2FsaWJyYXRpb25fZGF0YTsKfSBjYW1fanBlZ19tZXRhZGF0YV90OwoKLyogY2FwYWJpbGl0eSBzdHJ1Y3QgZGVmaW5pdGlvbiBmb3IgSEFMIDEqLwpzdHJ1Y3QgY2FtX2NhcGFiaWxpdHk7CnR5cGVkZWYgc3RydWN0IGNhbV9jYXBhYmlsaXR5ewogICAgY2FtX2hhbF92ZXJzaW9uX3QgdmVyc2lvbjsKCiAgICBjYW1fcG9zaXRpb25fdCBwb3NpdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNlbnNvciBwb3NpdGlvbjogZnJvbnQsIGJhY2sgKi8KCiAgICB1aW50OF90IGF1dG9faGRyX3N1cHBvcnRlZDsKCiAgICB1aW50MTZfdCBpc1duclN1cHBvcnRlZDsKICAgIC8qIHN1cHBvcnRlZCBpc28gbW9kZXMgKi8KICAgIHNpemVfdCBzdXBwb3J0ZWRfaXNvX21vZGVzX2NudDsKICAgIGNhbV9pc29fbW9kZV90eXBlIHN1cHBvcnRlZF9pc29fbW9kZXNbQ0FNX0lTT19NT0RFX01BWF07CgogICAgLyogc3VwcG9ydGVkIGZsYXNoIG1vZGVzICovCiAgICBzaXplX3Qgc3VwcG9ydGVkX2ZsYXNoX21vZGVzX2NudDsKICAgIGNhbV9mbGFzaF9tb2RlX3Qgc3VwcG9ydGVkX2ZsYXNoX21vZGVzW0NBTV9GTEFTSF9NT0RFX01BWF07CgogICAgc2l6ZV90IHpvb21fcmF0aW9fdGJsX2NudDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0YWJsZSBzaXplIGZvciB6b29tIHJhdGlvcyAqLwogICAgdWludDMyX3Qgem9vbV9yYXRpb190YmxbTUFYX1pPT01TX0NOVF07ICAgICAgICAgICAgICAgICAvKiB6b29tIHJhdGlvcyB0YWJsZSAqLwoKICAgIC8qIHN1cHBvcnRlZCBlZmZlY3QgbW9kZXMgKi8KICAgIHNpemVfdCBzdXBwb3J0ZWRfZWZmZWN0c19jbnQ7CiAgICBjYW1fZWZmZWN0X21vZGVfdHlwZSBzdXBwb3J0ZWRfZWZmZWN0c1tDQU1fRUZGRUNUX01PREVfTUFYXTsKCiAgICAvKiBzdXBwb3J0ZWQgc2NlbmUgbW9kZXMgKi8KICAgIHNpemVfdCBzdXBwb3J0ZWRfc2NlbmVfbW9kZXNfY250OwogICAgY2FtX3NjZW5lX21vZGVfdHlwZSBzdXBwb3J0ZWRfc2NlbmVfbW9kZXNbQ0FNX1NDRU5FX01PREVfTUFYXTsKCiAgICAvKiBzdXBwb3J0ZWQgYXV0byBleHBvc3VyZSBtb2RlcyAqLwogICAgc2l6ZV90IHN1cHBvcnRlZF9hZWNfbW9kZXNfY250OwogICAgY2FtX2F1dG9fZXhwb3N1cmVfbW9kZV90eXBlIHN1cHBvcnRlZF9hZWNfbW9kZXNbQ0FNX0FFQ19NT0RFX01BWF07CgogICAgc2l6ZV90IGZwc19yYW5nZXNfdGJsX2NudDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmcHMgcmFuZ2VzIHRhYmxlIHNpemUgKi8KICAgIGNhbV9mcHNfcmFuZ2VfdCBmcHNfcmFuZ2VzX3RibFtNQVhfU0laRVNfQ05UXTsgICAgICAgICAgLyogZnBzIHJhbmdlcyB0YWJsZSAqLwoKICAgIC8qIHN1cHBvcnRlZCBhbnRpYmFuZGluZyBtb2RlcyAqLwogICAgc2l6ZV90IHN1cHBvcnRlZF9hbnRpYmFuZGluZ3NfY250OwogICAgY2FtX2FudGliYW5kaW5nX21vZGVfdHlwZSBzdXBwb3J0ZWRfYW50aWJhbmRpbmdzW0NBTV9BTlRJQkFORElOR19NT0RFX01BWF07CgogICAgLyogc3VwcG9ydGVkIHdoaXRlIGJhbGFuY2UgbW9kZXMgKi8KICAgIHNpemVfdCBzdXBwb3J0ZWRfd2hpdGVfYmFsYW5jZXNfY250OwogICAgY2FtX3diX21vZGVfdHlwZSBzdXBwb3J0ZWRfd2hpdGVfYmFsYW5jZXNbQ0FNX1dCX01PREVfTUFYXTsKCiAgICAvKiBDYXBhYmlsaXR5IGxpc3Qgb2Ygc3VwcG9ydGVkIGluc2Vuc29yIEhEUiB0eXBlcwogICAgICogQmFja2VuZCBpcyBleHBlY3RlZCB0byBmaWxsIGluIGFsbCB0aGUgc3VwcG9ydGVkIHR5cGVzIGFuZCBzZXQgYXBwcm9wcmlhdGUKICAgICAqIGNvdW50LCBzZWUgY2FtX3NlbnNvcl9oZHJfdHlwZV90IGZvciB2YWxpZCB0eXBlcwogICAgKi8KICAgIHNpemVfdCBzdXBwb3J0ZWRfc2Vuc29yX2hkcl90eXBlc19jbnQ7CiAgICBjYW1fc2Vuc29yX2hkcl90eXBlX3Qgc3VwcG9ydGVkX3NlbnNvcl9oZHJfdHlwZXNbQ0FNX1NFTlNPUl9IRFJfTUFYXTsKCiAgICAvKiBzdXBwb3J0ZWQgbWFudWFsIHdiIGNjdCAqLwogICAgaW50MzJfdCBtaW5fd2JfY2N0OwogICAgaW50MzJfdCBtYXhfd2JfY2N0OwoKICAgIC8qIHN1cHBvcnRlZCBtYW51YWwgd2IgcmdiIGdhaW5zICovCiAgICBmbG9hdCBtaW5fd2JfZ2FpbjsKICAgIGZsb2F0IG1heF93Yl9nYWluOwoKICAgIC8qIHN1cHBvcnRlZCBmb2N1cyBtb2RlcyAqLwogICAgc2l6ZV90IHN1cHBvcnRlZF9mb2N1c19tb2Rlc19jbnQ7CiAgICBjYW1fZm9jdXNfbW9kZV90eXBlIHN1cHBvcnRlZF9mb2N1c19tb2Rlc1tDQU1fRk9DVVNfTU9ERV9NQVhdOwoKICAgIC8qIHN1cHBvcnRlZCBtYW51YWwgZm9jdXMgcG9zaXRpb24gKi8KICAgIGZsb2F0IG1pbl9mb2N1c19wb3NbQ0FNX01BTlVBTF9GT0NVU19NT0RFX01BWF07CiAgICBmbG9hdCBtYXhfZm9jdXNfcG9zW0NBTV9NQU5VQUxfRk9DVVNfTU9ERV9NQVhdOwoKICAgIGludDMyX3QgZXhwb3N1cmVfY29tcGVuc2F0aW9uX21pbjsgICAgICAgLyogbWluIHZhbHVlIG9mIGV4cG9zdXJlIGNvbXBlbnNhdGlvbiBpbmRleCAqLwogICAgaW50MzJfdCBleHBvc3VyZV9jb21wZW5zYXRpb25fbWF4OyAgICAgICAvKiBtYXggdmFsdWUgb2YgZXhwb3N1cmUgY29tcGVuc2F0aW9uIGluZGV4ICovCiAgICBpbnQzMl90IGV4cG9zdXJlX2NvbXBlbnNhdGlvbl9kZWZhdWx0OyAgIC8qIGRlZmF1bHQgdmFsdWUgb2YgZXhwb3N1cmUgY29tcGVuc2F0aW9uIGluZGV4ICovCiAgICBmbG9hdCBleHBvc3VyZV9jb21wZW5zYXRpb25fc3RlcDsKICAgIGNhbV9yYXRpb25hbF90eXBlX3QgZXhwX2NvbXBlbnNhdGlvbl9zdGVwOyAgICAvKiBleHBvc3VyZSBjb21wZW5zYXRpb24gc3RlcCB2YWx1ZSAqLwoKICAgIHVpbnQ4X3QgdmlkZW9fc3RhYmxpemF0aW9uX3N1cHBvcnRlZDsgLyogZmxhZyBpZCB2aWRlbyBzdGFibGl6YXRpb24gaXMgc3VwcG9ydGVkICovCgogICAgc2l6ZV90IHBpY3R1cmVfc2l6ZXNfdGJsX2NudDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwaWN0dXJlIHNpemVzIHRhYmxlIHNpemUgKi8KICAgIGNhbV9kaW1lbnNpb25fdCBwaWN0dXJlX3NpemVzX3RibFtNQVhfU0laRVNfQ05UXTsgICAgICAgLyogcGljdHVyZSBzaXplcyB0YWJsZSAqLwogICAgLyogVGhlIG1pbmltdW0gZnJhbWUgZHVyYXRpb24gdGhhdCBpcyBzdXBwb3J0ZWQgZm9yIGVhY2gKICAgICAqIHJlc29sdXRpb24gaW4gYXZhaWxhYmxlUHJvY2Vzc2VkU2l6ZXMuIFNob3VsZCBjb3JyZXNwb25kCiAgICAgKiB0byB0aGUgZnJhbWUgZHVyYXRpb24gd2hlbiBvbmx5IHRoYXQgcHJvY2Vzc2VkIHN0cmVhbQogICAgICogaXMgYWN0aXZlLCB3aXRoIGFsbCBwcm9jZXNzaW5nIHNldCB0byBGQVNUICovCiAgICBpbnQ2NF90IHBpY3R1cmVfbWluX2R1cmF0aW9uW01BWF9TSVpFU19DTlRdOwoKICAgIC8qIGNhcGFiaWxpdGllcyBzcGVjaWZpYyB0byBIQUwgMSAqLwoKICAgIGludDMyX3QgbW9kZXNfc3VwcG9ydGVkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWFzayBvZiBtb2RlcyBzdXBwb3J0ZWQ6IDJELCAzRCAqLwogICAgdWludDMyX3Qgc2Vuc29yX21vdW50X2FuZ2xlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZW5zb3IgbW91bnQgYW5nbGUgKi8KCiAgICBmbG9hdCBmb2NhbF9sZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvY2FsIGxlbmd0aCAqLwogICAgZmxvYXQgaG9yX3ZpZXdfYW5nbGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBob3Jpem9udGFsIHZpZXcgYW5nbGUgKi8KICAgIGZsb2F0IHZlcl92aWV3X2FuZ2xlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdmVydGljYWwgdmlldyBhbmdsZSAqLwoKICAgIHNpemVfdCBwcmV2aWV3X3NpemVzX3RibF9jbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJldmlldyBzaXplcyB0YWJsZSBzaXplICovCiAgICBjYW1fZGltZW5zaW9uX3QgcHJldmlld19zaXplc190YmxbTUFYX1NJWkVTX0NOVF07ICAgICAgIC8qIHByZWlldyBzaXplcyB0YWJsZSAqLwoKICAgIHNpemVfdCB2aWRlb19zaXplc190YmxfY250OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdmlkZW8gc2l6ZXMgdGFibGUgc2l6ZSAqLwogICAgY2FtX2RpbWVuc2lvbl90IHZpZGVvX3NpemVzX3RibFtNQVhfU0laRVNfQ05UXTsgICAgICAgICAvKiB2aWRlbyBzaXplcyB0YWJsZSAqLwoKCiAgICBzaXplX3QgbGl2ZXNuYXBzaG90X3NpemVzX3RibF9jbnQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIGxpdmVzbmFwc2hvdCBzaXplcyB0YWJsZSBzaXplICovCiAgICBjYW1fZGltZW5zaW9uX3QgbGl2ZXNuYXBzaG90X3NpemVzX3RibFtNQVhfU0laRVNfQ05UXTsgIC8qIGxpdmVzbmFwc2hvdCBzaXplcyB0YWJsZSAqLwoKICAgIHNpemVfdCB2aGRyX2xpdmVzbmFwc2hvdF9zaXplc190YmxfY250OyAgICAgICAgICAgICAgICAgLyogdmhkcl9saXZlc25hcHNob3Qgc2l6ZXMgdGFibGUgc2l6ZSAqLwogICAgY2FtX2RpbWVuc2lvbl90IHZoZHJfbGl2ZXNuYXBzaG90X3NpemVzX3RibFtNQVhfU0laRVNfQ05UXTsgIC8qIHZoZHJfbGl2ZXNuYXBzaG90IHNpemVzIHRhYmxlICovCgogICAgc2l6ZV90IGhmcl90YmxfY250OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0YWJsZSBzaXplIGZvciBIRlIgKi8KICAgIGNhbV9oZnJfaW5mb190IGhmcl90YmxbQ0FNX0hGUl9NT0RFX01BWF07ICAgICAgICAgICAgICAgLyogSEZSIHRhYmxlICovCgogICAgc2l6ZV90IHp6aGRyX3NpemVzX3RibF9jbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgcmVzb2x1dGlvbnMgaW4genpIRFIgbW9kZSovCiAgICBjYW1fZGltZW5zaW9uX3QgenpoZHJfc2l6ZXNfdGJsW01BWF9TSVpFU19DTlRdOyAgICAgICAgIC8qIFRhYmxlIGZvciBaWkhEUiBzdXBwb3J0ZWQgc2l6ZXMgKi8KCiAgICBzaXplX3Qgc3VwcG9ydGVkX3F1YWRyYV9jZmFfZGltX2NudDsgICAgICAgICAgICAgIC8qIE51bWJlciBvZiByZXNvbHV0aW9ucyBpbiBRdWFkcmEgQ0ZBIG1vZGUgKi8KICAgIGNhbV9kaW1lbnNpb25fdCBxdWFkcmFfY2ZhX2RpbVtNQVhfU0laRVNfQ05UXTsgICAgLyogVGFibGUgZm9yIFF1YWRyYSBDRkEgc3VwcG9ydGVkIHNpemVzICovCiAgICBjYW1fZm9ybWF0X3QgcXVhZHJhX2NmYV9mb3JtYXQ7ICAgICAgICAgICAgICAgICAgIC8qIFF1YWRyYSBDRkEgb3V0cHV0IGZvcm1hdCAqLwogICAgdWludDMyX3QgaXNfcmVtb3NhaWNfbGliX3ByZXNlbnQ7ICAgICAgICAgICAgICAgICAvKiBGbGFnIGluZGljYXRpbmcgaWYgcmVtb3NhaWMgbGliIHByZXNlbnQgKi8KCiAgICAvKiBzdXBwb3J0ZWQgcHJldmlldyBmb3JtYXRzICovCiAgICBzaXplX3Qgc3VwcG9ydGVkX3ByZXZpZXdfZm10X2NudDsKICAgIGNhbV9mb3JtYXRfdCBzdXBwb3J0ZWRfcHJldmlld19mbXRzW0NBTV9GT1JNQVRfTUFYXTsKCiAgICAvKiBzdXBwb3J0ZWQgcGljdHVyZSBmb3JtYXRzICovCiAgICBzaXplX3Qgc3VwcG9ydGVkX3BpY3R1cmVfZm10X2NudDsKICAgIGNhbV9mb3JtYXRfdCBzdXBwb3J0ZWRfcGljdHVyZV9mbXRzW0NBTV9GT1JNQVRfTUFYXTsKCiAgICB1aW50OF90IG1heF9kb3duc2NhbGVfZmFjdG9yOwoKICAgIC8qIGRpbWVuc2lvbiBhbmQgc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQgb2YgcmF3IGR1bXAgZnJvbSBjYW1pZiAqLwogICAgc2l6ZV90IHN1cHBvcnRlZF9yYXdfZGltX2NudDsKICAgIGNhbV9kaW1lbnNpb25fdCByYXdfZGltW01BWF9TSVpFU19DTlRdOwogICAgc2l6ZV90IHN1cHBvcnRlZF9yYXdfZm10X2NudDsKICAgIGNhbV9mb3JtYXRfdCBzdXBwb3J0ZWRfcmF3X2ZtdHNbQ0FNX0ZPUk1BVF9NQVhdOwogICAgLyogVGhlIG1pbmltdW0gZnJhbWUgZHVyYXRpb24gdGhhdCBpcyBzdXBwb3J0ZWQgZm9yIGFib3ZlCiAgICAgICByYXcgcmVzb2x1dGlvbiAqLwogICAgaW50NjRfdCByYXdfbWluX2R1cmF0aW9uW01BWF9TSVpFU19DTlRdOwoKICAgIC8qIDNBIHZlcnNpb24qLwogICAgY2FtX3EzYV92ZXJzaW9uX3QgcTNhX3ZlcnNpb247CiAgICAvKiBzdXBwb3J0ZWQgZm9jdXMgYWxnb3JpdGhtcyAqLwogICAgc2l6ZV90IHN1cHBvcnRlZF9mb2N1c19hbGdvc19jbnQ7CiAgICBjYW1fZm9jdXNfYWxnb3JpdGhtX3R5cGUgc3VwcG9ydGVkX2ZvY3VzX2FsZ29zW0NBTV9GT0NVU19BTEdPX01BWF07CgoKICAgIHVpbnQ4X3QgYXV0b193Yl9sb2NrX3N1cHBvcnRlZDsgICAgICAgLyogZmxhZyBpZiBhdXRvIHdoaXRlIGJhbGFuY2UgbG9jayBpcyBzdXBwb3J0ZWQgKi8KICAgIHVpbnQ4X3Qgem9vbV9zdXBwb3J0ZWQ7ICAgICAgICAgICAgICAgLyogZmxhZyBpZiB6b29tIGlzIHN1cHBvcnRlZCAqLwogICAgdWludDhfdCBzbW9vdGhfem9vbV9zdXBwb3J0ZWQ7ICAgICAgICAvKiBmbGFnIGlmIHNtb290aCB6b29tIGlzIHN1cHBvcnRlZCAqLwogICAgdWludDhfdCBhdXRvX2V4cG9zdXJlX2xvY2tfc3VwcG9ydGVkOyAvKiBmbGFnIGlmIGF1dG8gZXhwb3N1cmUgbG9jayBpcyBzdXBwb3J0ZWQgKi8KICAgIHVpbnQ4X3QgdmlkZW9fc25hcHNob3Rfc3VwcG9ydGVkOyAgICAgLyogZmxhZyBpZiB2aWRlbyBzbmFwc2hvdCBpcyBzdXBwb3J0ZWQgKi8KCiAgICB1aW50OF90IG1heF9udW1fcm9pOyAgICAgICAgICAgICAgICAgIC8qIG1heCBudW1iZXIgb2Ygcm9pIGNhbiBiZSBkZXRlY3RlZCAqLwogICAgdWludDhfdCBtYXhfbnVtX2ZvY3VzX2FyZWFzOyAgICAgICAgICAvKiBtYXggbnVtIG9mIGZvY3VzIGFyZWFzICovCiAgICB1aW50OF90IG1heF9udW1fbWV0ZXJpbmdfYXJlYXM7ICAgICAgIC8qIG1heCBudW0gb3BmIG1ldGVyaW5nIGFyZWFzICovCiAgICB1aW50OF90IG1heF96b29tX3N0ZXA7ICAgICAgICAgICAgICAgIC8qIG1heCB6b29tIHN0ZXAgdmFsdWUgKi8KCiAgICAvKiBRQ09NIHNwZWNpZmljIGNvbnRyb2wgKi8KICAgIGNhbV9jb250cm9sX3JhbmdlX3QgYnJpZ2h0bmVzc19jdHJsOyAgLyogYnJpZ2h0bmVzcyAqLwogICAgY2FtX2NvbnRyb2xfcmFuZ2VfdCBzaGFycG5lc3NfY3RybDsgICAvKiBzaGFycG5lc3MgKi8KICAgIGNhbV9jb250cm9sX3JhbmdlX3QgY29udHJhc3RfY3RybDsgICAgLyogY29udHJhc3QgKi8KICAgIGNhbV9jb250cm9sX3JhbmdlX3Qgc2F0dXJhdGlvbl9jdHJsOyAgLyogc2F0dXJhdGlvbiAqLwogICAgY2FtX2NvbnRyb2xfcmFuZ2VfdCBzY2VfY3RybDsgICAgICAgICAvKiBza2ludG9uZSBlbmhhbmNlbWVudCBmYWN0b3IgKi8KCiAgICAvKiBRQ09NIEhEUiBzcGVjaWZpYyBjb250cm9sLiBJbmRpY2F0ZXMgbnVtYmVyIG9mIGZyYW1lcyBhbmQgZXhwb3N1cmUgbmVlZHMgZm9yIHRoZSBmcmFtZXMgKi8KICAgIGNhbV9oZHJfYnJhY2tldGluZ19pbmZvX3QgaGRyX2JyYWNrZXRpbmdfc2V0dGluZzsKCiAgICBjYW1fZmVhdHVyZV9tYXNrX3QgcWNvbV9zdXBwb3J0ZWRfZmVhdHVyZV9tYXNrOyAvKiBtYXNrIG9mIHFjb20gc3BlY2lmaWMgZmVhdHVyZXMgc3VwcG9ydGVkOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3VjaCBhcyBDQU1fUUNPTV9GRUFUVVJFX1NVUFBPUlRFRF9GQUNFX0RFVEVDVElPTiovCiAgICBjYW1fcGFkZGluZ19pbmZvX3QgcGFkZGluZ19pbmZvOyAgICAgIC8qIHBhZGRpbmcgaW5mb3JtYXRpb24gZnJvbSBQUCAqLwogICAgdWludDMyX3QgbWluX251bV9wcF9idWZzOyAgICAgICAgICAgICAvKiBtaW5pbXVtIG51bWJlciBvZiBidWZmZXJzIG5lZWRlZCBieSBwb3N0cHJvYyBtb2R1bGUgKi8KICAgIGNhbV9mb3JtYXRfdCByZGlfbW9kZV9zdHJlYW1fZm10OyAgLyogc3RyZWFtIGZvcm1hdCBzdXBwb3J0ZWQgaW4gcmRpIG1vZGUgKi8KCiAgICAvKiBjYXBhYmlsaXRpZXMgc3BlY2lmaWMgdG8gSEFMIDMgKi8KCiAgICBmbG9hdCBtaW5fZm9jdXNfZGlzdGFuY2U7CiAgICBmbG9hdCBoeXBlcl9mb2NhbF9kaXN0YW5jZTsKCiAgICBmbG9hdCBmb2NhbF9sZW5ndGhzW0NBTV9GT0NBTF9MRU5HVEhTX01BWF07CiAgICB1aW50OF90IGZvY2FsX2xlbmd0aHNfY291bnQ7CgogICAgLyogTmVlZHMgdG8gYmUgcmVndWxhciBmIG51bWJlciBpbnN0ZWFkIG9mIEFQRVggKi8KICAgIGZsb2F0IGFwZXJ0dXJlc1tDQU1fQVBFUlRVUkVTX01BWF07CiAgICB1aW50OF90IGFwZXJ0dXJlc19jb3VudDsKCiAgICBmbG9hdCBmaWx0ZXJfZGVuc2l0aWVzW0NBTV9GSUxURVJfREVOU0lUSUVTX01BWF07CiAgICB1aW50OF90IGZpbHRlcl9kZW5zaXRpZXNfY291bnQ7CgogICAgdWludDhfdCBvcHRpY2FsX3N0YWJfbW9kZXNbQ0FNX09QVF9TVEFCX01BWF07CiAgICB1aW50OF90IG9wdGljYWxfc3RhYl9tb2Rlc19jb3VudDsKCiAgICBjYW1fZGltZW5zaW9uX3QgbGVuc19zaGFkaW5nX21hcF9zaXplOwoKICAgIGNhbV9kaW1lbnNpb25fdCBnZW9fY29ycmVjdGlvbl9tYXBfc2l6ZTsKICAgIGZsb2F0IGdlb19jb3JyZWN0aW9uX21hcFsyICogMyAqIENBTV9NQVhfTUFQX1dJRFRIICoKICAgICAgICAgICAgICBDQU1fTUFYX01BUF9IRUlHSFRdOwoKICAgIGZsb2F0IGxlbnNfcG9zaXRpb25bM107CgogICAgLyogbmFubyBzZWNvbmRzICovCiAgICBpbnQ2NF90IGV4cG9zdXJlX3RpbWVfcmFuZ2VbRVhQT1NVUkVfVElNRV9SQU5HRV9DTlRdOwoKICAgIC8qIG5hbm8gc2Vjb25kcyAqLwogICAgaW50NjRfdCBtYXhfZnJhbWVfZHVyYXRpb247CgogICAgY2FtX2NvbG9yX2ZpbHRlcl9hcnJhbmdlbWVudF90IGNvbG9yX2FycmFuZ2VtZW50OwogICAgdWludDhfdCBudW1fY29sb3JfY2hhbm5lbHM7CgogICAgLyogcGFyYW1ldGVycyByZXF1aXJlZCB0byBjYWxjdWxhdGUgUyBhbmQgTyBjby1lZmZpY2llbnRzICovCiAgICBkb3VibGUgZ3JhZGllbnRfUzsKICAgIGRvdWJsZSBvZmZzZXRfUzsKICAgIGRvdWJsZSBncmFkaWVudF9POwogICAgZG91YmxlIG9mZnNldF9POwoKICAgIGZsb2F0IHNlbnNvcl9waHlzaWNhbF9zaXplW1NFTlNPUl9QSFlTSUNBTF9TSVpFX0NOVF07CgogICAgLyogRGltZW5zaW9ucyBvZiBmdWxsIHBpeGVsIGFycmF5LCBwb3NzaWJseSBpbmNsdWRpbmcKICAgICAgIGJsYWNrIGNhbGlicmF0aW9uIHBpeGVscyAqLwogICAgY2FtX2RpbWVuc2lvbl90IHBpeGVsX2FycmF5X3NpemU7CiAgICAvKiBBcmVhIG9mIHJhdyBkYXRhIHdoaWNoIGNvcnJlc3BvbmRzIHRvIG9ubHkgYWN0aXZlCiAgICAgICBwaXhlbHM7IHNtYWxsZXIgb3IgZXF1YWwgdG8gcGl4ZWxBcnJheVNpemUuICovCiAgICBjYW1fcmVjdF90IGFjdGl2ZV9hcnJheV9zaXplOwoKICAgIC8qIE1heGltdW0gcmF3IHZhbHVlIG91dHB1dCBieSBzZW5zb3IgKi8KICAgIGludDMyX3Qgd2hpdGVfbGV2ZWw7CgogICAgLyogQSBmaXhlZCBibGFjayBsZXZlbCBvZmZzZXQgZm9yIGVhY2ggb2YgdGhlIEJheWVyCiAgICAgICBtb3NhaWMgY2hhbm5lbHMgKi8KICAgIGludDMyX3QgYmxhY2tfbGV2ZWxfcGF0dGVybltCTEFDS19MRVZFTF9QQVRURVJOX0NOVF07CgogICAgLyogVGltZSB0YWtlbiBiZWZvcmUgZmxhc2ggY2FuIGZpcmUgYWdhaW4gaW4gbmFubyBzZWNzICovCiAgICBpbnQ2NF90IGZsYXNoX2NoYXJnZV9kdXJhdGlvbjsKCiAgICAvKiBmbGFzaCBmaXJpbmcgcG93ZXIgKi8KICAgIHNpemVfdCBzdXBwb3J0ZWRfZmxhc2hfZmlyaW5nX2xldmVsX2NudDsKICAgIGNhbV9mb3JtYXRfdCBzdXBwb3J0ZWRfZmlyaW5nX2xldmVsc1tDQU1fRkxBU0hfRklSSU5HX0xFVkVMX01BWF07CgogICAgLyogRmxhc2ggRmlyaW5nIFRpbWUgKi8KICAgIGludDY0X3QgZmxhc2hfZmlyaW5nX3RpbWU7CgogICAgLyogRmxhc2ggQ2lvbG9yIFRlbXBlcmF0dXJlICovCiAgICB1aW50OF90IGZsYXNoX2NvbG9yX3RlbXA7CgogICAgLyogRmxhc2ggbWF4IEVuZXJneSAqLwogICAgdWludDhfdCBmbGFzaF9tYXhfZW5lcmd5OwoKICAgIC8qIE1heGltdW0gbnVtYmVyIG9mIHN1cHBvcnRlZCBwb2ludHMgaW4gdGhlIHRvbmVtYXAKICAgICAgIGN1cnZlICovCiAgICBpbnQzMl90IG1heF90b25lX21hcF9jdXJ2ZV9wb2ludHM7CgogICAgLyogc3VwcG9ydGVkIGZvcm1hdHMgKi8KICAgIHNpemVfdCBzdXBwb3J0ZWRfc2NhbGFyX2Zvcm1hdF9jbnQ7CiAgICBjYW1fZm9ybWF0X3Qgc3VwcG9ydGVkX3NjYWxhcl9mbXRzW0NBTV9GT1JNQVRfTUFYXTsKCiAgICB1aW50MzJfdCBtYXhfZmFjZV9kZXRlY3Rpb25fY291bnQ7CgogICAgdWludDhfdCBoaXN0b2dyYW1fc3VwcG9ydGVkOwogICAgLyogTnVtYmVyIG9mIGhpc3RvZ3JhbSBidWNrZXRzIHN1cHBvcnRlZCAqLwogICAgaW50MzJfdCBoaXN0b2dyYW1fc2l6ZTsKICAgIC8qIE1heGltdW0gdmFsdWUgcG9zc2libGUgZm9yIGEgaGlzdG9ncmFtIGJ1Y2tldCAqLwogICAgaW50MzJfdCBtYXhfaGlzdG9ncmFtX2NvdW50OwoKICAgIGNhbV9kaW1lbnNpb25fdCBzaGFycG5lc3NfbWFwX3NpemU7CgogICAgLyogTWF4aW11bSB2YWx1ZSBwb3NzaWJsZSBmb3IgYSBzaGFycG5lc3MgbWFwIHJlZ2lvbiAqLwogICAgaW50MzJfdCBtYXhfc2hhcnBuZXNzX21hcF92YWx1ZTsKCiAgICAvKkF1dG9leHBvc3VyZSBtb2RlcyBmb3IgY2FtZXJhIDMgYXBpKi8KICAgIHNpemVfdCBzdXBwb3J0ZWRfYWVfbW9kZXNfY250OwogICAgY2FtX2FlX21vZGVfdHlwZSBzdXBwb3J0ZWRfYWVfbW9kZXNbQ0FNX0FFX01PREVfTUFYXTsKCgogICAgY2FtX3NlbnNpdGl2aXR5X3JhbmdlX3Qgc2Vuc2l0aXZpdHlfcmFuZ2U7CiAgICBpbnQzMl90IG1heF9hbmFsb2dfc2Vuc2l0aXZpdHk7CgogICAgLyogSVNQIGRpZ2l0YWwgZ2FpbiAqLwogICAgY2FtX3NlbnNpdGl2aXR5X3JhbmdlX3QgaXNwX3NlbnNpdGl2aXR5X3JhbmdlOwoKICAgIC8qIHBpY3R1cmUgc2l6ZXMgbmVlZCBzY2FsZSovCiAgICBjYW1fc2NlbmVfbW9kZV9vdmVycmlkZXNfdCBzY2VuZV9tb2RlX292ZXJyaWRlc1tDQU1fU0NFTkVfTU9ERV9NQVhdOwogICAgc2l6ZV90IHNjYWxlX3BpY3R1cmVfc2l6ZXNfY250OwogICAgY2FtX2RpbWVuc2lvbl90IHNjYWxlX3BpY3R1cmVfc2l6ZXNbTUFYX1NDQUxFX1NJWkVTX0NOVF07CgogICAgdWludDhfdCBmbGFzaF9hdmFpbGFibGU7CgogICAgY2FtX3JhdGlvbmFsX3R5cGVfdCBiYXNlX2dhaW5fZmFjdG9yOyAgICAvKiBzZW5zb3IgYmFzZSBnYWluIGZhY3RvciAqLwogICAgLyogQUYgQnJhY2tldGluZyBpbmZvICovCiAgICBjYW1fYWZfYnJhY2tldGluZ190ICB1Ymlmb2N1c19hZl9icmFja2V0aW5nX25lZWQ7CiAgICBjYW1fYWZfYnJhY2tldGluZ190ICByZWZvY3VzX2FmX2JyYWNrZXRpbmdfbmVlZDsKICAgIC8qIG9wdGkgWm9vbSBpbmZvICovCiAgICBjYW1fb3B0aV96b29tX3QgICAgICBvcHRpX3pvb21fc2V0dGluZ3NfbmVlZDsKICAgIC8qIHN0aWxsIG1vcmUgaW5mbyAqLwogICAgY2FtX3N0aWxsX21vcmVfdCAgc3RpbGxtb3JlX3NldHRpbmdzX25lZWQ7CiAgICAvKiBjaHJvbWEgZmxhc2ggaW5mbyAqLwogICAgY2FtX2Nocm9tYV9mbGFzaF90IGNocm9tYV9mbGFzaF9zZXR0aW5nc19uZWVkOwoKICAgIGNhbV9yYXRpb25hbF90eXBlX3QgZm9yd2FyZF9tYXRyaXhbM11bM107CiAgICBjYW1fcmF0aW9uYWxfdHlwZV90IGNvbG9yX3RyYW5zZm9ybVszXVszXTsKCiAgICB1aW50OF90IGZvY3VzX2Rpc3RfY2FsaWJyYXRlZDsKICAgIHVpbnQ4X3Qgc3VwcG9ydGVkX3Rlc3RfcGF0dGVybl9tb2Rlc19jbnQ7CiAgICBjYW1fdGVzdF9wYXR0ZXJuX21vZGVfdCBzdXBwb3J0ZWRfdGVzdF9wYXR0ZXJuX21vZGVzW01BWF9URVNUX1BBVFRFUk5fQ05UXTsKCiAgICBpbnQ2NF90IHN0YWxsX2R1cmF0aW9uc1tNQVhfU0laRVNfQ05UXTsKCiAgICBjYW1faWxsdW1pbmF0X3QgcmVmZXJlbmNlX2lsbHVtaW5hbnQxOwogICAgY2FtX2lsbHVtaW5hdF90IHJlZmVyZW5jZV9pbGx1bWluYW50MjsKCiAgICBpbnQ2NF90IGpwZWdfc3RhbGxfZHVyYXRpb25zW01BWF9TSVpFU19DTlRdOwogICAgaW50NjRfdCByYXcxNl9zdGFsbF9kdXJhdGlvbnNbTUFYX1NJWkVTX0NOVF07CiAgICBjYW1fcmF0aW9uYWxfdHlwZV90IGZvcndhcmRfbWF0cml4MVtGT1JXQVJEX01BVFJJWF9ST1dTXVtGT1JXQVJEX01BVFJJWF9DT0xTXTsKICAgIGNhbV9yYXRpb25hbF90eXBlX3QgZm9yd2FyZF9tYXRyaXgyW0ZPUldBUkRfTUFUUklYX1JPV1NdW0ZPUldBUkRfTUFUUklYX0NPTFNdOwogICAgY2FtX3JhdGlvbmFsX3R5cGVfdCBjb2xvcl90cmFuc2Zvcm0xW0NPTE9SX1RSQU5TRk9STV9ST1dTXVtDT0xPUl9UUkFOU0ZPUk1fQ09MU107CiAgICBjYW1fcmF0aW9uYWxfdHlwZV90IGNvbG9yX3RyYW5zZm9ybTJbQ09MT1JfVFJBTlNGT1JNX1JPV1NdW0NPTE9SX1RSQU5TRk9STV9DT0xTXTsKICAgIGNhbV9yYXRpb25hbF90eXBlX3QgY2FsaWJyYXRpb25fdHJhbnNmb3JtMVtDQUxfVFJBTlNGT1JNX1JPV1NdW0NBTF9UUkFOU0ZPUk1fQ09MU107CiAgICBjYW1fcmF0aW9uYWxfdHlwZV90IGNhbGlicmF0aW9uX3RyYW5zZm9ybTJbQ0FMX1RSQU5TRk9STV9ST1dTXVtDQUxfVFJBTlNGT1JNX0NPTFNdOwogICAgdWludDE2X3QgaXNDYWNTdXBwb3J0ZWQ7CgogICAgY2FtX29wYXF1ZV9yYXdfZm9ybWF0X3Qgb3BhcXVlX3Jhd19mbXQ7CgogICAgLyogdHJ1ZSBQb3J0cmFpdCBpbmZvICovCiAgICBjYW1fdHJ1ZV9wb3J0cmFpdF90ICB0cnVlX3BvcnRyYWl0X3NldHRpbmdzX25lZWQ7CgogICAgLyogU2Vuc29yIHR5cGUgaW5mb3JtYXRpb24gKi8KICAgIGNhbV9zZW5zb3JfdHlwZV90IHNlbnNvcl90eXBlOwoKICAgIGNhbV9hYmVycmF0aW9uX21vZGVfdCBhYmVycmF0aW9uX21vZGVzW0NBTV9DT0xPUl9DT1JSRUNUSU9OX0FCRVJSQVRJT05fTUFYXTsKICAgIHVpbnQzMl90IGFiZXJyYXRpb25fbW9kZXNfY291bnQ7CgogICAgLyogQ2FuIHRoZSBzZW5zb3IgdGltZXN0YW1wIGJlIGNvbXBhcmVkIHRvCiAgICAgKiB0aW1lc3RhbXBzIGZyb20gb3RoZXIgc3ViLXN5c3RlbXMgKGd5cm8sIGFjY2VsZXJvbWV0ZXIgZXRjLikgKi8KICAgIHVpbnQ4X3QgaXNUaW1lc3RhbXBDYWxpYnJhdGVkOwoKICAgIC8qIE1heCBzaXplIHN1cHBvcnRlZCBieSBJU1Agdmlld2ZpbmRlciBwYXRoICovCiAgICBjYW1fZGltZW5zaW9uX3QgbWF4X3ZpZXdmaW5kZXJfc2l6ZTsKCiAgICAvKiBBbmFseXNpcyBidWZmZXIgcmVxdWlyZW1lbnRzICovCiAgICBjYW1fYW5hbHlzaXNfaW5mb190IGFuYWx5c2lzX2luZm9bQ0FNX0FOQUxZU0lTX0lORk9fTUFYXTsKCiAgICAvKiBUaGlzIGlzIHNldCB0byAndHJ1ZScgaWYgc2Vuc29yIGNhbm5vdCBndWFyYW50ZWUgcGVyIGZyYW1lIGNvbnRyb2wgKi8KICAgIC8qIERlZmF1bHQgdmFsdWUgb2YgdGhpcyBjYXBhYmlsaXR5IGlzICdmYWxzZScgaW5kaWNhdGluZyBwZXItZnJhbWUgKi8KICAgIC8qIGNvbnRyb2wgaXMgc3VwcG9ydGVkICovCiAgICB1aW50OF90IG5vX3Blcl9mcmFtZV9jb250cm9sX3N1cHBvcnQ7CgogICAgLyogRUlTIGluZm9ybWF0aW9uICovCiAgICB1aW50OF90IHN1cHBvcnRlZF9pc190eXBlc19jbnQ7CiAgICB1aW50MzJfdCBzdXBwb3J0ZWRfaXNfdHlwZXNbSVNfVFlQRV9NQVhdOwogICAgLypmb3IgZWFjaCB0eXBlLCBzcGVjaWZ5IHRoZSBtYXJnaW4gbmVlZGVkLiBNYXJnaW4gd2lsbCBiZQogICAgICB0aGUgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBhIHBlcmNlbnRhZ2UKICAgICAgZXg6IDEwJSBtYXJnaW4gPSAwLjEgKi8KICAgIGZsb2F0IHN1cHBvcnRlZF9pc190eXBlX21hcmdpbnNbSVNfVFlQRV9NQVhdOwoKICAgIC8qIE1heCBjcHAgYmF0Y2ggc2l6ZSAqLwogICAgdWludDhfdCBtYXhfYmF0Y2hfYnVmc19zdXBwb3J0ZWQ7CiAgICB1aW50MzJfdCBidWZfYWxpZ25tZW50OwogICAgdWludDMyX3QgbWluX3N0cmlkZTsKICAgIHVpbnQzMl90IG1pbl9zY2FubGluZTsKICAgIHVpbnQ4X3QgZmxhc2hfZGV2X25hbWVbUUNBTUVSQV9NQVhfRklMRVBBVEhfTEVOR1RIXTsKICAgIHVpbnQ4X3QgZWVwcm9tX3ZlcnNpb25faW5mb1tNQVhfRUVQUk9NX1ZFUlNJT05fSU5GT19MRU5dOwoKICAgIC8qIG1heGltdW0gcGl4ZWwgYmFuZHdpZHRoIHNoYXJlZCBiZXR3ZWVuIGNhbWVyYXMgKi8KICAgIHVpbnQ2NF90IG1heF9waXhlbF9iYW5kd2lkdGg7CgogICAgLyogQXJyYXkgb2YgSyBpbnRlZ2Vycywgd2hlcmUgSyU0PT0wLAogICAgICBhcyBhIGxpc3Qgb2YgcmVjdGFuZ2xlcyBpbiB0aGUgcGl4ZWxBcnJheSBjby1vcmQgc3lzdGVtCiAgICAgIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSAqLwogICAgaW50MzJfdCBvcHRpY2FsX2JsYWNrX3JlZ2lvbnNbTUFYX09QVElDQUxfQkxBQ0tfUkVHSU9OUyAqIDRdOwogICAgLyogQ291bnQgaXMgSy80ICovCiAgICB1aW50OF90IG9wdGljYWxfYmxhY2tfcmVnaW9uX2NvdW50OwoKICAgIC8qIGhvdCBwaXhlbCAqLwogICAgdWludDhfdCBob3RQaXhlbF9tb2RlOwogICAgdWludDMyX3QgaG90UGl4ZWxfY291bnQ7CiAgICBjYW1fY29vcmRpbmF0ZV90eXBlX3QgaG90UGl4ZWxNYXBbNTEyXTsKCiAgICAvKiBzdXBwb3J0ZWQgaW5zdGFudCBjYXB0dXJlL0FFQyBjb252ZXJnZW5jZSBtb2RlcyAqLwogICAgc2l6ZV90IHN1cHBvcnRlZF9pbnN0YW50X2FlY19tb2Rlc19jbnQ7CiAgICBjYW1fYWVjX2NvbnZlcmdlbmNlX3R5cGUgc3VwcG9ydGVkX2luc3RhbnRfYWVjX21vZGVzW0NBTV9BRUNfQ09OVkVSR0VOQ0VfTUFYXTsKCiAgICAvKiBEdWFsIGNhbSBjYWxpYnJhdGlvbiBkYXRhICovCiAgICBjYW1fcmVsYXRlZF9zeXN0ZW1fY2FsaWJyYXRpb25fZGF0YV90IHJlbGF0ZWRfY2FtX2NhbGlicmF0aW9uOwoKICAgIC8qIE1ldGFfUkFXIGNhcGFiaWxpdHkgKi8KICAgIHVpbnQ4X3QgbWV0YV9yYXdfY2hhbm5lbF9jb3VudDsKICAgIHVpbnQ4X3QgdmNbTUFYX1NJWkVTX0NOVF07CiAgICB1aW50OF90IGR0W01BWF9TSVpFU19DTlRdOwogICAgY2FtX2Zvcm1hdF90IHN1cHBvcnRlZF9tZXRhX3Jhd19mbXRzW0NBTV9GT1JNQVRfTUFYXTsKICAgIGNhbV9kaW1lbnNpb25fdCByYXdfbWV0YV9kaW1bTUFYX1NJWkVTX0NOVF07CiAgICBjYW1fc3ViX2Zvcm1hdF90eXBlX3Qgc3ViX2ZtdFtDQU1fRk9STUFUX1NVQlRZUEVfTUFYXTsKICAgIC8qIFN1cHBvcnRlZCBJUiBNb2RlICovCiAgICBzaXplX3Qgc3VwcG9ydGVkX2lyX21vZGVfY250OwogICAgY2FtX2lyX21vZGVfdHlwZV90IHN1cHBvcnRlZF9pcl9tb2Rlc1tDQU1fSVJfTU9ERV9NQVhdOwoKICAgIC8qU2xhdmUgY2FwYWJpbGl0eSovCiAgICBzdHJ1Y3QgY2FtX2NhcGFiaWxpdHkgKmF1eF9jYW1fY2FwOwogICAgY2FtX3N5bmNfdHlwZV90IGNhbV9zZW5zb3JfbW9kZTsKfSBjYW1fY2FwYWJpbGl0eV90OwoKdHlwZWRlZiBlbnVtIHsKICAgIENBTV9TVFJFQU1fUEFSQU1fVFlQRV9ET19SRVBST0NFU1MgPSBDQU1fSU5URl9QQVJNX0RPX1JFUFJPQ0VTUywKICAgIENBTV9TVFJFQU1fUEFSQU1fVFlQRV9TRVRfQlVORExFX0lORk8gPSBDQU1fSU5URl9QQVJNX1NFVF9CVU5ETEUsCiAgICBDQU1fU1RSRUFNX1BBUkFNX1RZUEVfU0VUX0ZMSVAgPSBDQU1fSU5URl9QQVJNX1NUUkVBTV9GTElQLAogICAgQ0FNX1NUUkVBTV9QQVJBTV9UWVBFX0dFVF9PVVRQVVRfQ1JPUCA9IENBTV9JTlRGX1BBUk1fR0VUX09VVFBVVF9DUk9QLAogICAgQ0FNX1NUUkVBTV9QQVJBTV9UWVBFX0dFVF9JTUdfUFJPUCA9IENBTV9JTlRGX1BBUk1fR0VUX0lNR19QUk9QLAogICAgQ0FNX1NUUkVBTV9QQVJBTV9UWVBFX1JFUVVFU1RfRlJBTUVTID0gQ0FNX0lOVEZfUEFSTV9SRVFVRVNUX0ZSQU1FUywKICAgIENBTV9TVFJFQU1fUEFSQU1fVFlQRV9SRVFVRVNUX09QU19NT0RFID0gQ0FNX0lOVEZfUEFSTV9SRVFVRVNUX09QU19NT0RFLAogICAgQ0FNX1NUUkVBTV9QQVJBTV9UWVBFX01BWAp9IGNhbV9zdHJlYW1fcGFyYW1fdHlwZV9lOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgdWludDMyX3QgYnVmX2luZGV4OyAgICAgICAgICAgLyogYnVmIGluZGV4IHRvIHRoZSBzb3VyY2UgZnJhbWUgYnVmZmVyIHRoYXQgbmVlZHMgcmVwcm9jZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXNzdW1lIGJ1ZmZlciBpcyBhbHJlYWR5IG1hcHBlZCkqLwogICAgdWludDMyX3QgZnJhbWVfaWR4OyAgICAgICAgICAgLyogZnJhbWUgaWQgb2Ygc291cmNlIGZyYW1lIHRvIGJlIHJlcHJvY2Vzc2VkICovCiAgICBpbnQzMl90IHJldF92YWw7ICAgICAgICAgICAgICAvKiByZXR1cm4gdmFsdWUgZnJvbSByZXByb2Nlc3MuIENvdWxkIGhhdmUgZGlmZmVyZW50IG1lYW5pbmdzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaS5lLiwgZmFjZUlEIGluIHRoZSBjYXNlIG9mIGZhY2UgcmVnaXN0cmF0aW9uLiAqLwogICAgdWludDhfdCBtZXRhX3ByZXNlbnQ7ICAgICAgICAgLyogaWYgdGhlcmUgaXMgbWV0YSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcHJvY2VzcyBmcmFtZSAqLwogICAgdWludDMyX3QgbWV0YV9zdHJlYW1faGFuZGxlOyAgLyogbWV0YSBkYXRhIHN0cmVhbSBJRC4gb25seSB2YWxpZCBpZiBtZXRhX3ByZXNlbnQgIT0gMCAqLwogICAgdWludDMyX3QgbWV0YV9idWZfaW5kZXg7ICAgICAgLyogYnVmIGluZGV4IHRvIG1ldGEgZGF0YSBidWZmZXIuIG9ubHkgdmFsaWQgaWYgbWV0YV9wcmVzZW50ICE9IDAgKi8KCiAgICAvKiBvcGFxdWUgbWV0YWRhdGEgcmVxdWlyZWQgZm9yIHJlcHJvY2Vzc2luZyAqLwogICAgaW50MzJfdCBwcml2YXRlX2RhdGFbTUFYX01FVEFEQVRBX1BSSVZBVEVfUEFZTE9BRF9TSVpFX0lOX0JZVEVTXTsKICAgIGNhbV9yZWN0X3QgY3JvcF9yZWN0Owp9IGNhbV9yZXByb2Nlc3NfcGFyYW07Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICB1aW50MzJfdCBmbGlwX21hc2s7Cn0gY2FtX2ZsaXBfbW9kZV90OwoKI2RlZmluZSBJTUdfTkFNRV9TSVpFIDMyCnR5cGVkZWYgc3RydWN0IHsKICAgIGNhbV9yZWN0X3QgY3JvcDsgIC8qIGNyb3AgaW5mbyBmb3IgdGhlIGltYWdlICovCiAgICBjYW1fZGltZW5zaW9uX3QgaW5wdXQ7IC8qIGlucHV0IGRpbWVuc2lvbiBvZiB0aGUgaW1hZ2UgKi8KICAgIGNhbV9kaW1lbnNpb25fdCBvdXRwdXQ7IC8qIG91dHB1dCBkaW1lbnNpb24gb2YgdGhlIGltYWdlICovCiAgICBjaGFyIG5hbWVbSU1HX05BTUVfU0laRV07IC8qIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dCovCiAgICBjYW1fZm9ybWF0X3QgZm9ybWF0OyAvKiBpbWFnZSBmb3JtYXQgKi8KfSBjYW1fc3RyZWFtX2ltZ19wcm9wX3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICB1aW50OF90IGVuYWJsZVN0cmVhbTsgLyowIJYgc3RvcCBhbmQgMS1zdGFydCAqLwp9IGNhbV9yZXF1ZXN0X2ZyYW1lczsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGNhbV9zdHJlYW1fcGFyYW1fdHlwZV9lIHR5cGU7CiAgICB1bmlvbiB7CiAgICAgICAgY2FtX3JlcHJvY2Vzc19wYXJhbSByZXByb2Nlc3M7ICAvKiBkbyByZXByb2Nlc3MgKi8KICAgICAgICBjYW1fYnVuZGxlX2NvbmZpZ190IGJ1bmRsZUluZm87IC8qIHNldCBidW5kbGUgaW5mbyovCiAgICAgICAgY2FtX2ZsaXBfbW9kZV90IGZsaXBJbmZvOyAgICAgICAvKiBmbGlwIG1vZGUgKi8KICAgICAgICBjYW1fY3JvcF9kYXRhX3Qgb3V0cHV0Q3JvcDsgICAgIC8qIG91dHB1dCBjcm9wIGZvciBjdXJyZW50IGZyYW1lICovCiAgICAgICAgY2FtX3N0cmVhbV9pbWdfcHJvcF90IGltZ1Byb3A7ICAvKiBpbWFnZSBwcm9wZXJ0aWVzIG9mIGN1cnJlbnQgZnJhbWUgKi8KICAgICAgICBjYW1fcmVxdWVzdF9mcmFtZXMgZnJhbWVSZXF1ZXN0OyAvKmRvIFROUiBwcm9jZXNzKi8KICAgICAgICBjYW1fcGVyZl9tb2RlX3QgcGVyZl9tb2RlOyAgICAgICAvKnJlcXVlc3Qgb3BlcmF0aW9uYWwgbW9kZSovCiAgICB9Owp9IGNhbV9zdHJlYW1fcGFybV9idWZmZXJfdDsKCi8qIHN0cmVhbSBpbmZvICovCnR5cGVkZWYgc3RydWN0IGNhbV9zdHJlYW1faW5mbyB7CiAgICAvKiBzdHJlYW0gSUQgZnJvbSBzZXJ2ZXIgKi8KICAgIHVpbnQzMl90IHN0cmVhbV9zdnJfaWQ7CgogICAgLyogc3RyZWFtIHR5cGUgKi8KICAgIGNhbV9zdHJlYW1fdHlwZV90IHN0cmVhbV90eXBlOwoKICAgIC8qIGltYWdlIGZvcm1hdCAqLwogICAgY2FtX2Zvcm1hdF90IGZtdDsKCiAgICAvKiBpbWFnZSBkaW1lbnNpb24gKi8KICAgIGNhbV9kaW1lbnNpb25fdCBkaW07CgogICAgLyogYnVmZmVyIHBsYW5lIGluZm9ybWF0aW9uLCB3aWxsIGJlIGNhbGMgYmFzZWQgb24gc3RyZWFtX3R5cGUsIGZtdCwKICAgICAgIGRpbSwgYW5kIHBhZGRpbmdfaW5mbyhmcm9tIHN0cmVhbSBjb25maWcpLiBJbmZvIGluY2x1ZGluZzoKICAgICAgIG9mZnNldF94LCBvZmZzZXRfeSwgc3RyaWRlLCBzY2FubGluZSwgcGxhbmUgb2Zmc2V0ICovCiAgICBjYW1fc3RyZWFtX2J1Zl9wbGFuZV9pbmZvX3QgYnVmX3BsYW5lczsKCiAgICAvKiBudW1iZXIgb2Ygc3RyZWFtIGJ1ZnMgd2lsbCBiZSBhbGxvY2F0ZWQgKi8KICAgIHVpbnQzMl90IG51bV9idWZzOwoKICAgIC8qIG51bWJlciBvZiBzdHJlYW0gYnVmcyBhbGxvY2F0ZWQgZm9yIHRoaXMgc3RyZWFtKi8KICAgIHVpbnQzMl90IGJ1Zl9jbnQ7CgogICAgLyogc3RyZWFtaW5nIHR5cGUgKi8KICAgIGNhbV9zdHJlYW1pbmdfbW9kZV90IHN0cmVhbWluZ19tb2RlOwoKICAgIC8qIG51bSBvZiBmcmFtZXMgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkLgogICAgICogb25seSB2YWxpZCB3aGVuIHN0cmVhbWluZ19tb2RlID0gQ0FNX1NUUkVBTUlOR19NT0RFX0JVUlNUICovCiAgICB1aW50OF90IG51bV9vZl9idXJzdDsKCiAgICAvKiBudW0gb2YgZnJhbWVzIGluIG9uZSBiYXRjaC4KICAgICAqIG9ubHkgdmFsaWQgd2hlbiBzdHJlYW1pbmdfbW9kZSA9IENBTV9TVFJFQU1JTkdfTU9ERV9CQVRDSCAqLwogICAgY2FtX3N0cmVhbV91c2VyX2J1Zl9pbmZvX3QgdXNlcl9idWZfaW5mbzsKCiAgICAvKiBzdHJlYW0gc3BlY2lmaWMgcHAgY29uZmlnICovCiAgICBjYW1fcHBfZmVhdHVyZV9jb25maWdfdCBwcF9jb25maWc7CgogICAgLyogdGhpcyBzZWN0aW9uIGlzIHZhbGlkIGlmIG9mZmxpbmUgcmVwcm9jZXNzIHR5cGUgc3RyZWFtICovCiAgICBjYW1fc3RyZWFtX3JlcHJvY19jb25maWdfdCByZXByb2Nlc3NfY29uZmlnOwoKICAgIGNhbV9zdHJlYW1fcGFybV9idWZmZXJfdCBwYXJtX2J1ZjsgICAgLyogc3RyZWFtIGJhc2VkIHBhcmFtZXRlcnMgKi8KCiAgICB1aW50OF90IGRpc19lbmFibGU7CgogICAgLyogSW1hZ2UgU3RhYmlsaXphdGlvbiB0eXBlICovCiAgICBjYW1faXNfdHlwZV90IGlzX3R5cGU7CgogICAgLyogU2lnbmlmaWVzIFNlY3VyZSBzdHJlYW0gbW9kZSAqLwogICAgY2FtX3N0cmVhbV9zZWN1cmVfdCBpc19zZWN1cmU7CgogICAgLyogUHJlZmVycmVkIFBlcmZvcm1hbmNlIG1vZGUgKi8KICAgIGNhbV9wZXJmX21vZGVfdCBwZXJmX21vZGU7CgogICAgLyogaWYgZnJhbWVzIHdpbGwgbm90IGJlIHJlY2VpdmVkICovCiAgICB1aW50OF90IG5vRnJhbWVFeHBlY3RlZDsKCiAgICAvKiBEVCBmb3IgdGhpcyBzdHJlYW0gKi8KICAgIGludDMyX3QgZHQ7CgogICAgLyogVkMgZm9yIHRoaXMgc3RyZWFtICovCiAgICBpbnQzMl90IHZjOwoKICAgLyogU3ViZm9ybWF0IGZvciB0aGlzIHN0cmVhbSAqLwogICAgY2FtX3N1Yl9mb3JtYXRfdHlwZV90IHN1Yl9mb3JtYXRfdHlwZTsKCiAgICAvKlN0cmVhbSBpbmZvIGZvciBTbGF2ZSBTdHJlYW0qLwogICAgc3RydWN0IGNhbV9zdHJlYW1faW5mbyAqYXV4X3N0cl9pbmZvOwp9IGNhbV9zdHJlYW1faW5mb190OwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICAgICAgICBDb2RlIGZvciBEb21haW4gU29ja2V0IEJhc2VkIFBhcmFtZXRlcnMgICAgICAgICAgICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2RlZmluZSBJTkNMVURFKFBBUkFNX0lELERBVEFUWVBFLENPVU5UKSAgXAogICAgICAgIERBVEFUWVBFIG1lbWJlcl92YXJpYWJsZV8jI1BBUkFNX0lEWyBDT1VOVCBdCgojZGVmaW5lIFBPSU5URVJfT0ZfTUVUQShNRVRBX0lELCBUQUJMRV9QVFIpIFwKICAgICAgICAoKE5VTEwgIT0gVEFCTEVfUFRSKSA/IFwKICAgICAgICAgICAgKCZUQUJMRV9QVFItPmRhdGEubWVtYmVyX3ZhcmlhYmxlXyMjTUVUQV9JRFsgMCBdKSA6IChOVUxMKSkKCiNkZWZpbmUgU0laRV9PRl9QQVJBTShNRVRBX0lELCBUQUJMRV9QVFIpIFwKICAgICAgICBzaXplb2YoVEFCTEVfUFRSLT5kYXRhLm1lbWJlcl92YXJpYWJsZV8jI01FVEFfSUQpCgojZGVmaW5lIElGX01FVEFfQVZBSUxBQkxFKE1FVEFfVFlQRSwgTUVUQV9QVFJfTkFNRSwgTUVUQV9JRCwgVEFCTEVfUFRSKSBcCiAgICAgICAgTUVUQV9UWVBFICpNRVRBX1BUUl9OQU1FID0gXAogICAgICAgICgoKE5VTEwgIT0gVEFCTEVfUFRSKSAmJiAoVEFCTEVfUFRSLT5pc192YWxpZFtNRVRBX0lEXSkpID8gXAogICAgICAgICAgICAoJlRBQkxFX1BUUi0+ZGF0YS5tZW1iZXJfdmFyaWFibGVfIyNNRVRBX0lEWyAwIF0pIDogXAogICAgICAgICAgICAoTlVMTCkpOyBcCiAgICAgICAgaWYgKE5VTEwgIT0gTUVUQV9QVFJfTkFNRSkgXAoKI2RlZmluZSBBRERfU0VUX1BBUkFNX0VOVFJZX1RPX0JBVENIKFRBQkxFX1BUUiwgTUVUQV9JRCwgREFUQSkgXAogICAgKChOVUxMICE9IFRBQkxFX1BUUikgPyBcCiAgICAoKFRBQkxFX1BUUi0+ZGF0YS5tZW1iZXJfdmFyaWFibGVfIyNNRVRBX0lEWyAwIF0gPSBEQVRBKSwgXAogICAgKFRBQkxFX1BUUi0+aXNfdmFsaWRbTUVUQV9JRF0gPSAxKSwgKDApKSA6IFwKICAgICgoTE9HRSgiVW5hYmxlIHRvIHNldCBtZXRhZGF0YSBUQUJMRV9QVFI6JXAgTUVUQV9JRDolZCIsIFwKICAgICAgICAgICAgVEFCTEVfUFRSLCBNRVRBX0lEKSksICgtMSkpKSBcCgojZGVmaW5lIEFERF9TRVRfUEFSQU1fRU5UUllfVE9fQkFUQ0hfRk9SX0FVWChUQUJMRV9QVFIsIEFVWF9UQUJMRV9QVFIsIE1FVEFfSUQpIFwKICAgICgoTlVMTCAhPSBUQUJMRV9QVFIgfHwgKE5VTEwgIT0gQVVYX1RBQkxFX1BUUikpID8gXAogICAgKChBVVhfVEFCTEVfUFRSLT5kYXRhLm1lbWJlcl92YXJpYWJsZV8jI01FVEFfSURbIDAgXSA9IFRBQkxFX1BUUi0+ZGF0YS5tZW1iZXJfdmFyaWFibGVfIyNNRVRBX0lEWyAwIF0pLCBcCiAgICAoQVVYX1RBQkxFX1BUUi0+aXNfdmFsaWRbTUVUQV9JRF0gPSAxKSwgKDApKSA6IFwKICAgICgoTE9HRSgiVW5hYmxlIHRvIHNldCBtZXRhZGF0YSBBVVhfVEFCTEVfUFRSOiVwIE1FVEFfSUQ6JWQiLCBcCiAgICAgICAgICAgIEFVWF9UQUJMRV9QVFIsIE1FVEFfSUQpKSwgKC0xKSkpIFwKCiNkZWZpbmUgQUREX1NFVF9QQVJBTV9BUlJBWV9UT19CQVRDSChUQUJMRV9QVFIsIE1FVEFfSUQsIFBEQVRBLCBDT1VOVCwgUkNPVU5UKSBcCnsgXAogICAgaWYgKChOVUxMICE9IFRBQkxFX1BUUikgJiYgXAogICAgICAgICAgICAoMCA8IENPVU5UKSAmJiBcCiAgICAgICAgICAgICgoc2l6ZW9mKFRBQkxFX1BUUi0+ZGF0YS5tZW1iZXJfdmFyaWFibGVfIyNNRVRBX0lEKSAvIFwKICAgICAgICAgICAgc2l6ZW9mKFRBQkxFX1BUUi0+ZGF0YS5tZW1iZXJfdmFyaWFibGVfIyNNRVRBX0lEWyAwIF0pKSBcCiAgICAgICAgICAgID49IENPVU5UKSkgIHsgXAogICAgICAgIGZvciAoc2l6ZV90IF9pID0gMDsgX2kgPCBDT1VOVCA7IF9pKyspIHsgXAogICAgICAgICAgICBUQUJMRV9QVFItPmRhdGEubWVtYmVyX3ZhcmlhYmxlXyMjTUVUQV9JRFsgX2kgXSA9IFBEQVRBIFsgX2kgXTsgXAogICAgICAgIH0gXAogICAgICAgIFRBQkxFX1BUUi0+aXNfdmFsaWRbTUVUQV9JRF0gPSAxOyBcCiAgICAgICAgUkNPVU5UID0gQ09VTlQ7IFwKICAgIH0gZWxzZSB7IFwKICAgICAgICBMT0dFKCJVbmFibGUgdG8gc2V0IG1ldGFkYXRhIFRBQkxFX1BUUjolcCBNRVRBX0lEOiVkIENPVU5UOiV6dSIsIFwKICAgICAgICAgICAgICBUQUJMRV9QVFIsIE1FVEFfSUQsIENPVU5UKTsgXAogICAgICAgIFJDT1VOVCA9IDA7IFwKICAgIH0gXAp9CgojZGVmaW5lIEFERF9HRVRfUEFSQU1fRU5UUllfVE9fQkFUQ0goVEFCTEVfUFRSLCBNRVRBX0lEKSBcCnsgXAogICAgaWYgKE5VTEwgIT0gVEFCTEVfUFRSKSB7IFwKICAgICAgICBUQUJMRV9QVFItPmlzX3JlcWRbTUVUQV9JRF0gPSAxOyBcCiAgICB9IGVsc2UgeyBcCiAgICAgICAgTE9HRSgiVW5hYmxlIHRvIGdldCBtZXRhZGF0YSBUQUJMRV9QVFI6JXAgTUVUQV9JRDolZCIsIFwKICAgICAgICAgICAgICAgICAgVEFCTEVfUFRSLCBNRVRBX0lEKTsgXAogICAgfSBcCn0KCiNkZWZpbmUgUkVBRF9QQVJBTV9FTlRSWShUQUJMRV9QVFIsIE1FVEFfSUQsIERBVEEpIFwKeyBcCiAgICBpZiAoTlVMTCAhPSBUQUJMRV9QVFIpIHsgXAogICAgICAgIERBVEEgPSBUQUJMRV9QVFItPmRhdGEubWVtYmVyX3ZhcmlhYmxlXyMjTUVUQV9JRFsgMCBdOyBcCiAgICB9IGVsc2UgeyBcCiAgICAgICAgTE9HRSgiVW5hYmxlIHRvIHJlYWQgbWV0YWRhdGEgVEFCTEVfUFRSOiVwIE1FVEFfSUQ6JWQiLCBcCiAgICAgICAgICAgICAgICAgIFRBQkxFX1BUUiwgTUVUQV9JRCk7IFwKICAgIH0gXAp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogQ3VzdG9tIHBhcmFtZXRlciBkYXRhIGRlZmluaXRpb24KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdHlwZWRlZiBzdHJ1Y3QgewogICAgLypDQU1fQ1VTVE9NX1BBUk1fRVhBTVBMRSBpcyBhZGRlZCB0byBleHBsYWluIGN1c3RvbSBwYXJhbSBwcm9jZWR1cmUqLwogICAgSU5DTFVERShDQU1fQ1VTVE9NX1BBUk1fRVhBTVBMRSwgICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgMSk7Cn0gY3VzdG9tX3Bhcm1fZGF0YV90OwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEN1c3RvbSBQYXJhbWV0ZXIgYnVmZmVyIGRlZmluaXRpb24KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdHlwZWRlZiBzdHJ1Y3QgewogICAgdW5pb24gewogICAgICAgIC8qIEhhc2ggdGFibGUgb2YgJ2lzIHZhbGlkJyBmbGFncyAqLwogICAgICAgIHVpbnQ4X3QgICAgICAgICBpc192YWxpZFtDQU1fQ1VTVE9NX1BBUk1fTUFYXTsKCiAgICAgICAgLyogSGFzaCB0YWJsZSBvZiAnaXMgcmVxdWlyZWQnIGZsYWdzIGZvciB0aGUgR0VUIFBBUkFNICovCiAgICAgICAgdWludDhfdCAgICAgICAgIGlzX3JlcWRbQ0FNX0NVU1RPTV9QQVJNX01BWF07CiAgICB9OwogICAgY3VzdG9tX3Bhcm1fZGF0YV90IGRhdGE7Cn0gY3VzdG9tX3Bhcm1fYnVmZmVyX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogIElEIGZyb20gKGNhbV9pbnRmX21ldGFkYXRhX3R5cGVfdCkgICAgICAgICAgICAgICAgREFUQVRZUEUgICAgICAgICAgICAgICAgICAgICBDT1VOVAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgICAvKiBjb21tb24gYmV0d2VlbiBIQUwxIGFuZCBIQUwzICovCiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfSElTVE9HUkFNLCAgICAgICAgICAgICAgICAgICAgY2FtX2hpc3Rfc3RhdHNfdCwgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9GQUNFX0RFVEVDVElPTiwgICAgICAgICAgICAgICBjYW1fZmFjZV9kZXRlY3Rpb25fZGF0YV90LCAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0ZBQ0VfUkVDT0csICAgICAgICAgICAgICAgICAgIGNhbV9mYWNlX3JlY29nX2RhdGFfdCwgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfRkFDRV9CTElOSywgICAgICAgICAgICAgICAgICAgY2FtX2ZhY2VfYmxpbmtfZGF0YV90LCAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9GQUNFX0dBWkUsICAgICAgICAgICAgICAgICAgICBjYW1fZmFjZV9nYXplX2RhdGFfdCwgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0ZBQ0VfU01JTEUsICAgICAgICAgICAgICAgICAgIGNhbV9mYWNlX3NtaWxlX2RhdGFfdCwgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfRkFDRV9MQU5ETUFSSywgICAgICAgICAgICAgICAgY2FtX2ZhY2VfbGFuZG1hcmtzX2RhdGFfdCwgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9GQUNFX0NPTlRPVVIsICAgICAgICAgICAgICAgICBjYW1fZmFjZV9jb250b3VyX2RhdGFfdCwgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0FVVE9GT0NVU19EQVRBLCAgICAgICAgICAgICAgIGNhbV9hdXRvX2ZvY3VzX2RhdGFfdCwgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfQ0RTX0RBVEEsICAgICAgICAgICAgICAgICAgICAgY2FtX2Nkc19kYXRhX3QsICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9VUERBVEVfREVCVUdfTEVWRUwsICAgICAgICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAgIDEpOwoKICAgIC8qIFNwZWNpZmljIHRvIEhBbDEgKi8KICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9DUk9QX0RBVEEsICAgICAgICAgICAgICAgICAgICBjYW1fY3JvcF9kYXRhX3QsICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX1BSRVBfU05BUFNIT1RfRE9ORSwgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfR09PRF9GUkFNRV9JRFhfUkFOR0UsICAgICAgICAgY2FtX2ZyYW1lX2lkeF9yYW5nZV90LCAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9BU0RfSERSX1NDRU5FX0RBVEEsICAgICAgICAgICBjYW1fYXNkX2hkcl9zY2VuZV9kYXRhX3QsICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0FTRF9TQ0VORV9JTkZPLCAgICAgICAgICAgICAgIGNhbV9hc2RfZGVjaXNpb25fdCwgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfQ1VSUkVOVF9TQ0VORSwgICAgICAgICAgICAgICAgY2FtX3NjZW5lX21vZGVfdHlwZSwgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9BV0JfSU5GTywgICAgICAgICAgICAgICAgICAgICBjYW1fYXdiX3BhcmFtc190LCAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0ZPQ1VTX1BPU0lUSU9OLCAgICAgICAgICAgICAgIGNhbV9mb2N1c19wb3NfaW5mb190LCAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfQ0hST01BVElYX0xJVEVfSVNQLCAgICAgICAgICAgY2FtX2Nocm9tYXRpeF9saXRlX2lzcF90LCAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9DSFJPTUFUSVhfTElURV9QUCwgICAgICAgICAgICBjYW1fY2hyb21hdGl4X2xpdGVfcHBfdCwgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0NIUk9NQVRJWF9MSVRFX0FFLCAgICAgICAgICAgIGNhbV9jaHJvbWF0aXhfbGl0ZV9hZV9zdGF0c190LCAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfQ0hST01BVElYX0xJVEVfQVdCLCAgICAgICAgICAgY2FtX2Nocm9tYXRpeF9saXRlX2F3Yl9zdGF0c190LCAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9DSFJPTUFUSVhfTElURV9BRiwgICAgICAgICAgICBjYW1fY2hyb21hdGl4X2xpdGVfYWZfc3RhdHNfdCwgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0NIUk9NQVRJWF9MSVRFX0FTRCwgICAgICAgICAgIGNhbV9jaHJvbWF0aXhfbGl0ZV9hc2Rfc3RhdHNfdCwgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX0JVRl9ESVZFUlRfSU5GTywgICAgICAgICAgICAgICAgICAgY2FtX2J1Zl9kaXZlcnRfaW5mb190LCAgICAgICAgICAxKTsKCiAgICAvKiBTcGVjaWZpYyB0byBIQUwzICovCiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfRlJBTUVfTlVNQkVSX1ZBTElELCAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9VUkdFTlRfRlJBTUVfTlVNQkVSX1ZBTElELCAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0ZSQU1FX0RST1BQRUQsICAgICAgICAgICAgICAgIGNhbV9zdHJlYW1fSURfdCwgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfRlJBTUVfTlVNQkVSLCAgICAgICAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9VUkdFTlRfRlJBTUVfTlVNQkVSLCAgICAgICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0NPTE9SX0NPUlJFQ1RfTU9ERSwgICAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfQ09MT1JfQ09SUkVDVF9UUkFOU0ZPUk0sICAgICAgY2FtX2NvbG9yX2NvcnJlY3RfbWF0cml4X3QsICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9DT0xPUl9DT1JSRUNUX0dBSU5TLCAgICAgICAgICBjYW1fY29sb3JfY29ycmVjdF9nYWluc190LCAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX1BSRURfQ09MT1JfQ09SUkVDVF9UUkFOU0ZPUk0sIGNhbV9jb2xvcl9jb3JyZWN0X21hdHJpeF90LCAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfUFJFRF9DT0xPUl9DT1JSRUNUX0dBSU5TLCAgICAgY2FtX2NvbG9yX2NvcnJlY3RfZ2FpbnNfdCwgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9BRUNfUk9JLCAgICAgICAgICAgICAgICAgICAgICBjYW1fYXJlYV90LCAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0FFQ19TVEFURSwgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fRk9DVVNfTU9ERSwgICAgICAgICAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9NQU5VQUxfRk9DVVNfUE9TLCAgICAgICAgICAgICBjYW1fbWFudWFsX2ZvY3VzX3Bhcm1fdCwgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0FGX1JPSSwgICAgICAgICAgICAgICAgICAgICAgIGNhbV9hcmVhX3QsICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfQUZfU1RBVEUsICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9XSElURV9CQUxBTkNFLCAgICAgICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0FXQl9SRUdJT05TLCAgICAgICAgICAgICAgICAgIGNhbV9hcmVhX3QsICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfQVdCX1NUQVRFLCAgICAgICAgICAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9BV0JfQ09OVkVSR0VOQ0VfU1BFRUQsICAgICAgICBmbG9hdCwgICAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0JMQUNLX0xFVkVMX0xPQ0ssICAgICAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfTU9ERSwgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9FREdFX01PREUsICAgICAgICAgICAgICAgICAgICBjYW1fZWRnZV9hcHBsaWNhdGlvbl90LCAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0ZMQVNIX1BPV0VSLCAgICAgICAgICAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfRkxBU0hfRklSSU5HX1RJTUUsICAgICAgICAgICAgaW50NjRfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9GTEFTSF9NT0RFLCAgICAgICAgICAgICAgICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0ZMQVNIX1NUQVRFLCAgICAgICAgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfSE9UUElYRUxfTU9ERSwgICAgICAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9MRU5TX0FQRVJUVVJFLCAgICAgICAgICAgICAgICBmbG9hdCwgICAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0xFTlNfRklMVEVSREVOU0lUWSwgICAgICAgICAgIGZsb2F0LCAgICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfTEVOU19GT0NBTF9MRU5HVEgsICAgICAgICAgICAgZmxvYXQsICAgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9MRU5TX0ZPQ1VTX0RJU1RBTkNFLCAgICAgICAgICBmbG9hdCwgICAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0ZPQ1VTX1ZBTFVFLCAgICAgICAgICAgICAgICAgIGZsb2F0LCAgICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfU1BPVF9MSUdIVF9ERVRFQ1QsICAgICAgICAgICAgdWludDhfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9MRU5TX0ZPQ1VTX1JBTkdFLCAgICAgICAgICAgICBmbG9hdCwgICAgICAgICAgICAgICAgICAgICAgIDIpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0xFTlNfU1RBVEUsICAgICAgICAgICAgICAgICAgIGNhbV9hZl9sZW5zX3N0YXRlX3QsICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfTEVOU19PUFRfU1RBQl9NT0RFLCAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9WSURFT19TVEFCX01PREUsICAgICAgICAgICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0xFTlNfRk9DVVNfU1RBVEUsICAgICAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfTk9JU0VfUkVEVUNUSU9OX01PREUsICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9OT0lTRV9SRURVQ1RJT05fU1RSRU5HVEgsICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX1NDQUxFUl9DUk9QX1JFR0lPTiwgICAgICAgICAgIGNhbV9jcm9wX3JlZ2lvbl90LCAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfU0NFTkVfRkxJQ0tFUiwgICAgICAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9TRU5TT1JfRVhQT1NVUkVfVElNRSwgICAgICAgICBpbnQ2NF90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX1NFTlNPUl9GUkFNRV9EVVJBVElPTiwgICAgICAgIGludDY0X3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfU0VOU09SX1NFTlNJVElWSVRZLCAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9JU1BfU0VOU0lUSVZJVFkgLCAgICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX1NFTlNPUl9USU1FU1RBTVAsICAgICAgICAgICAgIGludDY0X3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfU0VOU09SX1JPTExJTkdfU0hVVFRFUl9TS0VXLCAgaW50NjRfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9TSEFESU5HX01PREUsICAgICAgICAgICAgICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX1NUQVRTX0ZBQ0VERVRFQ1RfTU9ERSwgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfU1RBVFNfSElTVE9HUkFNX01PREUsICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9TVEFUU19TSEFSUE5FU1NfTUFQX01PREUsICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX1NUQVRTX1NIQVJQTkVTU19NQVAsICAgICAgICAgIGNhbV9zaGFycG5lc3NfbWFwX3QsICAgICAgICAgMyk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfVE9ORU1BUF9DVVJWRVMsICAgICAgICAgICAgICAgY2FtX3JnYl90b25lbWFwX2N1cnZlcywgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9MRU5TX1NIQURJTkdfTUFQLCAgICAgICAgICAgICBjYW1fbGVuc19zaGFkaW5nX21hcF90LCAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0FFQ19JTkZPLCAgICAgICAgICAgICAgICAgICAgIGNhbV8zYV9wYXJhbXNfdCwgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfU0VOU09SX0lORk8sICAgICAgICAgICAgICAgICAgY2FtX3NlbnNvcl9wYXJhbXNfdCwgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9FWElGX0RFQlVHX0FFLCAgICAgICAgICAgICAgICBjYW1fYWVfZXhpZl9kZWJ1Z190LCAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0VYSUZfREVCVUdfQVdCLCAgICAgICAgICAgICAgIGNhbV9hd2JfZXhpZl9kZWJ1Z190LCAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfRVhJRl9ERUJVR19BRiwgICAgICAgICAgICAgICAgY2FtX2FmX2V4aWZfZGVidWdfdCwgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9FWElGX0RFQlVHX0FTRCwgICAgICAgICAgICAgICBjYW1fYXNkX2V4aWZfZGVidWdfdCwgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0VYSUZfREVCVUdfU1RBVFMsICAgICAgICAgICAgIGNhbV9zdGF0c19idWZmZXJfZXhpZl9kZWJ1Z190LCAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0VYSUZfREVCVUdfQkVTVEFUUywgICAgICAgICAgIGNhbV9iZXN0YXRzX2J1ZmZlcl9leGlmX2RlYnVnX3QsIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0VYSUZfREVCVUdfQkhJU1QsICAgICAgICAgICAgIGNhbV9iaGlzdF9idWZmZXJfZXhpZl9kZWJ1Z190LCAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0VYSUZfREVCVUdfM0FfVFVOSU5HLCAgICAgICAgIGNhbV9xM2FfdHVuaW5nX2luZm9fdCwgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfQVNEX1NDRU5FX0NBUFRVUkVfVFlQRSwgICAgICAgY2FtX2F1dG9fc2NlbmVfdCwgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9FRkZFQ1QsICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDEpOwogICAgLyogRGVmaW5pbmcgYXMgaW50MzJfdCBzbyB0aGF0IHRoaXMgYXJyYXkgaXMgNCBieXRlIGFsaWduZWQgKi8KICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9QUklWQVRFX0RBVEEsICAgICAgICAgICAgICAgICBpbnQzMl90LAogICAgICAgICAgICBNQVhfTUVUQURBVEFfUFJJVkFURV9QQVlMT0FEX1NJWkVfSU5fQllURVMgLyA0KTsKCiAgICAvKiBGb2xsb3dpbmcgYXJlIFBhcmFtcyBvbmx5IGFuZCBub3QgbWV0YWRhdGEgY3VycmVudGx5ICovCiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fSEFMX1ZFUlNJT04sICAgICAgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIC8qIFNoYXJlZCBiZXR3ZWVuIEhBTDEgYW5kIEhBTDMgKi8KICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9BTlRJQkFORElORywgICAgICAgICAgICAgICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0VYUE9TVVJFX0NPTVBFTlNBVElPTiwgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fRVZfU1RFUCwgICAgICAgICAgICAgICAgICAgICAgY2FtX3JhdGlvbmFsX3R5cGVfdCwgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9BRUNfTE9DSywgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0ZQU19SQU5HRSwgICAgICAgICAgICAgICAgICAgIGNhbV9mcHNfcmFuZ2VfdCwgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fQVdCX0xPQ0ssICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9CRVNUU0hPVF9NT0RFLCAgICAgICAgICAgICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0RJU19FTkFCTEUsICAgICAgICAgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fTEVEX01PREUsICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9MRURfTU9ERV9PVkVSUklERSwgICAgICAgICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDEpOwoKICAgIC8qIGR1YWwgY2FtZXJhIHNwZWNpZmljIHBhcmFtcyAqLwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX1JFTEFURURfU0VOU09SU19DQUxJQlJBVElPTiwgIGNhbV9yZWxhdGVkX3N5c3RlbV9jYWxpYnJhdGlvbl9kYXRhX3QsIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0FGX0ZPQ0FMX0xFTkdUSF9SQVRJTywgICAgICAgIGNhbV9mb2NhbF9sZW5ndGhfcmF0aW9fdCwgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfU05BUF9DUk9QX0lORk9fU0VOU09SLCAgICAgICAgY2FtX3N0cmVhbV9jcm9wX2luZm9fdCwgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9TTkFQX0NST1BfSU5GT19DQU1JRiwgICAgICAgICBjYW1fc3RyZWFtX2Nyb3BfaW5mb190LCAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX1NOQVBfQ1JPUF9JTkZPX0lTUCwgICAgICAgICAgIGNhbV9zdHJlYW1fY3JvcF9pbmZvX3QsICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfU05BUF9DUk9QX0lORk9fQ1BQLCAgICAgICAgICAgY2FtX3N0cmVhbV9jcm9wX2luZm9fdCwgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9EQ1JGLCAgICAgICAgICAgICAgICAgICAgICAgICBjYW1fZGNyZl9yZXN1bHRfdCwgICAgICAgIDEpOwoKICAgIC8qIEhBTDEgc3BlY2lmaWMgKi8KICAgIC8qIHJlYWQgb25seSAqLwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX1FVRVJZX0ZMQVNINFNOQVAsICAgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fRVhQT1NVUkUsICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9TSEFSUE5FU1MsICAgICAgICAgICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0NPTlRSQVNULCAgICAgICAgICAgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fU0FUVVJBVElPTiwgICAgICAgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9CUklHSFRORVNTLCAgICAgICAgICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0lTTywgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbV9pbnRmX3Bhcm1fbWFudWFsXzNhX3QsICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fRVhQT1NVUkVfVElNRSwgICAgICAgICAgICAgICAgY2FtX2ludGZfcGFybV9tYW51YWxfM2FfdCwgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9aT09NLCAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX1JPTExPRkYsICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fTU9ERSwgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9BRUNfQUxHT19UWVBFLCAgICAgICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0ZPQ1VTX0FMR09fVFlQRSwgICAgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fQUVDX1JPSSwgICAgICAgICAgICAgICAgICAgICAgY2FtX3NldF9hZWNfcm9pX3QsICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9BRl9ST0ksICAgICAgICAgICAgICAgICAgICAgICBjYW1fcm9pX2luZm9fdCwgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX1NDRV9GQUNUT1IsICAgICAgICAgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fRkQsICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtX2ZkX3NldF9wYXJtX3QsICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9NQ0UsICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0hGUiwgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fUkVERVlFX1JFRFVDVElPTiwgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9XQVZFTEVUX0RFTk9JU0UsICAgICAgICAgICAgICBjYW1fZGVub2lzZV9wYXJhbV90LCAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX1RFTVBPUkFMX0RFTk9JU0UsICAgICAgICAgICAgIGNhbV9kZW5vaXNlX3BhcmFtX3QsICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fSElTVE9HUkFNLCAgICAgICAgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9BU0RfRU5BQkxFLCAgICAgICAgICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX1JFQ09SRElOR19ISU5ULCAgICAgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fSERSLCAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtX2V4cF9icmFja2V0aW5nX3QsICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9GUkFNRVNLSVAsICAgICAgICAgICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX1pTTF9NT0RFLCAgICAgICAgICAgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fSERSX05FRURfMVgsICAgICAgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9MT0NLX0NBRiwgICAgICAgICAgICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX1ZJREVPX0hEUiwgICAgICAgICAgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fU0VOU09SX0hEUiwgICAgICAgICAgICAgICAgICAgY2FtX3NlbnNvcl9oZHJfdHlwZV90LCAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9WVCwgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX1NFVF9BVVRPRk9DVVNUVU5JTkcsICAgICAgICAgIHR1bmVfYWN0dWF0b3JfdCwgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fU0VUX1ZGRV9DT01NQU5ELCAgICAgICAgICAgICAgdHVuZV9jbWRfdCwgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9TRVRfUFBfQ09NTUFORCwgICAgICAgICAgICAgICB0dW5lX2NtZF90LCAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX01BWF9ESU1FTlNJT04sICAgICAgICAgICAgICAgIGNhbV9kaW1lbnNpb25fdCwgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fUkFXX0RJTUVOU0lPTiwgICAgICAgICAgICAgICAgY2FtX2RpbWVuc2lvbl90LCAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9USU5UTEVTUywgICAgICAgICAgICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX1dCX01BTlVBTCwgICAgICAgICAgICAgICAgICAgIGNhbV9tYW51YWxfd2JfcGFybV90LCAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fQ0RTX01PREUsICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9FWlRVTkVfQ01ELCAgICAgICAgICAgICAgICAgICBjYW1fZXp0dW5lX2NtZF9kYXRhX3QsICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0lOVF9FVlQsICAgICAgICAgICAgICAgICAgICAgIGNhbV9pbnRfZXZ0X3BhcmFtc190LCAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fUkRJX01PREUsICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9CVVJTVF9OVU0sICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX1JFVFJPX0JVUlNUX05VTSwgICAgICAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fQlVSU1RfTEVEX09OX1BFUklPRCwgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9MT05HU0hPVF9FTkFCTEUsICAgICAgICAgICAgICBpbnQ4X3QsICAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX1RPTkVfTUFQX01PREUsICAgICAgICAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfVE9VQ0hfQUVfUkVTVUxULCAgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9EVUFMX0xFRF9DQUxJQlJBVElPTiwgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0FEVl9DQVBUVVJFX01PREUsICAgICAgICAgICAgIHVpbnQ4X3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fUVVBRFJBX0NGQSwgICAgICAgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9SQVcsICAgICAgICAgICAgICAgICAgICAgICAgICBjYW1fZGltZW5zaW9uX3QsICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX1NUUkVBTV9JTkZPX0ZPUl9QSUNfUkVTLCAgICAgIGNhbV9zdHJlYW1fc2l6ZV9pbmZvX3QsICAgICAgMSk7CgoKICAgIC8qIEhBTDMgc3BlY2lmaWMgKi8KICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9TVFJFQU1fSU5GTywgICAgICAgICAgICAgICAgICBjYW1fc3RyZWFtX3NpemVfaW5mb190LCAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0FFQ19NT0RFLCAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfQUVDX0NPTlZFUkdFTkNFX1NQRUVELCAgICAgICAgZmxvYXQsICAgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9BRUNfUFJFQ0FQVFVSRV9UUklHR0VSLCAgICAgICBjYW1fdHJpZ2dlcl90LCAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0FGX1RSSUdHRVIsICAgICAgICAgICAgICAgICAgIGNhbV90cmlnZ2VyX3QsICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfQ0FQVFVSRV9JTlRFTlQsICAgICAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9ERU1PU0FJQywgICAgICAgICAgICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX1NIQVJQTkVTU19TVFJFTkdUSCwgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfR0VPTUVUUklDX01PREUsICAgICAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9HRU9NRVRSSUNfU1RSRU5HVEgsICAgICAgICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0xFTlNfU0hBRElOR19NQVBfTU9ERSwgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfU0hBRElOR19TVFJFTkdUSCwgICAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9UT05FTUFQX01PREUsICAgICAgICAgICAgICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0lSX01PREUsICAgICAgICAgICAgICAgICAgICAgIGNhbV9pcl9tb2RlX3R5cGVfdCwgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfU1RSRUFNX0lELCAgICAgICAgICAgICAgICAgICAgY2FtX3N0cmVhbV9JRF90LCAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9TVEFUU19ERUJVR19NQVNLLCAgICAgICAgICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX1NUQVRTX0FGX1BBQUYsICAgICAgICAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fRk9DVVNfQlJBQ0tFVElORywgICAgICAgICAgICAgY2FtX2FmX2JyYWNrZXRpbmdfdCwgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9GTEFTSF9CUkFDS0VUSU5HLCAgICAgICAgICAgICBjYW1fZmxhc2hfYnJhY2tldGluZ190LCAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0pQRUdfR1BTX0NPT1JESU5BVEVTLCAgICAgICAgIGRvdWJsZSwgICAgICAgICAgICAgICAgICAgICAgMyk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfSlBFR19HUFNfUFJPQ19NRVRIT0RTLCAgICAgICAgdWludDhfdCwgICAgICAgICAgICAgICAgICAgICBHUFNfUFJPQ0VTU0lOR19NRVRIT0RfU0laRSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfSlBFR19HUFNfVElNRVNUQU1QLCAgICAgICAgICAgaW50NjRfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9KUEVHX09SSUVOVEFUSU9OLCAgICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0pQRUdfUVVBTElUWSwgICAgICAgICAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfSlBFR19USFVNQl9RVUFMSVRZLCAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9KUEVHX1RIVU1CX1NJWkUsICAgICAgICAgICAgICBjYW1fZGltZW5zaW9uX3QsICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX1RFU1RfUEFUVEVSTl9EQVRBLCAgICAgICAgICAgIGNhbV90ZXN0X3BhdHRlcm5fZGF0YV90LCAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfUFJPRklMRV9UT05FX0NVUlZFLCAgICAgICAgICAgY2FtX3Byb2ZpbGVfdG9uZV9jdXJ2ZSwgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9PVFBfV0JfR1JHQiwgICAgICAgICAgICAgICAgICBmbG9hdCwgICAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0lNR19IWVNUX0lORk8sICAgICAgICAgICAgICAgIGNhbV9pbWdfaHlzdGVyaXNpc19pbmZvX3QsICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfQ0FDX0lORk8sICAgICAgICAgICAgICAgICAgICAgY2FtX2NhY19pbmZvX3QsICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9DQUMsICAgICAgICAgICAgICAgICAgICAgICAgICBjYW1fYWJlcnJhdGlvbl9tb2RlX3QsICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX05FVVRSQUxfQ09MX1BPSU5ULCAgICAgICAgICAgIGNhbV9uZXV0cmFsX2NvbF9wb2ludF90LCAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fUk9UQVRJT04sICAgICAgICAgICAgICAgICAgICAgY2FtX3JvdGF0aW9uX2luZm9fdCwgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9IV19EQVRBX09WRVJXUklURSwgICAgICAgICAgICBjYW1faHdfZGF0YV9vdmVyd3JpdGVfdCwgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0lNR0xJQiwgICAgICAgICAgICAgICAgICAgICAgIGNhbV9pbnRmX21ldGFfaW1nbGliX3QsICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fQ0FQVFVSRV9GUkFNRV9DT05GSUcsICAgICAgICAgY2FtX2NhcHR1cmVfZnJhbWVfY29uZmlnX3QsICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9DVVNUT00sICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21fcGFybV9idWZmZXJfdCwgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0ZMSVAsICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfVVNFX0FWX1RJTUVSLCAgICAgICAgICAgICAgICAgdWludDhfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9FRkZFQ1RJVkVfRVhQT1NVUkVfRkFDVE9SLCAgICBmbG9hdCwgICAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0xEQUZfRVhJRiwgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMik7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfQkxBQ0tfTEVWRUxfU09VUkNFX1BBVFRFUk4sICAgY2FtX2JsYWNrX2xldmVsX21ldGFkYXRhX3QsICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9CTEFDS19MRVZFTF9BUFBMSUVEX1BBVFRFUk4sICBjYW1fYmxhY2tfbGV2ZWxfbWV0YWRhdGFfdCwgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0xPV19MSUdIVCwgICAgICAgICAgICAgICAgICAgIGNhbV9sb3dfbGlnaHRfbW9kZV90LCAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfSU1HX0RZTl9GRUFULCAgICAgICAgICAgICAgICAgY2FtX2R5bl9pbWdfZGF0YV90LCAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9NQU5VQUxfQ0FQVFVSRV9UWVBFLCAgICAgICAgICBjYW1fbWFudWFsX2NhcHR1cmVfdHlwZSwgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9BRl9TVEFURV9UUkFOU0lUSU9OLCAgICAgICAgICAgICAgIHVpbnQ4X3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fSU5JVElBTF9FWFBPU1VSRV9JTkRFWCwgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9JTlNUQU5UX0FFQywgICAgICAgICAgICAgICAgICB1aW50OF90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX1JFUFJPQ0VTU19GTEFHUywgICAgICAgICAgICAgIHVpbnQ4X3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fSlBFR19FTkNPREVfQ1JPUCwgICAgICAgICAgICAgY2FtX3N0cmVhbV9jcm9wX2luZm9fdCwgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9KUEVHX1NDQUxFX0RJTUVOU0lPTiwgICAgICAgICBjYW1fZGltZW5zaW9uX3QsICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0ZPQ1VTX0RFUFRIX0lORk8sICAgICAgICAgICAgIHVpbnQ4X3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fU1VTUEVORF9SRVNVTUVfQ0FNRVJBUywgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAyKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9DQU1FUkFfTUFTVEVSX0lORk8sICAgICAgICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDIpOwp9IG1ldGFkYXRhX2RhdGFfdDsKCi8qIFVwZGF0ZSBjbGVhcl9tZXRhZGF0YV9idWZmZXIoKSBmdW5jdGlvbiB3aGVuIGEgbmV3IGlzX3h4eF92YWxpZCBpcyBhZGRlZCB0bwogKiBvciByZW1vdmVkIGZyb20gdGhpcyBzdHJ1Y3R1cmUgKi8KdHlwZWRlZiBzdHJ1Y3QgewogICAgdW5pb257CiAgICAgICAgLyogSGFzaCB0YWJsZSBvZiAnaXMgdmFsaWQnIGZsYWdzICovCiAgICAgICAgdWludDhfdCAgICAgICAgIGlzX3ZhbGlkW0NBTV9JTlRGX1BBUk1fTUFYXTsKCiAgICAgICAgLyogSGFzaCB0YWJsZSBvZiAnaXMgcmVxdWlyZWQnIGZsYWdzIGZvciB0aGUgR0VUIFBBUkFNICovCiAgICAgICAgdWludDhfdCAgICAgICAgIGlzX3JlcWRbQ0FNX0lOVEZfUEFSTV9NQVhdOwogICAgfTsKICAgIG1ldGFkYXRhX2RhdGFfdCBkYXRhOwogICAgLypUdW5pbmcgRGF0YSAqLwogICAgdWludDhfdCBpc190dW5pbmdfcGFyYW1zX3ZhbGlkOwogICAgdHVuaW5nX3BhcmFtc190IHR1bmluZ19wYXJhbXM7CgogICAgLyogTW9iaWNhdCBQYXJhbXMgKi8KICAgIHVpbnQ4X3QgaXNfbW9iaWNhdF9hZWNfcGFyYW1zX3ZhbGlkOwogICAgY2FtXzNhX3BhcmFtc190IG1vYmljYXRfYWVjX3BhcmFtczsKCiAgICAvKiBTdGF0cyAzQSBEZWJ1ZyBQYXJhbXMgKi8KICAgIHVpbnQ4X3QgaXNfc3RhdHNkZWJ1Z19hZV9wYXJhbXNfdmFsaWQ7CiAgICBjYW1fYWVfZXhpZl9kZWJ1Z190IHN0YXRzZGVidWdfYWVfZGF0YTsKCiAgICB1aW50OF90IGlzX3N0YXRzZGVidWdfYXdiX3BhcmFtc192YWxpZDsKICAgIGNhbV9hd2JfZXhpZl9kZWJ1Z190IHN0YXRzZGVidWdfYXdiX2RhdGE7CgogICAgdWludDhfdCBpc19zdGF0c2RlYnVnX2FmX3BhcmFtc192YWxpZDsKICAgIGNhbV9hZl9leGlmX2RlYnVnX3Qgc3RhdHNkZWJ1Z19hZl9kYXRhOwoKICAgIHVpbnQ4X3QgaXNfc3RhdHNkZWJ1Z19hc2RfcGFyYW1zX3ZhbGlkOwogICAgY2FtX2FzZF9leGlmX2RlYnVnX3Qgc3RhdHNkZWJ1Z19hc2RfZGF0YTsKCiAgICB1aW50OF90IGlzX3N0YXRzZGVidWdfc3RhdHNfcGFyYW1zX3ZhbGlkOwogICAgY2FtX3N0YXRzX2J1ZmZlcl9leGlmX2RlYnVnX3Qgc3RhdHNkZWJ1Z19zdGF0c19idWZmZXJfZGF0YTsKCiAgICB1aW50OF90IGlzX3N0YXRzZGVidWdfYmVzdGF0c19wYXJhbXNfdmFsaWQ7CiAgICBjYW1fYmVzdGF0c19idWZmZXJfZXhpZl9kZWJ1Z190IHN0YXRzZGVidWdfYmVzdGF0c19idWZmZXJfZGF0YTsKCiAgICB1aW50OF90IGlzX3N0YXRzZGVidWdfYmhpc3RfcGFyYW1zX3ZhbGlkOwogICAgY2FtX2JoaXN0X2J1ZmZlcl9leGlmX2RlYnVnX3Qgc3RhdHNkZWJ1Z19iaGlzdF9kYXRhOwoKICAgIHVpbnQ4X3QgaXNfc3RhdHNkZWJ1Z18zYV90dW5pbmdfcGFyYW1zX3ZhbGlkOwogICAgY2FtX3EzYV90dW5pbmdfaW5mb190IHN0YXRzZGVidWdfM2FfdHVuaW5nX2RhdGE7Cn0gbWV0YWRhdGFfYnVmZmVyX3Q7Cgp0eXBlZGVmIG1ldGFkYXRhX2J1ZmZlcl90IHBhcm1fYnVmZmVyX3Q7CgojaWZkZWYgIF9fY3BsdXNwbHVzCmV4dGVybiAiQyIgewojZW5kaWYKCi8qIFVwZGF0ZSB0aGlzIGlubGluZSBmdW5jdGlvbiB3aGVuIGEgbmV3IGlzX3h4eF92YWxpZCBpcyBhZGRlZCB0bwogKiBvciByZW1vdmVkIGZyb20gbWV0YWRhdGFfYnVmZmVyX3QgKi8Kc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX21ldGFkYXRhX2J1ZmZlcihtZXRhZGF0YV9idWZmZXJfdCAqbWV0YSkKewogICAgaWYgKG1ldGEpIHsKICAgICAgbWVtc2V0KG1ldGEtPmlzX3ZhbGlkLCAwLCBDQU1fSU5URl9QQVJNX01BWCk7CiAgICAgIG1ldGEtPmlzX3R1bmluZ19wYXJhbXNfdmFsaWQgPSAwOwogICAgICBtZXRhLT5pc19tb2JpY2F0X2FlY19wYXJhbXNfdmFsaWQgPSAwOwogICAgICBtZXRhLT5pc19zdGF0c2RlYnVnX2FlX3BhcmFtc192YWxpZCA9IDA7CiAgICAgIG1ldGEtPmlzX3N0YXRzZGVidWdfYXdiX3BhcmFtc192YWxpZCA9IDA7CiAgICAgIG1ldGEtPmlzX3N0YXRzZGVidWdfYWZfcGFyYW1zX3ZhbGlkID0gMDsKICAgICAgbWV0YS0+aXNfc3RhdHNkZWJ1Z19hc2RfcGFyYW1zX3ZhbGlkID0gMDsKICAgICAgbWV0YS0+aXNfc3RhdHNkZWJ1Z19zdGF0c19wYXJhbXNfdmFsaWQgPSAwOwogICAgICBtZXRhLT5pc19zdGF0c2RlYnVnX2Jlc3RhdHNfcGFyYW1zX3ZhbGlkID0gMDsKICAgICAgbWV0YS0+aXNfc3RhdHNkZWJ1Z19iaGlzdF9wYXJhbXNfdmFsaWQgPSAwOwogICAgICBtZXRhLT5pc19zdGF0c2RlYnVnXzNhX3R1bmluZ19wYXJhbXNfdmFsaWQgPSAwOwogICAgfQp9CgojaWZkZWYgIF9fY3BsdXNwbHVzCn0KI2VuZGlmCgojZW5kaWYgLyogX19RQ0FNRVJBX0lOVEZfSF9fICovCg==