LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpDb3B5cmlnaHQgqTIwMTIgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KDQpSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQoNCiogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQoNClRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRg0KTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsDQpTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pDQpIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsDQpFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgojaWZuZGVmIF9fQ0xfUFJPRklMRV9BTURfSAojZGVmaW5lIF9fQ0xfUFJPRklMRV9BTURfSAoKI2luY2x1ZGUgIkNML2NsX3BsYXRmb3JtLmgiCgojaWZkZWYgX19jcGx1c3BsdXMKZXh0ZXJuICJDIiB7CiNlbmRpZiAvKl9fY3BsdXNwbHVzKi8KCnR5cGVkZWYgc3RydWN0IF9jbF9wZXJmY291bnRlcl9hbWQqIGNsX3BlcmZjb3VudGVyX2FtZDsKdHlwZWRlZiBjbF91bG9uZyBjbF9wZXJmY291bnRlcl9wcm9wZXJ0eTsKdHlwZWRlZiBjbF91aW50IGNsX3BlcmZjb3VudGVyX2luZm87CgovKiBjbF9wZXJmY291bnRlcl9pbmZvICovCmVudW0gUGVyZmNvdW50ZXJJbmZvIHsKICBDTF9QRVJGQ09VTlRFUl9OT05FID0gMHgwLAogIENMX1BFUkZDT1VOVEVSX1JFRkVSRU5DRV9DT1VOVCA9IDB4MSwKICBDTF9QRVJGQ09VTlRFUl9EQVRBID0gMHgyLAogIENMX1BFUkZDT1VOVEVSX0dQVV9CTE9DS19JTkRFWCA9IDB4MywKICBDTF9QRVJGQ09VTlRFUl9HUFVfQ09VTlRFUl9JTkRFWCA9IDB4NCwKICBDTF9QRVJGQ09VTlRFUl9HUFVfRVZFTlRfSU5ERVggPSAweDUsCiAgQ0xfUEVSRkNPVU5URVJfTEFTVAp9OwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIFNldCBkZXZpY2UgY2xvY2sgbW9kZSBkYXRhCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZW51bSBjbF9EZXZpY2VDbG9ja01vZGVfQU1EIHsKICBDTF9ERVZJQ0VfQ0xPQ0tfTU9ERV9ERUZBVUxUX0FNRCA9IDB4MCwgLypEZXZpY2UgY2xvY2tzIGFuZCBvdGhlciBwb3dlciBzZXR0aW5ncyBhcmUgcmVzdG9yZWQgdG8gZGVmYXVsdCovCiAgQ0xfREVWSUNFX0NMT0NLX01PREVfUVVFUllfQU1EID0gMHgxLCAvKlF1ZXJpZXMgdGhlIGN1cnJlbnQgZGV2aWNlIGNsb2NrIHJhdGlvcy4gTGVhdmVzIHRoZSBjbG9jayBtb2RlIG9mIHRoZSBkZXZpY2UgdW5jaGFuZ2VkKi8KICBDTF9ERVZJQ0VfQ0xPQ0tfTU9ERV9QUk9GSUxJTkdfQU1EID0gMHgyLCAvKlNjYWxlIGRvd24gZnJvbSBwZWFrIHJhdGlvKi8KICBDTF9ERVZJQ0VfQ0xPQ0tfTU9ERV9NSU5JTVVNTUVNT1JZX0FNRCA9IDB4MywgLyogTWVtb3J5IGNsb2NrIGlzIHNldCB0byB0aGUgbG93ZXN0IGF2YWlsYWJsZSBsZXZlbCovCiAgQ0xfREVWSUNFX0NMT0NLX01PREVfTUlOSU1VTUVOR0lORV9BTUQgPSAweDQsIC8qRW5naW5lIGNsb2NrIGlzIHNldCB0byB0aGUgbG93ZXN0IGF2YWlsYWJsZSBsZXZlbCovCiAgQ0xfREVWSUNFX0NMT0NLX01PREVfUEVBS19BTUQgPSAweDUsIC8qQ2xvY2tzIHNldCB0byBtYXhpbXVtIHdoZW4gcG9zc2libGUuIEZhbiBzZXQgdG8gbWF4aW11bS4qLwogIENMX0RFVklDRV9DTE9DS19NT0RFX1FVRVJZUFJPRklMSU5HX0FNRCA9IDB4NiwgLypRdWVyaWVzIHRoZSBwcm9maWxpbmcgZGV2aWNlIGNsb2NrIHJhdGlvcy4gTGVhdmVzIHRoZSBjbG9jayBtb2RlIG9mIHRoZSBkZXZpY2UgdW5jaGFuZ2VkKi8KICBDTF9ERVZJQ0VfQ0xPQ0tfTU9ERV9RVUVSWVBFQUtfQU1EID0gMHg3LCAvKlF1ZXJpZXMgdGhlIHBlYWsgZGV2aWNlIGNsb2NrIHJhdGlvcy5MZWF2ZXMgdGhlIGNsb2NrIG1vZGUgb2YgdGhlIGRldmljZSB1bmNoYW5nZWQqLwogIENMX0RFVklDRV9DTE9DS19NT0RFX0NPVU5UX0FNRCA9IDB4OCwgLypNYXhtaXVtIGNvdW50IG9mIGRldmljZSBjbG9jayBtb2RlKi8KfTsKCnR5cGVkZWYgc3RydWN0IF9jbF9zZXRfZGV2aWNlX2Nsb2NrX21vZGVfaW5wdXRfYW1kCnsKICAvKiBzcGVjaWZ5IHRoZSBjbG9jayBtb2RlIGZvciBBTUQgR1BVIGRldmljZSovCiAgY2xfRGV2aWNlQ2xvY2tNb2RlX0FNRCBjbG9ja19tb2RlOwp9IGNsX3NldF9kZXZpY2VfY2xvY2tfbW9kZV9pbnB1dF9hbWQ7Cgp0eXBlZGVmIHN0cnVjdCBfY2xfc2V0X2RldmljZV9jbG9ja19tb2RlX291dHB1dF9hbWQKewogIC8qUmF0aW8gb2YgY3VycmVudCBtZW0gY2xvY2sgdG8gcGVhayBjbG9jayBhcyBvYnRhaW5lZCBmcm9tIERldmljZVByb3BlcnRpZXM6Om1heEdwdUNsb2NrKi8KICBjbF9mbG9hdCBtZW1vcnlfY2xvY2tfcmF0aW9fdG9fcGVhazsKICAvKlJhdGlvIG9mIGN1cnJlbnQgZ3B1IGNvcmUgY2xvY2sgdG8gcGVhayBjbG9jayBhcyBvYnRhaW5lZCBmcm9tIERldmljZVByb3BlcnRpZXM6Om1heEdwdUNsb2NrKi8KICBjbF9mbG9hdCBlbmdpbmVfY2xvY2tfcmF0aW9fdG9fcGVhazsKfSBjbF9zZXRfZGV2aWNlX2Nsb2NrX21vZGVfb3V0cHV0X2FtZDsKCi8qISBcYnJpZWYgQ3JlYXRlcyBhIG5ldyBIVyBwZXJmb3JtYW5jZSBjb3VudGVyCiAqICAgZm9yIHRoZSBzcGVjaWZpZWQgT3BlbkNMIGNvbnRleHQuCiAqCiAqICBccGFyYW0gZGV2aWNlIG11c3QgYmUgYSB2YWxpZCBPcGVuQ0wgZGV2aWNlLgogKgogKiAgXHBhcmFtIHByb3BlcnRpZXMgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyBvZiB0aGUgaGFyZHdhcmUgY291bnRlcgogKgogKiAgXHBhcmFtIGVycmNvZGVfcmV0ICBBIG5vbiB6ZXJvIHZhbHVlIGlmIE9wZW5DTCBmYWlsZWQgdG8gY3JlYXRlIFBlcmZDb3VudGVyCiAqICAtIENMX1NVQ0NFU1MgaWYgdGhlIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KICogIC0gQ0xfSU5WQUxJRF9DT05URVhUIGlmIHRoZSBzcGVjaWZpZWQgY29udGV4dCBpcyBpbnZhbGlkLgogKiAgLSBDTF9PVVRfT0ZfUkVTT1VSQ0VTIGlmIHdlIGNvdWxkbid0IGNyZWF0ZSB0aGUgb2JqZWN0CiAqCiAqICBccmV0dXJuIHRoZSBjcmVhdGVkIHBlcmZjb3VudGVyIG9iamVjdAogKi8KZXh0ZXJuIENMX0FQSV9FTlRSWSBjbF9wZXJmY291bnRlcl9hbWQgQ0xfQVBJX0NBTEwgY2xDcmVhdGVQZXJmQ291bnRlckFNRCgKICAgIGNsX2RldmljZV9pZCAvKiBkZXZpY2UgKi8sIGNsX3BlcmZjb3VudGVyX3Byb3BlcnR5KiAvKiBwcm9wZXJ0aWVzICovLCBjbF9pbnQqIC8qIGVycmNvZGVfcmV0ICovCiAgICApIENMX0FQSV9TVUZGSVhfX1ZFUlNJT05fMV8wOwoKLyohIFxicmllZiBEZXN0cm95IGEgcGVyZm9ybWFuY2UgY291bnRlciBvYmplY3QuCiAqCiAqICBccGFyYW0gcGVyZl9jb3VudGVyIHRoZSBwZXJmY291bnRlciBvYmplY3QgZm9yIHJlbGVhc2UKICoKICogIFxyZXR1cm4gQSBub24gemVybyB2YWx1ZSBpZiBPcGVuQ0wgZmFpbGVkIHRvIHJlbGVhc2UgUGVyZkNvdW50ZXIKICogIC0gQ0xfU1VDQ0VTUyBpZiB0aGUgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgogKiAgLSBDTF9JTlZBTElEX09QRVJBVElPTiBpZiB3ZSBmYWlsZWQgdG8gcmVsZWFzZSB0aGUgb2JqZWN0CiAqLwpleHRlcm4gQ0xfQVBJX0VOVFJZIGNsX2ludCBDTF9BUElfQ0FMTCBjbFJlbGVhc2VQZXJmQ291bnRlckFNRChjbF9wZXJmY291bnRlcl9hbWQgLyogcGVyZl9jb3VudGVyICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgQ0xfQVBJX1NVRkZJWF9fVkVSU0lPTl8xXzA7CgovKiEgXGJyaWVmIEluY3JlbWVudHMgdGhlIHBlcmZjb3VudGVyIG9iamVjdCByZWZlcmVuY2UgY291bnQuCiAqCiAqICBccGFyYW0gcGVyZl9jb3VudGVyIHRoZSBwZXJmY291bnRlciBvYmplY3QgZm9yIHJldGFpbgogKgogKiAgXHJldHVybiBBIG5vbiB6ZXJvIHZhbHVlIGlmIE9wZW5DTCBmYWlsZWQgdG8gcmV0YWluIFBlcmZDb3VudGVyCiAqICAtIENMX1NVQ0NFU1MgaWYgdGhlIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KICogIC0gQ0xfSU5WQUxJRF9PUEVSQVRJT04gaWYgd2UgZmFpbGVkIHRvIHJlbGVhc2UgdGhlIG9iamVjdAogKi8KZXh0ZXJuIENMX0FQSV9FTlRSWSBjbF9pbnQgQ0xfQVBJX0NBTEwgY2xSZXRhaW5QZXJmQ291bnRlckFNRChjbF9wZXJmY291bnRlcl9hbWQgLyogcGVyZl9jb3VudGVyICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBDTF9BUElfU1VGRklYX19WRVJTSU9OXzFfMDsKCi8qISBcYnJpZWYgRW5xdWV1ZXMgdGhlIGJlZ2luIGNvbW1hbmQgZm9yIHRoZSBzcGVjaWZpZWQgY291bnRlcnMuCiAqCiAqICBccGFyYW0gY29tbWFuZF9xdWV1ZSBtdXN0IGJlIGEgdmFsaWQgT3BlbkNMIGNvbW1hbmQgcXVldWUuCiAqCiAqICBccGFyYW0gbnVtX3BlcmZfY291bnRlcnMgdGhlIG51bWJlciBvZiBwZXJmY291bnRlciBvYmplY3RzIGluIHRoZSBhcnJheS4KICoKICogIFxwYXJhbSBwZXJmX2NvdW50ZXJzIHNwZWNpZmllcyBhbiBhcnJheSBvZiBwZXJmY291bnRlciBvYmplY3RzLgogKgogKiAgXHJldHVybiBBIG5vbiB6ZXJvIHZhbHVlIGlmIE9wZW5DTCBmYWlsZWQgdG8gcmVsZWFzZSBQZXJmQ291bnRlcgogKiAgLSBDTF9TVUNDRVNTIGlmIHRoZSBmdW5jdGlvbiBpcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCiAqICAtIENMX0lOVkFMSURfT1BFUkFUSU9OIGlmIHdlIGZhaWxlZCB0byBlbnF1ZXVlIHRoZSBiZWdpbiBvcGVyYXRpb24KICovCmV4dGVybiBDTF9BUElfRU5UUlkgY2xfaW50IENMX0FQSV9DQUxMIGNsRW5xdWV1ZUJlZ2luUGVyZkNvdW50ZXJBTUQoCiAgICBjbF9jb21tYW5kX3F1ZXVlIC8qIGNvbW1hbmRfcXVldWUgKi8sIGNsX3VpbnQgLyogbnVtX3BlcmZfY291bnRlcnMgKi8sCiAgICBjbF9wZXJmY291bnRlcl9hbWQqIC8qIHBlcmZfY291bnRlcnMgKi8sIGNsX3VpbnQgLyogbnVtX2V2ZW50c19pbl93YWl0X2xpc3QgKi8sCiAgICBjb25zdCBjbF9ldmVudCogLyogZXZlbnRfd2FpdF9saXN0ICovLCBjbF9ldmVudCogLyogZXZlbnQgKi8KICAgICkgQ0xfQVBJX1NVRkZJWF9fVkVSU0lPTl8xXzA7CgovKiEgXGJyaWVmIEVucXVldWVzIHRoZSBlbmQgY29tbWFuZCBmb3IgdGhlIHNwZWNpZmllZCBjb3VudGVycy4KICoKICogIFxwYXJhbSBjb21tYW5kX3F1ZXVlIG11c3QgYmUgYSB2YWxpZCBPcGVuQ0wgY29tbWFuZCBxdWV1ZS4KICoKICogIFxwYXJhbSBudW1fcGVyZl9jb3VudGVycyB0aGUgbnVtYmVyIG9mIHBlcmZjb3VudGVyIG9iamVjdHMgaW4gdGhlIGFycmF5LgogKgogKiAgXHBhcmFtIHBlcmZfY291bnRlcnMgc3BlY2lmaWVzIGFuIGFycmF5IG9mIHBlcmZjb3VudGVyIG9iamVjdHMuCiAqCiAqICBccGFyYW0gZXZlbnQgdGhlIGV2ZW50IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIGVuZCBvcGVyYXRpb24uCiAqCiAqICBccmV0dXJuIEEgbm9uIHplcm8gdmFsdWUgaWYgT3BlbkNMIGZhaWxlZCB0byByZWxlYXNlIFBlcmZDb3VudGVyCiAqICAtIENMX1NVQ0NFU1MgaWYgdGhlIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KICogIC0gQ0xfSU5WQUxJRF9PUEVSQVRJT04gaWYgd2UgZmFpbGVkIHRvIGVucXVldWUgdGhlIGVuZCBvcGVyYXRpb24KICovCmV4dGVybiBDTF9BUElfRU5UUlkgY2xfaW50IENMX0FQSV9DQUxMIGNsRW5xdWV1ZUVuZFBlcmZDb3VudGVyQU1EKAogICAgY2xfY29tbWFuZF9xdWV1ZSAvKiBjb21tYW5kX3F1ZXVlICovLCBjbF91aW50IC8qIG51bV9wZXJmX2NvdW50ZXJzICovLAogICAgY2xfcGVyZmNvdW50ZXJfYW1kKiAvKiBwZXJmX2NvdW50ZXJzICovLCBjbF91aW50IC8qIG51bV9ldmVudHNfaW5fd2FpdF9saXN0ICovLAogICAgY29uc3QgY2xfZXZlbnQqIC8qIGV2ZW50X3dhaXRfbGlzdCAqLywgY2xfZXZlbnQqIC8qIGV2ZW50ICovCiAgICApIENMX0FQSV9TVUZGSVhfX1ZFUlNJT05fMV8wOwoKLyohIFxicmllZiBSZXRyaWV2ZXMgdGhlIHJlc3VsdHMgZnJvbSB0aGUgY291bnRlciBvYmplY3RzLgogKgogKiAgXHBhcmFtIHBlcmZfY291bnRlciBzcGVjaWZpZXMgYSBwZXJmY291bnRlciBvYmplY3RzIGZvciBxdWVyeS4KICoKICogIFxwYXJhbSBwYXJhbV9uYW1lIHNwZWNpZmllcyB0aGUgaW5mb3JtYXRpb24gdG8gcXVlcnkuCiAqCiAqICBccGFyYW0gcGFyYW1fdmFsdWUgaXMgYSBwb2ludGVyIHRvIG1lbW9yeSB3aGVyZSB0aGUgYXBwcm9wcmlhdGUgcmVzdWx0CiAqICBiZWluZyBxdWVyaWVkIGlzIHJldHVybmVkLiBJZiBcYSBwYXJhbV92YWx1ZSBpcyBOVUxMLCBpdCBpcyBpZ25vcmVkLgogKgogKiAgXHBhcmFtIHBhcmFtX3ZhbHVlX3NpemUgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBzaXplIGluIGJ5dGVzIG9mIG1lbW9yeQogKiAgcG9pbnRlZCB0byBieSBcYSBwYXJhbV92YWx1ZS4gVGhpcyBzaXplIG11c3QgYmUgPj0gc2l6ZSBvZiByZXR1cm4gdHlwZS4KICoKICogIFxwYXJhbSBwYXJhbV92YWx1ZV9zaXplX3JldCByZXR1cm5zIHRoZSBhY3R1YWwgc2l6ZSBpbiBieXRlcyBvZiBkYXRhIGNvcGllZAogKiAgdG8gXGEgcGFyYW1fdmFsdWUuIElmIFxhIHBhcmFtX3ZhbHVlX3NpemVfcmV0IGlzIE5VTEwsIGl0IGlzIGlnbm9yZWQuCiAqCiAqICBccGFyYW0gdmFsdWVzIG11c3QgYmUgYSB2YWxpZCBwb2ludGVyIHRvIGFuIGFycmF5IG9mIDY0LWJpdCB2YWx1ZXMKICogIGFuZCB0aGUgYXJyYXkgc2l6ZSBtdXN0IGJlIGVxdWFsIHRvIG51bV9wZXJmX2NvdW50ZXJzLgogKgogKiAgXHJldHVybgogKiAgLSBDTF9TVUNDRVNTIGlmIHRoZSBmdW5jdGlvbiBpcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCiAqICAtIENMX1BST0ZJTElOR19JTkZPX05PVF9BVkFJTEFCTEUgaWYgZXZlbnQgaXNuJ3QgZmluaXNoZWQuCiAqICAtIENMX0lOVkFMSURfT1BFUkFUSU9OIGlmIHdlIGZhaWxlZCB0byBnZXQgdGhlIGRhdGEKICovCmV4dGVybiBDTF9BUElfRU5UUlkgY2xfaW50IENMX0FQSV9DQUxMIGNsR2V0UGVyZkNvdW50ZXJJbmZvQU1EKAogICAgY2xfcGVyZmNvdW50ZXJfYW1kIC8qIHBlcmZfY291bnRlciAqLywgY2xfcGVyZmNvdW50ZXJfaW5mbyAvKiBwYXJhbV9uYW1lICovLAogICAgc2l6ZV90IC8qIHBhcmFtX3ZhbHVlX3NpemUgKi8sIHZvaWQqIC8qIHBhcmFtX3ZhbHVlICovLCBzaXplX3QqIC8qIHBhcmFtX3ZhbHVlX3NpemVfcmV0ICovCiAgICApIENMX0FQSV9TVUZGSVhfX1ZFUlNJT05fMV8wOwoKZXh0ZXJuIENMX0FQSV9FTlRSWSBjbF9pbnQgQ0xfQVBJX0NBTEwgY2xTZXREZXZpY2VDbG9ja01vZGVBTUQoCiAgICBjbF9kZXZpY2VfaWQgLyogZGV2aWNlKi8sIGNsX3NldF9kZXZpY2VfY2xvY2tfbW9kZV9pbnB1dF9hbWQgLyogQ2xvY2tfTW9kZV9JbnB1dCAqLywKICAgIGNsX3NldF9kZXZpY2VfY2xvY2tfbW9kZV9vdXRwdXRfYW1kKiAvKiBDbG9ja19Nb2RlX091dHB1dCAqLwogICAgKSBDTF9BUElfU1VGRklYX19WRVJTSU9OXzFfMDsKCiNpZmRlZiBfX2NwbHVzcGx1cwp9IC8qZXh0ZXJuICJDIiovCiNlbmRpZiAvKl9fY3BsdXNwbHVzKi8KCiNlbmRpZiAvKl9fQ0xfUFJPRklMRV9BTURfSCovCg==