LyoKICogIGFybWJvb3QgLSBTdGFydHVwIENvZGUgZm9yIEFSTTcyMCBDUFUtY29yZQogKgogKiAgQ29weXJpZ2h0IChjKSAyMDAxCU1hcml1cyBHcvZnZXIgPG1hZ0BzeXNnby5kZT4KICogIENvcHlyaWdodCAoYykgMjAwMglBbGV4IFr8cGtlIDxhenVAc3lzZ28uZGU+CiAqCiAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAqIHByb2plY3QuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAqIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKCiNpbmNsdWRlIDxjb25maWcuaD4KI2luY2x1ZGUgPHZlcnNpb24uaD4KI2lmZGVmIENPTkZJR19ORVRBUk0KI2luY2x1ZGUgPGFzbS9hcmNoL25ldGFybV9yZWdpc3RlcnMuaD4KI2VuZGlmCgovKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBKdW1wIHZlY3RvciB0YWJsZSBhcyBpbiB0YWJsZSAzLjEgaW4gWzFdCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwoKCi5nbG9ibCBfc3RhcnQKX3N0YXJ0OgliICAgICAgIHJlc2V0CglsZHIJcGMsIF91bmRlZmluZWRfaW5zdHJ1Y3Rpb24KCWxkcglwYywgX3NvZnR3YXJlX2ludGVycnVwdAoJbGRyCXBjLCBfcHJlZmV0Y2hfYWJvcnQKCWxkcglwYywgX2RhdGFfYWJvcnQKCWxkcglwYywgX25vdF91c2VkCglsZHIJcGMsIF9pcnEKCWxkcglwYywgX2ZpcQoKX3VuZGVmaW5lZF9pbnN0cnVjdGlvbjoJLndvcmQgdW5kZWZpbmVkX2luc3RydWN0aW9uCl9zb2Z0d2FyZV9pbnRlcnJ1cHQ6CS53b3JkIHNvZnR3YXJlX2ludGVycnVwdApfcHJlZmV0Y2hfYWJvcnQ6CS53b3JkIHByZWZldGNoX2Fib3J0Cl9kYXRhX2Fib3J0OgkJLndvcmQgZGF0YV9hYm9ydApfbm90X3VzZWQ6CQkud29yZCBub3RfdXNlZApfaXJxOgkJCS53b3JkIGlycQpfZmlxOgkJCS53b3JkIGZpcQoKCS5iYWxpZ25sIDE2LDB4ZGVhZGJlZWYKCgovKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBTdGFydHVwIENvZGUgKHJlc2V0IHZlY3RvcikKICoKICogZG8gaW1wb3J0YW50IGluaXQgb25seSBpZiB3ZSBkb24ndCBzdGFydCBmcm9tIFJBTSEKICogcmVsb2NhdGUgYXJtYm9vdCB0byByYW0KICogc2V0dXAgc3RhY2sKICoganVtcCB0byBzZWNvbmQgc3RhZ2UKICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCgpfVEVYVF9CQVNFOgoJLndvcmQJVEVYVF9CQVNFCgouZ2xvYmwgX2FybWJvb3Rfc3RhcnQKX2FybWJvb3Rfc3RhcnQ6Cgkud29yZCBfc3RhcnQKCi8qCiAqIFRoZXNlIGFyZSBkZWZpbmVkIGluIHRoZSBib2FyZC1zcGVjaWZpYyBsaW5rZXIgc2NyaXB0LgogKi8KLmdsb2JsIF9ic3Nfc3RhcnQKX2Jzc19zdGFydDoKCS53b3JkIF9fYnNzX3N0YXJ0CgouZ2xvYmwgX2Jzc19lbmQKX2Jzc19lbmQ6Cgkud29yZCBfZW5kCgojaWZkZWYgQ09ORklHX1VTRV9JUlEKLyogSVJRIHN0YWNrIG1lbW9yeSAoY2FsY3VsYXRlZCBhdCBydW4tdGltZSkgKi8KLmdsb2JsIElSUV9TVEFDS19TVEFSVApJUlFfU1RBQ0tfU1RBUlQ6Cgkud29yZAkweDBiYWRjMGRlCgovKiBJUlEgc3RhY2sgbWVtb3J5IChjYWxjdWxhdGVkIGF0IHJ1bi10aW1lKSAqLwouZ2xvYmwgRklRX1NUQUNLX1NUQVJUCkZJUV9TVEFDS19TVEFSVDoKCS53b3JkIDB4MGJhZGMwZGUKI2VuZGlmCgoKLyoKICogdGhlIGFjdHVhbCByZXNldCBjb2RlCiAqLwoKcmVzZXQ6CgkvKgoJICogc2V0IHRoZSBjcHUgdG8gU1ZDMzIgbW9kZQoJICovCgltcnMJcjAsY3BzcgoJYmljCXIwLHIwLCMweDFmCglvcnIJcjAscjAsIzB4MTMKCW1zcgljcHNyLHIwCgoJLyoKCSAqIHdlIGRvIHN5cy1jcml0aWNhbCBpbml0cyBvbmx5IGF0IHJlYm9vdCwKCSAqIG5vdCB3aGVuIGJvb3RpbmcgZnJvbSByYW0hCgkgKi8KI2lmZGVmIENPTkZJR19JTklUX0NSSVRJQ0FMCglibAljcHVfaW5pdF9jcml0CiNlbmRpZgoKcmVsb2NhdGU6CQkJCS8qIHJlbG9jYXRlIFUtQm9vdCB0byBSQU0JICAgICovCglhZHIJcjAsIF9zdGFydAkJLyogcjAgPC0gY3VycmVudCBwb3NpdGlvbiBvZiBjb2RlICAgKi8KCWxkcglyMSwgX1RFWFRfQkFTRQkJLyogdGVzdCBpZiB3ZSBydW4gZnJvbSBmbGFzaCBvciBSQU0gKi8KCWNtcCAgICAgcjAsIHIxICAgICAgICAgICAgICAgICAgLyogZG9uJ3QgcmVsb2MgZHVyaW5nIGRlYnVnICAgICAgICAgKi8KCWJlcSAgICAgc3RhY2tfc2V0dXAKCglsZHIJcjIsIF9hcm1ib290X3N0YXJ0CglsZHIJcjMsIF9ic3Nfc3RhcnQKCXN1YglyMiwgcjMsIHIyCQkvKiByMiA8LSBzaXplIG9mIGFybWJvb3QgICAgICAgICAgICAqLwoJYWRkCXIyLCByMCwgcjIJCS8qIHIyIDwtIHNvdXJjZSBlbmQgYWRkcmVzcyAgICAgICAgICovCgpjb3B5X2xvb3A6CglsZG1pYQlyMCEsIHtyMy1yMTB9CQkvKiBjb3B5IGZyb20gc291cmNlIGFkZHJlc3MgW3IwXSAgICAqLwoJc3RtaWEJcjEhLCB7cjMtcjEwfQkJLyogY29weSB0byAgIHRhcmdldCBhZGRyZXNzIFtyMV0gICAgKi8KCWNtcAlyMCwgcjIJCQkvKiB1bnRpbCBzb3VyY2UgZW5kIGFkZHJlZWUgW3IyXSAgICAqLwoJYmxlCWNvcHlfbG9vcAoKCS8qIFNldCB1cCB0aGUgc3RhY2sJCQkJCQkgICAgKi8Kc3RhY2tfc2V0dXA6CglsZHIJcjAsIF9URVhUX0JBU0UJCS8qIHVwcGVyIDEyOCBLaUI6IHJlbG9jYXRlZCB1Ym9vdCAgICovCglzdWIJcjAsIHIwLCAjQ0ZHX01BTExPQ19MRU4JLyogbWFsbG9jIGFyZWEgICAgICAgICAgICAgICAgICAgICAgKi8KCXN1YglyMCwgcjAsICNDRkdfR0JMX0RBVEFfU0laRSAvKiBiZGluZm8gICAgICAgICAgICAgICAgICAgICAgICAqLwojaWZkZWYgQ09ORklHX1VTRV9JUlEKCXN1YglyMCwgcjAsICMoQ09ORklHX1NUQUNLU0laRV9JUlErQ09ORklHX1NUQUNLU0laRV9GSVEpCiNlbmRpZgoJc3ViCXNwLCByMCwgIzEyCQkvKiBsZWF2ZSAzIHdvcmRzIGZvciBhYm9ydC1zdGFjayAgICAqLwoKY2xlYXJfYnNzOgoJbGRyCXIwLCBfYnNzX3N0YXJ0CQkvKiBmaW5kIHN0YXJ0IG9mIGJzcyBzZWdtZW50ICAgICAgICAqLwoJbGRyCXIxLCBfYnNzX2VuZAkJLyogc3RvcCBoZXJlICAgICAgICAgICAgICAgICAgICAgICAgKi8KCW1vdiAJcjIsICMweDAwMDAwMDAwCQkvKiBjbGVhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKY2xic3NfbDpzdHIJcjIsIFtyMF0JCS8qIGNsZWFyIGxvb3AuLi4gICAgICAgICAgICAgICAgICAgICovCglhZGQJcjAsIHIwLCAjNAoJY21wCXIwLCByMQoJYm5lCWNsYnNzX2wKCglsZHIJcGMsIF9zdGFydF9hcm1ib290Cgpfc3RhcnRfYXJtYm9vdDoJLndvcmQgc3RhcnRfYXJtYm9vdAoKCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIENQVV9pbml0X2NyaXRpY2FsIHJlZ2lzdGVycwogKgogKiBzZXR1cCBpbXBvcnRhbnQgcmVnaXN0ZXJzCiAqIHNldHVwIG1lbW9yeSB0aW1pbmcKICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCgoKLyogSW50ZXJ1cHQtQ29udHJvbGxlciBiYXNlIGFkZHJlc3NlcyAqLwpJTlRNUjE6CQkud29yZAkweDgwMDAwMjgwIEAgMzIgYml0IHNpemUKSU5UTVIyOgkJLndvcmQJMHg4MDAwMTI4MCBAIDE2IGJpdCBzaXplCklOVE1SMzoJCS53b3JkCTB4ODAwMDIyODAgQCAgOCBiaXQgc2l6ZQoKLyogU1lTQ09OcyAqLwpTWVNDT04xOgkud29yZAkweDgwMDAwMTAwClNZU0NPTjI6CS53b3JkCTB4ODAwMDExMDAKU1lTQ09OMzoJLndvcmQJMHg4MDAwMjIwMAoKI2RlZmluZSBDTEtDVEwJICAgICAgIDB4NiAgLyogbWFzayAqLwojZGVmaW5lIENMS0NUTF8xOCAgICAgIDB4MCAgLyogMTguNDMyIE1IeiAqLwojZGVmaW5lIENMS0NUTF8zNiAgICAgIDB4MiAgLyogMzYuODY0IE1IeiAqLwojZGVmaW5lIENMS0NUTF80OSAgICAgIDB4NCAgLyogNDkuMTUyIE1IeiAqLwojZGVmaW5lIENMS0NUTF83MyAgICAgIDB4NiAgLyogNzMuNzI4IE1IeiAqLwoKY3B1X2luaXRfY3JpdDoKI2lmbmRlZiBDT05GSUdfTkVUQVJNCgkvKgoJICogbWFzayBhbGwgSVJRcyBieSBjbGVhcmluZyBhbGwgYml0cyBpbiB0aGUgSU5UTVJzCgkgKi8KCW1vdglyMSwgIzB4MDAKCWxkcglyMCwgSU5UTVIxCglzdHIJcjEsIFtyMF0KCWxkcglyMCwgSU5UTVIyCglzdHIJcjEsIFtyMF0KCWxkcglyMCwgSU5UTVIzCglzdHIJcjEsIFtyMF0KCgkvKgoJICogZmx1c2ggdjQgSS9EIGNhY2hlcwoJICovCgltb3YJcjAsICMwCgltY3IJcDE1LCAwLCByMCwgYzcsIGM3LCAwCS8qIGZsdXNoIHYzL3Y0IGNhY2hlICovCgltY3IJcDE1LCAwLCByMCwgYzgsIGM3LCAwCS8qIGZsdXNoIHY0IFRMQiAqLwoKCS8qCgkgKiBkaXNhYmxlIE1NVSBzdHVmZiBhbmQgY2FjaGVzCgkgKi8KCW1yYwlwMTUsMCxyMCxjMSxjMAoJYmljCXIwLCByMCwgIzB4MDAwMDIzMDAJQCBjbGVhciBiaXRzIDEzLCA5OjggKC0tVi0gLS1SUykKCWJpYwlyMCwgcjAsICMweDAwMDAwMDhmCUAgY2xlYXIgYml0cyA3LCAzOjAgKEItLS0gV0NBTSkKCW9ycglyMCwgcjAsICMweDAwMDAwMDAyCUAgc2V0IGJpdCAyIChBKSBBbGlnbgoJbWNyCXAxNSwwLHIwLGMxLGMwCiNlbHNlIC8qIENPTkZJR19ORVRBUk0gKi8KCS8qCgkgKiBwcmlvciB0byBzb2Z0d2FyZSByZXNldCA6IG5lZWQgdG8gc2V0IHBpbiBQT1JUQzQgdG8gYmUgKkhSRVNFVAoJICovCglsZHIJcjAsID1ORVRBUk1fR0VOX01PRFVMRV9CQVNFCglsZHIJcjEsID0oTkVUQVJNX0dFTl9QT1JUX01PREUoMHgxMCkgfCBcCgkJCU5FVEFSTV9HRU5fUE9SVF9ESVIoMHgxMCkpCglzdHIJcjEsIFtyMCwgIytORVRBUk1fR0VOX1BPUlRDXQoJLyoKCSAqIHNvZnR3YXJlIHJlc2V0IDogc2VlIEhXIFJlZi4gR3VpZGUgOC4yLjQgOiBTb2Z0d2FyZSBTZXJ2aWNlIHJlZ2lzdGVyCgkgKiAgICAgICAgICAgICAgICAgIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGlzIHByb2Nlc3MKCSAqLwoJbGRyCXIwLCA9TkVUQVJNX0dFTl9NT0RVTEVfQkFTRQoJbGRyCXIxLCA9TkVUQVJNX0dFTl9TV19TVkNfUkVTRVRBCglzdHIJcjEsIFtyMCwgIytORVRBUk1fR0VOX1NPRlRXQVJFX1NFUlZJQ0VdCglsZHIJcjEsID1ORVRBUk1fR0VOX1NXX1NWQ19SRVNFVEIKCXN0cglyMSwgW3IwLCAjK05FVEFSTV9HRU5fU09GVFdBUkVfU0VSVklDRV0KCWxkcglyMSwgPU5FVEFSTV9HRU5fU1dfU1ZDX1JFU0VUQQoJc3RyCXIxLCBbcjAsICMrTkVUQVJNX0dFTl9TT0ZUV0FSRV9TRVJWSUNFXQoJbGRyCXIxLCA9TkVUQVJNX0dFTl9TV19TVkNfUkVTRVRCCglzdHIJcjEsIFtyMCwgIytORVRBUk1fR0VOX1NPRlRXQVJFX1NFUlZJQ0VdCgkvKgoJICogc2V0dXAgUExMIGFuZCBTeXN0ZW0gQ29uZmlnCgkgKi8KCWxkcglyMCwgPU5FVEFSTV9HRU5fTU9EVUxFX0JBU0UKCglsZHIJcjEsID0oCU5FVEFSTV9HRU5fU1lTX0NGR19MRU5ESUFOIHwgXAoJCQlORVRBUk1fR0VOX1NZU19DRkdfQlVTRlVMTCB8IFwKCQkJTkVUQVJNX0dFTl9TWVNfQ0ZHX1VTRVJfRU4gfCBcCgkJCU5FVEFSTV9HRU5fU1lTX0NGR19BTElHTl9BQk9SVCB8IFwKCQkJTkVUQVJNX0dFTl9TWVNfQ0ZHX0JVU0FSQl9JTlQgfCBcCgkJCU5FVEFSTV9HRU5fU1lTX0NGR19CVVNNT05fRU4gKQoKCXN0cglyMSwgW3IwLCAjK05FVEFSTV9HRU5fU1lTVEVNX0NPTlRST0xdCgoJbGRyCXIxLCA9KAlORVRBUk1fR0VOX1BMTF9DVExfUExMQ05UKE5FVEFSTV9QTExfQ09VTlRfVkFMKSB8IFwKCQkJTkVUQVJNX0dFTl9QTExfQ1RMX1BPTFRTVF9ERUYgfCBcCgkJCU5FVEFSTV9HRU5fUExMX0NUTF9JTkRJVigxKSB8IFwKCQkJTkVUQVJNX0dFTl9QTExfQ1RMX0lDUF9ERUYgfCBcCgkJCU5FVEFSTV9HRU5fUExMX0NUTF9PVVRESVYoMikgKQoJc3RyCXIxLCBbcjAsICMrTkVUQVJNX0dFTl9QTExfQ09OVFJPTF0KCS8qCgkgKiBtYXNrIGFsbCBJUlFzIGJ5IGNsZWFyaW5nIGFsbCBiaXRzIGluIHRoZSBJTlRNUnMKCSAqLwoJbW92CXIxLCAjMAoJbGRyCXIwLCA9TkVUQVJNX0dFTl9NT0RVTEVfQkFTRQoJc3RyCXIxLCBbcjAsICMrTkVUQVJNX0dFTl9JTlRSX0VOQUJMRV0KI2VuZGlmIC8qIENPTkZJR19ORVRBUk0gKi8KCiNpZmRlZiBDT05GSUdfQVJNN19SRVZECgkvKiBzZXQgY2xvY2sgc3BlZWQgKi8KCS8qICEhISB3ZSBydW4gQCAzNiBNSHogZHVlIHRvIGEgaGFyZHdhcmUgZmxhdyBpbiBSZXYuIEQgcHJvY2Vzc29ycyAqLwoJLyogISEhIG5vdCBkb2luZyBEUkFNIHJlZnJlc2ggcHJvcGVybHkhICovCglsZHIJcjAsIFNZU0NPTjMKCWxkcglyMSwgW3IwXQoJYmljCXIxLCByMSwgI0NMS0NUTAoJb3JyCXIxLCByMSwgI0NMS0NUTF8zNgoJc3RyCXIxLCBbcjBdCiNlbmRpZgoKCS8qCgkgKiBiZWZvcmUgcmVsb2NhdGluZywgd2UgaGF2ZSB0byBzZXR1cCBSQU0gdGltaW5nCgkgKiBiZWNhdXNlIG1lbW9yeSB0aW1pbmcgaXMgYm9hcmQtZGVwZW5kZW50LCB5b3Ugd2lsbAoJICogZmluZCBhIG1lbXNldHVwLlMgaW4geW91ciBib2FyZCBkaXJlY3RvcnkuCgkgKi8KCW1vdglpcCwgbHIKCWJsCW1lbXNldHVwCgltb3YJbHIsIGlwCgoJbW92CXBjLCBscgoKCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIEludGVycnVwdCBoYW5kbGluZwogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KCkAKQCBJUlEgc3RhY2sgZnJhbWUuCkAKI2RlZmluZSBTX0ZSQU1FX1NJWkUJNzIKCiNkZWZpbmUgU19PTERfUjAJNjgKI2RlZmluZSBTX1BTUgkJNjQKI2RlZmluZSBTX1BDCQk2MAojZGVmaW5lIFNfTFIJCTU2CiNkZWZpbmUgU19TUAkJNTIKCiNkZWZpbmUgU19JUAkJNDgKI2RlZmluZSBTX0ZQCQk0NAojZGVmaW5lIFNfUjEwCQk0MAojZGVmaW5lIFNfUjkJCTM2CiNkZWZpbmUgU19SOAkJMzIKI2RlZmluZSBTX1I3CQkyOAojZGVmaW5lIFNfUjYJCTI0CiNkZWZpbmUgU19SNQkJMjAKI2RlZmluZSBTX1I0CQkxNgojZGVmaW5lIFNfUjMJCTEyCiNkZWZpbmUgU19SMgkJOAojZGVmaW5lIFNfUjEJCTQKI2RlZmluZSBTX1IwCQkwCgojZGVmaW5lIE1PREVfU1ZDIDB4MTMKI2RlZmluZSBJX0JJVAkgMHg4MAoKLyoKICogdXNlIGJhZF9zYXZlX3VzZXJfcmVncyBmb3IgYWJvcnQvcHJlZmV0Y2gvdW5kZWYvc3dpIC4uLgogKiB1c2UgaXJxX3NhdmVfdXNlcl9yZWdzIC8gaXJxX3Jlc3RvcmVfdXNlcl9yZWdzIGZvciBJUlEvRklRIGhhbmRsaW5nCiAqLwoKCS5tYWNybwliYWRfc2F2ZV91c2VyX3JlZ3MKCXN1YglzcCwgc3AsICNTX0ZSQU1FX1NJWkUKCXN0bWlhCXNwLCB7cjAgLSByMTJ9CQkJQCBDYWxsaW5nIHIwLXIxMgoJYWRkICAgICByOCwgc3AsICNTX1BDCgoJbGRyCXIyLCBfYXJtYm9vdF9zdGFydAoJc3ViCXIyLCByMiwgIyhDT05GSUdfU1RBQ0tTSVpFK0NGR19NQUxMT0NfTEVOKQoJc3ViCXIyLCByMiwgIyhDRkdfR0JMX0RBVEFfU0laRSs4KSAgQCBzZXQgYmFzZSAyIHdvcmRzIGludG8gYWJvcnQgc3RhY2sKCWxkbWlhCXIyLCB7cjIgLSByNH0gICAgICAgICAgICAgICAgICAgQCBnZXQgcGMsIGNwc3IsIG9sZF9yMAoJYWRkCXIwLCBzcCwgI1NfRlJBTUVfU0laRQkJQCByZXN0b3JlIHNwX1NWQwoKCWFkZAlyNSwgc3AsICNTX1NQCgltb3YJcjEsIGxyCglzdG1pYQlyNSwge3IwIC0gcjR9ICAgICAgICAgICAgICAgICAgIEAgc2F2ZSBzcF9TVkMsIGxyX1NWQywgcGMsIGNwc3IsIG9sZF9yCgltb3YJcjAsIHNwCgkuZW5kbQoKCS5tYWNybwlpcnFfc2F2ZV91c2VyX3JlZ3MKCXN1YglzcCwgc3AsICNTX0ZSQU1FX1NJWkUKCXN0bWlhCXNwLCB7cjAgLSByMTJ9CQkJQCBDYWxsaW5nIHIwLXIxMgoJYWRkICAgICByOCwgc3AsICNTX1BDCglzdG1kYiAgIHI4LCB7c3AsIGxyfV4gICAgICAgICAgICAgICAgICAgQCBDYWxsaW5nIFNQLCBMUgoJc3RyICAgICBsciwgW3I4LCAjMF0gICAgICAgICAgICAgICAgICAgIEAgU2F2ZSBjYWxsaW5nIFBDCgltcnMgICAgIHI2LCBzcHNyCglzdHIgICAgIHI2LCBbcjgsICM0XSAgICAgICAgICAgICAgICAgICAgQCBTYXZlIENQU1IKCXN0ciAgICAgcjAsIFtyOCwgIzhdICAgICAgICAgICAgICAgICAgICBAIFNhdmUgT0xEX1IwCgltb3YJcjAsIHNwCgkuZW5kbQoKCS5tYWNybwlpcnFfcmVzdG9yZV91c2VyX3JlZ3MKCWxkbWlhCXNwLCB7cjAgLSBscn1eCQkJQCBDYWxsaW5nIHIwIC0gbHIKCW1vdglyMCwgcjAKCWxkcglsciwgW3NwLCAjU19QQ10JCQlAIEdldCBQQwoJYWRkCXNwLCBzcCwgI1NfRlJBTUVfU0laRQoJc3VicwlwYywgbHIsICM0CQkJQCByZXR1cm4gJiBtb3ZlIHNwc3Jfc3ZjIGludG8gY3BzcgoJLmVuZG0KCgkubWFjcm8gZ2V0X2JhZF9zdGFjawoJbGRyCXIxMywgX2FybWJvb3Rfc3RhcnQJCUAgc2V0dXAgb3VyIG1vZGUgc3RhY2sKCXN1YglyMTMsIHIxMywgIyhDT05GSUdfU1RBQ0tTSVpFK0NGR19NQUxMT0NfTEVOKQoJc3ViCXIxMywgcjEzLCAjKENGR19HQkxfREFUQV9TSVpFKzgpIEAgcmVzZXJ2ZWQgYSBjb3VwbGUgc3BvdHMgaW4gYWJvcnQgc3RhY2sKCglzdHIJbHIsIFtyMTNdCQkJQCBzYXZlIGNhbGxlciBsciAvIHNwc3IKCW1ycwlsciwgc3BzcgoJc3RyICAgICBsciwgW3IxMywgIzRdCgoJbW92CXIxMywgI01PREVfU1ZDCQkJQCBwcmVwYXJlIFNWQy1Nb2RlCgltc3IJc3Bzcl9jLCByMTMKCW1vdglsciwgcGMKCW1vdnMJcGMsIGxyCgkuZW5kbQoKCS5tYWNybyBnZXRfaXJxX3N0YWNrCQkJQCBzZXR1cCBJUlEgc3RhY2sKCWxkcglzcCwgSVJRX1NUQUNLX1NUQVJUCgkuZW5kbQoKCS5tYWNybyBnZXRfZmlxX3N0YWNrCQkJQCBzZXR1cCBGSVEgc3RhY2sKCWxkcglzcCwgRklRX1NUQUNLX1NUQVJUCgkuZW5kbQoKLyoKICogZXhjZXB0aW9uIGhhbmRsZXJzCiAqLwoJLmFsaWduICA1CnVuZGVmaW5lZF9pbnN0cnVjdGlvbjoKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwgCWRvX3VuZGVmaW5lZF9pbnN0cnVjdGlvbgoKCS5hbGlnbgk1CnNvZnR3YXJlX2ludGVycnVwdDoKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwgCWRvX3NvZnR3YXJlX2ludGVycnVwdAoKCS5hbGlnbgk1CnByZWZldGNoX2Fib3J0OgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibCAJZG9fcHJlZmV0Y2hfYWJvcnQKCgkuYWxpZ24JNQpkYXRhX2Fib3J0OgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibCAJZG9fZGF0YV9hYm9ydAoKCS5hbGlnbgk1Cm5vdF91c2VkOgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibCAJZG9fbm90X3VzZWQKCiNpZmRlZiBDT05GSUdfVVNFX0lSUQoKCS5hbGlnbgk1CmlycToKCWdldF9pcnFfc3RhY2sKCWlycV9zYXZlX3VzZXJfcmVncwoJYmwgCWRvX2lycQoJaXJxX3Jlc3RvcmVfdXNlcl9yZWdzCgoJLmFsaWduCTUKZmlxOgoJZ2V0X2ZpcV9zdGFjawoJLyogc29tZW9uZSBvdWdodCB0byB3cml0ZSBhIG1vcmUgZWZmaWN0aW9uIGZpcV9zYXZlX3VzZXJfcmVncyAqLwoJaXJxX3NhdmVfdXNlcl9yZWdzCglibCAJZG9fZmlxCglpcnFfcmVzdG9yZV91c2VyX3JlZ3MKCiNlbHNlCgoJLmFsaWduCTUKaXJxOgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibCAJZG9faXJxCgoJLmFsaWduCTUKZmlxOgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibCAJZG9fZmlxCgojZW5kaWYKCgkuYWxpZ24JNQouZ2xvYmwgcmVzZXRfY3B1CnJlc2V0X2NwdToKI2lmbmRlZiBDT05GSUdfTkVUQVJNCgltb3YgICAgIGlwLCAjMAoJbWNyICAgICBwMTUsIDAsIGlwLCBjNywgYzcsIDAgICAgICAgICAgIEAgaW52YWxpZGF0ZSBjYWNoZQoJbWNyICAgICBwMTUsIDAsIGlwLCBjOCwgYzcsIDAgICAgICAgICAgIEAgZmx1c2ggVExCICh2NCkKCW1yYyAgICAgcDE1LCAwLCBpcCwgYzEsIGMwLCAwICAgICAgICAgICBAIGdldCBjdHJsIHJlZ2lzdGVyCgliaWMgICAgIGlwLCBpcCwgIzB4MDAwZiAgICAgICAgICAgICAgICAgQCAuLi4uLi4uLi4uLi53Y2FtCgliaWMgICAgIGlwLCBpcCwgIzB4MjEwMCAgICAgICAgICAgICAgICAgQCAuLnYuLi4ucy4uLi4uLi4uCgltY3IgICAgIHAxNSwgMCwgaXAsIGMxLCBjMCwgMCAgICAgICAgICAgQCBjdHJsIHJlZ2lzdGVyCgltb3YgICAgIHBjLCByMAojZWxzZQoJbGRyCXIxLCA9TkVUQVJNX01FTV9NT0RVTEVfQkFTRQoJbGRyCXIwLCBbcjEsICMrTkVUQVJNX01FTV9DUzBfQkFTRV9BRERSXQoJbGRyCXIxLCA9MHhGRkZGRjAwMAoJYW5kCXIwLCByMSwgcjAKCWxkcglyMSwgPShyZWxvY2F0ZS1URVhUX0JBU0UpCglhZGQJcjAsIHIxLCByMAoJbGRyCXI0LCA9TkVUQVJNX0dFTl9NT0RVTEVfQkFTRQoJbGRyCXIxLCA9TkVUQVJNX0dFTl9TV19TVkNfUkVTRVRBCglzdHIJcjEsIFtyNCwgIytORVRBUk1fR0VOX1NPRlRXQVJFX1NFUlZJQ0VdCglsZHIJcjEsID1ORVRBUk1fR0VOX1NXX1NWQ19SRVNFVEIKCXN0cglyMSwgW3I0LCAjK05FVEFSTV9HRU5fU09GVFdBUkVfU0VSVklDRV0KCWxkcglyMSwgPU5FVEFSTV9HRU5fU1dfU1ZDX1JFU0VUQQoJc3RyCXIxLCBbcjQsICMrTkVUQVJNX0dFTl9TT0ZUV0FSRV9TRVJWSUNFXQoJbGRyCXIxLCA9TkVUQVJNX0dFTl9TV19TVkNfUkVTRVRCCglzdHIJcjEsIFtyNCwgIytORVRBUk1fR0VOX1NPRlRXQVJFX1NFUlZJQ0VdCgltb3YJcGMsIHIwCiNlbmRpZgo=