LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQWdlcmUgU3lzdGVtcyBJbmMuCiAqIFdpcmVsZXNzIGRldmljZSBkcml2ZXIgZm9yIExpbnV4ICh3bGFnczQ5KS4KICoKICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMgQWdlcmUgU3lzdGVtcyBJbmMuCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KICoKICogSW5pdGlhbGx5IGRldmVsb3BlZCBieSBUcmlwbGVQb2ludCwgSW5jLgogKiAgIGh0dHA6Ly93d3cudHJpcGxlcG9pbnQuY29tCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqCiAqICAgSGVhZGVyIGZvciBkZWZpbnRpb25zIGFuZCBtYWNyb3MgaW50ZXJuYWwgdG8gdGhlIGRydmllci4KICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICoKICogU09GVFdBUkUgTElDRU5TRQogKgogKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcwogKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCiAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KICoKICogQ29weXJpZ2h0IKkgMjAwMyBBZ2VyZSBTeXN0ZW1zIEluYy4KICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwogKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcwogKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICogICAgZGlzdHJpYnV0aW9uLgogKgogKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgogKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCiAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogKgogKiBEaXNjbGFpbWVyCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAogKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQogKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwogKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAogKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKICogREFNQUdFLgogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2lmbmRlZiBfX1dBVkVMQU4yX0hfXwojZGVmaW5lIF9fV0FWRUxBTjJfSF9fCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgaW5jbHVkZSBmaWxlcwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwojaWZkZWYgQlVTX1BDTUNJQQojaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgojaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgojaW5jbHVkZSA8cGNtY2lhL2Npc2NvZGUuaD4KI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgojZW5kaWYgIC8vIEJVU19QQ01DSUEKCiNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgojaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KCiNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CgojaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgY29uc3RhbnQgZGVmaW5pdGlvbnMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2RlZmluZSBwX3U4ICAgIF9fdTgKI2RlZmluZSBwX3M4ICAgIF9fczgKI2RlZmluZSBwX3UxNiAgIF9fdTE2CiNkZWZpbmUgcF9zMTYgICBfX3MxNgojZGVmaW5lIHBfdTMyICAgX191MzIKI2RlZmluZSBwX3MzMiAgIF9fczMyCiNkZWZpbmUgcF9jaGFyICBjaGFyCgojZGVmaW5lIE1BWF9LRVlfTEVOICAgICAgICAgKDIgKyAoMTMgKiAyKSkgLy8gMHggcGx1cyAxMyBoZXggZGlnaXQgcGFpcnMKI2RlZmluZSBNQl9TSVpFICAgICAgICAgICAgIDEwMjQKI2RlZmluZSBNQVhfRU5DX0xFTiAgICAgICAgIDEwNAoKI2RlZmluZSBNQVhfU0NBTl9USU1FX1NFQyAgIDgKI2RlZmluZSBNQVhfTkFQUyAgICAgICAgICAgIDMyCgojZGVmaW5lIENGR19NQl9JTkZPICAgICAgICAgMHgwODIwCQkvL01haWwgQm94IEluZm8gQmxvY2sKCiNkZWZpbmUgTlVNX1dEU19QT1JUUyAgICAgICA2CgojZGVmaW5lIFdWTEFOX01BWF9MT09LQUhFQUQgKEhDRl9NQVhfTVNHKzQ2KSAvKiBhcyBwZXIgczAwMDVNSUNfNC5kb2MgKi8KCgovKiBNaW4vTWF4L0RlZmF1bHQgUGFyYW1ldGVyIFZhbHVlcyAqLwojaWYgMCAvLzs/IChIQ0ZfVFlQRSkgJiBIQ0ZfVFlQRV9BUAovLzs/IHdoeSB0aGlzIGRpZmZlcmVuY2UgZGVwZW5kaW5nIG9uIGNvbXBpbGUgb3B0aW9uLCBzZWVtcyB0byBtZSBpdCBzaG91bGQgZGVwZW5kIG9uIHJ1bnRpbWUgaWYgYW55dGhpbmcKI2RlZmluZSBQQVJNX0RFRkFVTFRfU1NJRCAgICAgICAgICAgICAgICAgICAgICAgIkxpbnV4QVAiCiNlbHNlCiNkZWZpbmUgUEFSTV9ERUZBVUxUX1NTSUQgICAgICAgICAgICAgICAgICAgICAgICJBTlkiCiNlbmRpZiAvLyBIQ0ZfVFlQRV9BUAoKI2RlZmluZSBQQVJNX01JTl9OQU1FX0xFTiAgICAgICAgICAgICAgICAgICAgICAgMQojZGVmaW5lIFBBUk1fTUFYX05BTUVfTEVOICAgICAgICAgICAgICAgICAgICAgICAzMgoKCi8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgcGVydGFpbiB0byBtb2R1bGUgYW5kIHByb2ZpbGUgcGFyYW1ldGVycyAqLwovLyAjZGVmaW5lIFBBUk1fQVBfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUE1vZGUKLy8gI2RlZmluZSBQQVJNX05BTUVfQVBfTU9ERQkJCQkJCVRFWFQoIkFQTW9kZSIpCi8vICNkZWZpbmUgUEFSTV9ERUZBVUxUX0FQX01PREUJCQkJCUZBTFNFCgojZGVmaW5lIFBBUk1fQVVUSEVOVElDQVRJT04gICAgICAgICAgICAgICAgICAgICBBdXRoZW50aWNhdGlvbgojZGVmaW5lIFBBUk1fTkFNRV9BVVRIRU5USUNBVElPTgkJCQlURVhUKCJBdXRoZW50aWNhdGlvbiIpCiNkZWZpbmUgUEFSTV9NSU5fQVVUSEVOVElDQVRJT04gICAgICAgICAgICAgICAgIDEKI2RlZmluZSBQQVJNX01BWF9BVVRIRU5USUNBVElPTiAgICAgICAgICAgICAgICAgMgojZGVmaW5lIFBBUk1fREVGQVVMVF9BVVRIRU5USUNBVElPTiAgICAgICAgICAgICAxCgojZGVmaW5lIFBBUk1fQVVUSF9LRVlfTUdNVF9TVUlURSAgICAgICAgICAgICAgICBBdXRoS2V5TWdtdFN1aXRlCiNkZWZpbmUgUEFSTV9OQU1FX0FVVEhfS0VZX01HTVRfU1VJVEUgICAgICAgICAgIFRFWFQoIkF1dGhLZXlNZ210U3VpdGUiKQojZGVmaW5lIFBBUk1fTUlOX0FVVEhfS0VZX01HTVRfU1VJVEUgICAgICAgICAgICAwCiNkZWZpbmUgUEFSTV9NQVhfQVVUSF9LRVlfTUdNVF9TVUlURSAgICAgICAgICAgIDQKI2RlZmluZSBQQVJNX0RFRkFVTFRfQVVUSF9LRVlfTUdNVF9TVUlURSAgICAgICAgMAoKI2RlZmluZSBQQVJNX0JSU0NfMkdIWiAgICAgICAgICAgICAgICAgICAgICAgICAgQlJTQzJHSHoKI2RlZmluZSBQQVJNX05BTUVfQlJTQ18yR0haICAgICAgICAgICAgICAgICAgICAgVEVYVCgiQlJTQzJHSHoiKQojZGVmaW5lIFBBUk1fTUlOX0JSU0MgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAKI2RlZmluZSBQQVJNX01BWF9CUlNDICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRkZGCiNkZWZpbmUgUEFSTV9ERUZBVUxUX0JSU0NfMkdIWiAgICAgICAgICAgICAgICAgIDB4MDAwRgoKI2RlZmluZSBQQVJNX0JSU0NfNUdIWiAgICAgICAgICAgICAgICAgICAgICAgICAgQlJTQzVHSHoKI2RlZmluZSBQQVJNX05BTUVfQlJTQ181R0haICAgICAgICAgICAgICAgICAgICAgVEVYVCgiQlJTQzVHSHoiKQojZGVmaW5lIFBBUk1fREVGQVVMVF9CUlNDXzVHSFogICAgICAgICAgICAgICAgICAweDAxNTAKCiNkZWZpbmUgUEFSTV9DT0VYSVNURU5DRSAgICAgICAgICAgICAgICAgICAgICAgIENvZXhpc3RlbmNlCiNkZWZpbmUgUEFSTV9OQU1FX0NPRVhJU1RFTkNFICAgICAgICAgICAgICAgICAgIFRFWFQoIkNvZXhpc3RlbmNlIikKI2RlZmluZSBQQVJNX01JTl9DT0VYSVNURU5DRSAgICAgICAgICAgICAgICAgICAgMHgwMDAwCiNkZWZpbmUgUEFSTV9NQVhfQ09FWElTVEVOQ0UgICAgICAgICAgICAgICAgICAgIDB4MDAwNwojZGVmaW5lIFBBUk1fREVGQVVMVF9DT0VYSVNURU5DRSAgICAgICAgICAgICAgICAweDAwMDAKCiNkZWZpbmUgUEFSTV9DT05GSUdVUkVEICAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyZWQKI2RlZmluZSBQQVJNX05BTUVfQ09ORklHVVJFRAkJCQkJVEVYVCgiQ29uZmlndXJlZCIpCgojZGVmaW5lIFBBUk1fQ09OTkVDVElPTl9DT05UUk9MICAgICAgICAgICAgICAgICBDb25uZWN0aW9uQ29udHJvbAojZGVmaW5lIFBBUk1fTkFNRV9DT05ORUNUSU9OX0NPTlRST0wgICAgICAgICAgICBURVhUKCJDb25uZWN0aW9uQ29udHJvbCIpCiNkZWZpbmUgUEFSTV9NSU5fQ09OTkVDVElPTl9DT05UUk9MICAgICAgICAgICAgIDAKI2RlZmluZSBQQVJNX01BWF9DT05ORUNUSU9OX0NPTlRST0wgICAgICAgICAgICAgMwojZGVmaW5lIFBBUk1fREVGQVVMVF9DT05ORUNUSU9OX0NPTlRST0wgICAgICAgICAyCgojZGVmaW5lIFBBUk1fQ1JFQVRFX0lCU1MgICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVJQlNTCiNkZWZpbmUgUEFSTV9OQU1FX0NSRUFURV9JQlNTICAgICAgICAgICAgICAgICAgIFRFWFQoIkNyZWF0ZUlCU1MiKQojZGVmaW5lIFBBUk1fREVGQVVMVF9DUkVBVEVfSUJTUyAgICAgICAgICAgICAgICBGQUxTRQojZGVmaW5lIFBBUk1fREVGQVVMVF9DUkVBVEVfSUJTU19TVFIgICAgICAgICAgICAiTiIKCiNkZWZpbmUgUEFSTV9ERUJVR19GTEFHICAgICAgICAgICAgIAkgICAgCURlYnVnRmxhZwojZGVmaW5lIFBBUk1fTkFNRV9ERUJVR19GTEFHICAgICAgICAgICAgCQlURVhUKCJEZWJ1Z0ZsYWciKQojZGVmaW5lIFBBUk1fTUlOX0RFQlVHX0ZMQUcgICAgICAgICAgICAgCQkwCiNkZWZpbmUgUEFSTV9NQVhfREVCVUdfRkxBRyAgICAgICAgICAgICAJCTB4RkZGRgojZGVmaW5lIFBBUk1fREVGQVVMVF9ERUJVR19GTEFHICAgICAgICAgCQkweEZGRkYKCiNkZWZpbmUgUEFSTV9ERVNJUkVEX1NTSUQgICAgICAgICAgICAgICAgICAgICAgIERlc2lyZWRTU0lECiNkZWZpbmUgUEFSTV9OQU1FX0RFU0lSRURfU1NJRCAgICAgICAgICAgICAgICAgIFRFWFQoIkRlc2lyZWRTU0lEIikKCiNkZWZpbmUgUEFSTV9ET1dOTE9BRF9GSVJNV0FSRSAgICAgICAgICAgICAgICAgIERvd25sb2FkRmlybXdhcmUKI2RlZmluZSBQQVJNX05BTUVfRE9XTkxPQURfRklSTVdBUkUgICAgICAgICAgICAgVEVYVCgiRG93bmxvYWRGaXJtd2FyZSIpCgojZGVmaW5lIFBBUk1fRFJJVkVSX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICBEcml2ZXJFbmFibGUKI2RlZmluZSBQQVJNX05BTUVfRFJJVkVSX0VOQUJMRQkJCQkJVEVYVCgiRHJpdmVyRW5hYmxlIikKI2RlZmluZSBQQVJNX0RFRkFVTFRfRFJJVkVSX0VOQUJMRQkJCQlUUlVFCgojZGVmaW5lIFBBUk1fRU5BQkxFX0VOQ1JZUFRJT04gICAgICAgICAgICAgICAgICBFbmFibGVFbmNyeXB0aW9uCiNkZWZpbmUgUEFSTV9OQU1FX0VOQUJMRV9FTkNSWVBUSU9OICAgICAgICAgICAgIFRFWFQoIkVuYWJsZUVuY3J5cHRpb24iKQojZGVmaW5lIFBBUk1fTUlOX0VOQUJMRV9FTkNSWVBUSU9OICAgICAgICAgICAgICAwCiNkZWZpbmUgUEFSTV9NQVhfRU5BQkxFX0VOQ1JZUFRJT04gICAgICAgICAgICAgIDcKI2RlZmluZSBQQVJNX0RFRkFVTFRfRU5BQkxFX0VOQ1JZUFRJT04gICAgICAgICAgMAoKI2RlZmluZSBQQVJNX0VOQ1JZUFRJT04gICAgICAgICAgICAgICAgICAgICAgICAgRW5jcnlwdGlvbgojZGVmaW5lIFBBUk1fTkFNRV9FTkNSWVBUSU9OICAgICAgICAgICAgICAgICAgICBURVhUKCJFbmNyeXB0aW9uIikKCiNkZWZpbmUgUEFSTV9FWENMVURFX1VORU5DUllQVEVEICAgICAgICAgICAgICAgIEV4Y2x1ZGVVbmVuY3J5cHRlZAojZGVmaW5lIFBBUk1fTkFNRV9FWENMVURFX1VORU5DUllQVEVEICAgICAgICAgICBURVhUKCJFeGNsdWRlVW5lbmNyeXB0ZWQiKQojZGVmaW5lIFBBUk1fREVGQVVMVF9FWENMVURFX1VORU5DUllQVEVEICAgICAgICBUUlVFCiNkZWZpbmUgUEFSTV9ERUZBVUxUX0VYQ0xVREVfVU5FTkNSWVBURURfU1RSICAgICJOIgoKI2RlZmluZSBQQVJNX0lOVFJBX0JTU19SRUxBWSAgICAgICAgICAgICAgICAgICAgSW50cmFCU1NSZWxheQojZGVmaW5lIFBBUk1fTkFNRV9JTlRSQV9CU1NfUkVMQVkgICAgICAgICAgICAgICBURVhUKCJJbnRyYUJTU1JlbGF5IikKI2RlZmluZSBQQVJNX0RFRkFVTFRfSU5UUkFfQlNTX1JFTEFZICAgICAgICAgICAgVFJVRQojZGVmaW5lIFBBUk1fREVGQVVMVF9JTlRSQV9CU1NfUkVMQVlfU1RSICAgICAgICAiWSIKCiNkZWZpbmUgUEFSTV9LRVkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleTEKI2RlZmluZSBQQVJNX05BTUVfS0VZMSAgICAgICAgICAgICAgICAgICAgICAgICAgVEVYVCgiS2V5MSIpCiNkZWZpbmUgUEFSTV9LRVkyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleTIKI2RlZmluZSBQQVJNX05BTUVfS0VZMiAgICAgICAgICAgICAgICAgICAgICAgICAgVEVYVCgiS2V5MiIpCiNkZWZpbmUgUEFSTV9LRVkzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleTMKI2RlZmluZSBQQVJNX05BTUVfS0VZMyAgICAgICAgICAgICAgICAgICAgICAgICAgVEVYVCgiS2V5MyIpCiNkZWZpbmUgUEFSTV9LRVk0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleTQKI2RlZmluZSBQQVJNX05BTUVfS0VZNCAgICAgICAgICAgICAgICAgICAgICAgICAgVEVYVCgiS2V5NCIpCgovLzs/ICNkZWZpbmUgUEFSTV9LRVlfRk9STUFUICAgICAgICAgICAgICAgICAgICAgICAgIEFzY2lpSGV4Ci8vOz8gI2RlZmluZSBQQVJNX05BTUVfS0VZX0ZPUk1BVCAgICAgICAgICAgICAgICAgICAgVEVYVCgiQXNjaWlIZXgiKQoKI2RlZmluZSBQQVJNX0xPQURfQkFMQU5DSU5HICAgICAgICAgICAgICAgICAgICAgTG9hZEJhbGFuY2luZwojZGVmaW5lIFBBUk1fTkFNRV9MT0FEX0JBTEFOQ0lORyAgICAgICAgICAgICAgICBURVhUKCJMb2FkQmFsYW5jaW5nIikKI2RlZmluZSBQQVJNX0RFRkFVTFRfTE9BRF9CQUxBTkNJTkcgICAgICAgICAgICAgVFJVRQojZGVmaW5lIFBBUk1fREVGQVVMVF9MT0FEX0JBTEFOQ0lOR19TVFIgICAgICAgICAiWSIKCiNkZWZpbmUgUEFSTV9NQVhfREFUQV9MRU5HVEggICAgICAgICAgICAgICAgICAgIE1heERhdGFMZW5ndGgKI2RlZmluZSBQQVJNX05BTUVfTUFYX0RBVEFfTEVOR1RICQkJCVRFWFQoIk1heERhdGFMZW5ndGgiKQoKI2RlZmluZSBQQVJNX01BWF9TTEVFUCAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4U2xlZXBEdXJhdGlvbgojZGVmaW5lIFBBUk1fTkFNRV9NQVhfU0xFRVAgICAgICAgICAgICAgICAgICAgICBURVhUKCJNYXhTbGVlcER1cmF0aW9uIikKI2RlZmluZSBQQVJNX01JTl9NQVhfUE1fU0xFRVAgICAgICAgICAgICAgICAgICAgMQkJCQkJCQkJLy87P25hbWVzIG5lYXJseSByaWdodD8KI2RlZmluZSBQQVJNX01BWF9NQVhfUE1fU0xFRVAgICAgICAgICAgICAgICAgICAgNjU1MzUKI2RlZmluZSBQQVJNX0RFRkFVTFRfTUFYX1BNX1NMRUVQICAgICAgICAgICAgICAgMTAwCgojZGVmaW5lIFBBUk1fTUVESVVNX0RJU1RSSUJVVElPTiAgICAgICAgICAgICAgICBNZWRpdW1EaXN0cmlidXRpb24KI2RlZmluZSBQQVJNX05BTUVfTUVESVVNX0RJU1RSSUJVVElPTiAgICAgICAgICAgVEVYVCgiTWVkaXVtRGlzdHJpYnV0aW9uIikKI2RlZmluZSBQQVJNX0RFRkFVTFRfTUVESVVNX0RJU1RSSUJVVElPTiAgICAgICAgVFJVRQojZGVmaW5lIFBBUk1fREVGQVVMVF9NRURJVU1fRElTVFJJQlVUSU9OX1NUUiAgICAiWSIKCiNkZWZpbmUgUEFSTV9NSUNST1dBVkVfUk9CVVNUTkVTUyAgICAgICAgICAgICAgIE1pY3JvV2F2ZVJvYnVzdG5lc3MKI2RlZmluZSBQQVJNX05BTUVfTUlDUk9XQVZFX1JPQlVTVE5FU1MgICAgICAgICAgVEVYVCgiTWljcm9XYXZlUm9idXN0bmVzcyIpCiNkZWZpbmUgUEFSTV9ERUZBVUxUX01JQ1JPV0FWRV9ST0JVU1RORVNTICAgICAgIEZBTFNFCiNkZWZpbmUgUEFSTV9ERUZBVUxUX01JQ1JPV0FWRV9ST0JVU1RORVNTX1NUUiAgICJOIgoKI2RlZmluZSBQQVJNX01VTFRJQ0FTVF9QTV9CVUZGRVJJTkcgICAgICAgICAgICAgTXVsdGljYXN0UE1CdWZmZXJpbmcKI2RlZmluZSBQQVJNX05BTUVfTVVMVElDQVNUX1BNX0JVRkZFUklORwkgICAgVEVYVCgiTXVsdGljYXN0UE1CdWZmZXJpbmciKQojZGVmaW5lIFBBUk1fREVGQVVMVF9NVUxUSUNBU1RfUE1fQlVGRkVSSU5HICAgICBUUlVFCiNkZWZpbmUgUEFSTV9ERUZBVUxUX01VTFRJQ0FTVF9QTV9CVUZGRVJJTkdfU1RSICJZIgoKI2RlZmluZSBQQVJNX01VTFRJQ0FTVF9SQVRFICAgICAgICAgICAgICAgICAgICAgTXVsdGljYXN0UmF0ZQojZGVmaW5lIFBBUk1fTkFNRV9NVUxUSUNBU1RfUkFURSAgICAgICAgICAgICAgICBURVhUKCJNdWx0aWNhc3RSYXRlIikKI2lmZGVmIFdBUlAKI2RlZmluZSBQQVJNX01JTl9NVUxUSUNBU1RfUkFURSAgICAgICAgICAgICAgICAgMHgwMDAxCiNkZWZpbmUgUEFSTV9NQVhfTVVMVElDQVNUX1JBVEUgICAgICAgICAgICAgICAgIDB4MGZmZgojZGVmaW5lIFBBUk1fREVGQVVMVF9NVUxUSUNBU1RfUkFURV8yR0haICAgICAgICAweDAwMDQKI2RlZmluZSBQQVJNX0RFRkFVTFRfTVVMVElDQVNUX1JBVEVfNUdIWiAgICAgICAgMHgwMDEwCiNlbHNlCiNkZWZpbmUgUEFSTV9NSU5fTVVMVElDQVNUX1JBVEUgICAgICAgICAgICAgICAgIDB4MDAwMQojZGVmaW5lIFBBUk1fTUFYX01VTFRJQ0FTVF9SQVRFICAgICAgICAgICAgICAgICAweDAwMDQKI2RlZmluZSBQQVJNX0RFRkFVTFRfTVVMVElDQVNUX1JBVEVfMkdIWiAgICAgICAgMHgwMDAyCiNkZWZpbmUgUEFSTV9ERUZBVUxUX01VTFRJQ0FTVF9SQVRFXzVHSFogICAgICAgIDB4MDAwMAojZW5kaWYgIC8vIFdBUlAKCiNkZWZpbmUgUEFSTV9NVUxUSUNBU1RfUlggICAgICAgICAgICAgICAgICAgICAgIE11bHRpY2FzdFJlY2VpdmUKI2RlZmluZSBQQVJNX05BTUVfTVVMVElDQVNUX1JYICAgICAgICAgICAgICAgICAgVEVYVCgiTXVsdGljYXN0UmVjZWl2ZSIpCiNkZWZpbmUgUEFSTV9ERUZBVUxUX01VTFRJQ0FTVF9SWCAgICAgICAgICAgICAgIFRSVUUKI2RlZmluZSBQQVJNX0RFRkFVTFRfTVVMVElDQVNUX1JYX1NUUiAgICAgICAgICAgIlkiCgojZGVmaW5lIFBBUk1fTkVUV09SS19BRERSICAgICAgICAgICAgICAgICAgICAgICBOZXR3b3JrQWRkcmVzcwojZGVmaW5lIFBBUk1fTkFNRV9ORVRXT1JLX0FERFIgICAgICAgICAgICAgICAgICBURVhUKCJOZXR3b3JrQWRkcmVzcyIpCiNkZWZpbmUgUEFSTV9ERUZBVUxUX05FVFdPUktfQUREUiAgICAgICAgICAgICAgIHsgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiB9CgojZGVmaW5lIFBBUk1fTkVUV09SS19UWVBFICAgICAgICAgICAgICAgICAgICAgICBOZXR3b3JrVHlwZQojZGVmaW5lIFBBUk1fTkFNRV9ORVRXT1JLX1RZUEUJCQkJCVRFWFQoIk5ldHdvcmtUeXBlIikKI2RlZmluZSBQQVJNX0RFRkFVTFRfTkVUV09SS19UWVBFICAgCQkJMAoKI2RlZmluZSBQQVJNX09XTl9BVElNX1dJTkRPVyAgICAgICAgICAgICAgICAgICAgT3duQVRJTVdpbmRvdwojZGVmaW5lIFBBUk1fTkFNRV9PV05fQVRJTV9XSU5ET1cJCQkJVEVYVCgiT3duQVRJTVdpbmRvdyIpCiNkZWZpbmUgUEFSTV9NSU5fT1dOX0FUSU1fV0lORE9XICAgICAgICAgICAgICAgIDAKI2RlZmluZSBQQVJNX01BWF9PV05fQVRJTV9XSU5ET1cgICAgICAgICAgICAgICAgMTAwCiNkZWZpbmUgUEFSTV9ERUZBVUxUX09XTl9BVElNX1dJTkRPVyAgICAgICAgICAgIDAKCiNkZWZpbmUgUEFSTV9PV05fQkVBQ09OX0lOVEVSVkFMICAgICAgICAgICAgICAgIE93bkJlYWNvbkludGVydmFsCiNkZWZpbmUgUEFSTV9OQU1FX09XTl9CRUFDT05fSU5URVJWQUwgICAgICAgICAgIFRFWFQoIk93bkJlYWNvbkludGVydmFsIikKI2RlZmluZSBQQVJNX01JTl9PV05fQkVBQ09OX0lOVEVSVkFMICAgICAgICAgICAgMjAKI2RlZmluZSBQQVJNX01BWF9PV05fQkVBQ09OX0lOVEVSVkFMICAgICAgICAgICAgMjAwCiNkZWZpbmUgUEFSTV9ERUZBVUxUX09XTl9CRUFDT05fSU5URVJWQUwgICAgICAgIDEwMAoKI2RlZmluZSBQQVJNX09XTl9DSEFOTkVMICAgICAgICAgICAgICAgICAgICAgICAgT3duQ2hhbm5lbAojZGVmaW5lIFBBUk1fTkFNRV9PV05fQ0hBTk5FTCAgICAgICAgICAgICAgICAgICBURVhUKCJPd25DaGFubmVsIikKI2RlZmluZSBQQVJNX01JTl9PV05fQ0hBTk5FTCAgICAgICAgICAgICAgICAgICAgMQojZGVmaW5lIFBBUk1fTUFYX09XTl9DSEFOTkVMICAgICAgICAgICAgICAgICAgICAxNjEKI2RlZmluZSBQQVJNX0RFRkFVTFRfT1dOX0NIQU5ORUwgICAgICAgICAgICAgICAgMTAKCiNkZWZpbmUgUEFSTV9PV05fRFRJTV9QRVJJT0QgICAgICAgICAgICAgICAgICAgIE93bkRUSU1QZXJpb2QKI2RlZmluZSBQQVJNX05BTUVfT1dOX0RUSU1fUEVSSU9ECSAgICAgICAgICAgIFRFWFQoIk93bkRUSU1QZXJpb2QiKQojZGVmaW5lIFBBUk1fTUlOX09XTl9EVElNX1BFUklPRCAgICAgICAgICAgICAgICAxCiNkZWZpbmUgUEFSTV9NQVhfT1dOX0RUSU1fUEVSSU9EICAgICAgICAgICAgICAgIDY1NTM1CiNkZWZpbmUgUEFSTV9ERUZBVUxUX09XTl9EVElNX1BFUklPRCAgICAgICAgICAgIDEKCiNkZWZpbmUgUEFSTV9PV05fTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICAgIE93bk5hbWUKI2RlZmluZSBQQVJNX05BTUVfT1dOX05BTUUgICAgICAgICAgICAgICAgICAgICAgVEVYVCgiT3duTmFtZSIpCiNkZWZpbmUgUEFSTV9ERUZBVUxUX09XTl9OQU1FICAgICAgICAgICAgICAgICAgICJMaW51eCIKCiNkZWZpbmUgUEFSTV9PV05fU1NJRCAgICAgICAgICAgICAgICAgICAgICAgICAgIE93blNTSUQKI2RlZmluZSBQQVJNX05BTUVfT1dOX1NTSUQgICAgICAgICAgICAgICAgICAgICAgVEVYVCgiT3duU1NJRCIpCgojZGVmaW5lIFBBUk1fUE1fRU5BQkxFRCAgICAgICAgICAgICAgICAgICAgICAgICBQTUVuYWJsZWQKI2RlZmluZSBQQVJNX05BTUVfUE1fRU5BQkxFRCAgICAgICAgICAgICAgICAgICAgVEVYVCgiUE1FbmFibGVkIikKI2RlZmluZSBQQVJNX01BWF9QTV9FTkFCTEVECQkJCQkJMwoKI2RlZmluZSBQQVJNX1BNRVBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE1FUFMKI2RlZmluZSBQQVJNX05BTUVfUE1FUFMgICAgICAgICAgICAgICAgICAgICAgICAgVEVYVCgiUE1FUFMiKQoKI2RlZmluZSBQQVJNX1BNX0hPTERPVkVSX0RVUkFUSU9OICAgICAgICAgICAgICAgUE1Ib2xkb3ZlckR1cmF0aW9uCiNkZWZpbmUgUEFSTV9OQU1FX1BNX0hPTERPVkVSX0RVUkFUSU9OICAgICAgICAgIFRFWFQoIlBNSG9sZG92ZXJEdXJhdGlvbiIpCiNkZWZpbmUgUEFSTV9NSU5fUE1fSE9MRE9WRVJfRFVSQVRJT04gICAgICAgICAgIDEKI2RlZmluZSBQQVJNX01BWF9QTV9IT0xET1ZFUl9EVVJBVElPTiAgICAgICAgICAgMTAwMAojZGVmaW5lIFBBUk1fREVGQVVMVF9QTV9IT0xET1ZFUl9EVVJBVElPTiAgICAgICAxMDAKCiNkZWZpbmUgUEFSTV9QTV9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyTW9kZQojZGVmaW5lIFBBUk1fTkFNRV9QTV9NT0RFICAgICAgICAgICAgICAgICAgICAgICBURVhUKCJQb3dlck1vZGUiKQoKI2RlZmluZSBQQVJNX1BPUlRfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgUG9ydFR5cGUKI2RlZmluZSBQQVJNX05BTUVfUE9SVF9UWVBFICAgICAgICAgICAgICAgICAgICAgVEVYVCgiUG9ydFR5cGUiKQojZGVmaW5lIFBBUk1fTUlOX1BPUlRfVFlQRSAgICAgICAgICAgICAgICAgICAgICAxCiNkZWZpbmUgUEFSTV9NQVhfUE9SVF9UWVBFICAgICAgICAgICAgICAgICAgICAgIDMKI2RlZmluZSBQQVJNX0RFRkFVTFRfUE9SVF9UWVBFICAgICAgICAgICAgICAgICAgMQoKI2RlZmluZSBQQVJNX1BST01JU0NVT1VTX01PREUgICAgICAgICAgICAgICAgICAgUHJvbWlzY3VvdXNNb2RlCiNkZWZpbmUgUEFSTV9OQU1FX1BST01JU0NVT1VTX01PREUgICAgICAgICAgICAgIFRFWFQoIlByb21pc2N1b3VzTW9kZSIpCiNkZWZpbmUgUEFSTV9ERUZBVUxUX1BST01JU0NVT1VTX01PREUgICAgICAgICAgIEZBTFNFCiNkZWZpbmUgUEFSTV9ERUZBVUxUX1BST01JU0NVT1VTX01PREVfU1RSICAgICAgICJOIgoKI2RlZmluZSBQQVJNX1JFSkVDVF9BTlkgICAgICAgICAgICAgICAgICAgICAgICAgUmVqZWN0QU5ZCiNkZWZpbmUgUEFSTV9OQU1FX1JFSkVDVF9BTlkJCQkJICAgIFRFWFQoIlJlamVjdEFOWSIpCiNkZWZpbmUgUEFSTV9ERUZBVUxUX1JFSkVDVF9BTlkgICAgICAgICAgICAgICAgIEZBTFNFCiNkZWZpbmUgUEFSTV9ERUZBVUxUX1JFSkVDVF9BTllfU1RSICAgICAgICAgICAgICJOIgoKI2RlZmluZSBQQVJNX1JUU19USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgICAgUlRTVGhyZXNob2xkCiNkZWZpbmUgUEFSTV9OQU1FX1JUU19USFJFU0hPTEQgICAgICAgICAgICAgICAgIFRFWFQoIlJUU1RocmVzaG9sZCIpCiNkZWZpbmUgUEFSTV9NSU5fUlRTX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgIDAKI2RlZmluZSBQQVJNX01BWF9SVFNfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgMjM0NwojZGVmaW5lIFBBUk1fREVGQVVMVF9SVFNfVEhSRVNIT0xEICAgICAgICAgICAgICAyMzQ3CgojZGVmaW5lIFBBUk1fUlRTX1RIUkVTSE9MRDEgICAgICAgICAgICAgICAgICAgICBSVFNUaHJlc2hvbGQxCiNkZWZpbmUgUEFSTV9OQU1FX1JUU19USFJFU0hPTEQxICAgICAgICAgICAgICAgIFRFWFQoIlJUU1RocmVzaG9sZDEiKQojZGVmaW5lIFBBUk1fUlRTX1RIUkVTSE9MRDIgICAgICAgICAgICAgICAgICAgICBSVFNUaHJlc2hvbGQyCiNkZWZpbmUgUEFSTV9OQU1FX1JUU19USFJFU0hPTEQyICAgICAgICAgICAgICAgIFRFWFQoIlJUU1RocmVzaG9sZDIiKQojZGVmaW5lIFBBUk1fUlRTX1RIUkVTSE9MRDMgICAgICAgICAgICAgICAgICAgICBSVFNUaHJlc2hvbGQzCiNkZWZpbmUgUEFSTV9OQU1FX1JUU19USFJFU0hPTEQzICAgICAgICAgICAgICAgIFRFWFQoIlJUU1RocmVzaG9sZDMiKQojZGVmaW5lIFBBUk1fUlRTX1RIUkVTSE9MRDQgICAgICAgICAgICAgICAgICAgICBSVFNUaHJlc2hvbGQ0CiNkZWZpbmUgUEFSTV9OQU1FX1JUU19USFJFU0hPTEQ0ICAgICAgICAgICAgICAgIFRFWFQoIlJUU1RocmVzaG9sZDQiKQojZGVmaW5lIFBBUk1fUlRTX1RIUkVTSE9MRDUgICAgICAgICAgICAgICAgICAgICBSVFNUaHJlc2hvbGQ1CiNkZWZpbmUgUEFSTV9OQU1FX1JUU19USFJFU0hPTEQ1ICAgICAgICAgICAgICAgIFRFWFQoIlJUU1RocmVzaG9sZDUiKQojZGVmaW5lIFBBUk1fUlRTX1RIUkVTSE9MRDYgICAgICAgICAgICAgICAgICAgICBSVFNUaHJlc2hvbGQ2CiNkZWZpbmUgUEFSTV9OQU1FX1JUU19USFJFU0hPTEQ2ICAgICAgICAgICAgICAgIFRFWFQoIlJUU1RocmVzaG9sZDYiKQoKI2RlZmluZSBQQVJNX1NSU0NfMkdIWiAgICAgICAgICAgICAgICAgICAgICAgICAgU1JTQzJHSHoKI2RlZmluZSBQQVJNX05BTUVfU1JTQ18yR0haICAgICAgICAgICAgICAgICAgICAgVEVYVCgiU1JTQzJHSHoiKQojZGVmaW5lIFBBUk1fTUlOX1NSU0MgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAKI2RlZmluZSBQQVJNX01BWF9TUlNDICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRkZGCiNkZWZpbmUgUEFSTV9ERUZBVUxUX1NSU0NfMkdIWiAgICAgICAgICAgICAgICAgIDB4MEZGRgoKI2RlZmluZSBQQVJNX1NSU0NfNUdIWiAgICAgICAgICAgICAgICAgICAgICAgICAgU1JTQzVHSHoKI2RlZmluZSBQQVJNX05BTUVfU1JTQ181R0haICAgICAgICAgICAgICAgICAgICAgVEVYVCgiU1JTQzVHSHoiKQojZGVmaW5lIFBBUk1fREVGQVVMVF9TUlNDXzVHSFogICAgICAgICAgICAgICAgICAweDBGRjAKCiNkZWZpbmUgUEFSTV9TWVNURU1fU0NBTEUgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbVNjYWxlCiNkZWZpbmUgUEFSTV9OQU1FX1NZU1RFTV9TQ0FMRSAgICAgICAgICAgICAgICAgIFRFWFQoIlN5c3RlbVNjYWxlIikKI2RlZmluZSBQQVJNX01JTl9TWVNURU1fU0NBTEUgICAgICAgICAgICAgICAgICAgMQojZGVmaW5lIFBBUk1fTUFYX1NZU1RFTV9TQ0FMRSAgICAgICAgICAgICAgICAgICA1CiNkZWZpbmUgUEFSTV9ERUZBVUxUX1NZU1RFTV9TQ0FMRSAgICAgICAgICAgICAgIDEKCiNkZWZpbmUgUEFSTV9UWF9LRVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR4S2V5CiNkZWZpbmUgUEFSTV9OQU1FX1RYX0tFWSAgICAgICAgICAgICAgICAgICAgICAgIFRFWFQoIlR4S2V5IikKI2RlZmluZSBQQVJNX01JTl9UWF9LRVkgICAgICAgICAgICAgICAgICAgICAgICAgMQojZGVmaW5lIFBBUk1fTUFYX1RYX0tFWSAgICAgICAgICAgICAgICAgICAgICAgICA0CiNkZWZpbmUgUEFSTV9ERUZBVUxUX1RYX0tFWSAgICAgICAgICAgICAgICAgICAgIDEKCiNkZWZpbmUgUEFSTV9UWF9QT1dfTEVWRUwgICAgICAgICAgICAgICAgICAgICAgIFR4UG93TGV2ZWwKI2RlZmluZSBQQVJNX05BTUVfVFhfUE9XX0xFVkVMICAgICAgICAgICAgICAgICAgVEVYVCgiVHhQb3dMZXZlbCIpCiNkZWZpbmUgUEFSTV9NSU5fVFhfUE9XX0xFVkVMICAgICAgICAgICAgICAgICAgIDEgICAvLyAyMCBkQm0KI2RlZmluZSBQQVJNX01BWF9UWF9QT1dfTEVWRUwgICAgICAgICAgICAgICAgICAgNiAgIC8vICA4IGRCbQojZGVmaW5lIFBBUk1fREVGQVVMVF9UWF9QT1dfTEVWRUwgICAgICAgICAgICAgICAzICAgLy8gMTUgZEJtCgojZGVmaW5lIFBBUk1fVFhfUkFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeFJhdGVDb250cm9sCiNkZWZpbmUgUEFSTV9OQU1FX1RYX1JBVEUgICAgICAgICAgICAgICAgICAgICAgIFRFWFQoIlR4UmF0ZUNvbnRyb2wiKQojZGVmaW5lIFBBUk1fTUlOX1RYX1JBVEUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKI2lmZGVmIFdBUlAKI2RlZmluZSBQQVJNX01BWF9UWF9SQVRFICAgICAgICAgICAgICAgICAgICAgICAgMHgwRkZGCiNkZWZpbmUgUEFSTV9ERUZBVUxUX1RYX1JBVEVfMkdIWiAgICAgICAgICAgICAgIDB4MEZGRgojZGVmaW5lIFBBUk1fREVGQVVMVF9UWF9SQVRFXzVHSFogICAgICAgICAgICAgICAweDBGRjAKI2Vsc2UKI2RlZmluZSBQQVJNX01BWF9UWF9SQVRFICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3CiNkZWZpbmUgUEFSTV9ERUZBVUxUX1RYX1JBVEVfMkdIWiAgICAgICAgICAgICAgIDB4MDAwMwojZGVmaW5lIFBBUk1fREVGQVVMVF9UWF9SQVRFXzVHSFogICAgICAgICAgICAgICAweDAwMDAKI2VuZGlmICAvLyBXQVJQCgojZGVmaW5lIFBBUk1fVFhfUkFURTEgICAgICAgICAgICAgICAgICAgICAgICAgICBUeFJhdGVDb250cm9sMQojZGVmaW5lIFBBUk1fTkFNRV9UWF9SQVRFMSAgICAgICAgICAgICAgICAgICAgICBURVhUKCJUeFJhdGVDb250cm9sMSIpCiNkZWZpbmUgUEFSTV9UWF9SQVRFMiAgICAgICAgICAgICAgICAgICAgICAgICAgIFR4UmF0ZUNvbnRyb2wyCiNkZWZpbmUgUEFSTV9OQU1FX1RYX1JBVEUyICAgICAgICAgICAgICAgICAgICAgIFRFWFQoIlR4UmF0ZUNvbnRyb2wyIikKI2RlZmluZSBQQVJNX1RYX1JBVEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgVHhSYXRlQ29udHJvbDMKI2RlZmluZSBQQVJNX05BTUVfVFhfUkFURTMgICAgICAgICAgICAgICAgICAgICAgVEVYVCgiVHhSYXRlQ29udHJvbDMiKQojZGVmaW5lIFBBUk1fVFhfUkFURTQgICAgICAgICAgICAgICAgICAgICAgICAgICBUeFJhdGVDb250cm9sNAojZGVmaW5lIFBBUk1fTkFNRV9UWF9SQVRFNCAgICAgICAgICAgICAgICAgICAgICBURVhUKCJUeFJhdGVDb250cm9sNCIpCiNkZWZpbmUgUEFSTV9UWF9SQVRFNSAgICAgICAgICAgICAgICAgICAgICAgICAgIFR4UmF0ZUNvbnRyb2w1CiNkZWZpbmUgUEFSTV9OQU1FX1RYX1JBVEU1ICAgICAgICAgICAgICAgICAgICAgIFRFWFQoIlR4UmF0ZUNvbnRyb2w1IikKI2RlZmluZSBQQVJNX1RYX1JBVEU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgVHhSYXRlQ29udHJvbDYKI2RlZmluZSBQQVJNX05BTUVfVFhfUkFURTYgICAgICAgICAgICAgICAgICAgICAgVEVYVCgiVHhSYXRlQ29udHJvbDYiKQoKI2RlZmluZSBQQVJNX1ZFTkRPUkRFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgVmVuZG9yRGVzY3JpcHRpb24KI2RlZmluZSBQQVJNX05BTUVfVkVORE9SREVTQ1JJUFRJT04JCQkJVEVYVCgiVmVuZG9yRGVzY3JpcHRpb24iKQoKI2RlZmluZSBQQVJNX1dEU19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgV0RTQWRkcmVzcwojZGVmaW5lIFBBUk1fTkFNRV9XRFNfQUREUkVTUwkJCQkJVEVYVCgiV0RTQWRkcmVzcyIpCgojZGVmaW5lIFBBUk1fV0RTX0FERFJFU1MxICAgICAgICAgICAgICAgICAgICAgICBXRFNBZGRyZXNzMQojZGVmaW5lIFBBUk1fTkFNRV9XRFNfQUREUkVTUzEJCQkJCVRFWFQoIldEU0FkZHJlc3MxIikKI2RlZmluZSBQQVJNX1dEU19BRERSRVNTMiAgICAgICAgICAgICAgICAgICAgICAgV0RTQWRkcmVzczIKI2RlZmluZSBQQVJNX05BTUVfV0RTX0FERFJFU1MyCQkJCQlURVhUKCJXRFNBZGRyZXNzMiIpCiNkZWZpbmUgUEFSTV9XRFNfQUREUkVTUzMgICAgICAgICAgICAgICAgICAgICAgIFdEU0FkZHJlc3MzCiNkZWZpbmUgUEFSTV9OQU1FX1dEU19BRERSRVNTMwkJCQkJVEVYVCgiV0RTQWRkcmVzczMiKQojZGVmaW5lIFBBUk1fV0RTX0FERFJFU1M0ICAgICAgICAgICAgICAgICAgICAgICBXRFNBZGRyZXNzNAojZGVmaW5lIFBBUk1fTkFNRV9XRFNfQUREUkVTUzQJCQkJCVRFWFQoIldEU0FkZHJlc3M0IikKI2RlZmluZSBQQVJNX1dEU19BRERSRVNTNSAgICAgICAgICAgICAgICAgICAgICAgV0RTQWRkcmVzczUKI2RlZmluZSBQQVJNX05BTUVfV0RTX0FERFJFU1M1CQkJCQlURVhUKCJXRFNBZGRyZXNzNSIpCiNkZWZpbmUgUEFSTV9XRFNfQUREUkVTUzYgICAgICAgICAgICAgICAgICAgICAgIFdEU0FkZHJlc3M2CiNkZWZpbmUgUEFSTV9OQU1FX1dEU19BRERSRVNTNgkJCQkJVEVYVCgiV0RTQWRkcmVzczYiKQoKLyoKI2RlZmluZSBQQVJNX0xPTkdfUkVUUllfTElNSVQgICAgICAgICAgICAgICAgICAgTG9uZ1JldHJ5TGltaXQKI2RlZmluZSBQQVJNX05BTUVfTE9OR19SRVRSWV9MSU1JVCAgICAgICAgICAgICAgVEVYVCgiTG9uZ1JldHJ5TGltaXQiKQojZGVmaW5lIFBBUk1fTUlOX0xPTkdfUkVUUllfTElNSVQgICAgICAgICAgICAgICAxCiNkZWZpbmUgUEFSTV9NQVhfTE9OR19SRVRSWV9MSU1JVCAgICAgICAgICAgICAgIDE1CiNkZWZpbmUgUEFSTV9ERUZBVUxUX0xPTkdfUkVUUllfTElNSVQgICAgICAgICAgIDMKCgojZGVmaW5lIFBBUk1fUFJPQkVfREFUQV9SQVRFUyAgICAgICAgICAgICAgICAgICBQcm9iZURhdGFSYXRlcwojZGVmaW5lIFBBUk1fTkFNRV9QUk9CRV9EQVRBX1JBVEVTICAgICAgICAgICAgICBURVhUKCJQcm9iZURhdGFSYXRlcyIpCiNkZWZpbmUgUEFSTV9NSU5fUFJPQkVfREFUQV9SQVRFUyAgICAgICAgICAgICAgIDB4MDAwMAojZGVmaW5lIFBBUk1fTUFYX1BST0JFX0RBVEFfUkFURVMgICAgICAgICAgICAgICAweDBGRkYKI2RlZmluZSBQQVJNX0RFRkFVTFRfUFJPQkVfREFUQV9SQVRFU18yR0haICAgICAgMHgwMDAyCiNkZWZpbmUgUEFSTV9ERUZBVUxUX1BST0JFX0RBVEFfUkFURVNfNUdIWiAgICAgIDB4MDAxMAoKI2RlZmluZSBQQVJNX1NIT1JUX1JFVFJZX0xJTUlUICAgICAgICAgICAgICAgICAgU2hvcnRSZXRyeUxpbWl0CiNkZWZpbmUgUEFSTV9OQU1FX1NIT1JUX1JFVFJZX0xJTUlUICAgICAgICAgICAgIFRFWFQoIlNob3J0UmV0cnlMaW1pdCIpCiNkZWZpbmUgUEFSTV9NSU5fU0hPUlRfUkVUUllfTElNSVQgICAgICAgICAgICAgIDEKI2RlZmluZSBQQVJNX01BWF9TSE9SVF9SRVRSWV9MSU1JVCAgICAgICAgICAgICAgMTUKI2RlZmluZSBQQVJNX0RFRkFVTFRfU0hPUlRfUkVUUllfTElNSVQgICAgICAgICAgNwoKCiovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgc3RhdGUgZGVmaW5pdGlvbnMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyogVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHVzZWQgdG8gdHJhY2sgc3RhdGUgdGhlIGRldmljZSAqLwojZGVmaW5lIFdMX0ZSSU1XQVJFX1BSRVNFTlQgICAgIDEgLy8gRG93bmxvYWQgaWYgbmVlZGVkCiNkZWZpbmUgV0xfRlJJTVdBUkVfTk9UX1BSRVNFTlQJMCAvLyBTa2lwIG92ZXIgZG93bmxvYWQsIGFzc3VtZSBpdHMgYWxyZWFkeSB0aGVyZQojZGVmaW5lIFdMX0hBTkRMSU5HX0lOVCAgICAgICAgIDEgLy8gQWN0dWFsbHkgY2FsbCB0aGUgSENGIHRvIHN3aXRjaCBpbnRlcnJ1cHRzIG9uL29mZgojZGVmaW5lIFdMX05PVF9IQU5ETElOR19JTlQgICAgIDAgLy8gTm90IHlldCBoYW5kbGluZyBpbnRlcnJ1cHRzLCBkbyBub3Qgc3dpdGNoIG9uL29mZgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogIG1hY3JvIGRlZmluaXRpb25zCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qIFRoZSBmb2xsb3dpbmcgbWFjcm8gZW5zdXJlcyB0aGF0IG5vIHN5bWJvbHMgYXJlIGV4cG9ydGVkLCBtaW5pbWl6aW5nIHRoZQogICBjaGFuY2Ugb2YgYSBzeW1ib2wgY29sbGlzaW9uIGluIHRoZSBrZXJuZWwgKi8KLy8gRVhQT1JUX05PX1NZTUJPTFM7CgojZGVmaW5lIE5FTEVNKGFycikgKHNpemVvZihhcnIpIC8gc2l6ZW9mKGFyclswXSkpCgojZGVmaW5lIFdWTEFOX1ZBTElEX01BQ19BRERSRVNTKCB4ICkgXAooKHhbMF0hPTB4RkYpICYmICh4WzFdIT0weEZGKSAmJiAoeFsyXSE9MHhGRikgJiYgKHhbM10hPTB4RkYpICYmICh4WzRdIT0weEZGKSAmJiAoeFs1XSE9MHhGRikpCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiB0eXBlIGRlZmluaXRpb25zCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiN1bmRlZiBGQUxTRQojdW5kZWYgVFJVRQoKdHlwZWRlZiBlbnVtCnsKCUZBTFNFID0gMCwKCVRSVUUgID0gMQp9CmJvb2xfdDsKCgp0eXBlZGVmIHN0cnVjdCBfU2NhblJlc3VsdAp7CgkvL2hjZl8xNiAgICAgICAgbGVuOwoJLy9oY2ZfMTYgICAgICAgIHR5cDsKCWludCAgICAgICAgICAgICBzY2FuX2NvbXBsZXRlOwoJaW50ICAgICAgICAgICAgIG51bV9hcHM7CglTQ0FOX1JTX1NUUkNUICAgQVBUYWJsZSBbTUFYX05BUFNdOwp9ClNjYW5SZXN1bHQ7CgoKdHlwZWRlZiBzdHJ1Y3QgX0xJTktfU1RBVFVTX1NUUkNUCnsKCWhjZl8xNiAgbGVuOwoJaGNmXzE2ICB0eXA7CgloY2ZfMTYgIGxpbmtTdGF0dXM7ICAgICAvKiAxLi41ICovCn0KTElOS19TVEFUVVNfU1RSQ1Q7CgoKdHlwZWRlZiBzdHJ1Y3QgX0FTU09DX1NUQVRVU19TVFJDVAp7CgloY2ZfMTYgIGxlbjsKCWhjZl8xNiAgdHlwOwoJaGNmXzE2ICBhc3NvY1N0YXR1czsgICAgICAgICAgICAvKiAxLi4zICovCgloY2ZfOCAgIHN0YUFkZHJbRVRIX0FMRU5dOwoJaGNmXzggICBvbGRBcEFkZHJbRVRIX0FMRU5dOwp9CkFTU09DX1NUQVRVU19TVFJDVDsKCgp0eXBlZGVmIHN0cnVjdCBfU0VDVVJJVFlfU1RBVFVTX1NUUkNUCnsKCWhjZl8xNiAgbGVuOwoJaGNmXzE2ICB0eXA7CgloY2ZfMTYgIHNlY3VyaXR5U3RhdHVzOyAgICAgLyogMS4uMyAqLwoJaGNmXzggICBzdGFBZGRyW0VUSF9BTEVOXTsKCWhjZl8xNiAgcmVhc29uOwp9ClNFQ1VSSVRZX1NUQVRVU19TVFJDVDsKCiNkZWZpbmUgV1ZMQU5fV01QX1BEVV9UWVBFX0xUX1JFUSAgICAgICAweDAwCiNkZWZpbmUgV1ZMQU5fV01QX1BEVV9UWVBFX0xUX1JTUCAgICAgICAweDAxCiNkZWZpbmUgV1ZMQU5fV01QX1BEVV9UWVBFX0FQTF9SRVEgICAgICAweDAyCiNkZWZpbmUgV1ZMQU5fV01QX1BEVV9UWVBFX0FQTF9SU1AgICAgICAweDAzCgp0eXBlZGVmIHN0cnVjdCB3dmxhbl9ldGhfaGRyCnsKCXVuc2lnbmVkIGNoYXIgICBkc3RbRVRIX0FMRU5dOyAgICAgICAgICAgLyogRGVzdGluYXRpb24gYWRkcmVzcy4gKi8KCXVuc2lnbmVkIGNoYXIgICBzcmNbRVRIX0FMRU5dOyAgICAgICAgICAgLyogU291cmNlIGFkZHJlc3MuICovCgl1bnNpZ25lZCBzaG9ydCAgbGVuOyAgICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHRoZSBQRFUuICovCn0KV1ZMQU5fRVRIX0hEUiwgKlBXVkxBTl9FVEhfSERSOwoKdHlwZWRlZiBzdHJ1Y3Qgd3ZsYW5fbGxjX3NuYXAKewoJdW5zaWduZWQgY2hhciAgIGRzYXA7ICAgICAgICAgICAgICAgICAgIC8qIERTQVAgKDB4QUEpICovCgl1bnNpZ25lZCBjaGFyICAgc3NhcDsgICAgICAgICAgICAgICAgICAgLyogU1NBUCAoMHhBQSkgKi8KCXVuc2lnbmVkIGNoYXIgICBjdHJsOyAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sICgweDAzKSAqLwoJdW5zaWduZWQgY2hhciAgIG91aVszXTsgICAgICAgICAgICAgICAgIC8qIE9yZ2FuaXphdGlvbiBVbmlxdWUgSUQgKDAwLTYwLTFkKS4gKi8KCXVuc2lnbmVkIGNoYXIgICBzcGVjaWRbMl07ICAgICAgICAgICAgICAvKiBTcGVjaWZpYyBJRCBjb2RlICgwMC0wMSkuICovCn0KV1ZMQU5fTExDX1NOQVAsICpQV1ZMQU5fTExDX1NOQVA7CgoKdHlwZWRlZiBzdHJ1Y3Qgd3ZsYW5fbHRfaGRyCnsKCXVuc2lnbmVkIGNoYXIgICB2ZXJzaW9uOyAgICAgICAgICAgICAgICAvKiBWZXJzaW9uICgweDAwKSAqLwoJdW5zaWduZWQgY2hhciAgIHR5cGU7ICAgICAgICAgICAgICAgICAgIC8qIFBEVSB0eXBlOiAwLXJlcS8xLXJlc3AuICovCgl1bnNpZ25lZCBzaG9ydCAgaWQ7ICAgICAgICAgICAgICAgICAgICAgLyogSWRlbnRpZmllciB0byBhc3NvY2lhdGUgcmVzcCB0byByZXEuICovCn0KV1ZMQU5fTFRfSERSLCAqUFdWTEFOX0xUX0hEUjsKCgp0eXBlZGVmIHN0cnVjdCB3dmxhbl93bXBfaGRyCnsKCXVuc2lnbmVkIGNoYXIgICB2ZXJzaW9uOyAgICAgICAgICAgICAgICAvKiBWZXJzaW9uICAqLwoJdW5zaWduZWQgY2hhciAgIHR5cGU7ICAgICAgICAgICAgICAgICAgIC8qIFBEVSB0eXBlICovCn0KV1ZMQU5fV01QX0hEUiwgKlBXVkxBTl9XTVBfSERSOwoKCiNkZWZpbmUgRklMTEVSX1NJWkUgICAgICAgICAgICAgMTU1NAojZGVmaW5lIFRFU1RfUEFUVEVSTl9TSVpFICAgICAgIDU0CgoKdHlwZWRlZiBzdHJ1Y3Qgd3ZsYW5fbHRfcmVxCnsKCXVuc2lnbmVkIGNoYXIgICBGaWxsZXJbVEVTVF9QQVRURVJOX1NJWkVdOyAgIC8qIG1pbmltYWwgbGVuZ3RoIG9mIDU0IGJ5dGVzICovCn0KV1ZMQU5fTFRfUkVRLCAqUFdWTEFOX0xUX1JFUTsKCgp0eXBlZGVmIHN0cnVjdCB3dmxhbl9sdF9yc3AKewoJY2hhciAgICAgICAgICAgbmFtZVszMl07CgkvKiBNZWFzdXJlZCBEYXRhICovCgl1bnNpZ25lZCBjaGFyICBzaWduYWw7Cgl1bnNpZ25lZCBjaGFyICBub2lzZTsKCXVuc2lnbmVkIGNoYXIgIHJ4RmxvdzsKCXVuc2lnbmVkIGNoYXIgIGRhdGFSYXRlOwoJdW5zaWduZWQgc2hvcnQgcHJvdG9jb2w7CgkvKiBDYXBhYmlsaXRpZXMgKi8KCXVuc2lnbmVkIGNoYXIgIHN0YXRpb247Cgl1bnNpZ25lZCBjaGFyICBkYXRhUmF0ZUNhcDsKCXVuc2lnbmVkIGNoYXIgIHBvd2VyTWdtdFs0XTsKCXVuc2lnbmVkIGNoYXIgIHJvYnVzdG5lc3NbNF07Cgl1bnNpZ25lZCBjaGFyICBzY2FsaW5nOwoJdW5zaWduZWQgY2hhciAgcmVzZXJ2ZWRbNV07Cn0KV1ZMQU5fTFRfUlNQLCAqUFdWTEFOX0xUX1JTUDsKCgp0eXBlZGVmIHN0cnVjdCB3dmxhbl9yeF93bXBfaGRyCnsKCXVuc2lnbmVkIHNob3J0IHN0YXR1czsKCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkMVsyXTsKCXVuc2lnbmVkIGNoYXIgIHNpbGVuY2U7Cgl1bnNpZ25lZCBjaGFyICBzaWduYWw7Cgl1bnNpZ25lZCBjaGFyICByYXRlOwoJdW5zaWduZWQgY2hhciAgcnhGbG93OwoJdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQyWzJdOwoJdW5zaWduZWQgc2hvcnQgZnJhbWVDb250cm9sOwoJdW5zaWduZWQgc2hvcnQgZHVyYXRpb247Cgl1bnNpZ25lZCBzaG9ydCBhZGRyZXNzMVszXTsKCXVuc2lnbmVkIHNob3J0IGFkZHJlc3MyWzNdOwoJdW5zaWduZWQgc2hvcnQgYWRkcmVzczNbM107Cgl1bnNpZ25lZCBzaG9ydCBzZXF1ZW5jZUNvbnRyb2w7Cgl1bnNpZ25lZCBzaG9ydCBhZGRyZXNzNFszXTsKI2lmbmRlZiBIRVJNRVMyNQkvLzs/anVzdCB0byBiZSBvbiB0aGUgc2FmZSBzaWRlIG9mIGluaGVyaXRlZCBidXQgbm90IGNvbXByZWhlbmRlZCBjb2RlICNpZmRlZiBIRVJNRVMyCgl1bnNpZ25lZCBzaG9ydCBzZWVtc190b19iZV91bnVzZWRfcmVzZXJ2ZWQzWzVdOyAgLy87PwoJdW5zaWduZWQgc2hvcnQgc2VlbXNfdG9fYmVfdW51c2VkX3Jlc2VydmVkNDsJIC8vOz8KI2VuZGlmIC8vIEhFUk1FUzI1Cgl1bnNpZ25lZCBzaG9ydCBIZWFkZXJEYXRhTGVuOwp9CldWTEFOX1JYX1dNUF9IRFIsICpQV1ZMQU5fUlhfV01QX0hEUjsKCgp0eXBlZGVmIHN0cnVjdCB3dmxhbl9saW5rdGVzdF9yZXFfcGR1CnsKCVdWTEFOX0VUSF9IRFIgICAgIGV0aEhkcjsKCVdWTEFOX0xMQ19TTkFQICAgIGxsY1NuYXA7CglXVkxBTl9MVF9IRFIgICAgICBsdEhkcjsKCVdWTEFOX0xUX1JFUSAgICAgIGx0UmVxOwp9CldWTEFOX0xJTktURVNUX1JFUV9QRFUsICpQV1ZMQU5fTElOS1RFU1RfUkVRX1BEVTsKCgp0eXBlZGVmIHN0cnVjdCB3dmxhbl9saW5rdGVzdF9yc3BfcGR1CnsKCVdWTEFOX1JYX1dNUF9IRFIgIHdtcFJ4SGRyOwoJV1ZMQU5fRVRIX0hEUiAgICAgZXRoSGRyOwoJV1ZMQU5fTExDX1NOQVAgICAgbGxjU25hcDsKCVdWTEFOX0xUX0hEUiAgICAgIGx0SGRyOwoJV1ZMQU5fTFRfUlNQICAgICAgbHRSc3A7Cn0KV1ZMQU5fTElOS1RFU1RfUlNQX1BEVSwgKlBXVkxBTl9MSU5LVEVTVF9SU1BfUERVOwoKCnR5cGVkZWYgc3RydWN0IF9MSU5LVEVTVF9SU1BfU1RSQ1QKewoJaGNmXzE2ICAgICAgICAgICAgICAgICAgIGxlbjsKCWhjZl8xNiAgICAgICAgICAgICAgICAgICB0eXA7CglXVkxBTl9MSU5LVEVTVF9SU1BfUERVICAgbHRSc3A7Cn0KTElOS1RFU1RfUlNQX1NUUkNUOwoKCnR5cGVkZWYgc3RydWN0IHd2bGFuX3dtcF9yc3BfcGR1CnsKCVdWTEFOX1JYX1dNUF9IRFIgIHdtcFJ4SGRyOwoJV1ZMQU5fRVRIX0hEUiAgICAgZXRoSGRyOwoJV1ZMQU5fTExDX1NOQVAgICAgbGxjU25hcDsKCVdWTEFOX1dNUF9IRFIgICAgIHdtcEhkcjsKfQpXVkxBTl9XTVBfUlNQX1BEVSwgKlBXVkxBTl9XTVBfUlNQX1BEVTsKCgp0eXBlZGVmIHN0cnVjdCBfV01QX1JTUF9TVFJDVAp7CgloY2ZfMTYgICAgICAgICAgICAgIGxlbjsKCWhjZl8xNiAgICAgICAgICAgICAgdHlwOwoJV1ZMQU5fV01QX1JTUF9QRFUgICB3bXBSc3A7Cn0KV01QX1JTUF9TVFJDVDsKCgp0eXBlZGVmIHN0cnVjdCBfUFJPQkVfUkVTUAp7CgkvLyBmaXJzdCBwYXJ0OiA4MDIuMTEKCWhjZl8xNglsZW5ndGg7CgloY2ZfMTYJaW5mb1R5cGU7CgloY2ZfMTYJcmVzZXJ2ZWQwOwoJLy9oY2ZfOAlzaWduYWw7CgloY2ZfOAlzaWxlbmNlOwoJaGNmXzgJc2lnbmFsOyAgICAgLy8gTW92ZWQgc2lnbmFsIGhlcmUgYXMgc2lnbmFsL25vaXNlIHZhbHVlcyB3ZXJlIGZsaXBwZWQKCWhjZl84CXJ4RmxvdzsKCWhjZl84CXJhdGU7CgloY2ZfMTYJcmVzZXJ2ZWQxWzJdOwoKCS8vIHNlY29uZCBwYXJ0OgoJaGNmXzE2CWZyYW1lQ29udHJvbDsKCWhjZl8xNglkdXJJRDsKCWhjZl84CWFkZHJlc3MxWzZdOwoJaGNmXzgJYWRkcmVzczJbNl07CgloY2ZfOAlCU1NJRFs2XTsJCQkJCS8vISB0aGlzIGlzIGNvcnJlY3QsIHJpZ2h0ID8KCWhjZl8xNglzZXF1ZW5jZTsKCWhjZl84CWFkZHJlc3M0WzZdOwoKI2lmbmRlZiBXQVJQCgloY2ZfOAlyZXNlcnZlZDJbMTJdOwojZW5kaWYgLy8gV0FSUAoKCWhjZl8xNglkYXRhTGVuZ3RoOwoJCQkJCQkJCQkJLy8gdGhlIGluZm9ybWF0aW9uIGluIHRoZSBuZXh0IDMgZmllbGRzIChEQS9TQS9MZW5UeXBlKSBpcyBhY3R1YWxseSBub3QgZmlsbGVkIGluLgoJaGNmXzgJREFbNl07CgloY2ZfOAlTQVs2XTsKCiNpZmRlZiBXQVJQCgloY2ZfOCAgIGNoYW5uZWw7CgloY2ZfOCAgIGJhbmQ7CiNlbHNlCgloY2ZfMTYJbGVuVHlwZTsKI2VuZGlmICAvLyBXQVJQCgoJaGNmXzgJdGltZVN0YW1wWzhdOwoJaGNmXzE2CWJlYWNvbkludGVydmFsOwoJaGNmXzE2CWNhcGFiaWxpdHk7CgloY2ZfOAlyYXdEYXRhWzIwMF07CQkJCS8vISA8PDwgdGhpbmsgYWJvdXQgdGhpcyBudW1iZXIgIQoJaGNmXzE2CWZsYWdzOwp9ClBST0JFX1JFU1AsICpQUFJPQkVfUkVTUDsKCgp0eXBlZGVmIHN0cnVjdCBfUHJvYmVSZXN1bHQKewoJaW50ICAgICAgICAgc2Nhbl9jb21wbGV0ZTsKCWludCAgICAgICAgIG51bV9hcHM7CglQUk9CRV9SRVNQICBQcm9iZVRhYmxlW01BWF9OQVBTXTsKfQpQcm9iZVJlc3VsdDsKCi8qIERlZmluaXRpb25zIHVzZWQgdG8gcGFyc2UgY2FwYWJpbGl0aWVzIG91dCBvZiB0aGUgcHJvYmUgcmVzcG9uc2VzICovCiNkZWZpbmUgQ0FQQUJJTElUWV9FU1MgICAgICAweDAwMDEKI2RlZmluZSBDQVBBQklMSVRZX0lCU1MgICAgIDB4MDAwMgojZGVmaW5lIENBUEFCSUxJVFlfUFJJVkFDWSAgMHgwMDEwCgovKiBEZWZpbml0aW9ucyB1c2VkIHRvIHBhcnNlIHRoZSBJbmZvcm1hdGlvbiBFbGVtZW50cyBvdXQgb2YgcHJvYmUgcmVzcG9uc2VzICovCiNkZWZpbmUgRFNfSU5GT19FTEVNICAgICAgICAgICAgICAgICAgICAgICAgMHgwMwojZGVmaW5lIEdFTkVSSUNfSU5GT19FTEVNICAgICAgICAgICAgICAgICAgIDB4ZGQKI2RlZmluZSBXUEFfTUFYX0lFX0xFTiAgICAgICAgICAgICAgICAgICAgICA0MAojZGVmaW5lIFdQQV9TRUxFQ1RPUl9MRU4gICAgICAgICAgICAgICAgICAgIDQKI2RlZmluZSBXUEFfT1VJX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICB7IDB4MDAsIDB4NTAsIDB4ZjIsIDEgfQojZGVmaW5lIFdQQV9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgIDEKI2RlZmluZSBXUEFfQVVUSF9LRVlfTUdNVF9VTlNQRUNfODAyXzFYICAgICB7IDB4MDAsIDB4NTAsIDB4ZjIsIDEgfQojZGVmaW5lIFdQQV9BVVRIX0tFWV9NR01UX1BTS19PVkVSXzgwMl8xWCAgIHsgMHgwMCwgMHg1MCwgMHhmMiwgMiB9CiNkZWZpbmUgV1BBX0NJUEhFUl9TVUlURV9OT05FICAgICAgICAgICAgICAgeyAweDAwLCAweDUwLCAweGYyLCAwIH0KI2RlZmluZSBXUEFfQ0lQSEVSX1NVSVRFX1dFUDQwICAgICAgICAgICAgICB7IDB4MDAsIDB4NTAsIDB4ZjIsIDEgfQojZGVmaW5lIFdQQV9DSVBIRVJfU1VJVEVfVEtJUCAgICAgICAgICAgICAgIHsgMHgwMCwgMHg1MCwgMHhmMiwgMiB9CiNkZWZpbmUgV1BBX0NJUEhFUl9TVUlURV9XUkFQICAgICAgICAgICAgICAgeyAweDAwLCAweDUwLCAweGYyLCAzIH0KI2RlZmluZSBXUEFfQ0lQSEVSX1NVSVRFX0NDTVAgICAgICAgICAgICAgICB7IDB4MDAsIDB4NTAsIDB4ZjIsIDQgfQojZGVmaW5lIFdQQV9DSVBIRVJfU1VJVEVfV0VQMTA0ICAgICAgICAgICAgIHsgMHgwMCwgMHg1MCwgMHhmMiwgNSB9Cgp0eXBlZGVmIGVudW0gd3ZsYW5fZHJ2X21vZGUKewoJV1ZMQU5fRFJWX01PREVfTk9fRE9XTkxPQUQsICAgICAvKiB0aGlzIGlzIHRoZSBzYW1lIGFzIFNUQSBmb3IgSGVybWVzIDEgICAgKi8KCQkJCSAgICAgICAgICAgICAgICAgICAgLyogaXQgaXMgYWxzbyBvbmx5IGFwcGxpY2FibGUgZm9yIEhlcm1lcyAxICovCglXVkxBTl9EUlZfTU9ERV9TVEEsCglXVkxBTl9EUlZfTU9ERV9BUCwKCVdWTEFOX0RSVl9NT0RFX01BWAp9CldWTEFOX0RSVl9NT0RFLCAqUFdWTEFOX0RSVl9NT0RFOwoKCnR5cGVkZWYgZW51bSB3dmxhbl9wb3J0X3N0YXRlCnsKCVdWTEFOX1BPUlRfU1RBVEVfRU5BQkxFRCwKCVdWTEFOX1BPUlRfU1RBVEVfRElTQUJMRUQsCglXVkxBTl9QT1JUX1NUQVRFX0NPTk5FQ1RFRAp9CldWTEFOX1BPUlRfU1RBVEUsICpQV1ZMQU5fUE9SVF9TVEFURTsKCi8qCnR5cGVkZWYgZW51bSB3dmxhbl9jb25uZWN0X3N0YXRlCnsKCVdWTEFOX0NPTk5FQ1RfU1RBVEVfQ09OTkVDVEVELAoJV1ZMQU5fQ09OTkVDVF9TVEFURV9ESVNDT05ORUNURUQKfQpXVkxBTl9DT05ORUNUX1NUQVRFLCAqUFdWTEFOX0NPTk5FQ1RfU1RBVEU7CiovCgp0eXBlZGVmIGVudW0gd3ZsYW5fcG1fc3RhdGUKewoJV1ZMQU5fUE1fU1RBVEVfRElTQUJMRUQsCglXVkxBTl9QTV9TVEFURV9FTkhBTkNFRCwKCVdWTEFOX1BNX1NUQVRFX1NUQU5EQVJECn0KV1ZMQU5fUE1fU1RBVEUsICpQV1ZMQU5fUE1fU1RBVEU7CgoKdHlwZWRlZiBzdHJ1Y3Qgd3ZsYW5fZnJhbWUKewoJc3RydWN0IHNrX2J1ZmYgICpza2I7ICAgICAgIC8qIHNrX2J1ZmYgZm9yIGZyYW1lLiAqLwoJaGNmXzE2ICAgICAgICAgIHBvcnQ7ICAgICAgIC8qIE1BQyBwb3J0IGZvciB0aGUgZnJhbWUuICovCgloY2ZfMTYgICAgICAgICAgbGVuOyAgICAgICAgLyogTGVuZ3RoIG9mIHRoZSBmcmFtZS4gKi8KfQpXVkxBTl9GUkFNRSwgKlBXVkxBTl9GUkFNRTsKCgp0eXBlZGVmIHN0cnVjdCB3dmxhbl9sZnJhbWUKewoJc3RydWN0IGxpc3RfaGVhZCAgICBub2RlOyAgIC8qIE5vZGUgaW4gdGhlIGxpc3QgKi8KCVdWTEFOX0ZSQU1FCSAgICAgICAgZnJhbWU7ICAvKiBGcmFtZS4gKi8KfQpXVkxBTl9MRlJBTUUsICpQV1ZMQU5fTEZSQU1FOwoKCgojZGVmaW5lIERFRkFVTFRfTlVNX1RYX0ZSQU1FUyAgICAgICAgICAgNDgKI2RlZmluZSBUWF9RX0xPV19XQVRFUl9NQVJLICAgICAgICAgICAgIChERUZBVUxUX05VTV9UWF9GUkFNRVMvMykKCiNkZWZpbmUgV1ZMQU5fTUFYX1RYX1FVRVVFUyAgICAgICAgICAgICAxCgoKI2lmZGVmIFVTRV9XRFMKCnR5cGVkZWYgc3RydWN0IHd2bGFuX3dkc19pZgp7CglzdHJ1Y3QgbmV0X2RldmljZSAgICAgICAgICAgKmRldjsKCWludCAgICAgICAgICAgICAgICAgICAgICAgICBpc19yZWdpc3RlcmVkOwoJaW50ICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGlmX3F1ZXVlX29uOwoJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgICAgIHN0YXRzOwoJaGNmXzE2ICAgICAgICAgICAgICAgICAgICAgIHJ0c1RocmVzaG9sZDsKCWhjZl8xNiAgICAgICAgICAgICAgICAgICAgICB0eFJhdGVDbnRsOwoJaGNmXzggICAgICAgICAgICAgICAgICAgICAgIHdkc0FkZHJlc3NbRVRIX0FMRU5dOwp9IFdWTEFOX1dEU19JRiwgKlBXVkxBTl9XRFNfSUY7CgojZW5kaWYgIC8vIFVTRV9XRFMKCgoKI2RlZmluZSBOVU1fUlhfREVTQyA1CiNkZWZpbmUgTlVNX1RYX0RFU0MgNQoKdHlwZWRlZiBzdHJ1Y3QgZG1hX3N0cmN0CnsKCURFU0NfU1RSQ1QgICp0eF9wYWNrZXRbTlVNX1RYX0RFU0NdOwoJREVTQ19TVFJDVCAgKnJ4X3BhY2tldFtOVU1fUlhfREVTQ107CglERVNDX1NUUkNUICAqcnhfcmVjbGFpbV9kZXNjLCAqdHhfcmVjbGFpbV9kZXNjOyAvLyBEZXNjcmlwdG9ycyBmb3IgaG9zdC1yZWNsYWltIHB1cnBvc2VzIChzZWUgSENGKQoJaW50ICAgICAgICAgdHhfcnNjX2luZDsgLy8gRE1BIFR4IHJlc291cmNlIGluZGljYXRvciBpcyBtYWludGFpbmVkIGluIHRoZSBNU0YsIG5vdCBpbiB0aGUgSENGCglpbnQgICAgICAgICByeF9yc2NfaW5kOyAvLyBBbHNvIGFkZGVkIHJ4IHJzb3VyY2UgaW5kaWNhdG9yIHNvIHRoYXQgY2xlYW51cCBjYW4gYmUgcGVyZm9ybWVkIGlmIGFsbG9jIGZhaWxzCglpbnQgICAgICAgICBzdGF0dXM7Cn0gRE1BX1NUUkNUOwoKCi8qIE1hY3JvcyB1c2VkIGluIERNQSBzdXBwb3J0ICovCi8qIGdldCBidXMgYWRkcmVzcyBvZiB7cngsdHh9ZG1hIHN0cnVjdHVyZSBtZW1iZXIsIGluIGxpdHRsZS1lbmRpYW4gYnl0ZSBvcmRlciAqLwojZGVmaW5lIFdMX0RNQV9CVVNfQUREUl9MRShzdHIsIGksIG1lbSkgXAoJY3B1X3RvX2xlMzIoc3RyIyNfZG1hX2FkZHJbKGkpXSArICgoaGNmXzggKikmc3RyWyhpKV0tPm1lbSAtIChoY2ZfOCAqKXN0clsoaSldKSkKCgpzdHJ1Y3Qgd2xfcHJpdmF0ZQp7CgojaWZkZWYgQlVTX1BDTUNJQQoJc3RydWN0IHBjbWNpYV9kZXZpY2UJICAgICpsaW5rOwojZW5kaWYgLy8gQlVTX1BDTUNJQQoKCglzdHJ1Y3QgbmV0X2RldmljZSAgICAgICAgICAgKmRldjsKLy8Jc3RydWN0IG5ldF9kZXZpY2UgICAgICAgICAgICpkZXZfbmV4dDsKCXNwaW5sb2NrX3QgICAgICAgICAgICAgICAgICBzbG9jazsKCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAgICAgICB0YXNrOwoJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgICAgIHN0YXRzOwoKCiNpZmRlZiBXSVJFTEVTU19FWFQKCXN0cnVjdCBpd19zdGF0aXN0aWNzICAgICAgICB3c3RhdHM7Ci8vCWludCAgICAgICAgICAgICAgICAgICAgICAgICBzcHlfbnVtYmVyOwovLwl1X2NoYXIgICAgICAgICAgICAgICAgICAgICAgc3B5X2FkZHJlc3NbSVdfTUFYX1NQWV1bRVRIX0FMRU5dOwovLwlzdHJ1Y3QgaXdfcXVhbGl0eSAgICAgICAgICAgc3B5X3N0YXRbSVdfTUFYX1NQWV07CglzdHJ1Y3QgaXdfc3B5X2RhdGEgICAgICAgICAgc3B5X2RhdGE7CglzdHJ1Y3QgaXdfcHVibGljX2RhdGEJd2lyZWxlc3NfZGF0YTsKI2VuZGlmIC8vIFdJUkVMRVNTX0VYVAoKCglJRkJfU1RSQ1QgICAgICAgICAgICAgICAgICAgaGNmQ3R4OwovLzs/IHN0cnVjdCB0aW1lcl9saXN0CQkJdGltZXJfb29yOwovLzs/IGhjZl8xNgkJCQkJCXRpbWVyX29vcl9jbnQ7Cgl1X2xvbmcJCQkJCQl3bGFnczQ5X3R5cGU7CQkvL2NvbnRyb2xzIG91dHB1dCBpbiAvcHJvYy93bGFnczQ5Cgl1X2xvbmcgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M7CgloY2ZfMTYJCQkJCQlEZWJ1Z0ZsYWc7CglpbnQgICAgICAgICAgICAgICAgICAgICAgICAgaXNfcmVnaXN0ZXJlZDsKCWludCAgICAgICAgICAgICAgICAgICAgICAgICBpc19oYW5kbGluZ19pbnQ7CglpbnQgICAgICAgICAgICAgICAgICAgICAgICAgZmlybXdhcmVfcHJlc2VudDsKCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICBzeXNmc0NyZWF0ZWQ7CglDRkdfRFJWX0lORk9fU1RSQ1QgICAgICAgICAgZHJpdmVySW5mbzsKCUNGR19JREVOVElUWV9TVFJDVCAgICAgICAgICBkcml2ZXJJZGVudGl0eTsKCUNGR19GV19JREVOVElUWV9TVFJDVCAgICAgICBTdGF0aW9uSWRlbnRpdHk7CglDRkdfUFJJX0lERU5USVRZX1NUUkNUICAgICAgUHJpbWFyeUlkZW50aXR5OwoJQ0ZHX1BSSV9JREVOVElUWV9TVFJDVCAgICAgIE5JQ0lkZW50aXR5OwoKCWx0dl90ICAgICAgICAgICAgICAgICAgICAgICBsdHZSZWNvcmQ7Cgl1X2xvbmcgICAgICAgICAgICAgICAgICAgICAgdHhCeXRlczsKCWhjZl8xNiAgICAgICAgICAgICAgICAgICAgICBtYXhQb3J0OyAgICAgICAgLyogMCBmb3IgU1RBLCA2IGZvciBBUCAqLwoKCS8qIEVsZW1lbnRzIHVzZWQgZm9yIGFzeW5jIG5vdGlmaWNhdGlvbiBmcm9tIGhhcmR3YXJlICovCglSSURfTE9HX1NUUkNUCQkJCVJpZExpc3RbMTBdOwoJbHR2X3QgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRSZWNvcmQ7CglQUk9CRV9SRVNQCQkJCSAgICBQcm9iZVJlc3A7CglBU1NPQ19TVEFUVVNfU1RSQ1QgICAgICAgICAgYXNzb2Nfc3RhdDsKCVNFQ1VSSVRZX1NUQVRVU19TVFJDVCAgICAgICBzZWNfc3RhdDsKCgl1X2NoYXIgICAgICAgICAgICAgICAgICAgICAgbG9va0FoZWFkQnVmW1dWTEFOX01BWF9MT09LQUhFQURdOwoKCWhjZl84ICAgICAgICAgICAgICAgICAgICAgICBQb3J0VHlwZTsgICAgICAgICAgIC8vIDEgLSAzICgxIFtOb3JtYWxdIHwgMyBbQWRIb2NdKQoJaGNmXzE2ICAgICAgICAgICAgICAgICAgICAgIENoYW5uZWw7ICAgICAgICAgICAgLy8gMCAtIDE0ICgwKQoJaGNmXzE2ICAgICAgICAgICAgICAgICAgICAgIFR4UmF0ZUNvbnRyb2xbMl07CgloY2ZfOCAgICAgICAgICAgICAgICAgICAgICAgRGlzdGFuY2VCZXR3ZWVuQVBzOyAvLyAxIC0gMyAoMSkKCWhjZl8xNiAgICAgICAgICAgICAgICAgICAgICBSVFNUaHJlc2hvbGQ7ICAgICAgIC8vIDAgLSAyMzQ3ICgyMzQ3KQoJaGNmXzE2ICAgICAgICAgICAgICAgICAgICAgIFBNRW5hYmxlZDsgICAgICAgICAgLy8gMCAtIDIsIDgwMDEgLSA4MDAyICgwKQoJaGNmXzggICAgICAgICAgICAgICAgICAgICAgIE1pY3Jvd2F2ZVJvYnVzdG5lc3M7Ly8gMCAtIDEgKDApCgloY2ZfOCAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlSUJTUzsgICAgICAgICAvLyAwIC0gMSAoMCkKCWhjZl84ICAgICAgICAgICAgICAgICAgICAgICBNdWx0aWNhc3RSZWNlaXZlOyAgIC8vIDAgLSAxICgxKQoJaGNmXzE2ICAgICAgICAgICAgICAgICAgICAgIE1heFNsZWVwRHVyYXRpb247ICAgLy8gMCAtIDY1NTM1ICgxMDApCgloY2ZfOCAgICAgICAgICAgICAgICAgICAgICAgTUFDQWRkcmVzc1tFVEhfQUxFTl07CgljaGFyICAgICAgICAgICAgICAgICAgICAgICAgTmV0d29ya05hbWVbSENGX01BWF9OQU1FX0xFTisxXTsKCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICBTdGF0aW9uTmFtZVtIQ0ZfTUFYX05BTUVfTEVOKzFdOwoJaGNmXzggICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZUVuY3J5cHRpb247ICAgLy8gMCAtIDEgKDApCgljaGFyICAgICAgICAgICAgICAgICAgICAgICAgS2V5MVtNQVhfS0VZX0xFTisxXTsKCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICBLZXkyW01BWF9LRVlfTEVOKzFdOwoJY2hhciAgICAgICAgICAgICAgICAgICAgICAgIEtleTNbTUFYX0tFWV9MRU4rMV07CgljaGFyICAgICAgICAgICAgICAgICAgICAgICAgS2V5NFtNQVhfS0VZX0xFTisxXTsKCWhjZl84ICAgICAgICAgICAgICAgICAgICAgICBUcmFuc21pdEtleUlEOyAgICAgIC8vIDEgLSA0ICgxKQoJQ0ZHX0RFRkFVTFRfS0VZU19TVFJDVAkgICAgRGVmYXVsdEtleXM7Cgl1X2NoYXIgICAgICAgICAgICAgICAgICAgICAgbWFpbGJveFtNQl9TSVpFXTsKCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICBzekVuY3J5cHRpb25bTUFYX0VOQ19MRU5dOwoKCWhjZl8xNiAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJFbmFibGU7CgloY2ZfMTYgICAgICAgICAgICAgICAgICAgICAgd29sYXNFbmFibGU7CgloY2ZfMTYgICAgICAgICAgICAgICAgICAgICAgYXRpbVdpbmRvdzsKCWhjZl8xNiAgICAgICAgICAgICAgICAgICAgICBob2xkb3ZlckR1cmF0aW9uOwoJaGNmXzE2ICAgICAgICAgICAgICAgICAgICAgIE11bHRpY2FzdFJhdGVbMl07CgoJaGNmXzE2ICAgICAgICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uOyAvLyBpcyB0aGlzIEFQIHNwZWNpZmljPwoJaGNmXzE2ICAgICAgICAgICAgICAgICAgICAgIHByb21pc2N1b3VzTW9kZTsKCVdWTEFOX0RSVl9NT0RFICAgICAgICAgICAgICBEb3dubG9hZEZpcm13YXJlOyAgIC8vIDAgLSAyICgwIFtOb25lXSB8IDEgW1NUQV0gfCAyIFtBUF0pCgoJY2hhcgkJCQkJCWZ3X2ltYWdlX2ZpbGVuYW1lW01BWF9MSU5FX1NJWkUrMV07CgoJaGNmXzE2ICAgICAgICAgICAgICAgICAgICAgIEF1dGhLZXlNZ210U3VpdGU7CgoJaGNmXzE2ICAgICAgICAgICAgICAgICAgICAgIGxvYWRCYWxhbmNpbmc7CgloY2ZfMTYgICAgICAgICAgICAgICAgICAgICAgbWVkaXVtRGlzdHJpYnV0aW9uOwoJaGNmXzE2ICAgICAgICAgICAgICAgICAgICAgIHR4UG93TGV2ZWw7CgkvL2hjZl8xNiAgICAgICAgICAgICAgICAgICAgICBzaG9ydFJldHJ5TGltaXQ7CgkvL2hjZl8xNiAgICAgICAgICAgICAgICAgICAgICBsb25nUmV0cnlMaW1pdDsKCWhjZl8xNiAgICAgICAgICAgICAgICAgICAgICBzcnNjWzJdOwoJaGNmXzE2ICAgICAgICAgICAgICAgICAgICAgIGJyc2NbMl07CgloY2ZfMTYgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbkNvbnRyb2w7CgkvL2hjZl8xNiAgICAgICAgICAgICAgICAgICAgICBwcm9iZURhdGFSYXRlc1syXTsKCWhjZl8xNiAgICAgICAgICAgICAgICAgICAgICBvd25CZWFjb25JbnRlcnZhbDsKCWhjZl8xNiAgICAgICAgICAgICAgICAgICAgICBjb2V4aXN0ZW5jZTsKCglXVkxBTl9GUkFNRSAgICAgICAgICAgICAgICAgdHhGOwoJV1ZMQU5fTEZSQU1FICAgICAgICAgICAgICAgIHR4TGlzdFtERUZBVUxUX05VTV9UWF9GUkFNRVNdOwoJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICAgIHR4RnJlZTsKCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICB0eFFbV1ZMQU5fTUFYX1RYX1FVRVVFU107CglpbnQgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aWZfcXVldWVfb247CglpbnQgICAgICAgICAgICAgICAgICAgICAgICAgdHhRX2NvdW50OwoJREVTQ19TVFJDVCAgICAgICAgICAgICAgICAgIGRlc2Nfcng7CglERVNDX1NUUkNUICAgICAgICAgICAgICAgICAgZGVzY190eDsKCglXVkxBTl9QT1JUX1NUQVRFICAgICAgICAgICAgcG9ydFN0YXRlOwoKCVNjYW5SZXN1bHQgICAgICAgICAgICAgICAgICBzY2FuX3Jlc3VsdHM7CglQcm9iZVJlc3VsdCAgICAgICAgICAgICAgICAgcHJvYmVfcmVzdWx0czsKCWludCAgICAgICAgICAgICAgICAgICAgICAgICBwcm9iZV9udW1fYXBzOwoKCWludCAgICAgICAgICAgICAgICAgICAgICAgICB1c2VfZG1hOwoJRE1BX1NUUkNUICAgICAgICAgICAgICAgICAgIGRtYTsKI2lmZGVmIFVTRV9SVFMKCWludCAgICAgICAgICAgICAgICAgICAgICAgICB1c2VSVFM7CiNlbmRpZiAgLy8gVVNFX1JUUwoJaGNmXzggICAgICAgICAgICAgICAgICAgICAgIERUSU1QZXJpb2Q7ICAgICAgICAgLy8gMSAtIDI1NSAoMSkKCWhjZl8xNiAgICAgICAgICAgICAgICAgICAgICBtdWx0aWNhc3RQTUJ1ZmZlcmluZzsKCWhjZl84ICAgICAgICAgICAgICAgICAgICAgICBSZWplY3RBbnk7ICAgICAgICAgIC8vIDAgLSAxICgwKQoJaGNmXzggICAgICAgICAgICAgICAgICAgICAgIEV4Y2x1ZGVVbmVuY3J5cHRlZDsgLy8gMCAtIDEgKDEpCgloY2ZfMTYgICAgICAgICAgICAgICAgICAgICAgaW50cmFCU1NSZWxheTsKI2lmZGVmIFVTRV9XRFMKCVdWTEFOX1dEU19JRiAgICAgICAgICAgICAgICB3ZHNfcG9ydFtOVU1fV0RTX1BPUlRTXTsKI2VuZGlmIC8vIFVTRV9XRFMKCgkvKiBUcmFjayB3aGV0aGVyIHRoZSBjYXJkIGlzIHVzaW5nIFdFUCBlbmNyeXB0aW9uIG9yIFdQQQoJICogc28gd2Uga25vdyB3aGF0IHRvIGRpc2FibGUgbmV4dCB0aW1lIHRocm91Z2guCgkgKiAgSVdfRU5DT0RFX0FMR19OT05FLCBJV19FTkNPREVfQUxHX1dFUCwgSVdfRU5DT0RFX0FMR19US0lQCgkgKi8KCWludCB3ZXh0X2VuYzsKfTsgLy8gd2xfcHJpdmF0ZQoKI2RlZmluZSB3bF9wcml2KGRldikgKChzdHJ1Y3Qgd2xfcHJpdmF0ZSAqKSBuZXRkZXZfcHJpdihkZXYpKQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiBMb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qIFRoZXNlIGZ1bmN0aW9ucyAqbXVzdCogYmUgaW5saW5lIG9yIHRoZXkgd2lsbCBicmVhayBob3JyaWJseSBvbgogKiBTUEFSQywgZHVlIHRvIGl0cyB3ZWlyZCBzZW1hbnRpY3MgZm9yIHNhdmUvcmVzdG9yZSBmbGFncy4gZXh0ZXJuCiAqIGlubGluZSBzaG91bGQgcHJldmVudCB0aGUga2VybmVsIGZyb20gbGlua2luZyBvciBtb2R1bGUgZnJvbQogKiBsb2FkaW5nIGlmIHRoZXkgYXJlIG5vdCBpbmxpbmVkLiAqLwpzdGF0aWMgaW5saW5lIHZvaWQgd2xfbG9jayhzdHJ1Y3Qgd2xfcHJpdmF0ZSAqbHAsCgkgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQp7CglzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPnNsb2NrLCAqZmxhZ3MpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgd2xfdW5sb2NrKHN0cnVjdCB3bF9wcml2YXRlICpscCwKCSAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCnsKCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5zbG9jaywgKmZsYWdzKTsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiBJbnRlcnJ1cHQgZW5hYmxlIGRpc2FibGUgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmV4dGVybiBpbmxpbmUgdm9pZCB3bF9hY3RfaW50X29uKHN0cnVjdCB3bF9wcml2YXRlICpscCkKewoJLyoKCSAqIE9ubHkgZG8gc29tZXRoaW5nIHdoZW4gdGhlIGRyaXZlciBpcyBoYW5kbGluZwoJICogaW50ZXJydXB0cy4gSGFuZGxpbmcgc3RhcnRzIGF0IHdsX29wZW4gYW5kCgkgKiBlbmRzIGF0IHdsX2Nsb3NlIHdoZW4gbm90IGluIFJUUyBtb2RlCgkgKi8KCWlmKGxwLT5pc19oYW5kbGluZ19pbnQgPT0gV0xfSEFORExJTkdfSU5UKSB7CgkJaGNmX2FjdGlvbiggJmxwLT5oY2ZDdHgsIEhDRl9BQ1RfSU5UX09OICk7Cgl9Cn0KCmV4dGVybiBpbmxpbmUgdm9pZCB3bF9hY3RfaW50X29mZihzdHJ1Y3Qgd2xfcHJpdmF0ZSAqbHApCnsKCS8qCgkgKiBPbmx5IGRvIHNvbWV0aGluZyB3aGVuIHRoZSBkcml2ZXIgaXMgaGFuZGxpbmcKCSAqIGludGVycnVwdHMuIEhhbmRsaW5nIHN0YXJ0cyBhdCB3bF9vcGVuIGFuZAoJICogZW5kcyBhdCB3bF9jbG9zZSB3aGVuIG5vdCBpbiBSVFMgbW9kZQoJICovCglpZihscC0+aXNfaGFuZGxpbmdfaW50ID09IFdMX0hBTkRMSU5HX0lOVCkgewoJCWhjZl9hY3Rpb24oICZscC0+aGNmQ3R4LCBIQ0ZfQUNUX0lOVF9PRkYgKTsKCX0KfQoKI2VuZGlmICAvLyBfX1dBVkVMQU4yX0hfXwo=